]> git.saurik.com Git - wxWidgets.git/blobdiff - include/wx/filepicker.h
Better fix
[wxWidgets.git] / include / wx / filepicker.h
index 8ca38a6c17078fa328ac8f28f4072f582bbeee97..0f0c7cc57a5284031e730f9da3fc73b4984d8e7c 100644 (file)
 #if wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL
 
 #include "wx/pickerbase.h"
+#include "wx/filename.h"
 
-class WXDLLIMPEXP_CORE wxDialog;
-class WXDLLIMPEXP_CORE wxFileDirPickerEvent;
+class WXDLLIMPEXP_FWD_CORE wxDialog;
+class WXDLLIMPEXP_FWD_CORE wxFileDirPickerEvent;
 
-extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerWidgetLabel[];
-extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerWidgetNameStr[];
-extern WXDLLEXPORT_DATA(const wxChar) wxFilePickerCtrlNameStr[];
-extern WXDLLEXPORT_DATA(const wxChar) wxFileSelectorPromptStr[];
+extern WXDLLEXPORT_DATA(const char) wxFilePickerWidgetLabel[];
+extern WXDLLEXPORT_DATA(const char) wxFilePickerWidgetNameStr[];
+extern WXDLLEXPORT_DATA(const char) wxFilePickerCtrlNameStr[];
+extern WXDLLEXPORT_DATA(const char) wxFileSelectorPromptStr[];
 
-extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerWidgetLabel[];
-extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerWidgetNameStr[];
-extern WXDLLEXPORT_DATA(const wxChar) wxDirPickerCtrlNameStr[];
-extern WXDLLEXPORT_DATA(const wxChar) wxDirSelectorPromptStr[];
+extern WXDLLEXPORT_DATA(const char) wxDirPickerWidgetLabel[];
+extern WXDLLEXPORT_DATA(const char) wxDirPickerWidgetNameStr[];
+extern WXDLLEXPORT_DATA(const char) wxDirPickerCtrlNameStr[];
+extern WXDLLEXPORT_DATA(const char) wxDirSelectorPromptStr[];
 
 
 // ----------------------------------------------------------------------------
@@ -46,6 +47,9 @@ public:
     wxString GetPath() const { return m_path; }
     virtual void SetPath(const wxString &str) { m_path=str; }
 
+    // returns the picker widget cast to wxControl
+    virtual wxControl *AsControl() = 0;
+
 protected:
     virtual void UpdateDialogPath(wxDialog *) = 0;
     virtual void UpdatePathFromDialog(wxDialog *) = 0;
@@ -75,7 +79,8 @@ protected:
 // NOTE: wxFileDirPickerCtrlBase will allocate a wx{File|Dir}PickerWidget and this
 //       requires that all classes being mapped as wx{File|Dir}PickerWidget have the
 //       same prototype for the contructor...
-#if defined(__WXGTK26__)        // since GTK >= 2.6, there is GtkFileButton
+// since GTK >= 2.6, there is GtkFileButton
+#if defined(__WXGTK26__) && !defined(__WXUNIVERSAL__)
     #include "wx/gtk/filepicker.h"
     #define wxFilePickerWidget      wxFileButton
     #define wxDirPickerWidget       wxDirButton
@@ -88,7 +93,7 @@ protected:
 
 
 // ----------------------------------------------------------------------------
-// wxFileDirPickerWidgetBase
+// wxFileDirPickerCtrlBase
 // ----------------------------------------------------------------------------
 
 class WXDLLIMPEXP_CORE wxFileDirPickerCtrlBase : public wxPickerBase
@@ -96,6 +101,7 @@ class WXDLLIMPEXP_CORE wxFileDirPickerCtrlBase : public wxPickerBase
 public:
     wxFileDirPickerCtrlBase() : m_bIgnoreNextTextCtrlUpdate(false) {}
 
+protected:
     // NB: no default values since this function will never be used
     //     directly by the user and derived classes wouldn't use them
     bool CreateBase(wxWindow *parent,
@@ -111,8 +117,7 @@ public:
 
 public:         // public API
 
-    wxString GetPath() const
-        { return ((wxFileDirPickerWidgetBase*)m_picker)->GetPath(); }
+    wxString GetPath() const;
     void SetPath(const wxString &str);
 
 public:        // internal functions
@@ -123,9 +128,6 @@ public:        // internal functions
     // event handler for our picker
     void OnFileDirChange(wxFileDirPickerEvent &);
 
-    virtual bool CreatePicker(wxWindow *parent, const wxString& path,
-                      const wxString& message, const wxString& wildcard) = 0;
-
     // Returns TRUE if the current path is a valid one
     // (i.e. a valid file for a wxFilePickerWidget or a valid
     //  folder for a wxDirPickerWidget).
@@ -140,10 +142,21 @@ public:        // internal functions
     // Returns the filtered value currently placed in the text control (if present).
     virtual wxString GetTextCtrlValue() const = 0;
 
+protected:
+    // creates the picker control
+    virtual
+    wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent,
+                                            const wxString& path,
+                                            const wxString& message,
+                                            const wxString& wildcard) = 0;
+
 protected:
 
     // true if the next UpdateTextCtrl() call is to ignore
     bool m_bIgnoreNextTextCtrlUpdate;
