source: tags/arb_5.5/PGT/main_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: 18.4 KB
Line 
1// COPYRIGHT (C) 2004 - 2005 KAI BADER <BADERK@IN.TUM.DE>,
2// DEPARTMENT OF MICROBIOLOGY (TECHNICAL UNIVERSITY MUNICH)
3//
4// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
5// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
6// FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
7// AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
8// AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
9// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
10
11// CVS REVISION TAG  --  $Revision: 5725 $
12
13
14#include <stdio.h>
15#include <stdlib.h>
16#include <stdarg.h>
17#include "arb_interface.hxx"
18#include "main_dialog.hxx"
19#include "analyze_window.hxx"
20#include "config_dialog.hxx"
21#include "msgbox.hxx"
22
23
24/****************************************************************************
25*  MAIN DIALOG - CONSTRUCTOR
26****************************************************************************/
27mainDialog::mainDialog(Widget p)
28    : MDialog(p)
29{
30    // SHOW DIALOG
31    createShell("");
32
33    // CALL CREATE WINDOW FUNCTION
34    createWindow();
35
36    // SET WINDOW WIDTH
37    XtVaSetValues(m_shell,
38        XmNwidth, 330,
39        NULL);
40
41    // REALIZE WINDOW
42    realizeShell();
43
44    setDialogTitle("PGT - Main Selector");
45
46    // UPDATE THE LIST ENTRIES
47    updateListEntries();
48
49    // ADD ARB AWAR CALLBACKS
50    add_mainDialog_callback(AWAR_SPECIES_NAME,    static_main_ARB_callback, this);
51    add_mainDialog_callback(AWAR_EXPERIMENT_NAME, static_main_ARB_callback, this);
52    add_mainDialog_callback(AWAR_PROTEOM_NAME,    static_main_ARB_callback, this);
53    add_mainDialog_callback(AWAR_PROTEIN_NAME,    static_main_ARB_callback, this);
54
55    // add_species_callback(static_main_ARB_callback, this);
56    // add_experiment_callback(static_main_ARB_callback, this);
57    // add_proteom_callback(static_main_ARB_callback, this);
58    // add_protein_callback(static_main_ARB_callback, this);
59}
60
61
62/****************************************************************************
63*  MAIN DIALOG - CREATE WINDOW
64****************************************************************************/
65void mainDialog::createWindow()
66{
67    // CREATE TOP LEVEL WIDGET
68    m_top= XtVaCreateManagedWidget("top",
69        xmRowColumnWidgetClass, m_shell,
70        XmNorientation, XmVERTICAL,
71        XmNmarginHeight, 0,
72        XmNmarginWidth, 0,
73        NULL);
74
75    // CREATE TOOLBAR
76    createToolbar();
77
78    // CREATE MAIN AREA (WORKING AREA)
79    createMainArea();
80
81}
82
83
84/****************************************************************************
85*  MAIN DIALOG - CREATE TOOLBAR
86****************************************************************************/
87void mainDialog::createToolbar()
88{
89    // CREATE MANAGER WIDGET
90    Widget manager= XtVaCreateManagedWidget("toolbar",
91        xmRowColumnWidgetClass, m_top,
92        XmNmarginHeight, 0,
93        XmNmarginWidth, 0,
94        XmNorientation, XmHORIZONTAL,
95        NULL);
96
97    // GET FOREGROUND AND BACKGROUND PIXEL COLORS
98    Pixel fg, bg;
99    XtVaGetValues(manager, XmNforeground, &fg, XmNbackground, &bg, NULL);
100
101    // OPEN AND IMPORT XPM IMAGES (BUTTON LOGOS)
102    Pixmap analyze_xpm, exit_xpm, import_xpm, visualize_xpm, info_xpm, config_xpm, pgtinfo_xpm;
103    //
104    Screen *s     = XtScreen(manager);
105    analyze_xpm   = PGT_LoadPixmap("analyze.xpm", s, fg, bg);
106    exit_xpm      = PGT_LoadPixmap("exit.xpm", s, fg, bg);
107    import_xpm    = PGT_LoadPixmap("import.xpm", s, fg, bg);
108    visualize_xpm = PGT_LoadPixmap("visualize.xpm", s, fg, bg);
109    info_xpm      = PGT_LoadPixmap("proteininfo.xpm", s, fg, bg);
110    config_xpm    = PGT_LoadPixmap("config.xpm", s, fg, bg);
111    pgtinfo_xpm   = PGT_LoadPixmap("info.xpm", s, fg, bg);
112
113    // CREATE BUTTON: IMPORT
114    Widget importButton= XtVaCreateManagedWidget("importbtn",
115        xmPushButtonWidgetClass, manager,
116        XmNlabelType, XmPIXMAP,
117        XmNlabelPixmap, import_xpm,
118        NULL);
119    XtAddCallback(importButton, XmNactivateCallback, staticOpenImportCallback, this);
120
121    // CREATE BUTTON: VISUALIZE
122    Widget imageButton= XtVaCreateManagedWidget("visualizebtn",
123        xmPushButtonWidgetClass, manager,
124        XmNlabelType, XmPIXMAP,
125        XmNlabelPixmap, visualize_xpm,
126        NULL);
127    XtAddCallback(imageButton, XmNactivateCallback, staticOpenImageCallback, this);
128
129    // CREATE BUTTON: ANALYZE
130    Widget analyzeButton= XtVaCreateManagedWidget("analyzebtn",
131        xmPushButtonWidgetClass, manager,
132        XmNlabelType, XmPIXMAP,
133        XmNlabelPixmap, analyze_xpm,
134        NULL);
135    XtAddCallback(analyzeButton, XmNactivateCallback, staticOpenAnalyzeCallback, this);
136
137    // CREATE BUTTON: INFO
138    Widget infoButton= XtVaCreateManagedWidget("infobtn",
139        xmPushButtonWidgetClass, manager,
140        XmNlabelType, XmPIXMAP,
141        XmNlabelPixmap, info_xpm,
142        NULL);
143    XtAddCallback(infoButton, XmNactivateCallback, staticInfoCallback, this);
144
145    // CREATE BUTTON: CONFIG
146    Widget configButton= XtVaCreateManagedWidget("configbtn",
147        xmPushButtonWidgetClass, manager,
148        XmNlabelType, XmPIXMAP,
149        XmNlabelPixmap, config_xpm,
150        NULL);
151    XtAddCallback(configButton, XmNactivateCallback, staticConfigCallback, this);
152
153    // CREATE BUTTON: PGT INFO
154    Widget pgtinfobutton= XtVaCreateManagedWidget("pgtinfobtn",
155        xmPushButtonWidgetClass, manager,
156        XmNlabelType, XmPIXMAP,
157        XmNlabelPixmap, pgtinfo_xpm,
158        NULL);
159    XtAddCallback(pgtinfobutton, XmNactivateCallback, staticPGTInfoCallback, this);
160
161    // CREATE BUTTON: EXIT
162    Widget exitbutton= XtVaCreateManagedWidget("exitbtn",
163        xmPushButtonWidgetClass, manager,
164        XmNlabelType, XmPIXMAP,
165        XmNlabelPixmap, exit_xpm,
166        NULL);
167    XtAddCallback(exitbutton, XmNactivateCallback, staticExitCallback, this);
168
169    // CREATE HORIZONTAL SEPARATOR WIDGET
170    XtVaCreateManagedWidget("separator",
171        xmSeparatorWidgetClass, m_top,
172        XmNorientation, XmHORIZONTAL,
173        NULL);
174}
175
176
177/****************************************************************************
178*  MAIN DIALOG - CREATE MAIN AREA
179****************************************************************************/
180void mainDialog::createMainArea()
181{
182    // CREATE STRINGS
183    XmString str_01= CreateDlgString("Selected Species");
184    XmString str_02= CreateDlgString("Selected Experiment");
185    XmString str_03= CreateDlgString("Selected Proteome");
186    XmString str_04= CreateDlgString("Selected Protein");
187
188    // CREATE TOP LEVEL WIDGET
189    m_selection_area= XtVaCreateManagedWidget("top",
190        xmFormWidgetClass, m_top,
191        XmNorientation, XmVERTICAL,
192        XmNmarginHeight, 0,
193        XmNmarginWidth, 0,
194        NULL);
195
196    // CREATE SPECIES LABEL
197    Widget species_label= XtVaCreateManagedWidget("label",
198        xmLabelWidgetClass, m_selection_area,
199        XmNlabelString, str_01,
200        XmNwidth, 200,
201        XmNalignment, XmALIGNMENT_CENTER,
202        XmNtopAttachment, XmATTACH_FORM,
203        XmNleftAttachment, XmATTACH_FORM,
204        XmNrightAttachment, XmATTACH_FORM,
205        NULL);
206
207    // CREATE SPECIES TEXT FIELD
208    m_speciesText= XtVaCreateManagedWidget("speciesText",
209        xmTextWidgetClass, m_selection_area,
210        XmNeditable, false,
211        XmNtopAttachment, XmATTACH_WIDGET,
212        XmNtopWidget, species_label,
213        XmNleftAttachment, XmATTACH_FORM,
214        XmNrightAttachment, XmATTACH_FORM,
215        NULL);
216
217    // CREATE EXPERIMENT LABEL
218    Widget experiment_label= XtVaCreateManagedWidget("label",
219        xmLabelWidgetClass, m_selection_area,
220        XmNlabelString, str_02,
221        XmNwidth, 200,
222        XmNalignment, XmALIGNMENT_CENTER,
223        XmNtopAttachment, XmATTACH_WIDGET,
224        XmNtopWidget, m_speciesText,
225        XmNleftAttachment, XmATTACH_FORM,
226        XmNrightAttachment, XmATTACH_FORM,
227        NULL);
228
229    // CREATE EXPERIMENT TEXT FIELD
230    m_experimentText= XtVaCreateManagedWidget("experimentText",
231        xmTextWidgetClass, m_selection_area,
232        XmNeditable, false,
233        XmNalignment, XmALIGNMENT_CENTER,
234        XmNtopAttachment, XmATTACH_WIDGET,
235        XmNtopWidget, experiment_label,
236        XmNleftAttachment, XmATTACH_FORM,
237        XmNrightAttachment, XmATTACH_FORM,
238        NULL);
239
240    // CREATE PROTEOME LABEL
241    Widget proteome_label= XtVaCreateManagedWidget("label",
242        xmLabelWidgetClass, m_selection_area,
243        XmNlabelString, str_03,
244        XmNwidth, 200,
245        XmNalignment, XmALIGNMENT_CENTER,
246        XmNtopAttachment, XmATTACH_WIDGET,
247        XmNtopWidget, m_experimentText,
248        XmNleftAttachment, XmATTACH_FORM,
249        XmNrightAttachment, XmATTACH_FORM,
250        NULL);
251
252    // CREATE PROTEOME TEXT FIELD
253    m_proteomeText= XtVaCreateManagedWidget("proteomeText",
254        xmTextWidgetClass, m_selection_area,
255        XmNeditable, false,
256        XmNalignment, XmALIGNMENT_CENTER,
257        XmNtopAttachment, XmATTACH_WIDGET,
258        XmNtopWidget, proteome_label,
259        XmNleftAttachment, XmATTACH_FORM,
260        XmNrightAttachment, XmATTACH_FORM,
261        NULL);
262
263    // CREATE PROTEIN LABEL
264    Widget protein_label= XtVaCreateManagedWidget("label",
265        xmLabelWidgetClass, m_selection_area,
266        XmNlabelString, str_04,
267        XmNwidth, 200,
268        XmNalignment, XmALIGNMENT_CENTER,
269        XmNtopAttachment, XmATTACH_WIDGET,
270        XmNtopWidget, m_proteomeText,
271        XmNleftAttachment, XmATTACH_FORM,
272        XmNrightAttachment, XmATTACH_FORM,
273        NULL);
274
275    // CREATE PROTEIN TEXT FIELD
276    m_proteinText= XtVaCreateManagedWidget("proteinText",
277        xmTextWidgetClass, m_selection_area,
278        XmNtopAttachment, XmATTACH_WIDGET,
279        XmNtopWidget, protein_label,
280        XmNleftAttachment, XmATTACH_FORM,
281        XmNrightAttachment, XmATTACH_FORM,
282        NULL);
283}
284
285
286/****************************************************************************
287*  MAIN DIALOG - UPDATE THE LIST ENTRIES
288****************************************************************************/
289void mainDialog::updateListEntries()
290{
291    // GET AWAR CONTENT
292    char *species_AWAR    = get_species_AWAR();
293    char *experiment_AWAR = get_experiment_AWAR();
294    char *proteome_AWAR   = get_proteom_AWAR();
295    char *protein_AWAR    = get_protein_AWAR();
296
297    // SET DEFAULT CONTENT IF AWAR IS EMPTY
298    if (!species_AWAR    || !species_AWAR[0])    freedup(species_AWAR,    "no selected species");
299    if (!experiment_AWAR || !experiment_AWAR[0]) freedup(experiment_AWAR, "no selected experiment");
300    if (!proteome_AWAR   || !proteome_AWAR[0])   freedup(proteome_AWAR,   "no selected proteome");
301    if (!protein_AWAR    || !protein_AWAR[0])    freedup(protein_AWAR,    "no selected protein");
302   
303    // SET TEXT FIELD ENTRIES
304    XtVaSetValues(m_speciesText, XmNvalue, species_AWAR, NULL);
305    XtVaSetValues(m_experimentText, XmNvalue, experiment_AWAR, NULL);
306    XtVaSetValues(m_proteomeText, XmNvalue, proteome_AWAR, NULL);
307    XtVaSetValues(m_proteinText, XmNvalue, protein_AWAR, NULL);
308
309    free(protein_AWAR);
310    free(proteome_AWAR);
311    free(experiment_AWAR);
312    free(species_AWAR);
313}
314
315
316/****************************************************************************
317*  ARB AWAR CALLBACK - PROTEIN ENTRY HAS CHANGED
318*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
319****************************************************************************/
320void static_main_ARB_callback(GBDATA *, mainDialog *mD, GB_CB_TYPE)
321{
322     // // GET POINTER OF THE ORIGINAL CALLER
323    // mainDialog *mD= (mainDialog *)clientData;
324
325    // CALL CLASS MEMBER FUNCTION
326    mD->ARB_callback();
327}
328
329
330/****************************************************************************
331*  ARB AWAR CALLBACK - PROTEIN ENTRY HAS CHANGED
332****************************************************************************/
333void mainDialog::ARB_callback()
334{
335    updateListEntries();
336}
337
338
339/****************************************************************************
340*  MAIN DIALOG CALLBACK - OPEN IMPORT WINDOW
341*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
342****************************************************************************/
343void staticOpenImportCallback(Widget widget, XtPointer clientData, XtPointer callData)
344{
345    // GET POINTER OF THE ORIGINAL CALLER
346    mainDialog *mD= (mainDialog *)clientData;
347
348    // CALL CLASS MEMBER FUNCTION
349    mD->openImportCallback(widget, callData);
350}
351
352
353/****************************************************************************
354*  MAIN DIALOG CALLBACK - OPEN IMPORT WINDOW
355****************************************************************************/
356void mainDialog::openImportCallback(Widget, XtPointer)
357{
358    // OPEN A NEW IMPORT DIALOG, GIVE OUT SHELL WIDGET AS PARENT WIDGET
359    m_importDialog= new importDialog(this);
360}
361
362
363/****************************************************************************
364*  MAIN DIALOG CALLBACK - SHOW (TIFF)IMAGE VIEW WINDOW
365*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
366****************************************************************************/
367void staticOpenImageCallback(Widget widget, XtPointer clientData, XtPointer callData)
368{
369    // GET POINTER OF THE ORIGINAL CALLER
370    mainDialog *mD= (mainDialog *)clientData;
371
372    // CALL CLASS MEMBER FUNCTION
373    mD->openImageCallback(widget, callData);
374}
375
376
377/****************************************************************************
378*  MAIN DIALOG CALLBACK - SHOW (TIFF)IMAGE VIEW WINDOW
379****************************************************************************/
380void mainDialog::openImageCallback(Widget, XtPointer)
381{
382    new imageDialog(this);
383}
384
385
386/****************************************************************************
387*  MAIN DIALOG CALLBACK - SHOW ANALYZE WINDOW
388*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
389****************************************************************************/
390void staticOpenAnalyzeCallback(Widget widget, XtPointer clientData, XtPointer callData)
391{
392    // GET POINTER OF THE ORIGINAL CALLER
393    mainDialog *mD= (mainDialog *)clientData;
394
395    // CALL CLASS MEMBER FUNCTION
396    mD->openAnalyzeCallback(widget, callData);
397}
398
399
400/****************************************************************************
401*  MAIN DIALOG CALLBACK - SHOW ANALYZE WINDOW
402****************************************************************************/
403void mainDialog::openAnalyzeCallback(Widget, XtPointer)
404{
405//     new analyzeWindow(m_shell, this);
406}
407
408
409/****************************************************************************
410*  MAIN DIALOG CALLBACK - CONFIG CALL
411*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
412****************************************************************************/
413void staticConfigCallback(Widget widget, XtPointer clientData, XtPointer callData)
414{
415    // GET POINTER OF THE ORIGINAL CALLER
416    mainDialog *mD= (mainDialog *)clientData;
417
418    // CALL CLASS MEMBER FUNCTION
419    mD->configCallback(widget, callData);
420}
421
422
423/****************************************************************************
424*  MAIN DIALOG CALLBACK - CONFIG CALL
425****************************************************************************/
426void mainDialog::configCallback(Widget, XtPointer)
427{
428    new configDialog(this);
429}
430
431
432/****************************************************************************
433*  MAIN DIALOG CALLBACK - INFO CALL
434*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
435****************************************************************************/
436void staticInfoCallback(Widget widget, XtPointer clientData, XtPointer callData)
437{
438    // GET POINTER OF THE ORIGINAL CALLER
439    mainDialog *mD= (mainDialog *)clientData;
440
441    // CALL CLASS MEMBER FUNCTION
442    mD->infoCallback(widget, callData);
443}
444
445
446/****************************************************************************
447*  MAIN DIALOG CALLBACK - INFO CALL
448****************************************************************************/
449void mainDialog::infoCallback(Widget, XtPointer)
450{
451}
452
453
454/****************************************************************************
455*  MAIN DIALOG CALLBACK - EXIT CALL
456*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
457****************************************************************************/
458void staticExitCallback(Widget widget, XtPointer clientData, XtPointer callData)
459{
460    // GET POINTER OF THE ORIGINAL CALLER
461    mainDialog *mD= (mainDialog *)clientData;
462
463    // CALL CLASS MEMBER FUNCTION
464    mD->exitCallback(widget, callData);
465}
466
467
468/****************************************************************************
469*  MAIN DIALOG CALLBACK - EXIT CALL
470****************************************************************************/
471void mainDialog::exitCallback(Widget widget, XtPointer)
472{
473    int answer= OkCancelDialog(widget, "Exit PGT", "Do you really want to exit?", "msg.xpm");
474    if (answer == 1)
475        closeDialog();
476}
477
478
479/****************************************************************************
480*  MAIN DIALOG CALLBACK - PGT INFO CALL
481*  !!! CAUTION: THIS IS A WRAPPER FUNCTION !!!
482****************************************************************************/
483void staticPGTInfoCallback(Widget widget, XtPointer clientData, XtPointer callData)
484{
485    // GET POINTER OF THE ORIGINAL CALLER
486    mainDialog *mD= (mainDialog *)clientData;
487
488    // CALL CLASS MEMBER FUNCTION
489    mD->PGTinfoCallback(widget, callData);
490}
491
492
493/****************************************************************************
494*  MAIN DIALOG CALLBACK - PGT INFO CALL
495****************************************************************************/
496void mainDialog::PGTinfoCallback(Widget widget, XtPointer)
497{
498    // PGT INFORMATION STRING:
499    const char *pgtinfo=
500        "PGT - Proteome and Genome Toolkit\n"
501        "Version 0.2.0 (beta stage)\n\n"
502        "(c) Copyright 2004-2005 Kai Bader <baderk@in.tum.de>,\n"
503        "Department of Microbiology (Technical University Munich)\n\n"
504        "The software is provided \"as is\", without warranty of any kind, express or\n"
505        "implied, including but not limited to the warranties of merchantability,\n"
506        "fitness for a particular purpose and noninfringement. In no event shall\n"
507        "the author be liable for any claim, damages or other liability, whether\n"
508        "in an action of contract, tort or otherwise, arising from, out of or in\n"
509        "connection with the software or the use or other dealings in the software.\n\n"
510        "You have the right to use this version of PGT for free. All interested\n"
511        "parties may redistribute and modify PGT as long as all copies are accompanied\n"
512        "by this license information and all copyright notices remain intact. Parties\n"
513        "redistributing PGT must do so on a non-profit basis, charging only for cost\n"
514        "of media or distribution.\n";
515
516    // SHOW PGT INFO MESSAGEBOX
517    ShowMessageBox(widget, "PGT Information", pgtinfo);
518}
Note: See TracBrowser for help on using the repository browser.