add support for custom controls in file dialog in wxGTK and generic versions; also allow using generic dialogs in the sample with wxGTK2 (patch 1846837)

git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@52252 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
This commit is contained in:
Vadim Zeitlin
2008-03-02 14:33:47 +00:00
parent 77c950fdad
commit 8ce68f7fc0
13 changed files with 216 additions and 110 deletions

View File

@@ -337,12 +337,12 @@ bool MyApp::OnInit()
filedlg_menu->Append(DIALOGS_FILES_OPEN, _T("Open &files\tCtrl-Q"));
filedlg_menu->Append(DIALOGS_FILE_SAVE, _T("Sa&ve file\tCtrl-S"));
#if USE_FILEDLG_GENERIC
filedlg_menu->AppendSeparator();
filedlg_menu->Append(DIALOGS_FILE_OPEN_GENERIC, _T("&Open file (generic)"));
filedlg_menu->Append(DIALOGS_FILES_OPEN_GENERIC, _T("Open &files (generic)"));
filedlg_menu->Append(DIALOGS_FILE_SAVE_GENERIC, _T("Sa&ve file (generic)"));
#endif // USE_FILEDLG_GENERIC
#if USE_FILEDLG_GENERIC
filedlg_menu->AppendSeparator();
filedlg_menu->Append(DIALOGS_FILE_OPEN_GENERIC, _T("&Open file (generic)"));
filedlg_menu->Append(DIALOGS_FILES_OPEN_GENERIC, _T("Open &files (generic)"));
filedlg_menu->Append(DIALOGS_FILE_SAVE_GENERIC, _T("Sa&ve file (generic)"));
#endif // USE_FILEDLG_GENERIC
menuDlg->Append(wxID_ANY,_T("&File operations"),filedlg_menu);
@@ -799,6 +799,43 @@ void MyFrame::MultiChoice(wxCommandEvent& WXUNUSED(event) )
#endif // wxUSE_CHOICEDLG
#if wxUSE_FILEDLG
// panel with custom controls for file dialog
class MyExtraPanel : public wxPanel
{
public:
MyExtraPanel(wxWindow *parent);
void OnCheckBox(wxCommandEvent& event) { m_btn->Enable(event.IsChecked()); }
wxString GetInfo() const
{
return wxString::Format("checkbox value = %d", (int) m_cb->GetValue());
}
private:
wxButton *m_btn;
wxCheckBox *m_cb;
};
MyExtraPanel::MyExtraPanel(wxWindow *parent)
: wxPanel(parent)
{
m_btn = new wxButton(this, -1, _T("Custom Button"));
m_btn->Enable(false);
m_cb = new wxCheckBox(this, -1, _T("Enable Custom Button"));
m_cb->Connect(wxID_ANY, wxEVT_COMMAND_CHECKBOX_CLICKED,
wxCommandEventHandler(MyExtraPanel::OnCheckBox), NULL, this);
wxBoxSizer *sizerTop = new wxBoxSizer(wxHORIZONTAL);
sizerTop->Add(m_cb, wxSizerFlags().Centre().Border());
sizerTop->AddStretchSpacer();
sizerTop->Add(m_btn, wxSizerFlags().Right().Border());
SetSizerAndFit(sizerTop);
}
// a static method can be used instead of a function with most of compilers
static wxWindow* createMyExtraPanel(wxWindow *parent)
{
return new MyExtraPanel(parent);
}
void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
{
wxFileDialog dialog
@@ -814,18 +851,23 @@ void MyFrame::FileOpen(wxCommandEvent& WXUNUSED(event) )
#endif
);
dialog.SetExtraControlCreator(&createMyExtraPanel);
dialog.CentreOnParent();
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
{
wxString info;
MyExtraPanel *extra_panel
= static_cast<MyExtraPanel*>(dialog.GetExtraControl());
info.Printf(_T("Full file name: %s\n")
_T("Path: %s\n")
_T("Name: %s"),
_T("Name: %s\n")
_T("Custom window: %s"),
dialog.GetPath().c_str(),
dialog.GetDirectory().c_str(),
dialog.GetFilename().c_str());
dialog.GetFilename().c_str(),
extra_panel->GetInfo().c_str());
wxMessageDialog dialog2(this, info, _T("Selected file"));
dialog2.ShowModal();
}
@@ -933,6 +975,7 @@ void MyFrame::FileOpenGeneric(wxCommandEvent& WXUNUSED(event) )
_T("C++ files (*.cpp;*.h)|*.cpp;*.h")
);
dialog.SetExtraControlCreator(&createMyExtraPanel);
dialog.SetDirectory(wxGetHomeDir());
if (dialog.ShowModal() == wxID_OK)
@@ -1264,8 +1307,7 @@ TestDefaultActionDialog::TestDefaultActionDialog( wxWindow *parent ) :
if (button_sizer)
main_sizer->Add( button_sizer, 0, wxALL|wxGROW, 5 );
SetSizer( main_sizer );
main_sizer->Fit( this );
SetSizerAndFit( main_sizer );
}
void TestDefaultActionDialog::OnListBoxDClick(wxCommandEvent& event)
@@ -1651,10 +1693,7 @@ MyModelessDialog::MyModelessDialog(wxWindow *parent)
sizerTop->Add(btn, 1, wxEXPAND | wxALL, 5);
sizerTop->Add(check, 1, wxEXPAND | wxALL, 5);
SetSizer(sizerTop);
sizerTop->SetSizeHints(this);
sizerTop->Fit(this);
SetSizerAndFit(sizerTop);
}
void MyModelessDialog::OnButton(wxCommandEvent& WXUNUSED(event))
@@ -1694,10 +1733,7 @@ MyModalDialog::MyModalDialog(wxWindow *parent)
sizerTop->Add(m_btnDelete, 0, wxALIGN_CENTER | wxALL, 5);
sizerTop->Add(btnOk, 0, wxALIGN_CENTER | wxALL, 5);
SetSizer(sizerTop);
sizerTop->SetSizeHints(this);
sizerTop->Fit(this);
SetSizerAndFit(sizerTop);
m_btnModal->SetFocus();
m_btnModal->SetDefault();
@@ -1800,9 +1836,8 @@ StdButtonSizerDialog::StdButtonSizerDialog(wxWindow *parent)
EnableDisableControls();
SetSizer(sizerTop);
SetSizerAndFit(sizerTop);
sizerTop->SetSizeHints(this);
wxCommandEvent ev;
OnEvent(ev);
}
@@ -2015,8 +2050,7 @@ wxPanel* SettingsDialog::CreateGeneralSettingsPage(wxWindow* parent)
topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
panel->SetSizer(topSizer);
topSizer->Fit(panel);
panel->SetSizerAndFit(topSizer);
return panel;
}
@@ -2074,8 +2108,7 @@ wxPanel* SettingsDialog::CreateAestheticSettingsPage(wxWindow* parent)
topSizer->Add( item0, 1, wxGROW|wxALIGN_CENTRE|wxALL, 5 );
topSizer->AddSpacer(5);
panel->SetSizer(topSizer);
topSizer->Fit(panel);
panel->SetSizerAndFit(topSizer);
return panel;
}