+
+    // m_picker object as wxFileDirPickerWidgetBase interface
+    wxFileDirPickerWidgetBase *m_pickerIface;
 };
 
 #endif  // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL
@@ -203,19 +216,13 @@ public:
                                                    validator, name);
     }
 
+    void SetFileName(const wxFileName &filename)
+        { SetPath(filename.GetFullPath()); }
 
-public:     // overrides
+    wxFileName GetFileName() const
+        { return wxFileName(GetPath()); }
 
-    bool CreatePicker(wxWindow *parent, const wxString& path,
-                      const wxString& message, const wxString& wildcard)
-    {
-        m_picker = new wxFilePickerWidget(parent, wxID_ANY,
-                                          wxFilePickerWidgetLabel,
-                                          path, message, wildcard,
-                                          wxDefaultPosition, wxDefaultSize,
-                                          GetPickerStyle(GetWindowStyle()));
-        return true;
-    }
+public:     // overrides
 
     // return true if the given path is valid for this control
     bool CheckPath(const wxString& path) const;
@@ -230,6 +237,19 @@ public:     // overrides
         { return wxEVT_COMMAND_FILEPICKER_CHANGED; }
 
 protected:
+    virtual
+    wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent,
+                                            const wxString& path,
+                                            const wxString& message,
+                                            const wxString& wildcard)
+    {
+        return new wxFilePickerWidget(parent, wxID_ANY,
+                                      wxGetTranslation(wxFilePickerWidgetLabel),
+                                      path, message, wildcard,
+                                      wxDefaultPosition, wxDefaultSize,
+                                      GetPickerStyle(GetWindowStyle()));
+    }
+
     // extracts the style for our picker from wxFileDirPickerCtrlBase's style
     long GetPickerStyle(long style) const
     {
@@ -294,17 +314,13 @@ public:
                );
     }
 
+    void SetDirName(const wxFileName &dirname)
+        { SetPath(dirname.GetPath()); }
 
-public:     // overrides
+    wxFileName GetDirName() const
+        { return wxFileName::DirName(GetPath()); }
 
-    bool CreatePicker(wxWindow *parent, const wxString& path,
-                      const wxString& message, const wxString& WXUNUSED(wildcard))
-    {
-        m_picker = new wxDirPickerWidget(parent, wxID_ANY, wxDirPickerWidgetLabel,
-                                         path, message, wxDefaultPosition, wxDefaultSize,
-                                         GetPickerStyle(GetWindowStyle()));
-        return true;
-    }
+public:     // overrides
 
     bool CheckPath(const wxString &path) const;
 
@@ -317,6 +333,19 @@ public:     // overrides
         { return wxEVT_COMMAND_DIRPICKER_CHANGED; }
 
 protected:
+    virtual
+    wxFileDirPickerWidgetBase *CreatePicker(wxWindow *parent,
+                                            const wxString& path,
+                                            const wxString& message,
+                                            const wxString& WXUNUSED(wildcard))
+    {
+        return new wxDirPickerWidget(parent, wxID_ANY,
+                                     wxGetTranslation(wxDirPickerWidgetLabel),
+                                     path, message,
+                                     wxDefaultPosition, wxDefaultSize,
+                                     GetPickerStyle(GetWindowStyle()));
+    }
+
     // extracts the style for our picker from wxFileDirPickerCtrlBase's style
     long GetPickerStyle(long style) const
         { return (style & (wxDIRP_DIR_MUST_EXIST|wxDIRP_CHANGE_DIR)); }
@@ -334,10 +363,8 @@ private:
 // wxFileDirPickerEvent: used by wxFilePickerCtrl and wxDirPickerCtrl only
 // ----------------------------------------------------------------------------
 
-BEGIN_DECLARE_EVENT_TYPES()
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_FILEPICKER_CHANGED, 1102)
-    DECLARE_EXPORTED_EVENT_TYPE(WXDLLIMPEXP_CORE, wxEVT_COMMAND_DIRPICKER_CHANGED, 1103)
-END_DECLARE_EVENT_TYPES()
+extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_FILEPICKER_CHANGED;
+extern WXDLLIMPEXP_CORE const wxEventType wxEVT_COMMAND_DIRPICKER_CHANGED;
 
 class WXDLLIMPEXP_CORE wxFileDirPickerEvent : public wxCommandEvent
 {
@@ -376,13 +403,6 @@ typedef void (wxEvtHandler::*wxFileDirPickerEventFunction)(wxFileDirPickerEvent&
 #define EVT_DIRPICKER_CHANGED(id, fn) \
     wx__DECLARE_EVT1(wxEVT_COMMAND_DIRPICKER_CHANGED, id, wxFileDirPickerEventHandler(fn))
 
-#ifdef _WX_DEFINE_DATE_EVENTS_
-    DEFINE_EVENT_TYPE(wxEVT_COMMAND_FILEPICKER_CHANGED)
-    DEFINE_EVENT_TYPE(wxEVT_COMMAND_DIRPICKER_CHANGED)
-
-    IMPLEMENT_DYNAMIC_CLASS(wxFileDirPickerEvent, wxCommandEvent)
-#endif
-
 
 #endif // wxUSE_FILEPICKERCTRL || wxUSE_DIRPICKERCTRL