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