1 /////////////////////////////////////////////////////////////////////////////
2 // Program: wxWidgets Widgets Sample
4 // Purpose: Part of the widgets sample showing wxFileCtrl
5 // Author: Diaa M. Sami
6 // Created: 28 Jul 2007
8 // Copyright: (c) 2007 Diaa M. Sami
9 // License: wxWindows license
10 /////////////////////////////////////////////////////////////////////////////
12 // ============================================================================
14 // ============================================================================
16 // ----------------------------------------------------------------------------
18 // ----------------------------------------------------------------------------
20 // for compilers that support precompilation, includes "wx/wx.h".
21 #include "wx/wxprec.h"
29 // for all others, include the necessary headers
34 #include "wx/filectrl.h"
36 #include "wx/wupdlock.h"
37 #include "wx/filename.h"
42 #include "icons/dirctrl.xpm"
44 // ----------------------------------------------------------------------------
46 // ----------------------------------------------------------------------------
51 FileCtrlPage_Reset
= wxID_HIGHEST
,
52 FileCtrlPage_SetDirectory
,
54 FileCtrlPage_SetFilename
,
60 FileCtrlMode_Open
= 0,
64 // ----------------------------------------------------------------------------
65 // CheckBoxWidgetsPage
66 // ----------------------------------------------------------------------------
68 class FileCtrlWidgetsPage
: public WidgetsPage
71 FileCtrlWidgetsPage( WidgetsBookCtrl
*book
, wxImageList
*imaglist
);
72 virtual ~FileCtrlWidgetsPage() {}
74 virtual wxControl
*GetWidget() const { return /*m_fileCtrl*/NULL
; }
75 virtual void RecreateWidget() { CreateFileCtrl(); }
77 // lazy creation of the content
78 virtual void CreateContent();
82 void OnButtonSetDirectory( wxCommandEvent
& event
);
83 void OnButtonSetPath( wxCommandEvent
& event
);
84 void OnButtonSetFilename( wxCommandEvent
& event
);
85 void OnButtonReset( wxCommandEvent
& event
);
86 void OnCheckBox( wxCommandEvent
& event
);
87 void OnRadioBox( wxCommandEvent
& event
);
88 void OnFileCtrl( wxFileCtrlEvent
& event
);
90 // reset the control parameters
93 // (re)create the m_fileCtrl
94 void CreateFileCtrl();
99 // the control itself and the sizer it is in
100 wxFileCtrl
*m_fileCtrl
;
102 // the text entries for command parameters
105 wxTextCtrl
*m_filename
;
108 wxCheckBox
*m_chkMultiple
,
111 wxRadioBox
*m_radioFileCtrlMode
;
114 wxCheckBox
*m_fltr
[3];
117 DECLARE_EVENT_TABLE()
118 DECLARE_WIDGETS_PAGE( FileCtrlWidgetsPage
)
121 // ----------------------------------------------------------------------------
123 // ----------------------------------------------------------------------------
125 BEGIN_EVENT_TABLE( FileCtrlWidgetsPage
, WidgetsPage
)
126 EVT_BUTTON( FileCtrlPage_Reset
, FileCtrlWidgetsPage::OnButtonReset
)
127 EVT_BUTTON( FileCtrlPage_SetDirectory
, FileCtrlWidgetsPage::OnButtonSetDirectory
)
128 EVT_BUTTON( FileCtrlPage_SetPath
, FileCtrlWidgetsPage::OnButtonSetPath
)
129 EVT_BUTTON( FileCtrlPage_SetFilename
, FileCtrlWidgetsPage::OnButtonSetFilename
)
130 EVT_CHECKBOX( wxID_ANY
, FileCtrlWidgetsPage::OnCheckBox
)
131 EVT_RADIOBOX( wxID_ANY
, FileCtrlWidgetsPage::OnRadioBox
)
133 EVT_FILECTRL_FILTERCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
134 EVT_FILECTRL_FOLDERCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
135 EVT_FILECTRL_SELECTIONCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
136 EVT_FILECTRL_FILEACTIVATED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
139 // ============================================================================
141 // ============================================================================
143 #if defined(__WXGTK__)
144 #define FAMILY_CTRLS NATIVE_CTRLS
146 #define FAMILY_CTRLS GENERIC_CTRLS
149 IMPLEMENT_WIDGETS_PAGE( FileCtrlWidgetsPage
, wxT( "FileCtrl" ),
152 FileCtrlWidgetsPage::FileCtrlWidgetsPage( WidgetsBookCtrl
*book
,
153 wxImageList
*imaglist
)
154 : WidgetsPage( book
, imaglist
, dirctrl_xpm
)
158 void FileCtrlWidgetsPage::CreateContent()
160 wxSizer
*sizerTop
= new wxBoxSizer( wxHORIZONTAL
);
163 wxSizer
*sizerLeft
= new wxBoxSizer( wxVERTICAL
);
165 static const wxString mode
[] = { wxT( "open" ), wxT( "save" ) };
166 m_radioFileCtrlMode
= new wxRadioBox( this, wxID_ANY
, wxT( "wxFileCtrl mode" ),
167 wxDefaultPosition
, wxDefaultSize
,
168 WXSIZEOF( mode
), mode
);
170 sizerLeft
->Add( m_radioFileCtrlMode
,
171 0, wxALL
| wxEXPAND
, 5 );
173 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetDirectory
, wxT( "Set &directory" ), wxID_ANY
, &m_dir
),
174 0, wxALL
| wxEXPAND
, 5 );
175 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetPath
, wxT( "Set &path" ), wxID_ANY
, &m_path
),
176 0, wxALL
| wxEXPAND
, 5 );
177 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetFilename
, wxT( "Set &filename" ), wxID_ANY
, &m_filename
),
178 0, wxALL
| wxEXPAND
, 5 );
180 wxSizer
*sizerUseFlags
=
181 new wxStaticBoxSizer( wxVERTICAL
, this, wxT( "&Flags" ) );
183 m_chkMultiple
= CreateCheckBoxAndAddToSizer( sizerUseFlags
, wxT( "wxFC_MULTIPLE" ) );
184 m_chkNoShowHidden
= CreateCheckBoxAndAddToSizer( sizerUseFlags
, wxT( "wxFC_NOSHOWHIDDEN" ) );
185 sizerLeft
->Add( sizerUseFlags
, wxSizerFlags().Expand().Border() );
187 wxSizer
*sizerFilters
=
188 new wxStaticBoxSizer( wxVERTICAL
, this, wxT( "&Filters" ) );
189 m_fltr
[0] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxString::Format( wxT( "all files (%s)|%s" ),
190 wxFileSelectorDefaultWildcardStr
, wxFileSelectorDefaultWildcardStr
) );
191 m_fltr
[1] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxT( "C++ files (*.cpp; *.h)|*.cpp;*.h" ) );
192 m_fltr
[2] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxT( "PNG images (*.png)|*.png" ) );
193 sizerLeft
->Add( sizerFilters
, wxSizerFlags().Expand().Border() );
195 wxButton
*btn
= new wxButton( this, FileCtrlPage_Reset
, wxT( "&Reset" ) );
196 sizerLeft
->Add( btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15 );
199 m_fileCtrl
= new wxFileCtrl(
210 // the 3 panes panes compose the window
211 sizerTop
->Add( sizerLeft
, 0, ( wxALL
& ~wxLEFT
), 10 );
212 sizerTop
->Add( m_fileCtrl
, 1, wxGROW
| ( wxALL
& ~wxRIGHT
), 10 );
214 // final initializations
217 SetSizer( sizerTop
);
220 void FileCtrlWidgetsPage::Reset()
222 m_dir
->SetValue( m_fileCtrl
->GetDirectory() );
223 m_radioFileCtrlMode
->SetSelection( ( wxFC_DEFAULT_STYLE
& wxFC_OPEN
) ?
224 FileCtrlMode_Open
: FileCtrlMode_Save
);
227 void FileCtrlWidgetsPage::CreateFileCtrl()
229 wxWindowUpdateLocker
noUpdates( this );
232 ( m_radioFileCtrlMode
->GetSelection() == FileCtrlMode_Open
?
233 wxFC_OPEN
: wxFC_SAVE
) |
234 ( m_chkMultiple
->IsChecked() ? wxFC_MULTIPLE
: 0 ) |
235 ( m_chkNoShowHidden
->IsChecked() ? wxFC_NOSHOWHIDDEN
: 0 );
237 wxFileCtrl
*fileCtrl
= new wxFileCtrl(
249 for ( unsigned int i
= 0; i
< WXSIZEOF( m_fltr
); ++i
)
251 if ( m_fltr
[i
]->IsChecked() )
253 if ( !wildcard
.IsEmpty() )
254 wildcard
+= wxT( "|" );
255 wildcard
+= m_fltr
[i
]->GetLabel();
258 fileCtrl
->SetWildcard( wildcard
);
260 // update sizer's child window
261 GetSizer()->Replace( m_fileCtrl
, fileCtrl
, true );
263 // update our pointer
265 m_fileCtrl
= fileCtrl
;
267 // relayout the sizer
268 GetSizer()->Layout();
271 // ----------------------------------------------------------------------------
273 // ----------------------------------------------------------------------------
275 void FileCtrlWidgetsPage::OnButtonSetDirectory( wxCommandEvent
& WXUNUSED( event
) )
277 m_fileCtrl
->SetDirectory( m_dir
->GetValue() );
280 void FileCtrlWidgetsPage::OnButtonSetPath( wxCommandEvent
& WXUNUSED( event
) )
282 m_fileCtrl
->SetPath( m_path
->GetValue() );
285 void FileCtrlWidgetsPage::OnButtonSetFilename( wxCommandEvent
& WXUNUSED( event
) )
287 m_fileCtrl
->SetFilename( m_filename
->GetValue() );
290 void FileCtrlWidgetsPage::OnButtonReset( wxCommandEvent
& WXUNUSED( event
) )
297 void FileCtrlWidgetsPage::OnCheckBox( wxCommandEvent
& WXUNUSED( event
) )
302 void FileCtrlWidgetsPage::OnRadioBox( wxCommandEvent
& WXUNUSED( event
) )
307 void FileCtrlWidgetsPage::OnFileCtrl( wxFileCtrlEvent
& event
)
309 if ( event
.GetEventType() == wxEVT_FILECTRL_FOLDERCHANGED
)
311 wxLogMessage("Folder changed event, new folder: %s", event
.GetDirectory());
313 else if ( event
.GetEventType() == wxEVT_FILECTRL_FILEACTIVATED
)
315 wxLogMessage("File activated event: %s", wxJoin(event
.GetFiles(), ' '));
317 else if ( event
.GetEventType() == wxEVT_FILECTRL_SELECTIONCHANGED
)
319 wxLogMessage("Selection changed event: %s", wxJoin(event
.GetFiles(), ' '));
321 else if ( event
.GetEventType() == wxEVT_FILECTRL_FILTERCHANGED
)
323 wxLogMessage("Filter changed event: filter %d selected",
324 event
.GetFilterIndex() + 1);
328 #endif // wxUSE_FILECTRL