// Licence: wxWindows license
/////////////////////////////////////////////////////////////////////////////
-#if defined(__GNUG__) && !defined(__APPLE__)
-#pragma implementation
-#pragma interface
-#endif
-
// For compilers that support precompilation, includes "wx/wx.h".
#include "wx/wxprec.h"
#include "wx/wx.h"
#endif
+#include "../sample.xpm"
+
#include "wx/datetime.h"
#include "wx/image.h"
+#include "wx/bookctrl.h"
+#include "wx/artprov.h"
+#include "wx/imaglist.h"
+#include "wx/sysopt.h"
#if wxUSE_COLOURDLG
#include "wx/colordlg.h"
#if wxUSE_PROGRESSDLG
#if wxUSE_STOPWATCH && wxUSE_LONGLONG
- #include <wx/datetime.h> // wxDateTime
+ #include "wx/datetime.h" // wxDateTime
#endif
#include "wx/progdlg.h"
#include "wx/fdrepdlg.h"
#endif // wxUSE_FINDREPLDLG
+#if wxUSE_SPINCTRL
+#include "wx/spinctrl.h"
+#endif
+
+#include "wx/propdlg.h"
+
#include "dialogs.h"
#if USE_COLOURDLG_GENERIC
#if USE_MODAL_PRESENTATION
EVT_MENU(DIALOGS_MODAL, MyFrame::ModalDlg)
EVT_MENU(DIALOGS_MODELESS, MyFrame::ModelessDlg)
+ EVT_MENU(DIALOGS_CENTRE_SCREEN, MyFrame::DlgCenteredScreen)
+ EVT_MENU(DIALOGS_CENTRE_PARENT, MyFrame::DlgCenteredParent)
#endif // USE_MODAL
#if wxUSE_STARTUP_TIPS
EVT_FIND_CLOSE(wxID_ANY, MyFrame::OnFindDialog)
#endif // wxUSE_FINDREPLDLG
- EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention)
+#if USE_SETTINGS_DIALOG
+ EVT_MENU(DIALOGS_PROPERTY_SHEET, MyFrame::OnPropertySheet)
+ EVT_MENU(DIALOGS_PROPERTY_SHEET_TOOLBOOK, MyFrame::OnPropertySheet)
+ EVT_MENU(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, MyFrame::OnPropertySheet)
+#endif
+
+ EVT_MENU(DIALOGS_REQUEST, MyFrame::OnRequestUserAttention)
EVT_MENU(wxID_EXIT, MyFrame::OnExit)
END_EVENT_TABLE()
#endif // wxUSE_FINDREPLDLG
#if USE_MODAL_PRESENTATION
- wxMenu *modal_menu = new wxMenu;
- modal_menu->Append(DIALOGS_MODAL, _T("Mo&dal dialog\tCtrl-W"));
- modal_menu->AppendCheckItem(DIALOGS_MODELESS, _T("Modeless &dialog\tCtrl-Z"));
- file_menu->Append(wxID_ANY,_T("&Modal/Modeless"),modal_menu);
+ wxMenu *dialogs_menu = new wxMenu;
+ dialogs_menu->Append(DIALOGS_MODAL, _T("&Modal dialog\tCtrl-W"));
+ dialogs_menu->AppendCheckItem(DIALOGS_MODELESS, _T("Mode&less dialog\tCtrl-Z"));
+ dialogs_menu->AppendCheckItem(DIALOGS_CENTRE_SCREEN, _T("Centered on &screen\tShift-Ctrl-1"));
+ dialogs_menu->AppendCheckItem(DIALOGS_CENTRE_PARENT, _T("Centered on &parent\tShift-Ctrl-2"));
+ file_menu->Append(wxID_ANY, _T("&Generic dialogs"), dialogs_menu);
#endif // USE_MODAL_PRESENTATION
+#if USE_SETTINGS_DIALOG
+ wxMenu *sheet_menu = new wxMenu;
+ sheet_menu->Append(DIALOGS_PROPERTY_SHEET, _T("&Standard property sheet\tShift-Ctrl-P"));
+ sheet_menu->Append(DIALOGS_PROPERTY_SHEET_TOOLBOOK, _T("&Toolbook sheet\tShift-Ctrl-T"));
+
+ if (wxPlatformIs(wxMac))
+ sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
+/*
+#ifdef __WXMAC__
+ sheet_menu->Append(DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK, _T("Button &Toolbook sheet\tShift-Ctrl-U"));
+#endif
+*/
+ file_menu->Append(wxID_ANY, _T("&Property sheets"), sheet_menu);
+#endif // USE_SETTINGS_DIALOG
+
file_menu->Append(DIALOGS_REQUEST, _T("&Request user attention\tCtrl-R"));
file_menu->AppendSeparator();
const wxString& title)
: wxFrame(parent, wxID_ANY, title)
{
+ SetIcon(sample_xpm);
+
#if USE_MODAL_PRESENTATION
m_dialog = (MyModelessDialog *)NULL;
#endif // USE_MODAL_PRESENTATION
);
}
#endif // wxUSE_COLOURDLG
-
-#if wxUSE_STATUSBAR
- CreateStatusBar();
-#endif // wxUSE_STATUSBAR
}
#if wxUSE_COLOURDLG
data.SetInitialFont(wxGetApp().m_canvasFont);
data.SetColour(wxGetApp().m_canvasTextColour);
- wxGenericFontDialog *dialog = new wxGenericFontDialog(this, &data);
+ wxGenericFontDialog *dialog = new wxGenericFontDialog(this, data);
if (dialog->ShowModal() == wxID_OK)
{
wxFontData retData = dialog->GetFontData();
#endif
);
+ dialog.CentreOnParent();
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
void MyFrame::FilesOpenGeneric(wxCommandEvent& WXUNUSED(event) )
{
+ // On PocketPC you can disable OK-only dialogs policy using system option
+ int buttons = wxSystemOptions::GetOptionInt(wxT("wince.dialog.real-ok-cancel"));
+ wxSystemOptions::SetOption(wxT("wince.dialog.real-ok-cancel"), 1);
+
wxString wildcards = _T("All files (*.*)|*.*|C++ files (*.cpp;*.h)|*.cpp;*.h");
wxGenericFileDialog dialog(this, _T("Testing open multiple file dialog"),
wxEmptyString, wxEmptyString, wildcards,
wxMessageDialog dialog2(this, msg, _T("Selected files"));
dialog2.ShowModal();
}
+
+ // restore system option
+ wxSystemOptions::SetOption(wxT("wince.dialog.real-ok-cancel"), buttons);
}
void MyFrame::FileSaveGeneric(wxCommandEvent& WXUNUSED(event) )
m_dialog->Hide();
}
}
+
+void MyFrame::DlgCenteredScreen(wxCommandEvent& WXUNUSED(event))
+{
+ wxDialog dlg(this, wxID_ANY, _T("Dialog centered on screen"),
+ wxDefaultPosition, wxSize(200, 100));
+ (new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
+ dlg.CentreOnScreen();
+ dlg.ShowModal();
+}
+
+void MyFrame::DlgCenteredParent(wxCommandEvent& WXUNUSED(event))
+{
+ wxDialog dlg(this, wxID_ANY, _T("Dialog centered on parent"),
+ wxDefaultPosition, wxSize(200, 100));
+ (new wxButton(&dlg, wxID_OK, _T("Close")))->Centre();
+ dlg.CentreOnParent();
+ dlg.ShowModal();
+}
+
#endif // USE_MODAL_PRESENTATION
#if wxUSE_STARTUP_TIPS
}
#endif // wxUSE_STARTUP_TIPS
+#if USE_SETTINGS_DIALOG
+void MyFrame::OnPropertySheet(wxCommandEvent& event)
+{
+ SettingsDialog dialog(this, event.GetId());
+ dialog.ShowModal();
+}
+#endif // USE_SETTINGS_DIALOG
+
void MyFrame::OnRequestUserAttention(wxCommandEvent& WXUNUSED(event))
{
wxLogStatus(_T("Sleeping for 3 seconds to allow you to switch to another window"));
#endif // USE_MODAL_PRESENTATION
+#if USE_SETTINGS_DIALOG
+// ----------------------------------------------------------------------------
+// SettingsDialog
+// ----------------------------------------------------------------------------
+
+IMPLEMENT_CLASS(SettingsDialog, wxPropertySheetDialog)
+
+BEGIN_EVENT_TABLE(SettingsDialog, wxPropertySheetDialog)
+END_EVENT_TABLE()
+
+SettingsDialog::SettingsDialog(wxWindow* win, int dialogType)
+{
+ SetExtraStyle(wxDIALOG_EX_CONTEXTHELP|wxWS_EX_VALIDATE_RECURSIVELY);
+
+ int tabImage1 = -1;
+ int tabImage2 = -1;
+
+ bool useToolBook = (dialogType == DIALOGS_PROPERTY_SHEET_TOOLBOOK || dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK);
+ int resizeBorder = wxRESIZE_BORDER;
+
+ if (useToolBook)
+ {
+ resizeBorder = 0;
+ tabImage1 = 0;
+ tabImage2 = 1;
+
+ int sheetStyle = wxPROPSHEET_SHRINKTOFIT;
+ if (dialogType == DIALOGS_PROPERTY_SHEET_BUTTONTOOLBOOK)
+ sheetStyle |= wxPROPSHEET_BUTTONTOOLBOOK;
+ else
+ sheetStyle |= wxPROPSHEET_TOOLBOOK;
+
+ SetSheetStyle(sheetStyle);
+ SetSheetInnerBorder(0);
+ SetSheetOuterBorder(0);
+
+ // create a dummy image list with a few icons
+ const wxSize imageSize(32, 32);
+
+ m_imageList = new wxImageList(imageSize.GetWidth(), imageSize.GetHeight());
+ m_imageList->
+ Add(wxArtProvider::GetIcon(wxART_INFORMATION, wxART_OTHER, imageSize));
+ m_imageList->
+ Add(wxArtProvider::GetIcon(wxART_QUESTION, wxART_OTHER, imageSize));
+ m_imageList->
+ Add(wxArtProvider::GetIcon(wxART_WARNING, wxART_OTHER, imageSize));
+ m_imageList->
+ Add(wxArtProvider::GetIcon(wxART_ERROR, wxART_OTHER, imageSize));
+ }
+ else
+ m_imageList = NULL;
+
+ Create(win, wxID_ANY, _("Preferences"), wxDefaultPosition, wxDefaultSize,
+ wxDEFAULT_DIALOG_STYLE| (int)wxPlatform::IfNot(wxWinCE, resizeBorder)
+/*
+#ifndef __WXWINCE__
+ |resizeBorder
+#endif
+*/
+ );
+
+ // If using a toolbook, also follow Mac style and don't create buttons
+ if (!useToolBook)
+ CreateButtons(wxOK|wxCANCEL| (int)wxPlatform::IfNot(wxWinPocketPC, wxHELP)
+/*
+#ifndef __POCKETPC__
+ |wxHELP
+#endif
+*/
+ );
+
+ wxBookCtrlBase* notebook = GetBookCtrl();
+ notebook->SetImageList(m_imageList);
+
+ wxPanel* generalSettings = CreateGeneralSettingsPage(notebook);
+ wxPanel* aestheticSettings = CreateAestheticSettingsPage(notebook);
+
+ notebook->AddPage(generalSettings, _("General"), true, tabImage1);
+ notebook->AddPage(aestheticSettings, _("Aesthetics"), false, tabImage2);
+
+ LayoutDialog();
+}
+
+SettingsDialog::~SettingsDialog()
+{
+ delete m_imageList;
+}
+
+wxPanel* SettingsDialog::CreateGeneralSettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
+
+ //// LOAD LAST FILE
+
+ wxBoxSizer* itemSizer3 = new wxBoxSizer( wxHORIZONTAL );
+ wxCheckBox* checkBox3 = new wxCheckBox(panel, ID_LOAD_LAST_PROJECT, _("&Load last project on startup"), wxDefaultPosition, wxDefaultSize);
+ itemSizer3->Add(checkBox3, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ item0->Add(itemSizer3, 0, wxGROW|wxALL, 0);
+
+ //// AUTOSAVE
+
+ wxString autoSaveLabel = _("&Auto-save every");
+ wxString minsLabel = _("mins");
+
+ wxBoxSizer* itemSizer12 = new wxBoxSizer( wxHORIZONTAL );
+ wxCheckBox* checkBox12 = new wxCheckBox(panel, ID_AUTO_SAVE, autoSaveLabel, wxDefaultPosition, wxDefaultSize);
+
+#if wxUSE_SPINCTRL
+ wxSpinCtrl* spinCtrl12 = new wxSpinCtrl(panel, ID_AUTO_SAVE_MINS, wxEmptyString,
+ wxDefaultPosition, wxSize(40, wxDefaultCoord), wxSP_ARROW_KEYS, 1, 60, 1);
+#endif
+
+ itemSizer12->Add(checkBox12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+#if wxUSE_SPINCTRL
+ itemSizer12->Add(spinCtrl12, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+#endif
+ itemSizer12->Add(new wxStaticText(panel, wxID_STATIC, minsLabel), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ item0->Add(itemSizer12, 0, wxGROW|wxALL, 0);
+
+ //// TOOLTIPS
+
+ wxBoxSizer* itemSizer8 = new wxBoxSizer( wxHORIZONTAL );
+ wxCheckBox* checkBox6 = new wxCheckBox(panel, ID_SHOW_TOOLTIPS, _("Show &tooltips"), wxDefaultPosition, wxDefaultSize);
+ itemSizer8->Add(checkBox6, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ item0->Add(itemSizer8, 0, wxGROW|wxALL, 0);
+
+ topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
+
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+wxPanel* SettingsDialog::CreateAestheticSettingsPage(wxWindow* parent)
+{
+ wxPanel* panel = new wxPanel(parent, wxID_ANY);
+
+ wxBoxSizer *topSizer = new wxBoxSizer( wxVERTICAL );
+ wxBoxSizer *item0 = new wxBoxSizer( wxVERTICAL );
+
+ //// PROJECT OR GLOBAL
+ wxString globalOrProjectChoices[2];
+ globalOrProjectChoices[0] = _("&New projects");
+ globalOrProjectChoices[1] = _("&This project");
+
+ wxRadioBox* projectOrGlobal = new wxRadioBox(panel, ID_APPLY_SETTINGS_TO, _("&Apply settings to:"),
+ wxDefaultPosition, wxDefaultSize, 2, globalOrProjectChoices);
+ item0->Add(projectOrGlobal, 0, wxGROW|wxALL, 5);
+
+ projectOrGlobal->SetSelection(0);
+
+ //// BACKGROUND STYLE
+ wxArrayString backgroundStyleChoices;
+ backgroundStyleChoices.Add(wxT("Colour"));
+ backgroundStyleChoices.Add(wxT("Image"));
+ wxStaticBox* staticBox3 = new wxStaticBox(panel, wxID_ANY, _("Background style:"));
+
+ wxBoxSizer* styleSizer = new wxStaticBoxSizer( staticBox3, wxVERTICAL );
+ item0->Add(styleSizer, 0, wxGROW|wxALL, 5);
+
+ wxBoxSizer* itemSizer2 = new wxBoxSizer( wxHORIZONTAL );
+
+ wxChoice* choice2 = new wxChoice(panel, ID_BACKGROUND_STYLE, wxDefaultPosition, wxDefaultSize, backgroundStyleChoices);
+
+ itemSizer2->Add(new wxStaticText(panel, wxID_ANY, _("&Window:")), 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+ itemSizer2->Add(5, 5, 1, wxALL, 0);
+ itemSizer2->Add(choice2, 0, wxALL|wxALIGN_CENTER_VERTICAL, 5);
+
+ styleSizer->Add(itemSizer2, 0, wxGROW|wxALL, 5);
+
+#if wxUSE_SPINCTRL
+ //// FONT SIZE SELECTION
+
+ wxStaticBox* staticBox1 = new wxStaticBox(panel, wxID_ANY, _("Tile font size:"));
+ wxBoxSizer* itemSizer5 = new wxStaticBoxSizer( staticBox1, wxHORIZONTAL );
+
+ wxSpinCtrl* spinCtrl = new wxSpinCtrl(panel, ID_FONT_SIZE, wxEmptyString, wxDefaultPosition,
+ wxSize(80, wxDefaultCoord));
+ itemSizer5->Add(spinCtrl, 0, wxALL|wxALIGN_CENTER_HORIZONTAL|wxALIGN_CENTER_VERTICAL, 5);
+
+ item0->Add(itemSizer5, 0, wxGROW|wxLEFT|wxRIGHT, 5);
+#endif
+
+ topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
+ topSizer->AddSpacer(5);
+
+ panel->SetSizer(topSizer);
+ topSizer->Fit(panel);
+
+ return panel;
+}
+
+#endif // USE_SETTINGS_DIALOG