source: tags/svn.1.5.4/PGT/msgbox.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: 4.2 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: 8309 $
11
12#include <Xm/XmAll.h>
13#include "msgbox.hxx"
14#include "xm_defs.hxx"
15#include "dialog.hxx"
16
17
18/****************************************************************************
19*  CALLBACK FUNCTION - CREATS A RETURNVALUE ACCORDING TO THE SELECTED BUTTON
20****************************************************************************/
21static void OkCancelResponse(Widget, XtPointer client, XtPointer call)
22{
23    int *answer= (int *)client;
24    XmAnyCallbackStruct *reason= (XmAnyCallbackStruct *)call;
25    switch(reason->reason)
26    {
27        case XmCR_OK:
28            *answer= 1;
29            break;
30        case XmCR_CANCEL:
31            *answer= 2;
32            break;
33        default:
34            return;
35    }
36}
37
38
39/****************************************************************************
40*  A SIMPLE MESSAGEBOX, ONLY WITH AN OK-BUTTON
41****************************************************************************/
42void ShowMessageBox(Widget w, const char *title, const char *text, const char *xpm_path)
43{
44    // PREDEFINED VALUES...
45    Widget msgBox;
46    Arg args[8];
47    int n= 0;
48
49    // CREATE X11 TITLE- AND TEXT-STRING
50    XmString xm_text=  PGT_XmStringCreateLocalized(text);
51    XmString xm_title= PGT_XmStringCreateLocalized(title);
52
53    // ADD A PIXMAP IF AVAILABLE
54    if(xpm_path)
55    {
56        Pixel fg, bg;
57        XtVaGetValues(w, XmNforeground, &fg, XmNbackground, &bg, NULL);
58        Pixmap xpm= PGT_LoadPixmap("msg.xpm", XtScreen(w), fg, bg);
59        XtSetArg(args[n], XmNsymbolPixmap, xpm); n++;
60    }
61
62    // SET MESSAGE TEXT
63    XtSetArg(args[n], XmNmessageString, xm_text); n++;
64    msgBox= XmCreateMessageDialog(w, const_cast<char*>("messageBox"), args, n);
65
66    XtUnmanageChild(XmMessageBoxGetChild(msgBox, XmDIALOG_HELP_BUTTON));
67    XtUnmanageChild(XmMessageBoxGetChild(msgBox, XmDIALOG_CANCEL_BUTTON));
68
69    XtVaSetValues(msgBox, XmNdialogTitle, xm_title, NULL);
70
71    XtManageChild(msgBox);
72
73    // FREE STRINGS
74    XmStringFree(xm_text);
75    XmStringFree(xm_title);
76}
77
78
79/****************************************************************************
80*  A MESSAGEBOX WITH AN OK- AND CANCEL-BUTTON
81****************************************************************************/
82int OkCancelDialog(Widget w, const char *title, const char *text, const char *xpm_path)
83{
84    // PREDEFINED VALUES...
85    int answer= 0;
86    Widget dialog;
87    Arg args[8];
88    int n= 0;
89    XtAppContext context;
90
91    // CREATE X11 TITLE- AND TEXT-STRING
92    XmString xm_text=  XmStringCreateLtoR(const_cast<char*>(text), XmSTRING_DEFAULT_CHARSET);
93    XmString xm_title= PGT_XmStringCreateLocalized(title);
94
95    // ADD A PIXMAP IF AVAILABLE
96    if(xpm_path)
97    {
98        Pixel fg, bg;
99        XtVaGetValues(w, XmNforeground, &fg, XmNbackground, &bg, NULL);
100        Pixmap xpm= PGT_LoadPixmap("msg.xpm", XtScreen(w), fg, bg);
101        XtSetArg(args[n], XmNsymbolPixmap, xpm); n++;
102    }
103
104    // SET MESSAGE TEXT AND DIALOG STYLE (MODAL)
105    XtSetArg(args[n], XmNmessageString, xm_text); n++;
106    XtSetArg(args[n], XmNdialogStyle, XmDIALOG_APPLICATION_MODAL); n++;
107
108    // CREATE QUESTION DIALOG
109    dialog = XmCreateQuestionDialog(XtParent(w), const_cast<char*>(text), args, n);
110    XtUnmanageChild(XmMessageBoxGetChild(dialog, XmDIALOG_HELP_BUTTON));
111    XtVaSetValues(dialog, XmNdialogTitle, xm_title, NULL);
112
113    // ADD CALLBACK FUNCTION
114    XtAddCallback(dialog, XmNokCallback, OkCancelResponse, &answer);
115    XtAddCallback(dialog, XmNcancelCallback, OkCancelResponse, &answer);
116    XtManageChild(dialog);
117
118    context= XtWidgetToApplicationContext(w);
119    while (answer == 0 || XtAppPending(context))
120    {
121        XtAppProcessEvent (context, XtIMAll);
122    }
123
124    // FREE STRINGS
125    XmStringFree(xm_text);
126    XmStringFree(xm_title);
127
128    XtDestroyWidget(dialog);
129
130    return answer;
131}
Note: See TracBrowser for help on using the repository browser.