]> git.saurik.com Git - wxWidgets.git/blobdiff - src/motif/msgdlg.cpp
usleep() prototype added for solaris
[wxWidgets.git] / src / motif / msgdlg.cpp
index b2f5d743c7ea8a400669b1909575c893d695710b..3e37ff01d4d6a1c4608f65e9bfb84972165a98af 100644 (file)
@@ -59,21 +59,28 @@ static void msgboxCallBack(Widget w, int client_data, int id)
 
 static void msgboxCallBackOk(Widget w,
                              int client_data,
-                             XmAnyCallbackStruct *call_data)
+                             XmAnyCallbackStruct *WXUNUSED(call_data))
 {
     msgboxCallBack(w, client_data, wxID_OK);
 }
 
 static void msgboxCallBackCancel(Widget w,
                                  int client_data,
-                                 XmAnyCallbackStruct *call_data)
+                                 XmAnyCallbackStruct *WXUNUSED(call_data))
 {
     msgboxCallBack(w, client_data, wxID_CANCEL);
 }
 
+static void msgboxCallBackHelp(Widget w,
+                               int client_data,
+                               XmAnyCallbackStruct *WXUNUSED(call_data))
+{
+    msgboxCallBack(w, client_data, wxID_HELP);
+}
+
 static void msgboxCallBackClose(Widget w,
                                 int client_data,
-                                XmAnyCallbackStruct *call_data)
+                                XmAnyCallbackStruct *WXUNUSED(call_data))
 {
     msgboxCallBack(w, client_data, wxID_CANCEL);
 }
@@ -86,7 +93,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 +108,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 +125,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 +139,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 +233,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;