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
7 // Copyright: (c) 2007 Diaa M. Sami
8 // Licence: wxWindows licence
9 /////////////////////////////////////////////////////////////////////////////
11 // ============================================================================
13 // ============================================================================
15 // ----------------------------------------------------------------------------
17 // ----------------------------------------------------------------------------
19 // for compilers that support precompilation, includes "wx/wx.h".
20 #include "wx/wxprec.h"
28 // for all others, include the necessary headers
33 #include "wx/filectrl.h"
35 #include "wx/wupdlock.h"
36 #include "wx/filename.h"
41 #include "icons/dirctrl.xpm"
43 // ----------------------------------------------------------------------------
45 // ----------------------------------------------------------------------------
50 FileCtrlPage_Reset
= wxID_HIGHEST
,
51 FileCtrlPage_SetDirectory
,
53 FileCtrlPage_SetFilename
,
59 FileCtrlMode_Open
= 0,
63 // ----------------------------------------------------------------------------
64 // CheckBoxWidgetsPage
65 // ----------------------------------------------------------------------------
67 class FileCtrlWidgetsPage
: public WidgetsPage
70 FileCtrlWidgetsPage( WidgetsBookCtrl
*book
, wxImageList
*imaglist
);
71 virtual ~FileCtrlWidgetsPage() {}
73 virtual wxControl
*GetWidget() const { return m_fileCtrl
; }
74 virtual void RecreateWidget() { CreateFileCtrl(); }
76 // lazy creation of the content
77 virtual void CreateContent();
81 void OnButtonSetDirectory( wxCommandEvent
& event
);
82 void OnButtonSetPath( wxCommandEvent
& event
);
83 void OnButtonSetFilename( wxCommandEvent
& event
);
84 void OnButtonReset( wxCommandEvent
& event
);
85 void OnCheckBox( wxCommandEvent
& event
);
86 void OnRadioBox( wxCommandEvent
& event
);
87 void OnFileCtrl( wxFileCtrlEvent
& event
);
89 // reset the control parameters
92 // (re)create the m_fileCtrl
93 void CreateFileCtrl();
98 // the control itself and the sizer it is in
99 wxFileCtrl
*m_fileCtrl
;
101 // the text entries for command parameters
104 wxTextCtrl
*m_filename
;
107 wxCheckBox
*m_chkMultiple
,
110 wxRadioBox
*m_radioFileCtrlMode
;
113 wxCheckBox
*m_fltr
[3];
116 DECLARE_EVENT_TABLE()
117 DECLARE_WIDGETS_PAGE( FileCtrlWidgetsPage
)
120 // ----------------------------------------------------------------------------
122 // ----------------------------------------------------------------------------
124 BEGIN_EVENT_TABLE( FileCtrlWidgetsPage
, WidgetsPage
)
125 EVT_BUTTON( FileCtrlPage_Reset
, FileCtrlWidgetsPage::OnButtonReset
)
126 EVT_BUTTON( FileCtrlPage_SetDirectory
, FileCtrlWidgetsPage::OnButtonSetDirectory
)
127 EVT_BUTTON( FileCtrlPage_SetPath
, FileCtrlWidgetsPage::OnButtonSetPath
)
128 EVT_BUTTON( FileCtrlPage_SetFilename
, FileCtrlWidgetsPage::OnButtonSetFilename
)
129 EVT_CHECKBOX( wxID_ANY
, FileCtrlWidgetsPage::OnCheckBox
)
130 EVT_RADIOBOX( wxID_ANY
, FileCtrlWidgetsPage::OnRadioBox
)
132 EVT_FILECTRL_FILTERCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
133 EVT_FILECTRL_FOLDERCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
134 EVT_FILECTRL_SELECTIONCHANGED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
135 EVT_FILECTRL_FILEACTIVATED( wxID_ANY
, FileCtrlWidgetsPage::OnFileCtrl
)
138 // ============================================================================
140 // ============================================================================
142 #if defined(__WXGTK__)
143 #define FAMILY_CTRLS NATIVE_CTRLS
145 #define FAMILY_CTRLS GENERIC_CTRLS
148 IMPLEMENT_WIDGETS_PAGE( FileCtrlWidgetsPage
, wxT( "FileCtrl" ),
151 FileCtrlWidgetsPage::FileCtrlWidgetsPage( WidgetsBookCtrl
*book
,
152 wxImageList
*imaglist
)
153 : WidgetsPage( book
, imaglist
, dirctrl_xpm
)
157 void FileCtrlWidgetsPage::CreateContent()
159 wxSizer
*sizerTop
= new wxBoxSizer( wxHORIZONTAL
);
162 wxSizer
*sizerLeft
= new wxBoxSizer( wxVERTICAL
);
164 static const wxString mode
[] = { wxT( "open" ), wxT( "save" ) };
165 m_radioFileCtrlMode
= new wxRadioBox( this, wxID_ANY
, wxT( "wxFileCtrl mode" ),
166 wxDefaultPosition
, wxDefaultSize
,
167 WXSIZEOF( mode
), mode
);
169 sizerLeft
->Add( m_radioFileCtrlMode
,
170 0, wxALL
| wxEXPAND
, 5 );
172 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetDirectory
, wxT( "Set &directory" ), wxID_ANY
, &m_dir
),
173 0, wxALL
| wxEXPAND
, 5 );
174 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetPath
, wxT( "Set &path" ), wxID_ANY
, &m_path
),
175 0, wxALL
| wxEXPAND
, 5 );
176 sizerLeft
->Add( CreateSizerWithTextAndButton( FileCtrlPage_SetFilename
, wxT( "Set &filename" ), wxID_ANY
, &m_filename
),
177 0, wxALL
| wxEXPAND
, 5 );
179 wxSizer
*sizerUseFlags
=
180 new wxStaticBoxSizer( wxVERTICAL
, this, wxT( "&Flags" ) );
182 m_chkMultiple
= CreateCheckBoxAndAddToSizer( sizerUseFlags
, wxT( "wxFC_MULTIPLE" ) );
183 m_chkNoShowHidden
= CreateCheckBoxAndAddToSizer( sizerUseFlags
, wxT( "wxFC_NOSHOWHIDDEN" ) );
184 sizerLeft
->Add( sizerUseFlags
, wxSizerFlags().Expand().Border() );
186 wxSizer
*sizerFilters
=
187 new wxStaticBoxSizer( wxVERTICAL
, this, wxT( "&Filters" ) );
188 m_fltr
[0] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxString::Format( wxT( "all files (%s)|%s" ),
189 wxFileSelectorDefaultWildcardStr
, wxFileSelectorDefaultWildcardStr
) );
190 m_fltr
[1] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxT( "C++ files (*.cpp; *.h)|*.cpp;*.h" ) );
191 m_fltr
[2] = CreateCheckBoxAndAddToSizer( sizerFilters
, wxT( "PNG images (*.png)|*.png" ) );
192 sizerLeft
->Add( sizerFilters
, wxSizerFlags().Expand().Border() );
194 wxButton
*btn
= new wxButton( this, FileCtrlPage_Reset
, wxT( "&Reset" ) );
195 sizerLeft
->Add( btn
, 0, wxALIGN_CENTRE_HORIZONTAL
| wxALL
, 15 );
198 m_fileCtrl
= new wxFileCtrl(
209 // the 3 panes panes compose the window
210 sizerTop
->Add( sizerLeft
, 0, ( wxALL
& ~wxLEFT
), 10 );
211 sizerTop
->Add( m_fileCtrl
, 1, wxGROW
| ( wxALL
& ~wxRIGHT
), 10 );
213 // final initializations
216 SetSizer( sizerTop
);
219 void FileCtrlWidgetsPage::Reset()
221 m_dir
->SetValue( m_fileCtrl
->GetDirectory() );
222 m_radioFileCtrlMode
->SetSelection( ( wxFC_DEFAULT_STYLE
& wxFC_OPEN
) ?
223 FileCtrlMode_Open
: FileCtrlMode_Save
);
226 void FileCtrlWidgetsPage::CreateFileCtrl()
228 wxWindowUpdateLocker
noUpdates( this );
231 ( m_radioFileCtrlMode
->GetSelection() == FileCtrlMode_Open
?
232 wxFC_OPEN
: wxFC_SAVE
) |
233 ( m_chkMultiple
->IsChecked() ? wxFC_MULTIPLE
: 0 ) |
234 ( m_chkNoShowHidden
->IsChecked() ? wxFC_NOSHOWHIDDEN
: 0 );
236 wxFileCtrl
*fileCtrl
= new wxFileCtrl(
248 for ( unsigned int i
= 0; i
< WXSIZEOF( m_fltr
); ++i
)
250 if ( m_fltr
[i
]->IsChecked() )
252 if ( !wildcard
.IsEmpty() )
253 wildcard
+= wxT( "|" );
254 wildcard
+= m_fltr
[i
]->GetLabel();
257 fileCtrl
->SetWildcard( wildcard
);
259 // update sizer's child window
260 GetSizer()->Replace( m_fileCtrl
, fileCtrl
, true );
262 // update our pointer
264 m_fileCtrl
= fileCtrl
;
266 // relayout the sizer
267 GetSizer()->Layout();
270 // ----------------------------------------------------------------------------
272 // ----------------------------------------------------------------------------
274 void FileCtrlWidgetsPage::OnButtonSetDirectory( wxCommandEvent
& WXUNUSED( event
) )
276 m_fileCtrl
->SetDirectory( m_dir
->GetValue() );
279 void FileCtrlWidgetsPage::OnButtonSetPath( wxCommandEvent
& WXUNUSED( event
) )
281 m_fileCtrl
->SetPath( m_path
->GetValue() );
284 void FileCtrlWidgetsPage::OnButtonSetFilename( wxCommandEvent
& WXUNUSED( event
) )
286 m_fileCtrl
->SetFilename( m_filename
->GetValue() );
289 void FileCtrlWidgetsPage::OnButtonReset( wxCommandEvent
& WXUNUSED( event
) )
296 void FileCtrlWidgetsPage::OnCheckBox( wxCommandEvent
& WXUNUSED( event
) )
301 void FileCtrlWidgetsPage::OnRadioBox( wxCommandEvent
& WXUNUSED( event
) )
306 void FileCtrlWidgetsPage::OnFileCtrl( wxFileCtrlEvent
& event
)
308 if ( event
.GetEventType() == wxEVT_FILECTRL_FOLDERCHANGED
)
310 wxLogMessage("Folder changed event, new folder: %s", event
.GetDirectory());
312 else if ( event
.GetEventType() == wxEVT_FILECTRL_FILEACTIVATED
)
314 wxLogMessage("File activated event: %s", wxJoin(event
.GetFiles(), ' '));
316 else if ( event
.GetEventType() == wxEVT_FILECTRL_SELECTIONCHANGED
)
318 wxLogMessage("Selection changed event: %s", wxJoin(event
.GetFiles(), ' '));
320 else if ( event
.GetEventType() == wxEVT_FILECTRL_FILTERCHANGED
)
322 wxLogMessage("Filter changed event: filter %d selected",
323 event
.GetFilterIndex() + 1);
327 #endif // wxUSE_FILECTRL