2d21d9d868cfd6459357139233063a04abc19ebb
[alexxy/gromacs.git] / src / ngmx / xdlg.h
1 /*
2  * 
3  *                This source code is part of
4  * 
5  *                 G   R   O   M   A   C   S
6  * 
7  *          GROningen MAchine for Chemical Simulations
8  * 
9  *                        VERSION 3.2.0
10  * Written by David van der Spoel, Erik Lindahl, Berk Hess, and others.
11  * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
12  * Copyright (c) 2001-2004, The GROMACS development team,
13  * check out http://www.gromacs.org for more information.
14
15  * This program is free software; you can redistribute it and/or
16  * modify it under the terms of the GNU General Public License
17  * as published by the Free Software Foundation; either version 2
18  * of the License, or (at your option) any later version.
19  * 
20  * If you want to redistribute modifications, please consider that
21  * scientific software is very special. Version control is crucial -
22  * bugs must be traceable. We will be happy to consider code for
23  * inclusion in the official distribution, but derived work must not
24  * be called official GROMACS. Details are found in the README & COPYING
25  * files - if they are missing, get the official version at www.gromacs.org.
26  * 
27  * To help us fund GROMACS development, we humbly ask that you cite
28  * the papers on the package - you can find them in the top README file.
29  * 
30  * For more info, check our website at http://www.gromacs.org
31  * 
32  * And Hey:
33  * Gyas ROwers Mature At Cryogenic Speed
34  */
35
36 #ifndef _xdlg_h
37 #define _xdlg_h
38
39 #include <xdlgitem.h>
40
41 #define DLG_SHOW         (1<<0)
42 #define DLG_HIDE         (1<<1)
43 #define DLG_SHOWANDHIDE  (DLG_SHOW | DLG_HIDE)
44 #define DLG_SYSTEMMODAL  (1<<2)
45 #define DLG_APPLMODAL    (1<<3)
46 #define DLG_HIDEONBUTTON (1<<4)
47 #define DLG_FREEONBUTTON (1<<5)
48
49 enum { DLG_SET, DLG_EXIT };
50
51 typedef void DlgCallback(t_x11 *x11,int dlg_mess,int item_id,
52                          char *set,void *data);
53 /* User function that can be called by the dialog box. All setting of
54  * check-boxes and radio-buttons etc., is done by the dialog manager,
55  * the user can let himself be informed about mouse activity also.
56  */
57
58 typedef struct {
59   t_x11         *x11;           /* All about X                          */
60   t_windata     win;            /* The position and size of the window  */
61   char          *title;         /* Window name                          */
62   Window        wDad;           /* The parent window                    */
63   unsigned int          xmax,ymax;      /* Dimensions of parent window          */
64   unsigned long         flags;          /* Flags for display                    */
65   unsigned long         fg,bg;          /* The colours                          */
66   bool          bPop;           /* Should we pop the mouse back         */
67   bool          bGrab;          /* Have we grabbed the mouse ?          */
68   int           nitem;          /* The number of items                  */
69   t_dlgitem     **dlgitem;      /* The array of item pointers           */
70   DlgCallback   *cb;            /* User call back function              */
71   void          *data;          /* User data                            */
72 } t_dlg;
73
74 /*****************************
75  *
76  * Routine to create the DLG structure, returns NULL on failure
77  * cb and data may be NULL.
78  *
79  ****************************/
80 t_dlg *CreateDlg(t_x11 *x11,Window Parent,const char *title,
81                  int x0,int y0,int w,int h,int bw,unsigned long fg,unsigned long bg,
82                  DlgCallback *cb,void *data);
83
84 /*****************************
85  *
86  * Routine to add an item to the dialog box
87  * The pointer to the item is copied to the dlg struct,
88  * the item itself may not be freed until the dlg is done with
89  *
90  ****************************/
91 void AddDlgItem(t_dlg *dlg,t_dlgitem *item);
92
93 void AddDlgItems(t_dlg *dlg,int nitem,t_dlgitem *item[]);
94
95 /*****************************
96  *
97  * Routines to manipulate items on a dialog box
98  * They return TRUE on succes, FALSE otherwise
99  * FALSE will mean most of the time, that item id was not found
100  *
101  ****************************/
102 bool QueryDlgItemSize(t_dlg *dlg,t_id id,int *w,int *h);
103
104 bool QueryDlgItemPos(t_dlg *dlg,t_id id,int *x0,int *y0);
105
106 int QueryDlgItemX(t_dlg *dlg, t_id id);
107
108 int QueryDlgItemY(t_dlg *dlg, t_id id);
109
110 int QueryDlgItemW(t_dlg *dlg, t_id id);
111
112 int QueryDlgItemH(t_dlg *dlg, t_id id);
113
114 bool SetDlgItemSize(t_dlg *dlg,t_id id,int w,int h);
115
116 bool SetDlgItemPos(t_dlg *dlg,t_id id,int x0,int y0);
117
118 void SetDlgSize(t_dlg *dlg,int w,int h, bool bAutoPosition);
119
120 /*****************************
121  *
122  * Routines to extract information from the dlg proc
123  * after dlg is exec'ed
124  *
125  ****************************/
126 bool IsCBChecked(t_dlg *dlg,t_id id);
127
128 t_id RBSelected(t_dlg *dlg,int gid);
129
130 int  EditTextLen(t_dlg *dlg,t_id id);
131
132 char *EditText(t_dlg *dlg,t_id id);
133
134 /*****************************
135  *
136  * Routines to do internal things
137  *
138  ****************************/
139 t_dlgitem *FindWin(t_dlg *dlg, Window win);
140
141 t_dlgitem *FindItem(t_dlg *dlg, t_id id);
142
143 void HelpDlg(t_dlg *dlg);
144
145 void HelpNow(t_dlg *dlg, t_dlgitem *dlgitem);
146
147 void NoHelp(t_dlg *dlg);
148
149 /*****************************
150  *
151  * Exececute the dialog box procedure
152  * Returns when a button is pushed.
153  * return value is the ID of the button
154  *
155  ****************************/
156 void ShowDlg(t_dlg *dlg);
157
158 void HideDlg(t_dlg *dlg);
159
160 void FreeDlgItem(t_dlg *dlg, t_id id);
161
162 void FreeDlg(t_dlg *dlg);
163
164 #endif  /* _xdlg_h */