]> git.saurik.com Git - wxWidgets.git/blame - include/wx/gtk/filepicker.h
Applied patch [ 1845819 ] wxMSW Top level window freeze fix for trunk
[wxWidgets.git] / include / wx / gtk / filepicker.h
CommitLineData
ec376c8f
VZ
1/////////////////////////////////////////////////////////////////////////////
2// Name: wx/gtk/filedirpicker.h
3// Purpose: wxFileButton, wxDirButton header
4// Author: Francesco Montorsi
5// Modified by:
6// Created: 14/4/2006
7// Copyright: (c) Francesco Montorsi
8// RCS-ID: $Id$
9// Licence: wxWindows Licence
10/////////////////////////////////////////////////////////////////////////////
11
12#ifndef _WX_GTK_FILEPICKER_H_
13#define _WX_GTK_FILEPICKER_H_
14
15// since GtkColorButton is available only for GTK+ >= 2.4,
16// we need to use generic versions if we detect (at runtime)
17// that GTK+ < 2.4
18#include "wx/generic/filepickerg.h"
19
556151f5
MW
20//-----------------------------------------------------------------------------
21// wxFileButton and wxDirButton shared code
22// (cannot be a base class since they need to derive from wxGenericFileButton
23// and from wxGenericDirButton classes !)
24//-----------------------------------------------------------------------------
25
1029169f
VS
26#define FILEDIRBTN_OVERRIDES \
27 /* NULL is because of a problem with destruction order which happens */ \
28 /* if we pass GetParent(): in fact, this GTK native implementation */ \
29 /* needs to create the dialog in ::Create() and not for each user */ \
30 /* request in response to the user click as the generic implementation */ \
31 /* does. */ \
32 virtual wxWindow *GetDialogParent() \
33 { \
34 return NULL; \
35 } \
36 \
37 virtual bool Destroy() \
38 { \
dee059c4
JS
39 if (m_dialog) \
40 m_dialog->Destroy(); \
1029169f 41 return wxButton::Destroy(); \
64321998
RR
42 } \
43 \
44 /* even if wx derive from wxGenericFileButton, i.e. from wxButton, our */ \
45 /* native GTK+ widget does not derive from GtkButton thus *all* uses */ \
46 /* GTK_BUTTON(m_widget) macro done by wxButton must be bypassed to */ \
47 /* avoid bunch of GTK+ warnings like: */ \
48 /* invalid cast from `GtkFileChooserButton' to `GtkButton' */ \
49 /* so, override wxButton::GTKGetWindow and return NULL as GTK+ doesn't */ \
50 /* give us access to the internal GdkWindow of a GtkFileChooserButton */ \
bc48a5d7 51protected: \
e4161a2a
VZ
52 virtual GdkWindow * \
53 GTKGetWindow(wxArrayGdkWindows& WXUNUSED(windows)) const \
64321998 54 { return NULL; }
556151f5
MW
55
56
ec376c8f
VZ
57//-----------------------------------------------------------------------------
58// wxFileButton
59//-----------------------------------------------------------------------------
60
61class WXDLLIMPEXP_CORE wxFileButton : public wxGenericFileButton
62{
63public:
556151f5 64 wxFileButton() { m_dialog = NULL; }
ec376c8f
VZ
65 wxFileButton(wxWindow *parent,
66 wxWindowID id,
67 const wxString& label = wxFilePickerWidgetLabel,
68 const wxString &path = wxEmptyString,
69 const wxString &message = wxFileSelectorPromptStr,
70 const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
71 const wxPoint& pos = wxDefaultPosition,
72 const wxSize& size = wxDefaultSize,
73 long style = wxFILEBTN_DEFAULT_STYLE,
74 const wxValidator& validator = wxDefaultValidator,
75 const wxString& name = wxFilePickerWidgetNameStr)
76 {
556151f5 77 m_dialog = NULL;
ec376c8f
VZ
78 Create(parent, id, label, path, message, wildcard,
79 pos, size, style, validator, name);
80 }
81
556151f5 82 virtual ~wxFileButton();
ec376c8f
VZ
83
84
85public: // overrides
86
87 bool Create(wxWindow *parent,
88 wxWindowID id,
89 const wxString& label = wxFilePickerWidgetLabel,
90 const wxString &path = wxEmptyString,
91 const wxString &message = wxFileSelectorPromptStr,
92 const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
93 const wxPoint& pos = wxDefaultPosition,
94 const wxSize& size = wxDefaultSize,
95 long style = 0,
96 const wxValidator& validator = wxDefaultValidator,
97 const wxString& name = wxFilePickerWidgetNameStr);
98
99 // event handler for the click
100 void OnDialogOK(wxCommandEvent &);
101
ec376c8f 102 // GtkFileChooserButton does not support GTK_FILE_CHOOSER_ACTION_SAVE
556151f5
MW
103 // so we replace it with GTK_FILE_CHOOSER_ACTION_OPEN; since wxFD_SAVE
104 // is not supported, wxFD_OVERWRITE_PROMPT isn't too...
105 virtual long GetDialogStyle() const
ec376c8f 106 {
556151f5
MW
107 return (wxGenericFileButton::GetDialogStyle() &
108 ~(wxFD_SAVE | wxFD_OVERWRITE_PROMPT)) | wxFD_OPEN;
ec376c8f
VZ
109 }
110
58772e49
VZ
111 virtual void SetPath(const wxString &str);
112
556151f5
MW
113 // see macro defined above
114 FILEDIRBTN_OVERRIDES
115
116protected:
117 wxDialog *m_dialog;
ec376c8f 118
ec376c8f
VZ
119 DECLARE_DYNAMIC_CLASS(wxFileButton)
120};
121
122
123//-----------------------------------------------------------------------------
124// wxDirButton
125//-----------------------------------------------------------------------------
126
127class WXDLLIMPEXP_CORE wxDirButton : public wxGenericDirButton
128{
129public:
58772e49 130 wxDirButton() { Init(); }
ec376c8f
VZ
131 wxDirButton(wxWindow *parent,
132 wxWindowID id,
133 const wxString& label = wxFilePickerWidgetLabel,
134 const wxString &path = wxEmptyString,
135 const wxString &message = wxFileSelectorPromptStr,
136 const wxPoint& pos = wxDefaultPosition,
137 const wxSize& size = wxDefaultSize,
138 long style = wxDIRBTN_DEFAULT_STYLE,
139 const wxValidator& validator = wxDefaultValidator,
140 const wxString& name = wxFilePickerWidgetNameStr)
141 {
58772e49
VZ
142 Init();
143
ec376c8f
VZ
144 Create(parent, id, label, path, message, wxEmptyString,
145 pos, size, style, validator, name);
146 }
147
148 virtual ~wxDirButton();
149
150
151public: // overrides
152
153 bool Create(wxWindow *parent,
154 wxWindowID id,
155 const wxString& label = wxFilePickerWidgetLabel,
156 const wxString &path = wxEmptyString,
157 const wxString &message = wxFileSelectorPromptStr,
158 const wxString &wildcard = wxFileSelectorDefaultWildcardStr,
159 const wxPoint& pos = wxDefaultPosition,
160 const wxSize& size = wxDefaultSize,
161 long style = 0,
162 const wxValidator& validator = wxDefaultValidator,
163 const wxString& name = wxFilePickerWidgetNameStr);
164
ec376c8f
VZ
165
166 // GtkFileChooserButton does not support GTK_FILE_CHOOSER_CREATE_FOLDER
167 // thus we must ensure that the wxDD_DIR_MUST_EXIST style was given
168 long GetDialogStyle() const
169 {
170 return (wxGenericDirButton::GetDialogStyle() | wxDD_DIR_MUST_EXIST);
171 }
172
58772e49
VZ
173 virtual void SetPath(const wxString &str);
174
556151f5
MW
175 // see macro defined above
176 FILEDIRBTN_OVERRIDES
177
178protected:
58772e49
VZ
179 // common part of all ctors
180 void Init()
181 {
182 m_dialog = NULL;
183 m_bIgnoreNextChange = false;
184 }
185
556151f5
MW
186 wxDialog *m_dialog;
187
58772e49
VZ
188public: // used by the GTK callback only
189
190 bool m_bIgnoreNextChange;
191
192 void UpdatePath(const char *gtkpath)
193 { m_path = wxString::FromAscii(gtkpath); }
194
ec376c8f
VZ
195private:
196 DECLARE_DYNAMIC_CLASS(wxDirButton)
197};
198
556151f5
MW
199#undef FILEDIRBTN_OVERRIDES
200
ec376c8f
VZ
201#endif // _WX_GTK_FILEPICKER_H_
202