X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/ee31c392ac73dcd67fb25ac368e2ffb7d4c9c0e7..785f5eaa05195f5e44a974861864324667a3326e:/src/motif/msgdlg.cpp diff --git a/src/motif/msgdlg.cpp b/src/motif/msgdlg.cpp index b2f5d743c7..cbc30128a0 100644 --- a/src/motif/msgdlg.cpp +++ b/src/motif/msgdlg.cpp @@ -13,7 +13,7 @@ // declarations // ============================================================================ -#ifdef __GNUG__ +#if defined(__GNUG__) && !defined(NO_GCC_PRAGMA) #pragma implementation "msgdlg.h" #endif @@ -21,10 +21,20 @@ // headers // ---------------------------------------------------------------------------- +#include "wx/defs.h" + +#ifdef __VMS +#define XtDisplay XTDISPLAY +#pragma message disable nosimpint +#include +#endif #include #include #include +#ifdef __VMS +#pragma message enable nosimpint +#endif #include "wx/app.h" #include "wx/intl.h" @@ -35,9 +45,7 @@ // macros // ---------------------------------------------------------------------------- -#if !USE_SHARED_LIBRARY IMPLEMENT_CLASS(wxMessageDialog, wxDialog) -#endif // ============================================================================ // implementation @@ -48,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); @@ -58,22 +66,29 @@ static void msgboxCallBack(Widget w, int client_data, int id) } 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); } @@ -86,7 +101,7 @@ wxMessageDialog::wxMessageDialog(wxWindow *parent, const wxString& message, const wxString& caption, long style, - const wxPoint& pos) + const wxPoint& WXUNUSED(pos)) { m_caption = caption; m_message = message; @@ -101,9 +116,6 @@ int wxMessageDialog::ShowModal() { // 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 ) { @@ -121,17 +133,7 @@ int wxMessageDialog::ShowModal() 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(); @@ -145,42 +147,74 @@ int wxMessageDialog::ShowModal() 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); @@ -207,6 +241,8 @@ int wxMessageDialog::ShowModal() 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;