git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@51620 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			194 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			194 lines
		
	
	
		
			7.5 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
| /////////////////////////////////////////////////////////////////////////////
 | |
| // Name:        wx/gtk/filedirpicker.h
 | |
| // Purpose:     wxFileButton, wxDirButton header
 | |
| // Author:      Francesco Montorsi
 | |
| // Modified by:
 | |
| // Created:     14/4/2006
 | |
| // Copyright:   (c) Francesco Montorsi
 | |
| // RCS-ID:      $Id$
 | |
| // 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;                                                          \
 | |
|     }                                                                         \
 | |
|                                                                               \
 | |
|     virtual bool Destroy()                                                    \
 | |
|     {                                                                         \
 | |
|         if (m_dialog)                                                         \
 | |
|             m_dialog->Destroy();                                              \
 | |
|         return wxButton::Destroy();                                           \
 | |
|     }                                                                         \
 | |
|                                                                               \
 | |
|     /* 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() { m_dialog = NULL; }
 | |
|     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)
 | |
|     {
 | |
|         m_dialog = NULL;
 | |
|         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);
 | |
| 
 | |
|     // see macro defined above
 | |
|     FILEDIRBTN_OVERRIDES
 | |
| 
 | |
| protected:
 | |
|     wxDialog *m_dialog;
 | |
| 
 | |
|     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();
 | |
| 
 | |
|         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);
 | |
| 
 | |
|     // see macro defined above
 | |
|     FILEDIRBTN_OVERRIDES
 | |
| 
 | |
| protected:
 | |
|     // common part of all ctors
 | |
|     void Init()
 | |
|     {
 | |
|         m_dialog = NULL;
 | |
|         m_bIgnoreNextChange = false;
 | |
|     }
 | |
| 
 | |
|     wxDialog *m_dialog;
 | |
| 
 | |
| public:    // used by the GTK callback only
 | |
| 
 | |
|     bool m_bIgnoreNextChange;
 | |
| 
 | |
|     void UpdatePath(const char *gtkpath)
 | |
|         { m_path = wxString::FromAscii(gtkpath); }
 | |
| 
 | |
| private:
 | |
|     DECLARE_DYNAMIC_CLASS(wxDirButton)
 | |
| };
 | |
| 
 | |
| #undef FILEDIRBTN_OVERRIDES
 | |
| 
 | |
| #endif // _WX_GTK_FILEPICKER_H_
 | |
| 
 |