X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fpreferences.h;h=59dd60daaa0c6e42633932892511d91fa594429c;hb=73afa2885eded3443055c49cdba7e225af109078;hp=c959ad3ec65e4a008ca6ceb5be0e90bf04d3039c;hpb=f0350b355f68497312c517c1bfd1fc216c722992;p=xonotic%2Fnetradiant.git diff --git a/radiant/preferences.h b/radiant/preferences.h index c959ad3e..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,11 +47,11 @@ 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, const BoolImportCallback& importCallback, const BoolExportCallback& exportCallback ){ - return m_dialog.addCheckBox( m_vbox, name, flag, importCallback, exportCallback ); +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, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){ - m_dialog.addCombo( m_vbox, name, values, importCallback, exportCallback ); +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 ){ m_dialog.addCombo( m_vbox, name, data, values ); @@ -58,38 +59,38 @@ 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, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){ - m_dialog.addRadio( m_vbox, name, names, importCallback, exportCallback ); +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, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){ - m_dialog.addRadioIcons( m_vbox, name, icons, importCallback, exportCallback ); +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, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){ - return m_dialog.addIntEntry( m_vbox, name, importCallback, exportCallback ); +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, const SizeImportCallback& importCallback, const SizeExportCallback& exportCallback ){ - return m_dialog.addSizeEntry( m_vbox, name, importCallback, exportCallback ); +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, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ){ - return m_dialog.addFloatEntry( m_vbox, name, importCallback, exportCallback ); +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, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){ - return m_dialog.addPathEntry( m_vbox, name, browse_directory, importCallback, exportCallback ); +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 ){ return m_dialog.addPathEntry( m_vbox, name, data, directory ); @@ -97,15 +98,15 @@ 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, const IntImportCallback& importCallback, const IntExportCallback& exportCallback ){ - return m_dialog.addSpinner( m_vbox, name, value, lower, upper, importCallback, exportCallback ); +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, const FloatImportCallback& importCallback, const FloatExportCallback& exportCallback ){ - return m_dialog.addSpinner( m_vbox, name, value, lower, upper, importCallback, exportCallback ); +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 ); } }; -typedef Callback1 PreferencesPageCallback; +typedef Callback PreferencesPageCallback; class PreferenceGroup { @@ -113,7 +114,7 @@ public: virtual PreferencesPage createPage( const char* treeName, const char* frameName ) = 0; }; -typedef Callback1 PreferenceGroupCallback; +typedef Callback PreferenceGroupCallback; void PreferencesDialog_addInterfacePreferences( const PreferencesPageCallback& callback ); void PreferencesDialog_addInterfacePage( const PreferenceGroupCallback& callback ); @@ -125,31 +126,38 @@ void PreferencesDialog_addSettingsPage( const PreferenceGroupCallback& callback void PreferencesDialog_restartRequired( const char* staticName ); template -class LatchedValue -{ +class LatchedValue { public: -Value m_value; -Value m_latched; -const char* m_description; + Value m_value; + Value m_latched; + const char *m_description; -LatchedValue( Value value, const char* description ) : m_latched( value ), m_description( description ){ -} -void useLatched(){ - m_value = m_latched; -} -void import( Value value ){ - m_latched = value; - if ( m_latched != m_value ) { - PreferencesDialog_restartRequired( m_description ); - } -} + LatchedValue(Value value, const char *description) : m_latched(value), m_description(description) { + } + + void useLatched() { + m_value = m_latched; + } }; -typedef LatchedValue LatchedBool; -typedef MemberCaller1 LatchedBoolImportCaller; +template +struct PropertyImpl, T> { + static void Export(const LatchedValue &self, const Callback &returnz) { + returnz(self.m_latched); + } -typedef LatchedValue LatchedInt; -typedef MemberCaller1 LatchedIntImportCaller; + static void Import(LatchedValue &self, T value) { + self.m_latched = value; + if (value != self.m_value) { + PreferencesDialog_restartRequired(self.m_description); + } + } +}; + +template +Property make_property(LatchedValue &self) { + return make_property, T>(self); +} /*! holds information for a given game @@ -272,7 +280,7 @@ void DoGameDialog(); ui::Window BuildDialog(); void GameFileImport( int value ); -void GameFileExport( const IntImportCallback& importCallback ) const; +void GameFileExport( const Callback & importCallback ) const; /*! construction of the dialog frame