| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192 |
- /////////////////////////////////////////////////////////////////////////////
- // Name: wx/gtk/filedirpicker.h
- // Purpose: wxFileButton, wxDirButton header
- // Author: Francesco Montorsi
- // Modified by:
- // Created: 14/4/2006
- // Copyright: (c) Francesco Montorsi
- // Licence: wxWindows Licence
- /////////////////////////////////////////////////////////////////////////////
- #ifndef _WX_GTK_FILEPICKER_H_
- #define _WX_GTK_FILEPICKER_H_
- // since GtkColorButton is available only for GTK+ >= 2.4,
- // we need to use generic versions if we detect (at runtime)
- // that GTK+ < 2.4
- #include "wx/generic/filepickerg.h"
- //-----------------------------------------------------------------------------
- // wxFileButton and wxDirButton shared code
- // (cannot be a base class since they need to derive from wxGenericFileButton
- // and from wxGenericDirButton classes !)
- //-----------------------------------------------------------------------------
- #define FILEDIRBTN_OVERRIDES \
- /* NULL is because of a problem with destruction order which happens */ \
- /* if we pass GetParent(): in fact, this GTK native implementation */ \
- /* needs to create the dialog in ::Create() and not for each user */ \
- /* request in response to the user click as the generic implementation */ \
- /* does. */ \
- virtual wxWindow *GetDialogParent() \
- { \
- return NULL; \
- } \
- \
- /* even if wx derive from wxGenericFileButton, i.e. from wxButton, our */ \
- /* native GTK+ widget does not derive from GtkButton thus *all* uses */ \
- /* GTK_BUTTON(m_widget) macro done by wxButton must be bypassed to */ \
- /* avoid bunch of GTK+ warnings like: */ \
- /* invalid cast from `GtkFileChooserButton' to `GtkButton' */ \
- /* so, override wxButton::GTKGetWindow and return NULL as GTK+ doesn't */ \
- /* give us access to the internal GdkWindow of a GtkFileChooserButton */ \
- protected: \
- virtual GdkWindow * \
- GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const \
- { return NULL; }
- //-----------------------------------------------------------------------------
- // wxFileButton
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxFileButton : public wxGenericFileButton
- {
- public:
- wxFileButton() { Init(); }
- wxFileButton(wxWindow *parent,
- wxWindowID id,
- const wxString& label = wxFilePickerWidgetLabel,
- const wxString &path = wxEmptyString,
- const wxString &message = wxFileSelectorPromptStr,
- const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxFILEBTN_DEFAULT_STYLE,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxFilePickerWidgetNameStr)
- {
- Init();
- m_pickerStyle = style;
- Create(parent, id, label, path, message, wildcard,
- pos, size, style, validator, name);
- }
- virtual ~wxFileButton();
- public: // overrides
- bool Create(wxWindow *parent,
- wxWindowID id,
- const wxString& label = wxFilePickerWidgetLabel,
- const wxString &path = wxEmptyString,
- const wxString &message = wxFileSelectorPromptStr,
- const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxFilePickerWidgetNameStr);
- // event handler for the click
- void OnDialogOK(wxCommandEvent &);
- virtual void SetPath(const wxString &str);
- virtual void SetInitialDirectory(const wxString& dir);
- // see macro defined above
- FILEDIRBTN_OVERRIDES
- protected:
- wxDialog *m_dialog;
- private:
- // common part of all ctors
- void Init() { m_dialog = NULL; }
- DECLARE_DYNAMIC_CLASS(wxFileButton)
- };
- //-----------------------------------------------------------------------------
- // wxDirButton
- //-----------------------------------------------------------------------------
- class WXDLLIMPEXP_CORE wxDirButton : public wxGenericDirButton
- {
- public:
- wxDirButton() { Init(); }
- wxDirButton(wxWindow *parent,
- wxWindowID id,
- const wxString& label = wxFilePickerWidgetLabel,
- const wxString &path = wxEmptyString,
- const wxString &message = wxFileSelectorPromptStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = wxDIRBTN_DEFAULT_STYLE,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxFilePickerWidgetNameStr)
- {
- Init();
- m_pickerStyle = style;
- Create(parent, id, label, path, message, wxEmptyString,
- pos, size, style, validator, name);
- }
- virtual ~wxDirButton();
- public: // overrides
- bool Create(wxWindow *parent,
- wxWindowID id,
- const wxString& label = wxFilePickerWidgetLabel,
- const wxString &path = wxEmptyString,
- const wxString &message = wxFileSelectorPromptStr,
- const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
- const wxPoint& pos = wxDefaultPosition,
- const wxSize& size = wxDefaultSize,
- long style = 0,
- const wxValidator& validator = wxDefaultValidator,
- const wxString& name = wxFilePickerWidgetNameStr);
- // GtkFileChooserButton does not support GTK_FILE_CHOOSER_CREATE_FOLDER
- // thus we must ensure that the wxDD_DIR_MUST_EXIST style was given
- long GetDialogStyle() const
- {
- return (wxGenericDirButton::GetDialogStyle() | wxDD_DIR_MUST_EXIST);
- }
- virtual void SetPath(const wxString &str);
- virtual void SetInitialDirectory(const wxString& dir);
- // see macro defined above
- FILEDIRBTN_OVERRIDES
- protected:
- wxDialog *m_dialog;
- public: // used by the GTK callback only
- bool m_bIgnoreNextChange;
- void GTKUpdatePath(const char *gtkpath);
- private:
- void Init()
- {
- m_dialog = NULL;
- m_bIgnoreNextChange = false;
- }
- DECLARE_DYNAMIC_CLASS(wxDirButton)
- };
- #undef FILEDIRBTN_OVERRIDES
- #endif // _WX_GTK_FILEPICKER_H_
|