X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ad81651f00edc6f489d9b6a0839d316a964fd521..c1d8296a78d1f630952fc5395e4072c8a654b8ef:/src/motif/msgdlg.cpp diff --git a/src/motif/msgdlg.cpp b/src/motif/msgdlg.cpp index 90bf77844c..f51da838f1 100644 --- a/src/motif/msgdlg.cpp +++ b/src/motif/msgdlg.cpp @@ -1,10 +1,10 @@ ///////////////////////////////////////////////////////////////////////////// -// 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 ///////////////////////////////////////////////////////////////////////////// @@ -13,16 +13,19 @@ // declarations // ============================================================================ -#ifdef __GNUG__ - #pragma implementation "msgdlg.h" -#endif - // ---------------------------------------------------------------------------- // headers // ---------------------------------------------------------------------------- +// For compilers that support precompilation, includes "wx.h". +#include "wx/wxprec.h" + +#include "wx/defs.h" + #ifdef __VMS +#define XtDisplay XTDISPLAY #pragma message disable nosimpint +#include "wx/vms_x_fix.h" #endif #include @@ -34,8 +37,9 @@ #include "wx/app.h" #include "wx/intl.h" -#include "wx/motif/msgdlg.h" +#include "wx/msgdlg.h" #include "wx/motif/private.h" +#include "wx/settings.h" // ---------------------------------------------------------------------------- // macros @@ -52,7 +56,7 @@ // ---------------------------------------------------------------------------- // 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); @@ -62,28 +66,28 @@ static void msgboxCallBack(Widget w, int client_data, int id) } 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); @@ -101,24 +105,31 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, { m_caption = caption; m_message = message; - m_dialogStyle = style; m_parent = parent; + SetMessageDialogStyle(style); +} + +extern "C" +{ + 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; @@ -152,17 +163,30 @@ int wxMessageDialog::ShowModal() XtSetArg(args[ac], XmNmessageString, text()); ac++; XtSetArg(args[ac], XmNdialogTitle, title()); ac++; - wxComputeColours (XtDisplay(wParent), & m_backgroundColour, - (wxColour*) NULL); + Display* dpy = XtDisplay(wParent); + + wxComputeColours (dpy, & 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++; + 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, "", args, ac); + Widget wMsgBox = (*dialogCreateFunction)(wParent, wxMOTIF_STR(""), args, ac); wxCHECK_MSG( wMsgBox, wxID_CANCEL, "msg box creation failed" ); @@ -173,11 +197,11 @@ int wxMessageDialog::ShowModal() 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 @@ -201,7 +225,7 @@ int wxMessageDialog::ShowModal() // requested) // XtUnmanageChild(wBtnHelp); - if ( !(m_dialogStyle & wxCANCEL ) ) XtUnmanageChild(wBtnCancel); + if ( !(style & wxCANCEL ) ) XtUnmanageChild(wBtnCancel); } // set the callbacks for the message box buttons @@ -231,7 +255,7 @@ int wxMessageDialog::ShowModal() } // translate the result if necessary - if ( m_dialogStyle & wxYES_NO ) + if ( style & wxYES_NO ) { if ( m_result == wxID_OK ) m_result = wxID_YES; @@ -243,4 +267,3 @@ int wxMessageDialog::ShowModal() return m_result; } -