/////////////////////////////////////////////////////////////////////////////
-// Name: msgdlg.cpp
+// Name: src/motif/msgdlg.cpp
// Purpose: wxMessageDialog
// Author: Julian Smart
// Modified by:
// Created: 04/01/98
-// RCS-ID: $$
+// RCS-ID: $Id$
// Copyright: (c) Julian Smart
// Licence: wxWindows licence
/////////////////////////////////////////////////////////////////////////////
// declarations
// ============================================================================
-#ifdef __GNUG__
- #pragma implementation "msgdlg.h"
-#endif
-
// ----------------------------------------------------------------------------
// headers
// ----------------------------------------------------------------------------
+// For compilers that support precompilation, includes "wx.h".
+#include "wx/wxprec.h"
+
+#ifdef __VMS
+#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/msgdlg.h"
+
+#ifndef WX_PRECOMP
+ #include "wx/intl.h"
+ #include "wx/app.h"
+ #include "wx/settings.h"
+#endif
-#include "wx/app.h"
-#include "wx/intl.h"
-#include "wx/motif/msgdlg.h"
#include "wx/motif/private.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,
+ void* client_data,
XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_OK);
}
static void msgboxCallBackCancel(Widget w,
- int client_data,
+ void* client_data,
XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_CANCEL);
}
static void msgboxCallBackHelp(Widget w,
- int client_data,
+ void* client_data,
XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_HELP);
}
static void msgboxCallBackClose(Widget w,
- int client_data,
+ void* client_data,
XmAnyCallbackStruct *WXUNUSED(call_data))
{
msgboxCallBack(w, client_data, wxID_CANCEL);
// wxMessageDialog
// ----------------------------------------------------------------------------
-wxMessageDialog::wxMessageDialog(wxWindow *parent,
- const wxString& message,
- const wxString& caption,
- long style,
- const wxPoint& WXUNUSED(pos))
+extern "C"
{
- m_caption = caption;
- m_message = message;
- m_dialogStyle = style;
- m_parent = parent;
+ typedef Widget (*DialogCreateFunction)(Widget, String, ArgList, Cardinal);
}
int wxMessageDialog::ShowModal()
{
- Widget (*dialogCreateFunction)(Widget, String, ArgList, Cardinal) = NULL;
- if ( m_dialogStyle & wxYES_NO )
+ const long style = GetMessageDialogStyle();
+
+ DialogCreateFunction dialogCreateFunction;
+ if ( style & wxYES_NO )
{
// if we have [Yes], it must be a question
dialogCreateFunction = XmCreateQuestionDialog;
}
- else if ( m_dialogStyle & wxICON_STOP )
+ else if ( style & wxICON_STOP )
{
// error dialog is the one with error icon...
dialogCreateFunction = XmCreateErrorDialog;
}
- else if ( m_dialogStyle & wxICON_EXCLAMATION )
+ else if ( style & wxICON_EXCLAMATION )
{
// ...and the warning dialog too
dialogCreateFunction = XmCreateWarningDialog;
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) : (Widget) 0;
if ( !wParent )
{
wParent = GetWidget(window);
}
- Widget wMsgBox = (*dialogCreateFunction)(wParent, "", args, ac);
+ // prepare the arg list
+ Arg args[10];
+ int ac = 0;
+
+ wxXmString text(GetFullMessage());
+ wxXmString title(m_caption);
+ XtSetArg(args[ac], XmNmessageString, text()); ac++;
+ XtSetArg(args[ac], XmNdialogTitle, title()); ac++;
+
+ Display* dpy = XtDisplay(wParent);
+
+ if (m_backgroundColour.Ok())
+ {
+ wxComputeColours (dpy, & m_backgroundColour, 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++;
+ }
+
+ wxFont font = wxSystemSettings::GetFont(wxSYS_DEFAULT_GUI_FONT);
+
+#if __WXMOTIF20__ && !__WXLESSTIF__
+ XtSetArg(args[ac], XmNbuttonRenderTable, font.GetFontTypeC(dpy)); ac++;
+ XtSetArg(args[ac], XmNlabelRenderTable, font.GetFontTypeC(dpy)); ac++;
+ XtSetArg(args[ac], XmNtextRenderTable, font.GetFontTypeC(dpy)); ac++;
+#else
+ XtSetArg(args[ac], XmNbuttonFontList, font.GetFontTypeC(dpy)); ac++;
+ XtSetArg(args[ac], XmNlabelFontList, font.GetFontTypeC(dpy)); ac++;
+ XtSetArg(args[ac], XmNtextFontList, font.GetFontTypeC(dpy)); ac++;
+#endif
+
+ // do create message box
+
+ Widget wMsgBox = (*dialogCreateFunction)(wParent, wxMOTIF_STR(""), args, ac);
wxCHECK_MSG( wMsgBox, wxID_CANCEL, "msg box creation failed" );
Widget wBtnHelp = XmMessageBoxGetChild(wMsgBox, XmDIALOG_HELP_BUTTON);
Widget wBtnCancel = XmMessageBoxGetChild(wMsgBox, XmDIALOG_CANCEL_BUTTON);
- if ( m_dialogStyle & wxYES_NO )
+ if ( style & wxYES_NO )
{
- wxXmString yes(_("Yes")), no(_("No")), cancel(_("Cancel"));
+ wxXmString yes(_("Yes")), no(_("No")), cancel(_("Cancel"));
- if ( m_dialogStyle & wxCANCEL )
+ if ( style & wxCANCEL )
{
// use the cancel button for No and the help button for
// Cancel Yuk :-) MB
// requested)
//
XtUnmanageChild(wBtnHelp);
- if ( !(m_dialogStyle & wxCANCEL ) ) XtUnmanageChild(wBtnCancel);
+ if ( !(style & wxCANCEL ) ) XtUnmanageChild(wBtnCancel);
}
// set the callbacks for the message box buttons
}
// translate the result if necessary
- if ( m_dialogStyle & wxYES_NO )
+ if ( style & wxYES_NO )
{
if ( m_result == wxID_OK )
m_result = wxID_YES;
return m_result;
}
-