// declarations
// ============================================================================
-#ifdef __GNUG__
+#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA)
#pragma implementation "msgdlg.h"
#endif
// headers
// ----------------------------------------------------------------------------
+#include "wx/defs.h"
+
+#ifdef __VMS
+#define XtDisplay XTDISPLAY
+#pragma message disable nosimpint
+#include <wx/vms_x_fix.h>
+#endif
#include <X11/Xlib.h>
#include <Xm/Xm.h>
#include <Xm/MessageB.h>
+#ifdef __VMS
+#pragma message enable nosimpint
+#endif
#include "wx/app.h"
#include "wx/intl.h"
// macros
// ----------------------------------------------------------------------------
-#if !USE_SHARED_LIBRARY
IMPLEMENT_CLASS(wxMessageDialog, wxDialog)
-#endif
// ============================================================================
// implementation
// ----------------------------------------------------------------------------
// the common part
-static void msgboxCallBack(Widget w, int client_data, int id)
+static void msgboxCallBack(Widget w, void* client_data, int id)
{
// close the dialog
XtUnmanageChild(w);
}
static void msgboxCallBackOk(Widget w,
- int client_data,
- XmAnyCallbackStruct *call_data)
+ void* client_data,
+ XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_OK);
}
static void msgboxCallBackCancel(Widget w,
- int client_data,
- XmAnyCallbackStruct *call_data)
+ void* client_data,
+ XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_CANCEL);
}
+static void msgboxCallBackHelp(Widget w,
+ void* client_data,
+ XmAnyCallbackStruct *WXUNUSED(call_data))
+{
+ msgboxCallBack(w, client_data, wxID_HELP);
+}
+
static void msgboxCallBackClose(Widget w,
- int client_data,
- XmAnyCallbackStruct *call_data)
+ void* client_data,
+ XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_CANCEL);
}
const wxString& message,
const wxString& caption,
long style,
- const wxPoint& pos)
+ const wxPoint& WXUNUSED(pos))
{
m_caption = caption;
m_message = message;
{
// if we have [Yes], it must be a question
dialogCreateFunction = XmCreateQuestionDialog;
-
- // TODO we could support this by using the help button...
- wxASSERT_MSG( !(m_dialogStyle & wxCANCEL), "not supported" );
}
else if ( m_dialogStyle & wxICON_STOP )
{
dialogCreateFunction = XmCreateInformationDialog;
}
- // prepare the arg list
- Arg args[2];
- int ac = 0;
-
- wxXmString text(m_message);
- wxXmString title(m_caption);
- XtSetArg(args[ac], XmNmessageString, text()); ac++;
- XtSetArg(args[ac], XmNdialogTitle, title()); ac++;
-
- // do create message box
- Widget wParent = m_parent ? GetWidget(m_parent) : NULL;
+ Widget wParent = m_parent ? GetWidget(m_parent) : (Widget) 0;
if ( !wParent )
{
wxWindow *window = wxTheApp->GetTopWindow();
wParent = GetWidget(window);
}
+ // prepare the arg list
+ Arg args[10];
+ int ac = 0;
+
+ wxXmString text(m_message);
+ wxXmString title(m_caption);
+ XtSetArg(args[ac], XmNmessageString, text()); ac++;
+ XtSetArg(args[ac], XmNdialogTitle, title()); ac++;
+
+ wxComputeColours (XtDisplay(wParent), & m_backgroundColour,
+ (wxColour*) NULL);
+
+ XtSetArg(args[ac], XmNbackground, g_itemColors[wxBACK_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNtopShadowColor, g_itemColors[wxTOPS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNbottomShadowColor, g_itemColors[wxBOTS_INDEX].pixel); ac++;
+ XtSetArg(args[ac], XmNforeground, g_itemColors[wxFORE_INDEX].pixel); ac++;
+
+ // do create message box
+
Widget wMsgBox = (*dialogCreateFunction)(wParent, "", args, ac);
wxCHECK_MSG( wMsgBox, wxID_CANCEL, "msg box creation failed" );
- // remove the [Help] button which wouldn't do anything anyhow
- XtUnmanageChild(XmMessageBoxGetChild(wMsgBox, XmDIALOG_HELP_BUTTON));
+ // get the buttons which we might either remove or rename
+ // depending on the requested style
+ //
+ Widget wBtnOk = XmMessageBoxGetChild(wMsgBox, XmDIALOG_OK_BUTTON);
+ Widget wBtnHelp = XmMessageBoxGetChild(wMsgBox, XmDIALOG_HELP_BUTTON);
+ Widget wBtnCancel = XmMessageBoxGetChild(wMsgBox, XmDIALOG_CANCEL_BUTTON);
- // and the [Cancel] button too if we were not asked for it
- if ( !(m_dialogStyle & wxCANCEL) )
+ if ( m_dialogStyle & wxYES_NO )
{
- Widget wBtnCancel = XmMessageBoxGetChild(wMsgBox,
- XmDIALOG_CANCEL_BUTTON);
+ wxXmString yes(_("Yes")), no(_("No")), cancel(_("Cancel"));
- // ... unless it's a wxYES_NO dialog in which case we just rename
- // [Cancel] to [No] instead
- if ( m_dialogStyle & wxYES_NO )
+ if ( m_dialogStyle & wxCANCEL )
{
- Widget wBtnOk = XmMessageBoxGetChild(wMsgBox,
- XmDIALOG_OK_BUTTON);
-
- wxXmString yes(_("Yes")), no(_("No"));
+ // use the cancel button for No and the help button for
+ // Cancel Yuk :-) MB
+ //
XtVaSetValues(wBtnOk, XmNlabelString, yes(), NULL);
XtVaSetValues(wBtnCancel, XmNlabelString, no(), NULL);
+ XtVaSetValues(wBtnHelp, XmNlabelString, cancel(), NULL);
}
else
{
- XtUnmanageChild(wBtnCancel);
+ // no cancel button requested...
+ // remove the help button and use cancel for no
+ //
+ XtVaSetValues(wBtnCancel, XmNlabelString, no(), NULL);
+ XtUnmanageChild(wBtnHelp);
}
}
+ else
+ {
+ // remove the help button and the cancel button (unless it was
+ // requested)
+ //
+ XtUnmanageChild(wBtnHelp);
+ if ( !(m_dialogStyle & wxCANCEL ) ) XtUnmanageChild(wBtnCancel);
+ }
// set the callbacks for the message box buttons
XtAddCallback(wMsgBox, XmNokCallback,
(XtCallbackProc)msgboxCallBackOk, (XtPointer)this);
XtAddCallback(wMsgBox, XmNcancelCallback,
(XtCallbackProc)msgboxCallBackCancel, (XtPointer)this);
-
+ XtAddCallback(wMsgBox, XmNhelpCallback,
+ (XtCallbackProc)msgboxCallBackHelp, (XtPointer)this);
XtAddCallback(wMsgBox, XmNunmapCallback,
(XtCallbackProc)msgboxCallBackClose, (XtPointer)this);
m_result = wxID_YES;
else if ( m_result == wxID_CANCEL )
m_result = wxID_NO;
+ else if ( m_result == wxID_HELP )
+ m_result = wxID_CANCEL;
}
return m_result;