X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=radiant%2Fpreferences.h;h=59dd60daaa0c6e42633932892511d91fa594429c;hb=cd6613e5171544b68d4ae70546c90a15c99b22a5;hp=8793d03904b091a075b6cdf1a8969a09d7100b28;hpb=b7e36c120eb1546a6c6f97f30e42ab7f9a559c61;p=xonotic%2Fnetradiant.git diff --git a/radiant/preferences.h b/radiant/preferences.h index 8793d039..59dd60da 100644 --- a/radiant/preferences.h +++ b/radiant/preferences.h @@ -33,24 +33,25 @@ #include "dialog.h" #include #include +#include "property.h" -void Widget_connectToggleDependency( GtkWidget* self, GtkWidget* toggleButton ); +void Widget_connectToggleDependency( ui::Widget self, ui::Widget toggleButton ); class PreferencesPage { Dialog& m_dialog; -GtkWidget* m_vbox; +ui::VBox m_vbox; public: -PreferencesPage( Dialog& dialog, GtkWidget* vbox ) : m_dialog( dialog ), m_vbox( vbox ){ +PreferencesPage( Dialog& dialog, ui::VBox vbox ) : m_dialog( dialog ), m_vbox( vbox ){ } -GtkWidget* appendCheckBox( const char* name, const char* flag, bool& data ){ +ui::CheckButton appendCheckBox( const char* name, const char* flag, bool& data ){ return m_dialog.addCheckBox( m_vbox, name, flag, data ); } -GtkWidget* 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,54 +59,54 @@ 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 ); } -GtkWidget* 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 ); } -GtkWidget* appendEntry( const char* name, int& data ){ +ui::Widget appendEntry( const char* name, int& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -GtkWidget* 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 ); } -GtkWidget* appendEntry( const char* name, std::size_t& data ){ +ui::Widget appendEntry( const char* name, std::size_t& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -GtkWidget* 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 ); } -GtkWidget* appendEntry( const char* name, float& data ){ +ui::Widget appendEntry( const char* name, float& data ){ return m_dialog.addEntry( m_vbox, name, data ); } -GtkWidget* 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 ); } -GtkWidget* appendPathEntry( const char* name, CopiedString& data, bool directory ){ +ui::Widget appendPathEntry( const char* name, CopiedString& data, bool directory ){ return m_dialog.addPathEntry( m_vbox, name, data, directory ); } -GtkWidget* appendSpinner( const char* name, int& data, double value, double lower, double upper ){ +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 ); } -GtkWidget* 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 ); } -GtkWidget* 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); + } + + static void Import(LatchedValue &self, T value) { + self.m_latched = value; + if (value != self.m_value) { + PreferencesDialog_restartRequired(self.m_description); + } + } +}; -typedef LatchedValue LatchedInt; -typedef MemberCaller1 LatchedIntImportCaller; +template +Property make_property(LatchedValue &self) { + return make_property, T>(self); +} /*! holds information for a given game @@ -197,7 +205,6 @@ void Dump(); extern CGameDescription *g_pGameDescription; -typedef struct _GtkWidget GtkWidget; class PrefsDlg; class PreferencesPage; @@ -250,8 +257,6 @@ CGameDialog() : } virtual ~CGameDialog(); -void AddPacksURL( StringOutputStream &s ); - /*! intialize the game dialog, called at CPrefsDlg::Init will scan for games, load prefs, and do game selection dialog if needed @@ -272,10 +277,10 @@ void DoGameDialog(); Dialog API this is only called when the dialog is built at startup for main engine select */ -GtkWindow* BuildDialog(); +ui::Window BuildDialog(); void GameFileImport( int value ); -void GameFileExport( const IntImportCallback& importCallback ) const; +void GameFileExport( const Callback & importCallback ) const; /*! construction of the dialog frame @@ -331,7 +336,7 @@ std::list mGames; public: -GtkWidget *m_notebook; +ui::Widget m_notebook{ui::null}; virtual ~PrefsDlg(){ g_string_free( m_rc_path, true ); @@ -364,12 +369,12 @@ GString *m_inipath; void Init(); /*! Utility function for swapping notebook pages for tree list selections */ -void showPrefPage( GtkWidget* prefpage ); +void showPrefPage( ui::Widget prefpage ); protected: /*! Dialog API */ -GtkWindow* BuildDialog(); +ui::Window BuildDialog(); void PostModal( EMessageBoxReturn code ); }; @@ -384,8 +389,7 @@ struct preferences_globals_t }; extern preferences_globals_t g_preferences_globals; -typedef struct _GtkWindow GtkWindow; -void PreferencesDialog_constructWindow( GtkWindow* main_window ); +void PreferencesDialog_constructWindow( ui::Window main_window ); void PreferencesDialog_destroyWindow(); void PreferencesDialog_showDialog();