X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=radiant%2Fdialog.h;h=cf2b2362d809ccd483abf66098e3b1864e41d1c5;hp=cf1c4858913df592aaf7285a76438d22da45fac1;hb=2a1cfc426e60b77c7b212d827e2592de01041266;hpb=34ec2a7ed336d403fc8d7d0951b5dd3af26224bb diff --git a/radiant/dialog.h b/radiant/dialog.h index cf1c4858..cf2b2362 100644 --- a/radiant/dialog.h +++ b/radiant/dialog.h @@ -25,65 +25,64 @@ #include #include +#include "generic/callback.h" #include "gtkutil/dialog.h" #include "generic/callback.h" #include "string/string.h" -template -class ReferenceCaller1; +template +struct impexp { + static void Import(Self &self, T value) { + self = value; + } -inline void BoolImport( bool& self, bool value ){ - self = value; -} -typedef ReferenceCaller1 BoolImportCaller; + static void Export(Self &self, const Callback &importCallback) { + importCallback(self); + } +}; -inline void BoolExport( bool& self, const BoolImportCallback& importCallback ){ - importCallback( self ); +template +ImportExportCallback mkImportExportCallback(Self &self) { + return { + ReferenceCaller::Import>(self), + ReferenceCaller &), impexp::Export>(self) + }; } -typedef ReferenceCaller1 BoolExportCaller; +#define BoolImport impexp::Import +#define BoolExport impexp::Export -inline void IntImport( int& self, int value ){ - self = value; -} -typedef ReferenceCaller1 IntImportCaller; +typedef ReferenceCaller &), BoolExport> BoolExportCaller; -inline void IntExport( int& self, const IntImportCallback& importCallback ){ - importCallback( self ); -} -typedef ReferenceCaller1 IntExportCaller; +#define IntImport impexp::Import +#define IntExport impexp::Export +typedef ReferenceCaller &), IntExport> IntExportCaller; -inline void SizeImport( std::size_t& self, std::size_t value ){ - self = value; -} -typedef ReferenceCaller1 SizeImportCaller; +#define SizeImport impexp::Import +#define SizeExport impexp::Export -inline void SizeExport( std::size_t& self, const SizeImportCallback& importCallback ){ - importCallback( self ); -} -typedef ReferenceCaller1 SizeExportCaller; +#define FloatImport impexp::Import +#define FloatExport impexp::Export -inline void FloatImport( float& self, float value ){ - self = value; -} -typedef ReferenceCaller1 FloatImportCaller; +typedef ReferenceCaller &), FloatExport> FloatExportCaller; -inline void FloatExport( float& self, const FloatImportCallback& importCallback ){ - importCallback( self ); -} -typedef ReferenceCaller1 FloatExportCaller; +#define StringImport impexp::Import +#define StringExport impexp::Export +template<> +struct impexp { + static void Import(CopiedString &self, const char *value) { + self = value; + } -inline void StringImport( CopiedString& self, const char* value ){ - self = value; -} -typedef ReferenceCaller1 StringImportCaller; -inline void StringExport( CopiedString& self, const StringImportCallback& importCallback ){ - importCallback( self.c_str() ); -} -typedef ReferenceCaller1 StringExportCaller; + static void Export(CopiedString &self, const Callback &importCallback) { + importCallback(self.c_str()); + } +}; + +typedef ReferenceCaller &), StringExport> StringExportCaller; struct DLG_DATA @@ -133,45 +132,66 @@ const ui::Window GetWidget() const { return m_window; } -ui::CheckButton addCheckBox( ui::Widget vbox, const char* name, const char* flag, const BoolImportCallback& importCallback, const BoolExportCallback& exportCallback ); -ui::CheckButton addCheckBox( ui::Widget vbox, const char* name, const char* flag, bool& data ); -void addCombo( ui::Widget vbox, const char* name, StringArrayRange values, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void addCombo( ui::Widget vbox, const char* name, int& data, StringArrayRange values ); -void addSlider( ui::Widget 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 ); -void addRadio( ui::Widget vbox, const char* name, StringArrayRange names, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void addRadio( ui::Widget vbox, const char* name, int& data, StringArrayRange names ); -void addRadioIcons( ui::Widget vbox, const char* name, StringArrayRange icons, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void addRadioIcons( ui::Widget vbox, const char* name, int& data, StringArrayRange icons ); -ui::Widget addIntEntry( ui::Widget vbox, const char* name, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -ui::Widget addEntry( ui::Widget vbox, const char* name, int& data ){ - return addIntEntry( vbox, name, IntImportCaller( data ), IntExportCaller( data ) ); + ui::CheckButton addCheckBox(ui::VBox vbox, const char *name, const char *flag, ImportExportCallback const &cb); +ui::CheckButton addCheckBox( ui::VBox vbox, const char* name, const char* flag, bool& data ); + + void addCombo(ui::VBox vbox, const char *name, StringArrayRange values, ImportExportCallback const &cb); +void addCombo( ui::VBox vbox, const char* name, int& data, StringArrayRange values ); +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 ); + + void addRadio(ui::VBox vbox, const char *name, StringArrayRange names, ImportExportCallback const &cb); +void addRadio( ui::VBox vbox, const char* name, int& data, StringArrayRange names ); + + void addRadioIcons(ui::VBox vbox, const char *name, StringArrayRange icons, ImportExportCallback const &cb); +void addRadioIcons( ui::VBox vbox, const char* name, int& data, StringArrayRange icons ); + + ui::Widget addIntEntry(ui::VBox vbox, const char *name, ImportExportCallback const &cb); +ui::Widget addEntry( ui::VBox vbox, const char* name, int& data ){ + return addIntEntry(vbox, name, mkImportExportCallback(data)); } -ui::Widget addSizeEntry( ui::Widget vbox, const char* name, const SizeImportCallback& importCallback, const SizeExportCallback& exportCallback ); -ui::Widget addEntry( ui::Widget vbox, const char* name, std::size_t& data ){ - return addSizeEntry( vbox, name, SizeImportCaller( data ), SizeExportCaller( data ) ); + + ui::Widget addSizeEntry(ui::VBox vbox, const char *name, ImportExportCallback const &cb); +ui::Widget addEntry( ui::VBox vbox, const char* name, std::size_t& data ){ + return addSizeEntry(vbox, name, mkImportExportCallback(data)); } -ui::Widget addFloatEntry( ui::Widget vbox, const char* name, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ); -ui::Widget addEntry( ui::Widget vbox, const char* name, float& data ){ - return addFloatEntry( vbox, name, FloatImportCaller( data ), FloatExportCaller( data ) ); + + ui::Widget addFloatEntry(ui::VBox vbox, const char *name, ImportExportCallback const &cb); +ui::Widget addEntry( ui::VBox vbox, const char* name, float& data ){ + return addFloatEntry(vbox, name, mkImportExportCallback(data)); } -ui::Widget addPathEntry( ui::Widget vbox, const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ); -ui::Widget addPathEntry( ui::Widget vbox, const char* name, CopiedString& data, bool directory ); -ui::SpinButton addSpinner( ui::Widget vbox, const char* name, int& data, double value, double lower, double upper ); -ui::SpinButton addSpinner( ui::Widget vbox, const char* name, double value, double lower, double upper, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -ui::SpinButton addSpinner( ui::Widget vbox, const char* name, double value, double lower, double upper, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ); + + ui::Widget + addPathEntry(ui::VBox vbox, const char *name, bool browse_directory, ImportExportCallback const &cb); +ui::Widget addPathEntry( ui::VBox vbox, const char* name, CopiedString& data, bool directory ); +ui::SpinButton addSpinner( ui::VBox vbox, const char* name, int& data, double value, double lower, double upper ); + + ui::SpinButton + addSpinner(ui::VBox vbox, const char *name, double value, double lower, double upper, ImportExportCallback const &cb); + + ui::SpinButton addSpinner(ui::VBox vbox, const char *name, double value, double lower, double upper, + ImportExportCallback const &cb); protected: -void AddBoolToggleData( struct _GtkToggleButton& object, const BoolImportCallback& importCallback, const BoolExportCallback& exportCallback ); -void AddIntRadioData( struct _GtkRadioButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void AddTextEntryData( struct _GtkEntry& object, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ); -void AddIntEntryData( struct _GtkEntry& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void AddSizeEntryData( struct _GtkEntry& object, const SizeImportCallback& importCallback, const SizeExportCallback& exportCallback ); -void AddFloatEntryData( struct _GtkEntry& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ); -void AddFloatSpinnerData( struct _GtkSpinButton& object, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ); -void AddIntSpinnerData( struct _GtkSpinButton& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void AddIntAdjustmentData( struct _GtkAdjustment& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); -void AddIntComboData( struct _GtkComboBox& object, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ); + void AddBoolToggleData(struct _GtkToggleButton &object, ImportExportCallback const &cb); + + void AddIntRadioData(struct _GtkRadioButton &object, ImportExportCallback const &cb); + + void AddTextEntryData(struct _GtkEntry &object, ImportExportCallback const &cb); + + void AddIntEntryData(struct _GtkEntry &object, ImportExportCallback const &cb); + + void AddSizeEntryData(struct _GtkEntry &object, ImportExportCallback const &cb); + + void AddFloatEntryData(struct _GtkEntry &object, ImportExportCallback const &cb); + + void AddFloatSpinnerData(struct _GtkSpinButton &object, ImportExportCallback const &cb); + + void AddIntSpinnerData(struct _GtkSpinButton &object, ImportExportCallback const &cb); + + void AddIntAdjustmentData(struct _GtkAdjustment &object, ImportExportCallback const &cb); + + void AddIntComboData(struct _GtkComboBox &object, ImportExportCallback const &cb); void AddDialogData( struct _GtkToggleButton& object, bool& data ); void AddDialogData( struct _GtkRadioButton& object, int& data );