X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fnetradiant.git;a=blobdiff_plain;f=radiant%2Fpreferences.h;h=59dd60daaa0c6e42633932892511d91fa594429c;hp=8d7f93aeb32b6b5f4d0c17918023382848dd1ebf;hb=fea0d2e6575b21945c4800805d66e43a2247ded5;hpb=2a1cfc426e60b77c7b212d827e2592de01041266 diff --git a/radiant/preferences.h b/radiant/preferences.h index 8d7f93ae..59dd60da 100644 --- a/radiant/preferences.h +++ b/radiant/preferences.h @@ -33,6 +33,7 @@ #include "dialog.h" #include #include +#include "property.h" void Widget_connectToggleDependency( ui::Widget self, ui::Widget toggleButton ); @@ -46,10 +47,10 @@ PreferencesPage( Dialog& dialog, ui::VBox vbox ) : m_dialog( dialog ), m_vbox( v ui::CheckButton appendCheckBox( const char* name, const char* flag, bool& data ){ return m_dialog.addCheckBox( m_vbox, name, flag, data ); } -ui::CheckButton appendCheckBox( const char* name, const char* flag, ImportExportCallback const &cb ){ +ui::CheckButton appendCheckBox( const char* name, const char* flag, Property const &cb ){ return m_dialog.addCheckBox( m_vbox, name, flag, cb ); } -void appendCombo( const char* name, StringArrayRange values, ImportExportCallback const &cb ){ +void appendCombo( const char* name, StringArrayRange values, Property const &cb ){ m_dialog.addCombo( m_vbox, name, values, cb ); } void appendCombo( const char* name, int& data, StringArrayRange values ){ @@ -58,37 +59,37 @@ void appendCombo( const char* name, int& data, StringArrayRange values ){ void appendSlider( 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 ){ m_dialog.addSlider( m_vbox, name, data, draw_value, low, high, value, lower, upper, step_increment, page_increment ); } -void appendRadio( const char* name, StringArrayRange names, ImportExportCallback const &cb ){ +void appendRadio( const char* name, StringArrayRange names, Property const &cb ){ m_dialog.addRadio( m_vbox, name, names, cb ); } void appendRadio( const char* name, int& data, StringArrayRange names ){ m_dialog.addRadio( m_vbox, name, data, names ); } -void appendRadioIcons( const char* name, StringArrayRange icons, ImportExportCallback const &cb ){ +void appendRadioIcons( const char* name, StringArrayRange icons, Property const &cb ){ m_dialog.addRadioIcons( m_vbox, name, icons, cb ); } void appendRadioIcons( const char* name, int& data, StringArrayRange icons ){ m_dialog.addRadioIcons( m_vbox, name, data, icons ); } -ui::Widget appendEntry( const char* name, ImportExportCallback const &cb ){ +ui::Widget appendEntry( const char* name, Property const &cb ){ return m_dialog.addIntEntry( m_vbox, name, cb ); } ui::Widget appendEntry( const char* name, int& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -ui::Widget appendEntry( const char* name, ImportExportCallback const &cb){ +ui::Widget appendEntry( const char* name, Property const &cb){ return m_dialog.addSizeEntry( m_vbox, name, cb ); } ui::Widget appendEntry( const char* name, std::size_t& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -ui::Widget appendEntry( const char* name, ImportExportCallback const &cb ){ +ui::Widget appendEntry( const char* name, Property const &cb ){ return m_dialog.addFloatEntry( m_vbox, name, cb ); } ui::Widget appendEntry( const char* name, float& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -ui::Widget appendPathEntry( const char* name, bool browse_directory, ImportExportCallback const &cb ){ +ui::Widget appendPathEntry( const char* name, bool browse_directory, Property const &cb ){ return m_dialog.addPathEntry( m_vbox, name, browse_directory, cb ); } ui::Widget appendPathEntry( const char* name, CopiedString& data, bool directory ){ @@ -97,10 +98,10 @@ ui::Widget appendPathEntry( const char* name, CopiedString& data, bool directory ui::SpinButton appendSpinner( const char* name, int& data, double value, double lower, double upper ){ return m_dialog.addSpinner( m_vbox, name, data, value, lower, upper ); } -ui::SpinButton appendSpinner( const char* name, double value, double lower, double upper, ImportExportCallback const &cb ){ +ui::SpinButton appendSpinner( const char* name, double value, double lower, double upper, Property const &cb ){ return m_dialog.addSpinner( m_vbox, name, value, lower, upper, cb ); } -ui::SpinButton appendSpinner( const char* name, double value, double lower, double upper, ImportExportCallback const &cb ){ +ui::SpinButton appendSpinner( const char* name, double value, double lower, double upper, Property const &cb ){ return m_dialog.addSpinner( m_vbox, name, value, lower, upper, cb ); } }; @@ -137,21 +138,25 @@ public: void useLatched() { m_value = m_latched; } +}; - void import(Value value) { - m_latched = value; - if (m_latched != m_value) { - PreferencesDialog_restartRequired(m_description); - } - } +template +struct PropertyImpl, T> { + static void Export(const LatchedValue &self, const Callback &returnz) { + returnz(self.m_latched); + } + + static void Import(LatchedValue &self, T value) { + self.m_latched = value; + if (value != self.m_value) { + PreferencesDialog_restartRequired(self.m_description); + } + } }; -template -ImportExportCallback mkImportExportCallback(LatchedValue &self) { - return { - MemberCaller, void(T), &LatchedValue::import>(self), - ReferenceCaller &), impexp::Export>(self.m_latched) - }; +template +Property make_property(LatchedValue &self) { + return make_property, T>(self); } /*! @@ -275,7 +280,7 @@ void DoGameDialog(); ui::Window BuildDialog(); void GameFileImport( int value ); -void GameFileExport( const ImportExportCallback::Import_t& importCallback ) const; +void GameFileExport( const Callback & importCallback ) const; /*! construction of the dialog frame