Add support for wxHELP button to wxMessageDialog.
Implement support for wxHELP for wxMSW, wxGTK and wxOSX/Cocoa (at least when showing the message box from the main thread, there doesn't seem to be any way to show more than three buttons with CFUserNotificationDisplayAlert() so "Help" button is not supported when using it). This is useful not only on its own, i.e. to allow the user to ask for help, but also because it brings the total number of buttons supported by the message dialog to 4, meaning that more choices can be offered to the user (which is rarely, but not quite never, useful). git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@68537 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
@@ -74,6 +74,11 @@ wxString wxMessageDialog::GetDefaultCancelLabel() const
|
||||
return GTK_STOCK_CANCEL;
|
||||
}
|
||||
|
||||
wxString wxMessageDialog::GetDefaultHelpLabel() const
|
||||
{
|
||||
return GTK_STOCK_HELP;
|
||||
}
|
||||
|
||||
void wxMessageDialog::DoSetCustomLabel(wxString& var, const ButtonLabel& label)
|
||||
{
|
||||
int stockId = label.GetStockId();
|
||||
@@ -135,16 +140,21 @@ void wxMessageDialog::GTKCreateMsgDialog()
|
||||
// when using custom labels, we have to add all the buttons ourselves
|
||||
if ( !HasCustomLabels() )
|
||||
{
|
||||
if ( m_dialogStyle & wxYES_NO )
|
||||
// "Help" button is not supported by predefined combinations so we
|
||||
// always need to create the buttons manually when it's used.
|
||||
if ( !(m_dialogStyle & wxHELP) )
|
||||
{
|
||||
if ( !(m_dialogStyle & wxCANCEL) )
|
||||
buttons = GTK_BUTTONS_YES_NO;
|
||||
//else: no standard GTK_BUTTONS_YES_NO_CANCEL so leave as NONE
|
||||
}
|
||||
else if ( m_dialogStyle & wxOK )
|
||||
{
|
||||
buttons = m_dialogStyle & wxCANCEL ? GTK_BUTTONS_OK_CANCEL
|
||||
: GTK_BUTTONS_OK;
|
||||
if ( m_dialogStyle & wxYES_NO )
|
||||
{
|
||||
if ( !(m_dialogStyle & wxCANCEL) )
|
||||
buttons = GTK_BUTTONS_YES_NO;
|
||||
//else: no standard GTK_BUTTONS_YES_NO_CANCEL so leave as NONE
|
||||
}
|
||||
else if ( m_dialogStyle & wxOK )
|
||||
{
|
||||
buttons = m_dialogStyle & wxCANCEL ? GTK_BUTTONS_OK_CANCEL
|
||||
: GTK_BUTTONS_OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -211,9 +221,16 @@ void wxMessageDialog::GTKCreateMsgDialog()
|
||||
const bool addButtons = buttons == GTK_BUTTONS_NONE;
|
||||
#endif // wxUSE_LIBHILDON/!wxUSE_LIBHILDON
|
||||
|
||||
if ( m_dialogStyle & wxYES_NO ) // Yes/No or Yes/No/Cancel dialog
|
||||
|
||||
if ( addButtons )
|
||||
{
|
||||
if ( addButtons )
|
||||
if ( m_dialogStyle & wxHELP )
|
||||
{
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetHelpLabel()),
|
||||
GTK_RESPONSE_HELP);
|
||||
}
|
||||
|
||||
if ( m_dialogStyle & wxYES_NO ) // Yes/No or Yes/No/Cancel dialog
|
||||
{
|
||||
// Add the buttons in the correct order which is, according to
|
||||
// http://library.gnome.org/devel/hig-book/stable/windows-alert.html.en
|
||||
@@ -233,32 +250,29 @@ void wxMessageDialog::GTKCreateMsgDialog()
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetYesLabel()),
|
||||
GTK_RESPONSE_YES);
|
||||
}
|
||||
|
||||
// it'd probably be harmless to call gtk_dialog_set_default_response()
|
||||
// twice but why do it if we're going to change the default below
|
||||
// anyhow
|
||||
if ( !(m_dialogStyle & wxCANCEL_DEFAULT) )
|
||||
else // Ok or Ok/Cancel dialog
|
||||
{
|
||||
gtk_dialog_set_default_response(dlg,
|
||||
m_dialogStyle & wxNO_DEFAULT
|
||||
? GTK_RESPONSE_NO
|
||||
: GTK_RESPONSE_YES);
|
||||
}
|
||||
}
|
||||
else if ( addButtons ) // Ok or Ok/Cancel dialog
|
||||
{
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetOKLabel()), GTK_RESPONSE_OK);
|
||||
if ( m_dialogStyle & wxCANCEL )
|
||||
{
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetOKLabel()), GTK_RESPONSE_OK);
|
||||
if ( m_dialogStyle & wxCANCEL )
|
||||
{
|
||||
gtk_dialog_add_button(dlg, wxGTK_CONV(GetCancelLabel()),
|
||||
GTK_RESPONSE_CANCEL);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
gint defaultButton;
|
||||
if ( m_dialogStyle & wxCANCEL_DEFAULT )
|
||||
{
|
||||
gtk_dialog_set_default_response(dlg, GTK_RESPONSE_CANCEL);
|
||||
}
|
||||
defaultButton = GTK_RESPONSE_CANCEL;
|
||||
else if ( m_dialogStyle & wxNO_DEFAULT )
|
||||
defaultButton = GTK_RESPONSE_NO;
|
||||
else if ( m_dialogStyle & wxYES_NO )
|
||||
defaultButton = GTK_RESPONSE_YES;
|
||||
else // No need to change the default value, whatever it is.
|
||||
defaultButton = GTK_RESPONSE_NONE;
|
||||
|
||||
if ( defaultButton != GTK_RESPONSE_NONE )
|
||||
gtk_dialog_set_default_response(dlg, defaultButton);
|
||||
}
|
||||
|
||||
int wxMessageDialog::ShowModal()
|
||||
@@ -302,6 +316,8 @@ int wxMessageDialog::ShowModal()
|
||||
return wxID_YES;
|
||||
case GTK_RESPONSE_NO:
|
||||
return wxID_NO;
|
||||
case GTK_RESPONSE_HELP:
|
||||
return wxID_HELP;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user