1 /////////////////////////////////////////////////////////////////////////////
2 // Name: MessageDlg.h
3 // Purpose: Message dialog with "Don't show again" checkbox
4 // Author: Alex Thuering
5 // Created: 26.03.2009
6 // RCS-ID: $Id: MessageDlg.cpp,v 1.3 2013/10/25 21:19:16 ntalex Exp $
7 // Copyright: (c) Alex Thuering
8 // Licence: GPL
9 /////////////////////////////////////////////////////////////////////////////
10
11 #ifndef MESSAGE_DLG_H
12 #define MESSAGE_DLG_H
13
14 #include "MessageDlg.h"
15 #include <wx/artprov.h>
16
BEGIN_EVENT_TABLE(MessageDlg,wxDialog)17 BEGIN_EVENT_TABLE(MessageDlg, wxDialog)
18 EVT_BUTTON(wxID_YES, MessageDlg::OnYes)
19 EVT_BUTTON(wxID_NO, MessageDlg::OnNo)
20 EVT_BUTTON(wxID_CANCEL, MessageDlg::OnCancel)
21 END_EVENT_TABLE()
22
23 MessageDlg::MessageDlg(wxWindow *parent, const wxString& message, const wxString& caption, long style) {
24 m_parent = parent ? wxGetTopLevelParent(parent) : wxTheApp->GetTopWindow();
25 m_message = message;
26 m_caption = caption;
27 m_dialogStyle = style;
28 if ((style & wxYES_NO) && !(style & wxCANCEL))
29 SetEscapeId(wxID_NO);
30 DoCreateMsgdialog();
31 }
32
DoCreateMsgdialog()33 void MessageDlg::DoCreateMsgdialog() {
34 wxDialog::Create(m_parent, wxID_ANY, m_caption, wxDefaultPosition,
35 wxDefaultSize, wxDEFAULT_DIALOG_STYLE);
36 bool is_pda = (wxSystemSettings::GetScreenType() <= wxSYS_SCREEN_PDA);
37 wxBoxSizer *topsizer = new wxBoxSizer(wxVERTICAL);
38 wxBoxSizer *icon_text = new wxBoxSizer(wxHORIZONTAL);
39
40 // 1) icon
41 if (m_dialogStyle & wxICON_MASK) {
42 wxBitmap bitmap;
43 switch (m_dialogStyle & wxICON_MASK) {
44 default:
45 wxFAIL_MSG(_T("incorrect log style"));
46 bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX);
47 break;
48
49 case wxICON_ERROR:
50 bitmap = wxArtProvider::GetIcon(wxART_ERROR, wxART_MESSAGE_BOX);
51 break;
52
53 case wxICON_INFORMATION:
54 bitmap = wxArtProvider::GetIcon(wxART_INFORMATION, wxART_MESSAGE_BOX);
55 break;
56
57 case wxICON_WARNING:
58 bitmap = wxArtProvider::GetIcon(wxART_WARNING, wxART_MESSAGE_BOX);
59 break;
60
61 case wxICON_QUESTION:
62 bitmap = wxArtProvider::GetIcon(wxART_QUESTION, wxART_MESSAGE_BOX);
63 break;
64 }
65 wxStaticBitmap *icon = new wxStaticBitmap(this, wxID_ANY, bitmap);
66 if (is_pda)
67 topsizer->Add( icon, 0, wxTOP|wxLEFT|wxRIGHT | wxALIGN_LEFT, 10 );
68 else
69 icon_text->Add( icon, 0, wxCENTER );
70 }
71
72 // 2) text
73 icon_text->Add( CreateTextSizer(m_message), 0, wxALIGN_CENTER | wxLEFT, 10 );
74 topsizer->Add( icon_text, 1, wxCENTER | wxLEFT|wxRIGHT|wxTOP, 10 );
75
76 m_checkBox = new wxCheckBox(this, wxID_ANY, _("&Don't show this message again"));
77 topsizer->Add(m_checkBox, 0, wxTOP|wxLEFT, 12);
78
79 // 3) buttons
80 int center_flag = wxEXPAND;
81 wxSizer *sizerBtn = CreateButtonSizer(m_dialogStyle & (wxOK|wxCANCEL|wxYES_NO|wxNO_DEFAULT));
82 if ( sizerBtn )
83 topsizer->Add(sizerBtn, 0, center_flag | wxALL, 10 );
84
85 SetAutoLayout( true );
86 SetSizer( topsizer );
87
88 topsizer->SetSizeHints( this );
89 topsizer->Fit( this );
90 wxSize size( GetSize() );
91 if (size.x < size.y*3/2) {
92 size.x = size.y*3/2;
93 SetSize( size );
94 }
95
96 Centre(wxBOTH | wxCENTER_FRAME);
97 }
98
99
ShowModal()100 int MessageDlg::ShowModal() {
101 int ret = wxDialog::ShowModal();
102 switch (ret) {
103 case wxID_OK:
104 return wxOK;
105 case wxID_YES:
106 return wxYES;
107 case wxID_NO:
108 return wxNO;
109 default:
110 return wxCANCEL;
111 }
112 }
113
IsShowAgain()114 bool MessageDlg::IsShowAgain() {
115 return !m_checkBox->GetValue();
116 }
117
OnYes(wxCommandEvent & event)118 void MessageDlg::OnYes(wxCommandEvent& event) {
119 EndModal(wxID_YES);
120 }
121
OnNo(wxCommandEvent & event)122 void MessageDlg::OnNo(wxCommandEvent& event) {
123 EndModal(wxID_NO);
124 }
125
OnCancel(wxCommandEvent & event)126 void MessageDlg::OnCancel(wxCommandEvent& event) {
127 EndModal(wxID_CANCEL);
128 }
129
130 #endif // MESSAGE_DLG_H
131