source: tags/svn.1.5.4/PGT/main_dialog.cxx

Last change on this file was 8309, checked in by westram, 12 years ago
  • moved much code into static scope

(partly reverted by [8310])

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