source: tags/arb_5.0/PGT/config_dialog.cxx

Last change on this file was 5725, checked in by westram, 15 years ago
  • removed useless macros:
    • GB_STRDUP (easily taken for GB_strdup)
    • GB_MEMCPY + GB_MEMSET + GB_FREE
    • GB_DELETE (replaced by freeset(xx,NULL))
  • added macros:
    • freeset (= free + assign)
    • freedup (= free + assign strdup'ed)
    • reassign (= free + assign + clear source var)
    • nulldup (=strdup accepting NULL; replacement for GB_strdup in C++ code)
  • use these macros where applicable
  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
File size: 26.8 KB
Line 
1// Copyright (c) 2004 - 2005 Kai Bader <baderk@in.tum.de>
2//
3// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
4// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
5// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
6// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
7// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
8// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
9
10// CVS REVISION TAG  --  $Revision: 5725 $
11
12
13#include <time.h>
14#include "arb_interface.hxx"
15#include "config_dialog.hxx"
16
17
18/****************************************************************************
19*  CONFIG DIALOG - CONSTRUCTOR
20****************************************************************************/
21configDialog::configDialog(MDialog *d)
22    : MDialog(d)
23{
24    // PRDEFINE VARIABLES
25    m_top= NULL;
26    m_crosshairText= NULL;
27    m_crosshairArea= NULL;
28    m_unmarkedText= NULL;
29    m_unmarkedArea= NULL;
30    m_markedText= NULL;
31    m_markedArea= NULL;
32    m_selectedText= NULL;
33    m_selectedArea= NULL;
34    m_textText= NULL;
35    m_textArea= NULL;
36    m_ID_ProteinText= NULL;
37    m_ID_GeneText= NULL;
38    //
39    m_crosshairColorString= NULL;
40    m_unmarkedColorString= NULL;
41    m_markedColorString= NULL;
42    m_selectedColorString= NULL;
43    m_textColorString= NULL;
44    m_id_protein= NULL;
45    m_id_gene= NULL;
46    m_info_protein= NULL;
47    m_info_gene= NULL;
48
49    // CHECK THE PGT AWARS (SET DEFAULT IF NEEDED)
50    checkCreateAWARS();
51
52    // CREATE SHELL FOR THIS DIALOG
53    createShell("");
54
55    // CALL CREATE WINDOW FUNCTION
56    createWindow();
57
58    // SET WINDOW WIDTH
59    XtVaSetValues(m_shell,
60        XmNwidth, 300,
61        XmNheight, 500,
62        NULL);
63
64    // REALIZE WINDOW
65    realizeShell();
66
67    // SET WINDOW LABEL
68    setDialogTitle("PGT - Configuration");
69
70    // DESELECT ALL WINDOW BUTTONS EXCEPT CLOSE AND MOVE
71    XtVaSetValues(m_shell, XmNmwmFunctions, MWM_FUNC_MOVE | MWM_FUNC_CLOSE, NULL);
72
73    // FETCH CONFIGURATION (AWARS)
74    getCONFIGS();
75}
76
77
78/****************************************************************************
79*  CONFIG DIALOG - DESTRUCTOR
80****************************************************************************/
81configDialog::~configDialog()
82{
83    // FREE UNNECESSARY STRINGS
84    freeStrings();
85}
86
87
88/****************************************************************************
89*  CONFIG DIALOG - FREE LOCAL STRINGS (IF NECESSARY)
90****************************************************************************/
91void configDialog::freeStrings()
92{
93    if(m_crosshairColorString) free(m_crosshairColorString);
94    if(m_unmarkedColorString) free(m_unmarkedColorString);
95    if(m_markedColorString) free(m_markedColorString);
96    if(m_textColorString) free(m_textColorString);
97    if(m_id_protein) free(m_id_protein);
98    if(m_id_gene) free(m_id_gene);
99    if(m_info_protein) free(m_info_protein);
100    if(m_info_gene) free(m_info_gene);
101}
102
103
104/****************************************************************************
105*  CONFIG DIALOG - CREATE WINDOW
106****************************************************************************/
107void configDialog::createWindow()
108{
109    // TOP LEVEL WIDGET
110    m_top= XtVaCreateManagedWidget("top",
111        xmFormWidgetClass, m_shell,
112        XmNorientation, XmVERTICAL,
113        XmNmarginHeight, 0,
114        XmNmarginWidth, 0,
115        NULL);
116
117    // LABEL WIDGET
118    Widget label_01= XtVaCreateManagedWidget("label",
119        xmLabelWidgetClass, m_top,
120        XmNlabelString, CreateDlgString("VISUALIZATION COLORS (#RGB)"),
121        XmNheight, 30,
122        XmNalignment, XmALIGNMENT_CENTER,
123        XmNtopAttachment, XmATTACH_FORM,
124        XmNleftAttachment, XmATTACH_FORM,
125        XmNrightAttachment, XmATTACH_FORM,
126        NULL);
127
128    // LABEL WIDGET (COLOR ROW 01 -- CROSSHAIR COLOR)
129    Widget label_02= XtVaCreateManagedWidget("label",
130        xmLabelWidgetClass, m_top,
131        XmNlabelString, CreateDlgString("Crosshair color:"),
132        XmNheight, 30,
133        XmNwidth, 150,
134        XmNalignment, XmALIGNMENT_BEGINNING,
135        XmNtopAttachment, XmATTACH_WIDGET,
136        XmNtopWidget, label_01,
137        XmNleftAttachment, XmATTACH_FORM,
138        NULL);
139
140    // TEXT FIELD - CROSSHAIR COLOR
141    m_crosshairText= XtVaCreateManagedWidget("textField",
142        xmTextWidgetClass, m_top,
143        XmNheight, 30,
144        XmNwidth, 100,
145        XmNtopAttachment, XmATTACH_WIDGET,
146        XmNtopWidget, label_01,
147        XmNleftAttachment, XmATTACH_WIDGET,
148        XmNleftWidget, label_02,
149        NULL);
150    XtAddCallback(m_crosshairText, XmNvalueChangedCallback, staticTextChangedCallback, this);
151
152    // DRAWING AREA WIDGET - CROSSHAIR COLOR
153    m_crosshairArea= XtVaCreateManagedWidget("drawingArea",
154        xmDrawingAreaWidgetClass, m_top,
155        XmNheight, 30,
156        XmNtopAttachment, XmATTACH_WIDGET,
157        XmNtopWidget, label_01,
158        XmNleftAttachment, XmATTACH_WIDGET,
159        XmNleftWidget, m_crosshairText,
160        XmNrightAttachment, XmATTACH_FORM,
161        NULL);
162    XtAddCallback(m_crosshairArea, XmNexposeCallback, staticTextChangedCallback, this);
163
164    // LABEL WIDGET (COLOR ROW 02 -- UNMARKED  COLOR)
165    Widget label_03= XtVaCreateManagedWidget("label",
166        xmLabelWidgetClass, m_top,
167        XmNlabelString, CreateDlgString("Unmarked protein color:"),
168        XmNheight, 30,
169        XmNwidth, 150,
170        XmNalignment, XmALIGNMENT_BEGINNING,
171        XmNtopAttachment, XmATTACH_WIDGET,
172        XmNtopWidget, label_02,
173        XmNleftAttachment, XmATTACH_FORM,
174        NULL);
175
176    // TEXT FIELD - UNMARKED COLOR
177    m_unmarkedText= XtVaCreateManagedWidget("textField",
178        xmTextWidgetClass, m_top,
179        XmNheight, 30,
180        XmNwidth, 100,
181        XmNtopAttachment, XmATTACH_WIDGET,
182        XmNtopWidget, m_crosshairText,
183        XmNleftAttachment, XmATTACH_WIDGET,
184        XmNleftWidget, label_03,
185        NULL);
186    XtAddCallback(m_unmarkedText, XmNvalueChangedCallback, staticTextChangedCallback, this);
187
188    // DRAWING AREA WIDGET - UNMARKED COLOR
189    m_unmarkedArea= XtVaCreateManagedWidget("drawingArea",
190        xmDrawingAreaWidgetClass, m_top,
191        XmNheight, 30,
192        XmNtopAttachment, XmATTACH_WIDGET,
193        XmNtopWidget, m_crosshairArea,
194        XmNleftAttachment, XmATTACH_WIDGET,
195        XmNleftWidget, m_unmarkedText,
196        XmNrightAttachment, XmATTACH_FORM,
197        NULL);
198    XtAddCallback(m_unmarkedArea, XmNexposeCallback, staticTextChangedCallback, this);
199
200    // LABEL WIDGET (COLOR ROW 03 -- MARKED COLOR)
201    Widget label_04= XtVaCreateManagedWidget("label",
202        xmLabelWidgetClass, m_top,
203        XmNlabelString, CreateDlgString("Marked protein color:"),
204        XmNheight, 30,
205        XmNwidth, 150,
206        XmNalignment, XmALIGNMENT_BEGINNING,
207        XmNtopAttachment, XmATTACH_WIDGET,
208        XmNtopWidget, label_03,
209        XmNleftAttachment, XmATTACH_FORM,
210        NULL);
211
212    // TEXT FIELD - MARKED COLOR
213    m_markedText= XtVaCreateManagedWidget("textField",
214        xmTextWidgetClass, m_top,
215        XmNheight, 30,
216        XmNwidth, 100,
217        XmNtopAttachment, XmATTACH_WIDGET,
218        XmNtopWidget, m_unmarkedText,
219        XmNleftAttachment, XmATTACH_WIDGET,
220        XmNleftWidget, label_04,
221        NULL);
222    XtAddCallback(m_markedText, XmNvalueChangedCallback, staticTextChangedCallback, this);
223
224    // DRAWING AREA WIDGET - MARKED COLOR
225    m_markedArea= XtVaCreateManagedWidget("drawingArea",
226        xmDrawingAreaWidgetClass, m_top,
227        XmNheight, 30,
228        XmNtopAttachment, XmATTACH_WIDGET,
229        XmNtopWidget, m_unmarkedArea,
230        XmNleftAttachment, XmATTACH_WIDGET,
231        XmNleftWidget, m_markedText,
232        XmNrightAttachment, XmATTACH_FORM,
233        NULL);
234    XtAddCallback(m_markedArea, XmNexposeCallback, staticTextChangedCallback, this);
235
236    // LABEL WIDGET (COLOR ROW 04 -- PROTEIN COLOR)
237    Widget label_05= XtVaCreateManagedWidget("label",
238        xmLabelWidgetClass, m_top,
239        XmNlabelString, CreateDlgString("Selected protein color:"),
240        XmNheight, 30,
241        XmNwidth, 150,
242        XmNalignment, XmALIGNMENT_BEGINNING,
243        XmNtopAttachment, XmATTACH_WIDGET,
244        XmNtopWidget, label_04,
245        XmNleftAttachment, XmATTACH_FORM,
246        NULL);
247
248    // TEXT FIELD - CROSSHAIR COLOR
249    m_selectedText= XtVaCreateManagedWidget("textField",
250        xmTextWidgetClass, m_top,
251        XmNheight, 30,
252        XmNwidth, 100,
253        XmNtopAttachment, XmATTACH_WIDGET,
254        XmNtopWidget, m_markedText,
255        XmNleftAttachment, XmATTACH_WIDGET,
256        XmNleftWidget, label_05,
257        NULL);
258    XtAddCallback(m_selectedText, XmNvalueChangedCallback, staticTextChangedCallback, this);
259
260    // DRAWING AREA WIDGET - CROSSHAIR COLOR
261    m_selectedArea= XtVaCreateManagedWidget("drawingArea",
262        xmDrawingAreaWidgetClass, m_top,
263        XmNheight, 30,
264        XmNtopAttachment, XmATTACH_WIDGET,
265        XmNtopWidget, m_markedArea,
266        XmNleftAttachment, XmATTACH_WIDGET,
267        XmNleftWidget, m_selectedText,
268        XmNrightAttachment, XmATTACH_FORM,
269        NULL);
270    XtAddCallback(m_selectedArea, XmNexposeCallback, staticTextChangedCallback, this);
271
272    // LABEL WIDGET (COLOR ROW 05 -- TEXT COLOR)
273    Widget label_0a= XtVaCreateManagedWidget("label",
274        xmLabelWidgetClass, m_top,
275        XmNlabelString, CreateDlgString("Text color:"),
276        XmNheight, 30,
277        XmNwidth, 150,
278        XmNalignment, XmALIGNMENT_BEGINNING,
279        XmNtopAttachment, XmATTACH_WIDGET,
280        XmNtopWidget, label_05,
281        XmNleftAttachment, XmATTACH_FORM,
282        NULL);
283
284    // TEXT FIELD - TEXT COLOR
285    m_textText= XtVaCreateManagedWidget("textField",
286        xmTextWidgetClass, m_top,
287        XmNheight, 30,
288        XmNwidth, 100,
289        XmNtopAttachment, XmATTACH_WIDGET,
290        XmNtopWidget, m_selectedText,
291        XmNleftAttachment, XmATTACH_WIDGET,
292        XmNleftWidget, label_0a,
293        NULL);
294    XtAddCallback(m_textText, XmNvalueChangedCallback, staticTextChangedCallback, this);
295
296    // DRAWING AREA WIDGET - TEXT COLOR
297    m_textArea= XtVaCreateManagedWidget("drawingArea",
298        xmDrawingAreaWidgetClass, m_top,
299        XmNheight, 30,
300        XmNtopAttachment, XmATTACH_WIDGET,
301        XmNtopWidget, m_selectedArea,
302        XmNleftAttachment, XmATTACH_WIDGET,
303        XmNleftWidget, m_textText,
304        XmNrightAttachment, XmATTACH_FORM,
305        NULL);
306    XtAddCallback(m_textArea, XmNexposeCallback, staticTextChangedCallback, this);
307
308    // CREATE HORIZONTAL SEPARATOR
309    Widget separator_01= XtVaCreateManagedWidget("separator",
310        xmSeparatorWidgetClass, m_top,
311        XmNtopAttachment, XmATTACH_WIDGET,
312        XmNtopWidget, label_0a,
313        XmNleftAttachment, XmATTACH_FORM,
314        XmNrightAttachment, XmATTACH_FORM,
315        XmNorientation, XmHORIZONTAL,
316        NULL);
317
318    // LABEL WIDGET (PROTEIN ID TEXT)
319    Widget label_06= XtVaCreateManagedWidget("label",
320        xmLabelWidgetClass, m_top,
321        XmNlabelString, CreateDlgString("PROTEIN IDENTIFIER"),
322        XmNheight, 30,
323        XmNwidth, 150,
324        XmNalignment, XmALIGNMENT_CENTER,
325        XmNtopAttachment, XmATTACH_WIDGET,
326        XmNtopWidget, separator_01,
327        XmNleftAttachment, XmATTACH_FORM,
328        NULL);
329
330    // LABEL WIDGET (GENE ID TEXT)
331    Widget label_07= XtVaCreateManagedWidget("label",
332        xmLabelWidgetClass, m_top,
333        XmNlabelString, CreateDlgString("GENE IDENTIFIER"),
334        XmNheight, 30,
335        XmNwidth, 150,
336        XmNalignment, XmALIGNMENT_CENTER,
337        XmNtopAttachment, XmATTACH_WIDGET,
338        XmNtopWidget, separator_01,
339        XmNleftAttachment, XmATTACH_WIDGET,
340        XmNleftWidget, label_06,
341        XmNrightAttachment, XmATTACH_FORM,
342        NULL);
343
344    // TEXT FIELD - PROTEIN IDENTIFIER
345    m_ID_ProteinText= XtVaCreateManagedWidget("textField",
346        xmTextWidgetClass, m_top,
347        XmNheight, 30,
348        XmNwidth, 150,
349        XmNtopAttachment, XmATTACH_WIDGET,
350        XmNtopWidget, label_06,
351        XmNleftAttachment, XmATTACH_FORM,
352        NULL);
353    XtAddCallback(m_ID_ProteinText, XmNvalueChangedCallback, staticTextChangedCallback, this);
354
355    // TEXT FIELD - GENE IDENTIFIER
356    m_ID_GeneText= XtVaCreateManagedWidget("textField",
357        xmTextWidgetClass, m_top,
358        XmNheight, 30,
359        XmNwidth, 150,
360        XmNtopAttachment, XmATTACH_WIDGET,
361        XmNtopWidget, label_07,
362        XmNleftAttachment, XmATTACH_WIDGET,
363        XmNleftWidget, m_ID_ProteinText,
364        XmNrightAttachment, XmATTACH_FORM,
365        NULL);
366    XtAddCallback(m_ID_GeneText, XmNvalueChangedCallback, staticTextChangedCallback, this);
367
368    // CREATE HORIZONTAL SEPARATOR
369    Widget separator_02= XtVaCreateManagedWidget("separator",
370        xmSeparatorWidgetClass, m_top,
371        XmNtopAttachment, XmATTACH_WIDGET,
372        XmNtopWidget, m_ID_ProteinText,
373        XmNleftAttachment, XmATTACH_FORM,
374        XmNrightAttachment, XmATTACH_FORM,
375        XmNorientation, XmHORIZONTAL,
376        NULL);
377
378    // LABEL WIDGET (PROTEIN INFOS)
379    Widget label_08= XtVaCreateManagedWidget("label",
380        xmLabelWidgetClass, m_top,
381        XmNlabelString, CreateDlgString("DISPLAYED PROTEIN INFO"),
382        XmNheight, 30,
383        XmNalignment, XmALIGNMENT_CENTER,
384        XmNtopAttachment, XmATTACH_WIDGET,
385        XmNtopWidget, separator_02,
386        XmNleftAttachment, XmATTACH_FORM,
387        XmNrightAttachment, XmATTACH_FORM,
388        NULL);
389
390    // TEXT FIELD - PROTEIN INFOS
391    m_info_ProteinText= XtVaCreateManagedWidget("textField",
392        xmTextWidgetClass, m_top,
393        XmNheight, 80,
394        XmNeditMode, XmMULTI_LINE_EDIT,
395        XmNtopAttachment, XmATTACH_WIDGET,
396        XmNtopWidget, label_08,
397        XmNleftAttachment, XmATTACH_FORM,
398        XmNrightAttachment, XmATTACH_FORM,
399        NULL);
400    XtAddCallback(m_info_ProteinText, XmNvalueChangedCallback, staticTextChangedCallback, this);
401
402    // LABEL WIDGET (GENE INFOS)
403    Widget label_09= XtVaCreateManagedWidget("label",
404        xmLabelWidgetClass, m_top,
405        XmNlabelString, CreateDlgString("DISPLAYED GENE INFO"),
406        XmNheight, 30,
407        XmNalignment, XmALIGNMENT_CENTER,
408        XmNtopAttachment, XmATTACH_WIDGET,
409        XmNtopWidget, m_info_ProteinText,
410        XmNleftAttachment, XmATTACH_FORM,
411        XmNrightAttachment, XmATTACH_FORM,
412        NULL);
413
414    // TEXT FIELD - GENE INFOS
415    m_info_GeneText= XtVaCreateManagedWidget("textField",
416        xmTextWidgetClass, m_top,
417        XmNheight, 80,
418        XmNeditMode, XmMULTI_LINE_EDIT,
419        XmNtopAttachment, XmATTACH_WIDGET,
420        XmNtopWidget, label_09,
421        XmNleftAttachment, XmATTACH_FORM,
422        XmNrightAttachment, XmATTACH_FORM,
423        NULL);
424    XtAddCallback(m_info_GeneText, XmNvalueChangedCallback, staticTextChangedCallback, this);
425
426    m_cancelButton= XtVaCreateManagedWidget("button",
427        xmPushButtonWidgetClass, m_top,
428        XmNlabelString, CreateDlgString("Cancel"),
429        XmNwidth, 100,
430        XmNheight, 30,
431        XmNleftAttachment, XmATTACH_FORM,
432        XmNbottomAttachment, XmATTACH_FORM,
433        NULL);
434    XtAddCallback(m_cancelButton, XmNactivateCallback, staticCancelButtonCallback, this);
435
436    m_okButton= XtVaCreateManagedWidget("button",
437        xmPushButtonWidgetClass, m_top,
438        XmNlabelString, CreateDlgString("Ok"),
439        XmNwidth, 100,
440        XmNheight, 30,
441        XmNrightAttachment, XmATTACH_FORM,
442        XmNbottomAttachment, XmATTACH_FORM,
443        NULL);
444    XtAddCallback(m_okButton, XmNactivateCallback, staticOkButtonCallback, this);
445
446    m_defaultButton= XtVaCreateManagedWidget("button",
447        xmPushButtonWidgetClass, m_top,
448        XmNlabelString, CreateDlgString("Default"),
449        XmNwidth, 100,
450        XmNheight, 30,
451        XmNleftAttachment, XmATTACH_WIDGET,
452        XmNleftWidget, m_cancelButton,
453        XmNrightAttachment, XmATTACH_WIDGET,
454        XmNrightWidget, m_okButton,
455        XmNbottomAttachment, XmATTACH_FORM,
456        NULL);
457    XtAddCallback(m_defaultButton, XmNactivateCallback, staticDefaultButtonCallback, this);
458
459}
460
461
462bool configDialog::setDefault(bool global)
463{
464    // SET DEFAULT VALUES
465    m_crosshairColorString= const_cast<char*>(DEFAULT_COLOR_CROSSHAIR);
466    m_unmarkedColorString=  const_cast<char*>(DEFAULT_COLOR_UNMARKED);
467    m_markedColorString=    const_cast<char*>(DEFAULT_COLOR_MARKED);
468    m_selectedColorString=  const_cast<char*>(DEFAULT_COLOR_SELECTED);
469    m_textColorString=      const_cast<char*>(DEFAULT_COLOR_TEXT);
470    m_id_protein=           const_cast<char*>(DEFAULT_ID_PROTEIN);
471    m_id_gene=              const_cast<char*>(DEFAULT_ID_GENE);
472    m_info_protein=         const_cast<char*>(DEFAULT_INFO_PROTEIN);
473    m_info_gene=            const_cast<char*>(DEFAULT_INFO_GENE);
474
475    // SET GLOBAL SETTINGS ALSO TO DEFAULT?
476    if(global)
477    {
478        set_CONFIG(CONFIG_PGT_COLOR_CROSSHAIR, m_crosshairColorString);
479        set_CONFIG(CONFIG_PGT_COLOR_UNMARKED, m_unmarkedColorString);
480        set_CONFIG(CONFIG_PGT_COLOR_MARKED, m_markedColorString);
481        set_CONFIG(CONFIG_PGT_COLOR_SELECTED, m_selectedColorString);
482        set_CONFIG(CONFIG_PGT_COLOR_TEXT, m_textColorString);
483        set_CONFIG(CONFIG_PGT_ID_PROTEIN, m_id_protein);
484        set_CONFIG(CONFIG_PGT_ID_GENE, m_id_gene);
485        set_CONFIG(CONFIG_PGT_INFO_PROTEIN, m_info_protein);
486        set_CONFIG(CONFIG_PGT_INFO_GENE, m_info_gene);
487    }
488
489    // UPDATE TEXT FIELD ENTRIES
490    if(m_crosshairText) XtVaSetValues(m_crosshairText, XmNvalue, m_crosshairColorString, NULL);
491    if(m_unmarkedText) XtVaSetValues(m_unmarkedText, XmNvalue, m_unmarkedColorString, NULL);
492    if(m_markedText) XtVaSetValues(m_markedText, XmNvalue, m_markedColorString, NULL);
493    if(m_selectedText) XtVaSetValues(m_selectedText, XmNvalue, m_selectedColorString, NULL);
494    if(m_textText) XtVaSetValues(m_textText, XmNvalue, m_textColorString, NULL);
495    if(m_ID_ProteinText) XtVaSetValues(m_ID_ProteinText, XmNvalue, m_id_protein, NULL);
496    if(m_ID_GeneText) XtVaSetValues(m_ID_GeneText, XmNvalue, m_id_gene, NULL);
497    if(m_info_ProteinText) XtVaSetValues(m_info_ProteinText, XmNvalue, m_info_protein, NULL);
498    if(m_info_GeneText) XtVaSetValues(m_info_GeneText, XmNvalue, m_info_gene, NULL);
499
500    // UPDATE THE DRAWING AREA COLORS
501    updateColors();
502
503    return true;
504}
505
506
507void configDialog::updateColors()
508{
509    if(!m_crosshairArea || !m_unmarkedArea ||
510       !m_markedArea || !m_selectedArea || !m_textArea) return;
511
512    int r, g, b;
513
514    if(hex2rgb(&r, &g, &b, m_crosshairColorString))
515        drawColoredSpot(m_crosshairArea, r, g, b);
516
517    if(hex2rgb(&r, &g, &b, m_unmarkedColorString))
518        drawColoredSpot(m_unmarkedArea, r, g, b);
519
520    if(hex2rgb(&r, &g, &b, m_markedColorString))
521        drawColoredSpot(m_markedArea, r, g, b);
522
523    if(hex2rgb(&r, &g, &b, m_selectedColorString))
524        drawColoredSpot(m_selectedArea, r, g, b);
525
526    if(hex2rgb(&r, &g, &b, m_textColorString))
527        drawColoredSpot(m_textArea, r, g, b);
528}
529
530
531/****************************************************************************
532*  IMAGE DIALOG - SET FOREGROUND COLOR
533****************************************************************************/
534void configDialog::setColor(Display *display, GC gc, int r, int g, int b)
535{
536    XColor xc;
537
538    xc.red= r << 8; xc.green= g << 8; xc.blue= b << 8;
539    xc.flags = DoRed | DoGreen | DoBlue;
540    XAllocColor(display, DefaultColormap(display, DefaultScreen(display)), &xc);
541    XSetForeground(display, gc, xc.pixel);
542}
543
544
545void configDialog::drawColoredSpot(Widget area, int r , int g , int b)
546{
547    if(!area) return;
548
549    // GET DISPLAY + GC
550    Display *display= XtDisplay(area);
551    Window win = XtWindow(area);
552    GC gc= XCreateGC(display, win, 0, 0);
553
554    // GET BACKGROUND COLOR
555    Pixel bg;
556    XtVaGetValues(m_top, XmNbackground, &bg, NULL);
557
558    // FILL BACKGROUND WITH COLOR BG
559    XtVaSetValues(area, XmNbackground, bg, NULL);
560
561    // DRAW THE FILLED CIRCLE
562    setColor(display, gc, r, g, b);
563    XFillArc(display, win, gc, 4, 4, 20, 20, 0, 360*64);
564
565    // DRAW A BLACK BORDER AROUND THE CIRCLE
566    setColor(display, gc, 0, 0, 0);
567    XDrawArc(display, win, gc, 4, 4, 20, 20, 0, 360*64);
568
569    XFlush(display);
570
571    // FREE OUR GC AS WE DONT NEED IT ANYMORE
572    XFreeGC(display, gc);
573}
574
575
576void configDialog::getCONFIGS()
577{
578    // FREE OLD STRING ENTRIES BEFORE ADDING NEW ONES
579    freeStrings();
580
581    // FETCH AWARS
582    m_crosshairColorString= get_CONFIG(CONFIG_PGT_COLOR_CROSSHAIR);
583    m_unmarkedColorString=  get_CONFIG(CONFIG_PGT_COLOR_UNMARKED);
584    m_markedColorString=    get_CONFIG(CONFIG_PGT_COLOR_MARKED);
585    m_selectedColorString=  get_CONFIG(CONFIG_PGT_COLOR_SELECTED);
586    m_textColorString=      get_CONFIG(CONFIG_PGT_COLOR_TEXT);
587    m_id_protein=           get_CONFIG(CONFIG_PGT_ID_PROTEIN);
588    m_id_gene=              get_CONFIG(CONFIG_PGT_ID_GENE);
589    m_info_protein=         get_CONFIG(CONFIG_PGT_INFO_PROTEIN);
590    m_info_gene=            get_CONFIG(CONFIG_PGT_INFO_GENE);
591
592    // UPDATE TEXT FIELD ENTRIES
593    if(m_crosshairText) XtVaSetValues(m_crosshairText, XmNvalue, m_crosshairColorString, NULL);
594    if(m_unmarkedText) XtVaSetValues(m_unmarkedText, XmNvalue, m_unmarkedColorString, NULL);
595    if(m_markedText) XtVaSetValues(m_markedText, XmNvalue, m_markedColorString, NULL);
596    if(m_selectedText) XtVaSetValues(m_selectedText, XmNvalue, m_selectedColorString, NULL);
597    if(m_textText) XtVaSetValues(m_textText, XmNvalue, m_textColorString, NULL);
598    if(m_ID_ProteinText) XtVaSetValues(m_ID_ProteinText, XmNvalue, m_id_protein, NULL);
599    if(m_ID_GeneText) XtVaSetValues(m_ID_GeneText, XmNvalue, m_id_gene, NULL);
600    if(m_info_ProteinText) XtVaSetValues(m_info_ProteinText, XmNvalue, m_info_protein, NULL);
601    if(m_info_GeneText) XtVaSetValues(m_info_GeneText, XmNvalue, m_info_gene, NULL);
602
603    // UPDATE THE DRAWING AREA COLORS
604    updateColors();
605}
606
607
608void configDialog::setCONFIGS()
609{
610    // CONFIGS - WRITE BACK
611    set_CONFIG(CONFIG_PGT_COLOR_CROSSHAIR, m_crosshairColorString);
612    set_CONFIG(CONFIG_PGT_COLOR_UNMARKED, m_unmarkedColorString);
613    set_CONFIG(CONFIG_PGT_COLOR_MARKED, m_markedColorString);
614    set_CONFIG(CONFIG_PGT_COLOR_SELECTED, m_selectedColorString);
615    set_CONFIG(CONFIG_PGT_COLOR_TEXT, m_textColorString);
616    set_CONFIG(CONFIG_PGT_ID_PROTEIN, m_id_protein);
617    set_CONFIG(CONFIG_PGT_ID_GENE, m_id_gene);
618    set_CONFIG(CONFIG_PGT_INFO_PROTEIN, m_info_protein);
619    set_CONFIG(CONFIG_PGT_INFO_GENE, m_info_gene);
620
621    // GET LOCAL TIME CODE (-> SET TIME OF LAST CHANGE)
622    time_t ttime= time(NULL);
623    char *stime=  asctime(localtime(&ttime));
624
625    // TRIGGER SIGNAL: CONFIG HAS CHANGED...
626    set_config_AWAR(stime);
627}
628
629
630/****************************************************************************
631*  CALLBACK - CANCEL BUTTON PRESSED
632*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
633****************************************************************************/
634void staticCancelButtonCallback(Widget, XtPointer clientData, XtPointer)
635{
636    // GET POINTER OF THE ORIGINAL CALLER
637    configDialog *cD= (configDialog *)clientData;
638
639    // DESTROY OBJECT
640    cD->~configDialog();
641}
642
643
644/****************************************************************************
645*  CALLBACK - DEFAULT BUTTON PRESSED
646*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
647****************************************************************************/
648void staticDefaultButtonCallback(Widget, XtPointer clientData, XtPointer)
649{
650    // GET POINTER OF THE ORIGINAL CALLER
651    configDialog *cD= (configDialog *)clientData;
652
653    // SET VALUES TO DEFAULT
654    cD->setDefault(false);
655}
656
657
658/****************************************************************************
659*  CALLBACK - COLOR CHANGED
660*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
661****************************************************************************/
662void staticOkButtonCallback(Widget, XtPointer clientData, XtPointer)
663{
664    // GET POINTER OF THE ORIGINAL CALLER
665    configDialog *cD= (configDialog *)clientData;
666
667    // SAVE AWARS TO ARB
668    cD->setCONFIGS();
669
670    // DESTROY OBJECT
671    cD->~configDialog();
672}
673
674
675/****************************************************************************
676*  CALLBACK - COLOR/TEXT CHANGED
677*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
678****************************************************************************/
679void staticTextChangedCallback(Widget widget, XtPointer clientData, XtPointer)
680{
681    // GET POINTER OF THE ORIGINAL CALLER
682    configDialog *cD= (configDialog *)clientData;
683
684    // CALL TEXT CHANGED FUNCTION
685    cD->textChangedCallback(widget);
686}
687
688
689/****************************************************************************
690*  CALLBACK - COLOR/TEXT CHANGED
691****************************************************************************/
692
693inline void setColorFromTextWidget(Widget widget, char *& colorStringVar) {
694    int r, g, b; // DUMMY RGB VALUES
695    char *colorString = XmTextGetString(widget);
696    if(hex2rgb(&r, &g, &b, colorString)) freeset(colorStringVar, colorString);
697    else free(colorString);
698}
699
700void configDialog::textChangedCallback(Widget widget) {
701    if      (widget == m_crosshairText)    setColorFromTextWidget(m_crosshairText, m_crosshairColorString); // CROSSHAIR TEXT-WIDGET CHANGED?
702    else if (widget == m_unmarkedText)     setColorFromTextWidget(m_unmarkedText,  m_unmarkedColorString);  // UNMARKED TEXT-WIDGET CHANGED?
703    else if (widget == m_markedText)       setColorFromTextWidget(m_markedText,    m_markedColorString);    // MARKED TEXT-WIDGET CHANGED?
704    else if (widget == m_selectedText)     setColorFromTextWidget(m_selectedText,  m_selectedColorString);  // SELECTED TEXT-WIDGET CHANGED?
705    else if (widget == m_textText)         setColorFromTextWidget(m_textText,      m_textColorString);      // INFOTEXT TEXT-WIDGET CHANGED?
706    else if (widget == m_ID_ProteinText)   freeset(m_id_protein,   XmTextGetString(m_ID_ProteinText));      // PROTEIN-ID TEXT-WIDGET CHANGED?
707    else if (widget == m_ID_GeneText)      freeset(m_id_gene,      XmTextGetString(m_ID_GeneText));         // GENE-ID TEXT-WIDGET CHANGED?
708    else if (widget == m_info_ProteinText) freeset(m_info_protein, XmTextGetString(m_info_ProteinText));    // PROTEIN-TEXT TEXT-WIDGET CHANGED?
709    else if (widget == m_info_GeneText)    freeset(m_info_gene,    XmTextGetString(m_info_GeneText));       // GENE-TEXT TEXT-WIDGET CHANGED?
710
711    updateColors(); // UPDATE THE COLORS
712}
713
714
715/****************************************************************************
716*  CONVERT INT RGB -> HEX COLOR STRING
717****************************************************************************/
718char *rgb2hex(int r, int g, int b)
719{
720    // ALL INPUT VALUES IN RANGE?
721    if((r < 0) || (g < 0) || (b < 0) ||
722       (r > 255) || (g > 255) || (b > 255)) return NULL;
723
724    // ALLOCATE MEM FOR HEX COLOR STRING
725    char *hex= (char *)malloc(8 * sizeof(char));
726    if(!hex) return NULL;
727
728    // WRITE COLORS INTO MEM
729    if(sprintf(hex, "#%2X%2X%2X", r, g, b) != 3) return NULL;
730
731    // RETURN POINTER TO HEX STRING
732    return hex;
733}
734
735
736/****************************************************************************
737*  CONVERT HEX STRING -> INT RGB
738****************************************************************************/
739bool hex2rgb(int *r, int *g, int *b, char *hex)
740{
741    // SPLIT THE THREE COLORS
742    if(sscanf(hex, "#%2X%2X%2X", r, g, b) != 3)  return false;
743
744    // RETURN TRUE IF SUCCESSFUL
745    return true;
746}
Note: See TracBrowser for help on using the repository browser.