From c4f6d9982e2ff8506b7938862c46de5d525f00ff Mon Sep 17 00:00:00 2001 From: =?utf8?q?W=C5=82odzimierz=20Skiba?= Date: Thu, 5 Oct 2006 10:20:32 +0000 Subject: [PATCH] wxGenericDirCtrl page for widgets sample. git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@41634 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775 --- samples/widgets/Makefile.in | 4 + samples/widgets/dirctrl.cpp | 337 ++++++++++++++++++++++++++++++ samples/widgets/icons/dirctrl.xpm | 54 +++++ samples/widgets/makefile.bcc | 4 + samples/widgets/makefile.gcc | 4 + samples/widgets/makefile.vc | 4 + samples/widgets/makefile.wat | 4 + samples/widgets/widgets.bkl | 1 + samples/widgets/widgets.dsp | 4 + 9 files changed, 416 insertions(+) create mode 100644 samples/widgets/dirctrl.cpp create mode 100644 samples/widgets/icons/dirctrl.xpm diff --git a/samples/widgets/Makefile.in b/samples/widgets/Makefile.in index e7c8b85293..bab8792a0c 100644 --- a/samples/widgets/Makefile.in +++ b/samples/widgets/Makefile.in @@ -54,6 +54,7 @@ WIDGETS_OBJECTS = \ widgets_clrpicker.o \ widgets_combobox.o \ widgets_datepick.o \ + widgets_dirctrl.o \ widgets_dirpicker.o \ widgets_filepicker.o \ widgets_fontpicker.o \ @@ -229,6 +230,9 @@ widgets_combobox.o: $(srcdir)/combobox.cpp widgets_datepick.o: $(srcdir)/datepick.cpp $(CXXC) -c -o $@ $(WIDGETS_CXXFLAGS) $(srcdir)/datepick.cpp +widgets_dirctrl.o: $(srcdir)/dirctrl.cpp + $(CXXC) -c -o $@ $(WIDGETS_CXXFLAGS) $(srcdir)/dirctrl.cpp + widgets_dirpicker.o: $(srcdir)/dirpicker.cpp $(CXXC) -c -o $@ $(WIDGETS_CXXFLAGS) $(srcdir)/dirpicker.cpp diff --git a/samples/widgets/dirctrl.cpp b/samples/widgets/dirctrl.cpp new file mode 100644 index 0000000000..6995b79e51 --- /dev/null +++ b/samples/widgets/dirctrl.cpp @@ -0,0 +1,337 @@ +///////////////////////////////////////////////////////////////////////////// +// Program: wxWidgets Widgets Sample +// Name: dirctrl.cpp +// Purpose: Part of the widgets sample showing wxGenericDirCtrl +// Author: Wlodzimierz 'ABX' Skiba +// Created: 4 Oct 2006 +// Id: $Id$ +// Copyright: (c) 2006 wxWindows team +// License: wxWindows license +///////////////////////////////////////////////////////////////////////////// + +// ============================================================================ +// declarations +// ============================================================================ + +// ---------------------------------------------------------------------------- +// headers +// ---------------------------------------------------------------------------- + +// for compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ + #pragma hdrstop +#endif + +#if wxUSE_DIRDLG + +// for all others, include the necessary headers +#ifndef WX_PRECOMP + #include "wx/sizer.h" + #include "wx/statbox.h" + #include "wx/radiobox.h" + #include "wx/checkbox.h" + #include "wx/button.h" + #include "wx/app.h" +#endif + +#include "wx/generic/dirctrlg.h" + +#include "wx/wupdlock.h" +#include "wx/stdpaths.h" +#include "wx/msgdlg.h" + +#include "widgets.h" + +#include "icons/dirctrl.xpm" + +// ---------------------------------------------------------------------------- +// constants +// ---------------------------------------------------------------------------- + +// control ids +enum +{ + DirCtrlPage_Reset = wxID_HIGHEST, + DirCtrlPage_SetPath, + DirCtrlPage_Ctrl +}; + +static const wxString stdPaths[] = +{ + _T("&none"), + _T("&config"), + _T("&data"), + _T("&documents"), + _T("&local data"), + _T("&plugins"), + _T("&resources"), + _T("&user config"), + _T("&user data"), + _T("&user local data") +}; + +enum +{ + stdPathUnknown = 0, + stdPathConfig, + stdPathData, + stdPathDocuments, + stdPathLocalData, + stdPathPlugins, + stdPathResources, + stdPathUserConfig, + stdPathUserData, + stdPathUserLocalData, + stdPathMax +}; + +// ---------------------------------------------------------------------------- +// CheckBoxWidgetsPage +// ---------------------------------------------------------------------------- + +class DirCtrlWidgetsPage : public WidgetsPage +{ +public: + DirCtrlWidgetsPage(WidgetsBookCtrl *book, wxImageList *imaglist); + virtual ~DirCtrlWidgetsPage() {} + + virtual wxControl *GetWidget() const { return m_dirCtrl; } + virtual void RecreateWidget() { CreateDirCtrl(); } + + // lazy creation of the content + virtual void CreateContent(); + +protected: + // event handlers + void OnButtonSetPath(wxCommandEvent& event); + void OnButtonReset(wxCommandEvent& event); + void OnStdPath(wxCommandEvent& event); + void OnCheckBox(wxCommandEvent& event); + void OnRadioBox(wxCommandEvent& event); + + // reset the control parameters + void Reset(); + + // (re)create the m_dirCtrl + void CreateDirCtrl(); + + // the controls + // ------------ + + // the control itself and the sizer it is in + wxGenericDirCtrl *m_dirCtrl; + + // the text entries for command parameters + wxTextCtrl *m_path; + + wxRadioBox *m_radioStdPath; + + // flags + wxCheckBox *m_chkDirOnly, + *m_chk3D, + *m_chkFirst, + *m_chkFilters, + *m_chkLabels; + +private: + DECLARE_EVENT_TABLE() + DECLARE_WIDGETS_PAGE(DirCtrlWidgetsPage) +}; + +// ---------------------------------------------------------------------------- +// event tables +// ---------------------------------------------------------------------------- + +BEGIN_EVENT_TABLE(DirCtrlWidgetsPage, WidgetsPage) + EVT_BUTTON(DirCtrlPage_Reset, DirCtrlWidgetsPage::OnButtonReset) + EVT_BUTTON(DirCtrlPage_SetPath, DirCtrlWidgetsPage::OnButtonSetPath) + EVT_CHECKBOX(wxID_ANY, DirCtrlWidgetsPage::OnCheckBox) + EVT_RADIOBOX(wxID_ANY, DirCtrlWidgetsPage::OnRadioBox) +END_EVENT_TABLE() + +// ============================================================================ +// implementation +// ============================================================================ + +IMPLEMENT_WIDGETS_PAGE(DirCtrlWidgetsPage, wxT("DirCtrl"), + GENERIC_CTRLS + ); + +DirCtrlWidgetsPage::DirCtrlWidgetsPage(WidgetsBookCtrl *book, + wxImageList *imaglist) + :WidgetsPage(book, imaglist, dirctrl_xpm) +{ +} + +void DirCtrlWidgetsPage::CreateContent() +{ + wxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL); + + // left pane + wxStaticBox *box = new wxStaticBox(this, wxID_ANY, wxT("Dir control details")); + + wxSizer *sizerLeft = new wxStaticBoxSizer(box, wxVERTICAL); + + sizerLeft->Add( CreateSizerWithTextAndButton( DirCtrlPage_SetPath , wxT("Set &path"), wxID_ANY, &m_path ), + 0, wxALL | wxALIGN_RIGHT , 5 ); + + wxSizer *sizerUseFlags = + new wxStaticBoxSizer(wxVERTICAL, this, _T("&Flags")); + m_chkDirOnly = CreateCheckBoxAndAddToSizer(sizerUseFlags, _T("wxDIRCTRL_DIR_ONLY")); + m_chk3D = CreateCheckBoxAndAddToSizer(sizerUseFlags, _T("wxDIRCTRL_3D_INTERNAL")); + m_chkFirst = CreateCheckBoxAndAddToSizer(sizerUseFlags, _T("wxDIRCTRL_SELECT_FIRST")); + m_chkFilters = CreateCheckBoxAndAddToSizer(sizerUseFlags, _T("wxDIRCTRL_SHOW_FILTERS")); + m_chkLabels = CreateCheckBoxAndAddToSizer(sizerUseFlags, _T("wxDIRCTRL_EDIT_LABELS")); + sizerLeft->Add(sizerUseFlags, wxSizerFlags().Expand().Border()); + + wxButton *btn = new wxButton(this, DirCtrlPage_Reset, _T("&Reset")); + sizerLeft->Add(btn, 0, wxALIGN_CENTRE_HORIZONTAL | wxALL, 15); + + // keep consistency between enum and labels of radiobox + wxCOMPILE_TIME_ASSERT( stdPathMax == WXSIZEOF(stdPaths), EnumForRadioBoxMismatch); + + // middle pane + m_radioStdPath = new wxRadioBox(this, wxID_ANY, _T("Standard path"), + wxDefaultPosition, wxDefaultSize, + WXSIZEOF(stdPaths), stdPaths, 1); + + // right pane + m_dirCtrl = new wxGenericDirCtrl( + this, + DirCtrlPage_Ctrl, + wxDirDialogDefaultFolderStr, + wxDefaultPosition, + wxDefaultSize, + 0 + ); + + // the 3 panes panes compose the window + sizerTop->Add(sizerLeft, 0, (wxALL & ~wxLEFT), 10); + sizerTop->Add(m_radioStdPath, 0, wxGROW | wxALL , 10); + sizerTop->Add(m_dirCtrl, 1, wxGROW | (wxALL & ~wxRIGHT), 10); + + // final initializations + Reset(); + + SetSizer(sizerTop); + + sizerTop->Fit(this); +} + +void DirCtrlWidgetsPage::Reset() +{ + m_path->SetValue(m_dirCtrl->GetPath()); +} + +void DirCtrlWidgetsPage::CreateDirCtrl() +{ + wxWindowUpdateLocker noUpdates(this); + + wxGenericDirCtrl *dirCtrl = new wxGenericDirCtrl( + this, + DirCtrlPage_Ctrl, + wxDirDialogDefaultFolderStr, + wxDefaultPosition, + wxDefaultSize, + ( m_chkDirOnly->IsChecked() ? wxDIRCTRL_DIR_ONLY : 0 ) | + ( m_chk3D->IsChecked() ? wxDIRCTRL_3D_INTERNAL : 0 ) | + ( m_chkFirst->IsChecked() ? wxDIRCTRL_SELECT_FIRST : 0 ) | + ( m_chkFilters->IsChecked() ? wxDIRCTRL_SHOW_FILTERS : 0 ) | + ( m_chkLabels->IsChecked() ? wxDIRCTRL_EDIT_LABELS : 0 ) + ); + + // update sizer's child window + GetSizer()->Replace(m_dirCtrl, dirCtrl, true); + + // update our pointer + delete m_dirCtrl; + m_dirCtrl = dirCtrl; + + // relayout the sizer + GetSizer()->Layout(); +} + +// ---------------------------------------------------------------------------- +// event handlers +// ---------------------------------------------------------------------------- + +void DirCtrlWidgetsPage::OnButtonSetPath(wxCommandEvent& WXUNUSED(event)) +{ + m_dirCtrl->SetPath(m_path->GetValue()); +} + +void DirCtrlWidgetsPage::OnButtonReset(wxCommandEvent& WXUNUSED(event)) +{ + Reset(); + + CreateDirCtrl(); +} + +void DirCtrlWidgetsPage::OnCheckBox(wxCommandEvent& WXUNUSED(event)) +{ + CreateDirCtrl(); +} + +void DirCtrlWidgetsPage::OnRadioBox(wxCommandEvent& WXUNUSED(event)) +{ + wxString path; + + wxTheApp->SetAppName(_T("widgets")); + wxStandardPathsBase& stdp = wxStandardPaths::Get(); + + switch ( m_radioStdPath->GetSelection() ) + { + default: + case stdPathUnknown: + case stdPathMax: + // leave path + break; + + case stdPathConfig: + path = stdp.GetConfigDir(); + break; + + case stdPathData: + path = stdp.GetDataDir(); + break; + + case stdPathDocuments: + path = stdp.GetDocumentsDir(); + break; + + case stdPathLocalData: + path = stdp.GetLocalDataDir(); + break; + + case stdPathPlugins: + path = stdp.GetPluginsDir(); + break; + + case stdPathResources: + path = stdp.GetResourcesDir(); + break; + + case stdPathUserConfig: + path = stdp.GetUserConfigDir(); + break; + + case stdPathUserData: + path = stdp.GetUserDataDir(); + break; + + case stdPathUserLocalData: + path = stdp.GetUserLocalDataDir(); + break; + } + + m_dirCtrl->SetPath(path); + if(!m_dirCtrl->GetPath().IsSameAs(path)) + { + wxLogMessage(_T("Selected standard path and path from control do not match!")); + m_radioStdPath->SetSelection(stdPathUnknown); + } +} + +#endif // wxUSE_DIRDLG diff --git a/samples/widgets/icons/dirctrl.xpm b/samples/widgets/icons/dirctrl.xpm new file mode 100644 index 0000000000..e362dfe0d4 --- /dev/null +++ b/samples/widgets/icons/dirctrl.xpm @@ -0,0 +1,54 @@ +/* XPM */ +static char *dirctrl_xpm[] = { +/* columns rows colors chars-per-pixel */ +"32 32 16 1", +" c Gray0", +". c #808000", +"X c #000080", +"o c #808080", +"O c #000000", +"+ c #808000", +"@ c #000080", +"# c none", +"$ c #808080", +"% c Red", +"& c Green", +"* c Yellow", +"= c Blue", +"- c Magenta", +"; c Cyan", +": c Gray100", +/* pixels */ +"################################", +"################################", +"# #", +"# :::::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::: ::: :::::::::::::: #", +"# :$::::: :: :: :::::::::::::: #", +"# :$$$$:: :::::::::::::::::::: #", +"# :$::::: :: :: :::::::::::::: #", +"# :$:::::: ::: :::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$::::::: : :: ::: :: :: #", +"# :$:::::: :: :: :: ::::: :: : #", +"# :$$$$:: ::: :: ::: ::: :: #", +"# :$:::: :::: :: ::::: :: :: : #", +"# :$::: :::::: ::: ::: :: : #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$::::: :: :: :: : ::: ::: #", +"# :$::::: :: :: :: : : :: ::: #", +"# :$$$$:::::::: :: : : : ::: #", +"# :$::::: :: :: :: : : :: ::: #", +"# :$::::: :: :: :: : ::: ::: #", +"# :$:::::::::::::::::::::::::: #", +"# :$:::::::::::::::::::::::::: #", +"# :::::::::::::::::::::::::::: #", +"# #", +"################################", +"################################" +}; diff --git a/samples/widgets/makefile.bcc b/samples/widgets/makefile.bcc index e067977bc0..5398e735ef 100644 --- a/samples/widgets/makefile.bcc +++ b/samples/widgets/makefile.bcc @@ -40,6 +40,7 @@ WIDGETS_OBJECTS = \ $(OBJS)\widgets_clrpicker.obj \ $(OBJS)\widgets_combobox.obj \ $(OBJS)\widgets_datepick.obj \ + $(OBJS)\widgets_dirctrl.obj \ $(OBJS)\widgets_dirpicker.obj \ $(OBJS)\widgets_filepicker.obj \ $(OBJS)\widgets_fontpicker.obj \ @@ -267,6 +268,9 @@ $(OBJS)\widgets_combobox.obj: .\combobox.cpp $(OBJS)\widgets_datepick.obj: .\datepick.cpp $(CXX) -q -c -P -o$@ $(WIDGETS_CXXFLAGS) $** +$(OBJS)\widgets_dirctrl.obj: .\dirctrl.cpp + $(CXX) -q -c -P -o$@ $(WIDGETS_CXXFLAGS) $** + $(OBJS)\widgets_dirpicker.obj: .\dirpicker.cpp $(CXX) -q -c -P -o$@ $(WIDGETS_CXXFLAGS) $** diff --git a/samples/widgets/makefile.gcc b/samples/widgets/makefile.gcc index 85f0476948..00a0b01b6c 100644 --- a/samples/widgets/makefile.gcc +++ b/samples/widgets/makefile.gcc @@ -33,6 +33,7 @@ WIDGETS_OBJECTS = \ $(OBJS)\widgets_clrpicker.o \ $(OBJS)\widgets_combobox.o \ $(OBJS)\widgets_datepick.o \ + $(OBJS)\widgets_dirctrl.o \ $(OBJS)\widgets_dirpicker.o \ $(OBJS)\widgets_filepicker.o \ $(OBJS)\widgets_fontpicker.o \ @@ -260,6 +261,9 @@ $(OBJS)\widgets_combobox.o: ./combobox.cpp $(OBJS)\widgets_datepick.o: ./datepick.cpp $(CXX) -c -o $@ $(WIDGETS_CXXFLAGS) $(CPPDEPS) $< +$(OBJS)\widgets_dirctrl.o: ./dirctrl.cpp + $(CXX) -c -o $@ $(WIDGETS_CXXFLAGS) $(CPPDEPS) $< + $(OBJS)\widgets_dirpicker.o: ./dirpicker.cpp $(CXX) -c -o $@ $(WIDGETS_CXXFLAGS) $(CPPDEPS) $< diff --git a/samples/widgets/makefile.vc b/samples/widgets/makefile.vc index fd41093135..78e9bb2ca4 100644 --- a/samples/widgets/makefile.vc +++ b/samples/widgets/makefile.vc @@ -33,6 +33,7 @@ WIDGETS_OBJECTS = \ $(OBJS)\widgets_clrpicker.obj \ $(OBJS)\widgets_combobox.obj \ $(OBJS)\widgets_datepick.obj \ + $(OBJS)\widgets_dirctrl.obj \ $(OBJS)\widgets_dirpicker.obj \ $(OBJS)\widgets_filepicker.obj \ $(OBJS)\widgets_fontpicker.obj \ @@ -342,6 +343,9 @@ $(OBJS)\widgets_combobox.obj: .\combobox.cpp $(OBJS)\widgets_datepick.obj: .\datepick.cpp $(CXX) /c /nologo /TP /Fo$@ $(WIDGETS_CXXFLAGS) $** +$(OBJS)\widgets_dirctrl.obj: .\dirctrl.cpp + $(CXX) /c /nologo /TP /Fo$@ $(WIDGETS_CXXFLAGS) $** + $(OBJS)\widgets_dirpicker.obj: .\dirpicker.cpp $(CXX) /c /nologo /TP /Fo$@ $(WIDGETS_CXXFLAGS) $** diff --git a/samples/widgets/makefile.wat b/samples/widgets/makefile.wat index 6f52b20ba2..ffcc50583b 100644 --- a/samples/widgets/makefile.wat +++ b/samples/widgets/makefile.wat @@ -235,6 +235,7 @@ WIDGETS_OBJECTS = & $(OBJS)\widgets_clrpicker.obj & $(OBJS)\widgets_combobox.obj & $(OBJS)\widgets_datepick.obj & + $(OBJS)\widgets_dirctrl.obj & $(OBJS)\widgets_dirpicker.obj & $(OBJS)\widgets_filepicker.obj & $(OBJS)\widgets_fontpicker.obj & @@ -298,6 +299,9 @@ $(OBJS)\widgets_combobox.obj : .AUTODEPEND .\combobox.cpp $(OBJS)\widgets_datepick.obj : .AUTODEPEND .\datepick.cpp $(CXX) -bt=nt -zq -fo=$^@ $(WIDGETS_CXXFLAGS) $< +$(OBJS)\widgets_dirctrl.obj : .AUTODEPEND .\dirctrl.cpp + $(CXX) -bt=nt -zq -fo=$^@ $(WIDGETS_CXXFLAGS) $< + $(OBJS)\widgets_dirpicker.obj : .AUTODEPEND .\dirpicker.cpp $(CXX) -bt=nt -zq -fo=$^@ $(WIDGETS_CXXFLAGS) $< diff --git a/samples/widgets/widgets.bkl b/samples/widgets/widgets.bkl index 11fa945294..1633e9d5b2 100644 --- a/samples/widgets/widgets.bkl +++ b/samples/widgets/widgets.bkl @@ -12,6 +12,7 @@ clrpicker.cpp combobox.cpp datepick.cpp + dirctrl.cpp dirpicker.cpp filepicker.cpp fontpicker.cpp diff --git a/samples/widgets/widgets.dsp b/samples/widgets/widgets.dsp index 9d39f95c8a..e8d22fb43c 100644 --- a/samples/widgets/widgets.dsp +++ b/samples/widgets/widgets.dsp @@ -492,6 +492,10 @@ SOURCE=.\datepick.cpp # End Source File # Begin Source File +SOURCE=.\dirctrl.cpp +# End Source File +# Begin Source File + SOURCE=.\dirpicker.cpp # End Source File # Begin Source File -- 2.45.2