1 /////////////////////////////////////////////////////////////////////////////
2 // Name: src/generic/msgdlgg.cpp
3 // Purpose: wxGenericMessageDialog
4 // Author: Julian Smart, Robert Roebling
8 // Copyright: (c) Julian Smart and Robert Roebling
9 // Licence: wxWindows licence
10 /////////////////////////////////////////////////////////////////////////////
12 // For compilers that support precompilation, includes "wx.h".
13 #include "wx/wxprec.h"
23 #include "wx/dialog.h"
24 #include "wx/button.h"
25 #include "wx/stattext.h"
26 #include "wx/statbmp.h"
27 #include "wx/layout.h"
32 #include "wx/settings.h"
38 #define __WX_COMPILING_MSGDLGG_CPP__ 1
39 #include "wx/msgdlg.h"
40 #include "wx/artprov.h"
41 #include "wx/textwrapper.h"
44 #include "wx/statline.h"
47 // ----------------------------------------------------------------------------
48 // wxTitleTextWrapper: simple class to create wrapped text in "title font"
49 // ----------------------------------------------------------------------------
51 class wxTitleTextWrapper
: public wxTextSizerWrapper
54 wxTitleTextWrapper(wxWindow
*win
)
55 : wxTextSizerWrapper(win
)
60 virtual wxWindow
*OnCreateLine(const wxString
& s
)
62 wxWindow
* const win
= wxTextSizerWrapper::OnCreateLine(s
);
64 win
->SetFont(win
->GetFont().Larger().MakeBold());
70 // ----------------------------------------------------------------------------
72 // ----------------------------------------------------------------------------
74 BEGIN_EVENT_TABLE(wxGenericMessageDialog
, wxDialog
)
75 EVT_BUTTON(wxID_YES
, wxGenericMessageDialog::OnYes
)
76 EVT_BUTTON(wxID_NO
, wxGenericMessageDialog::OnNo
)
77 EVT_BUTTON(wxID_HELP
, wxGenericMessageDialog::OnHelp
)
78 EVT_BUTTON(wxID_CANCEL
, wxGenericMessageDialog::OnCancel
)
81 IMPLEMENT_CLASS(wxGenericMessageDialog
, wxDialog
)
83 wxGenericMessageDialog::wxGenericMessageDialog( wxWindow
*parent
,
84 const wxString
& message
,
85 const wxString
& caption
,
88 : wxMessageDialogBase(GetParentForModalDialog(parent
, style
),
97 wxSizer
*wxGenericMessageDialog::CreateMsgDlgButtonSizer()
99 #ifndef __SMARTPHONE__
100 if ( HasCustomLabels() )
102 wxStdDialogButtonSizer
* const sizerStd
= new wxStdDialogButtonSizer
;
104 wxButton
*btnDef
= NULL
;
106 if ( m_dialogStyle
& wxOK
)
108 btnDef
= new wxButton(this, wxID_OK
, GetCustomOKLabel());
109 sizerStd
->AddButton(btnDef
);
112 if ( m_dialogStyle
& wxCANCEL
)
115 cancel
= new wxButton(this, wxID_CANCEL
, GetCustomCancelLabel());
116 sizerStd
->AddButton(cancel
);
118 if ( m_dialogStyle
& wxCANCEL_DEFAULT
)
122 if ( m_dialogStyle
& wxYES_NO
)
125 yes
= new wxButton(this, wxID_YES
, GetCustomYesLabel());
126 sizerStd
->AddButton(yes
);
129 no
= new wxButton(this, wxID_NO
, GetCustomNoLabel());
130 sizerStd
->AddButton(no
);
131 if ( m_dialogStyle
& wxNO_DEFAULT
)
137 if ( m_dialogStyle
& wxHELP
)
140 help
= new wxButton(this, wxID_HELP
, GetCustomHelpLabel());
141 sizerStd
->AddButton(help
);
146 btnDef
->SetDefault();
152 return CreateSeparatedSizer(sizerStd
);
154 #endif // !__SMARTPHONE__
156 // Use standard labels for all buttons
157 return CreateSeparatedButtonSizer
159 m_dialogStyle
& (wxOK
| wxCANCEL
| wxHELP
| wxYES_NO
|
160 wxNO_DEFAULT
| wxCANCEL_DEFAULT
)
164 void wxGenericMessageDialog::DoCreateMsgdialog()
166 wxDialog::Create(m_parent
, wxID_ANY
, m_caption
, m_pos
, wxDefaultSize
, wxDEFAULT_DIALOG_STYLE
);
168 bool is_pda
= (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA
);
170 wxBoxSizer
*topsizer
= new wxBoxSizer( wxVERTICAL
);
172 wxBoxSizer
*icon_text
= new wxBoxSizer( wxHORIZONTAL
);
176 if (m_dialogStyle
& wxICON_MASK
)
178 wxStaticBitmap
*icon
= new wxStaticBitmap
182 wxArtProvider::GetMessageBoxIcon(m_dialogStyle
)
185 topsizer
->Add( icon
, 0, wxTOP
|wxLEFT
|wxRIGHT
| wxALIGN_LEFT
, 10 );
187 icon_text
->Add(icon
, wxSizerFlags().Top().Border(wxRIGHT
, 20));
189 #endif // wxUSE_STATBMP
194 wxBoxSizer
* const textsizer
= new wxBoxSizer(wxVERTICAL
);
196 // We want to show the main message in a different font to make it stand
197 // out if the extended message is used as well. This looks better and is
198 // more consistent with the native dialogs under MSW and GTK.
199 wxString lowerMessage
;
200 if ( !m_extendedMessage
.empty() )
202 wxTitleTextWrapper
titleWrapper(this);
203 textsizer
->Add(CreateTextSizer(GetMessage(), titleWrapper
),
204 wxSizerFlags().Border(wxBOTTOM
, 20));
206 lowerMessage
= GetExtendedMessage();
208 else // no extended message
210 lowerMessage
= GetMessage();
213 textsizer
->Add(CreateTextSizer(lowerMessage
));
215 icon_text
->Add(textsizer
, 0, wxALIGN_CENTER
, 10);
216 topsizer
->Add( icon_text
, 1, wxLEFT
|wxRIGHT
|wxTOP
, 10 );
217 #endif // wxUSE_STATTEXT
219 // 3) optional checkbox and detailed text
220 AddMessageDialogCheckBox( topsizer
);
221 AddMessageDialogDetails( topsizer
);
224 wxSizer
*sizerBtn
= CreateMsgDlgButtonSizer();
226 topsizer
->Add(sizerBtn
, 0, wxEXPAND
| wxALL
, 10 );
228 SetAutoLayout( true );
229 SetSizer( topsizer
);
231 topsizer
->SetSizeHints( this );
232 topsizer
->Fit( this );
233 wxSize
size( GetSize() );
234 if (size
.x
< size
.y
*3/2)
240 Centre( wxBOTH
| wxCENTER_FRAME
);
243 void wxGenericMessageDialog::OnYes(wxCommandEvent
& WXUNUSED(event
))
245 EndModal( wxID_YES
);
248 void wxGenericMessageDialog::OnNo(wxCommandEvent
& WXUNUSED(event
))
253 void wxGenericMessageDialog::OnHelp(wxCommandEvent
& WXUNUSED(event
))
255 EndModal( wxID_HELP
);
258 void wxGenericMessageDialog::OnCancel(wxCommandEvent
& WXUNUSED(event
))
260 // Allow cancellation via ESC/Close button except if
261 // only YES and NO are specified.
262 const long style
= GetMessageDialogStyle();
263 if ( (style
& wxYES_NO
) != wxYES_NO
|| (style
& wxCANCEL
) )
265 EndModal( wxID_CANCEL
);
269 int wxGenericMessageDialog::ShowModal()
277 return wxMessageDialogBase::ShowModal();
280 #endif // wxUSE_MSGDLG