2 * This file is part of the GROMACS molecular simulation package.
4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands.
5 * Copyright (c) 2001-2004, The GROMACS development team,
6 * check out http://www.gromacs.org for more information.
7 * Copyright (c) 2012,2013, by the GROMACS development team, led by
8 * David van der Spoel, Berk Hess, Erik Lindahl, and including many
9 * others, as listed in the AUTHORS file in the top-level source
10 * directory and at http://www.gromacs.org.
12 * GROMACS is free software; you can redistribute it and/or
13 * modify it under the terms of the GNU Lesser General Public License
14 * as published by the Free Software Foundation; either version 2.1
15 * of the License, or (at your option) any later version.
17 * GROMACS is distributed in the hope that it will be useful,
18 * but WITHOUT ANY WARRANTY; without even the implied warranty of
19 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
20 * Lesser General Public License for more details.
22 * You should have received a copy of the GNU Lesser General Public
23 * License along with GROMACS; if not, see
24 * http://www.gnu.org/licenses, or write to the Free Software Foundation,
25 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
27 * If you want to redistribute modifications to GROMACS, please
28 * consider that scientific software is very special. Version
29 * control is crucial - bugs must be traceable. We will be happy to
30 * consider code for inclusion in the official distribution, but
31 * derived work must not be called official GROMACS. Details are found
32 * in the README & COPYING files - if they are missing, get the
33 * official version at http://www.gromacs.org.
35 * To help us fund GROMACS development, we humbly ask that you cite
36 * the research papers on the package. Check out http://www.gromacs.org.
52 #include "gmx_fatal.h"
62 static bmchar
*icon_bits
= NULL
;
63 static int icon_width
= 0;
64 static int icon_height
= 0;
65 static unsigned long icon_fg
= 0;
66 static unsigned long icon_bg
= 0;
68 void SetIcon(unsigned char *bits
, int w
, int h
, unsigned long fg
, unsigned long bg
)
70 icon_bits
= (bmchar
*)bits
;
77 t_dlg
*MessageBox(t_x11
*x11
, Window Parent
, const char *title
,
78 int nlines
, char ** lines
, unsigned long Flags
,
79 DlgCallback
*cb
, void *data
)
87 /* Check flags for inconsistencies */
88 if (((Flags
& MB_OK
) && (Flags
& MB_YES
)) ||
89 ((Flags
& MB_NO
) && (Flags
& MB_CANCEL
)) ||
90 (!(Flags
& MB_OK
) && !(Flags
& MB_YES
)))
92 fprintf(stderr
, "Invalid button selection in MessageBox\n");
96 if (Flags
& MB_ICONSTOP
)
100 if (Flags
& MB_ICONINFORMATION
)
104 if (Flags
& MB_ICONEXCLAMATION
)
108 if (Flags
& MB_ICONGMX
)
114 gmx_fatal(FARGS
, "More than one (%d) icon selected in MessageBox", nicon
);
120 if (Flags
& MB_ICONSTOP
)
122 SetIcon(stop_bits
, stop_width
, stop_height
, RED
, bg
);
124 if (Flags
& MB_ICONINFORMATION
)
126 SetIcon(info_bits
, info_width
, info_height
, BLUE
, bg
);
128 if (Flags
& MB_ICONEXCLAMATION
)
130 SetIcon(alert_bits
, alert_width
, alert_height
, GREEN
, bg
);
132 if (Flags
& MB_ICONGMX
)
134 SetIcon(gromacs_bits
, gromacs_width
, gromacs_height
, BLUE
, bg
);
138 dlg
= CreateDlg(x11
, Parent
, title
, 0, 0, 0, 0, 3, x11
->fg
, bg
, cb
, data
);
142 AddDlgItem(dlg
, CreatePixmap
143 (x11
, XCreatePixmapFromBitmapData
144 (x11
->disp
, dlg
->win
.self
, icon_bits
, icon_width
, icon_height
,
145 icon_fg
, icon_bg
, x11
->depth
),
146 ID_ICON
, ID_BOX
, 2*OFFS_X
, 2*OFFS_Y
, icon_width
, icon_height
, 0));
147 x
+= QueryDlgItemW(dlg
, ID_ICON
)+2*OFFS_X
;
150 AddDlgItem(dlg
, CreateStaticText(x11
, nlines
, lines
, ID_TEXT
, ID_BOX
,
151 x
, 2*OFFS_Y
, 0, 0, 0));
153 y
= QueryDlgItemY(dlg
, ID_TEXT
)+QueryDlgItemH(dlg
, ID_TEXT
);
157 yi
= QueryDlgItemY(dlg
, ID_ICON
)+QueryDlgItemH(dlg
, ID_ICON
);
160 SetDlgItemPos(dlg
, ID_TEXT
, x
, 2*OFFS_Y
+(yi
-y
)/2);
164 SetDlgItemPos(dlg
, ID_ICON
, 2*OFFS_X
, 2*OFFS_Y
+(y
-yi
)/2);
168 x
+= QueryDlgItemW(dlg
, ID_TEXT
)+2*OFFS_X
;
170 width
= (x
-8*OFFS_X
)/2;
172 if (((Flags
& MB_OKCANCEL
) == MB_OKCANCEL
) ||
173 ((Flags
& MB_YESNO
) == MB_YESNO
))
182 #define CB(name, butx, id) AddDlgItem(dlg, CreateButton(x11, name, \
184 butx, y, width, 0, 0))
189 if (Flags
& MB_CANCEL
)
191 CB("Cancel", x
/2+2*OFFS_X
, MB_CANCEL
);
195 CB("Yes", x0
, MB_YES
);
199 CB("No", x
/2+2*OFFS_X
, MB_NO
);
202 SetDlgSize(dlg
, x
, y
+2*OFFS_Y
+
203 QueryDlgItemH(dlg
, (Flags
& MB_OK
) ? MB_OK
: MB_YES
), TRUE
);
205 if (Flags
& MB_SYSTEMMODAL
)
207 nFlag
= DLG_SYSTEMMODAL
;
209 else if (Flags
& MB_APPLMODAL
)
211 nFlag
= DLG_APPLMODAL
;
217 nFlag
= nFlag
| DLG_FREEONBUTTON
;
220 if (!(Flags
& MB_DONTSHOW
))