2 Copyright (C) 1999-2006 Id Software, Inc. and contributors.
3 For a list of contributors, see the accompanying CONTRIBUTORS file.
5 This file is part of GtkRadiant.
7 GtkRadiant is free software; you can redistribute it and/or modify
8 it under the terms of the GNU General Public License as published by
9 the Free Software Foundation; either version 2 of the License, or
10 (at your option) any later version.
12 GtkRadiant is distributed in the hope that it will be useful,
13 but WITHOUT ANY WARRANTY; without even the implied warranty of
14 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 GNU General Public License for more details.
17 You should have received a copy of the GNU General Public License
18 along with GtkRadiant; if not, write to the Free Software
19 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
22 #if !defined( INCLUDED_DIALOG_H )
23 #define INCLUDED_DIALOG_H
26 #include <uilib/uilib.h>
28 #include "generic/callback.h"
29 #include "gtkutil/dialog.h"
30 #include "generic/callback.h"
31 #include "string/string.h"
33 template<class Self, class T = Self>
35 static void Import(Self &self, T value) {
39 static void Export(Self &self, const Callback<void(T)> &importCallback) {
44 template<class Self, class T = Self>
45 ImportExportCallback<T> mkImportExportCallback(Self &self) {
47 ReferenceCaller<Self, void(T), impexp<Self, T>::Import>(self),
48 ReferenceCaller<Self, void(const Callback<void(T)> &), impexp<Self, T>::Export>(self)
52 #define BoolImport impexp<bool>::Import
53 #define BoolExport impexp<bool>::Export
55 typedef ReferenceCaller<bool, void(const Callback<void(bool)> &), BoolExport> BoolExportCaller;
57 #define IntImport impexp<int>::Import
58 #define IntExport impexp<int>::Export
60 typedef ReferenceCaller<int, void(const Callback<void(int)> &), IntExport> IntExportCaller;
62 #define SizeImport impexp<std::size_t>::Import
63 #define SizeExport impexp<std::size_t>::Export
66 #define FloatImport impexp<float>::Import
67 #define FloatExport impexp<float>::Export
69 typedef ReferenceCaller<float, void(const Callback<void(float)> &), FloatExport> FloatExportCaller;
71 #define StringImport impexp<CopiedString, const char *>::Import
72 #define StringExport impexp<CopiedString, const char *>::Export
75 struct impexp<CopiedString, const char *> {
76 static void Import(CopiedString &self, const char *value) {
80 static void Export(CopiedString &self, const Callback<void(const char *)> &importCallback) {
81 importCallback(self.c_str());
85 typedef ReferenceCaller<CopiedString, void(const Callback<void(const char *)> &), StringExport> StringExportCaller;
90 virtual ~DLG_DATA() = default;
91 virtual void release() = 0;
92 virtual void importData() const = 0;
93 virtual void exportData() const = 0;
97 template<typename FirstArgument>
98 class CallbackDialogData;
100 typedef std::list<DLG_DATA*> DialogDataList;
105 DialogDataList m_data;
114 start modal dialog box
115 you need to use AddModalButton to select eIDOK eIDCANCEL buttons
117 EMessageBoxReturn DoModal();
118 void EndModal( EMessageBoxReturn code );
119 virtual ui::Window BuildDialog() = 0;
120 virtual void exportData();
121 virtual void importData();
122 virtual void PreModal() { };
123 virtual void PostModal( EMessageBoxReturn code ) { };
124 virtual void ShowDlg();
125 virtual void HideDlg();
128 ui::Window GetWidget(){
131 const ui::Window GetWidget() const {
135 ui::CheckButton addCheckBox(ui::VBox vbox, const char *name, const char *flag, ImportExportCallback<bool> const &cb);
136 ui::CheckButton addCheckBox( ui::VBox vbox, const char* name, const char* flag, bool& data );
138 void addCombo(ui::VBox vbox, const char *name, StringArrayRange values, ImportExportCallback<int> const &cb);
139 void addCombo( ui::VBox vbox, const char* name, int& data, StringArrayRange values );
140 void addSlider( ui::VBox vbox, const char* name, int& data, gboolean draw_value, const char* low, const char* high, double value, double lower, double upper, double step_increment, double page_increment );
142 void addRadio(ui::VBox vbox, const char *name, StringArrayRange names, ImportExportCallback<int> const &cb);
143 void addRadio( ui::VBox vbox, const char* name, int& data, StringArrayRange names );
145 void addRadioIcons(ui::VBox vbox, const char *name, StringArrayRange icons, ImportExportCallback<int> const &cb);
146 void addRadioIcons( ui::VBox vbox, const char* name, int& data, StringArrayRange icons );
148 ui::Widget addIntEntry(ui::VBox vbox, const char *name, ImportExportCallback<int> const &cb);
149 ui::Widget addEntry( ui::VBox vbox, const char* name, int& data ){
150 return addIntEntry(vbox, name, mkImportExportCallback(data));
153 ui::Widget addSizeEntry(ui::VBox vbox, const char *name, ImportExportCallback<std::size_t> const &cb);
154 ui::Widget addEntry( ui::VBox vbox, const char* name, std::size_t& data ){
155 return addSizeEntry(vbox, name, mkImportExportCallback(data));
158 ui::Widget addFloatEntry(ui::VBox vbox, const char *name, ImportExportCallback<float> const &cb);
159 ui::Widget addEntry( ui::VBox vbox, const char* name, float& data ){
160 return addFloatEntry(vbox, name, mkImportExportCallback(data));
164 addPathEntry(ui::VBox vbox, const char *name, bool browse_directory, ImportExportCallback<const char *> const &cb);
165 ui::Widget addPathEntry( ui::VBox vbox, const char* name, CopiedString& data, bool directory );
166 ui::SpinButton addSpinner( ui::VBox vbox, const char* name, int& data, double value, double lower, double upper );
169 addSpinner(ui::VBox vbox, const char *name, double value, double lower, double upper, ImportExportCallback<int> const &cb);
171 ui::SpinButton addSpinner(ui::VBox vbox, const char *name, double value, double lower, double upper,
172 ImportExportCallback<float> const &cb);
176 void AddBoolToggleData(struct _GtkToggleButton &object, ImportExportCallback<bool> const &cb);
178 void AddIntRadioData(struct _GtkRadioButton &object, ImportExportCallback<int> const &cb);
180 void AddTextEntryData(struct _GtkEntry &object, ImportExportCallback<const char *> const &cb);
182 void AddIntEntryData(struct _GtkEntry &object, ImportExportCallback<int> const &cb);
184 void AddSizeEntryData(struct _GtkEntry &object, ImportExportCallback<std::size_t> const &cb);
186 void AddFloatEntryData(struct _GtkEntry &object, ImportExportCallback<float> const &cb);
188 void AddFloatSpinnerData(struct _GtkSpinButton &object, ImportExportCallback<float> const &cb);
190 void AddIntSpinnerData(struct _GtkSpinButton &object, ImportExportCallback<int> const &cb);
192 void AddIntAdjustmentData(struct _GtkAdjustment &object, ImportExportCallback<int> const &cb);
194 void AddIntComboData(struct _GtkComboBox &object, ImportExportCallback<int> const &cb);
196 void AddDialogData( struct _GtkToggleButton& object, bool& data );
197 void AddDialogData( struct _GtkRadioButton& object, int& data );
198 void AddDialogData( struct _GtkEntry& object, CopiedString& data );
199 void AddDialogData( struct _GtkEntry& object, int& data );
200 void AddDialogData( struct _GtkEntry& object, std::size_t& data );
201 void AddDialogData( struct _GtkEntry& object, float& data );
202 void AddDialogData( struct _GtkSpinButton& object, float& data );
203 void AddDialogData( struct _GtkSpinButton& object, int& data );
204 void AddDialogData( struct _GtkAdjustment& object, int& data );
205 void AddDialogData( struct _GtkComboBox& object, int& data );