X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fui_config.h;h=4b7de631d6b6efec14a8456c27b17be0af6786eb;hb=bb2032795941dbb0bf8e8f33a4acc2e075e0104f;hp=6e7946b32b324e3e4aa3d747600436abc1b9b78c;hpb=69ea58691945606219de487a41532de376e7047e;p=ardour.git diff --git a/gtk2_ardour/ui_config.h b/gtk2_ardour/ui_config.h index 6e7946b32b..4b7de631d6 100644 --- a/gtk2_ardour/ui_config.h +++ b/gtk2_ardour/ui_config.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2000-2007 Paul Davis + Copyright (C) 2000-2007 Paul Davis This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -24,112 +24,126 @@ #include #include -#include -#include +#include +#include -template -class UIConfigVariable -{ - public: - UIConfigVariable (std::string str) : _name (str) {} - UIConfigVariable (std::string str, T val) : _name (str), value(val) {} - - std::string name() const { return _name; } - - bool set (T val) { - if (val == value) { - return false; - } - value = val; - return true; - } - - T get() const { - return value; - } - - void add_to_node (XMLNode& node) { - std::stringstream ss; - ss << std::hex; - ss.fill('0'); - ss.width(8); - ss << value; - XMLNode* child = new XMLNode ("Option"); - child->add_property ("name", _name); - child->add_property ("value", ss.str()); - node.add_child_nocopy (*child); - } - - bool set_from_node (const XMLNode& node) { - - const XMLProperty* prop; - XMLNodeList nlist; - XMLNodeConstIterator niter; - XMLNode* child; - - nlist = node.children(); - - for (niter = nlist.begin(); niter != nlist.end(); ++niter) { - - child = *niter; - - if (child->name() == "Option") { - if ((prop = child->property ("name")) != 0) { - if (prop->value() == _name) { - if ((prop = child->property ("value")) != 0) { - std::stringstream ss; - ss << std::hex; - ss << prop->value(); - ss >> value; - - return true; - } - } - } - } - } - return false; - } - - protected: - T get_for_save() { return value; } - std::string _name; - T value; - -}; +#include "ardour/types.h" // required for opeators used in pbd/configuration_variable.h +#include "ardour/types_convert.h" + +#include "pbd/stateful.h" +#include "pbd/xml++.h" +#include "pbd/configuration_variable.h" + +#include "gtkmm2ext/colors.h" +#include "widgets/ui_config.h" -class UIConfiguration : public PBD::Stateful +#include "utils.h" + +class UIConfiguration : public ArdourWidgets::UIConfigurationBase { - public: +private: UIConfiguration(); ~UIConfiguration(); - std::vector *> canvas_colors; +public: + static UIConfiguration& instance(); + + static std::string color_file_suffix; + + void load_rc_file (bool themechange, bool allow_own = true); int load_state (); int save_state (); + int load_defaults (); + int load_color_theme (bool allow_own); - int set_state (const XMLNode&); + int set_state (const XMLNode&, int version); XMLNode& get_state (void); XMLNode& get_variables (std::string); void set_variables (const XMLNode&); - void pack_canvasvars (); - sigc::signal ParameterChanged; + std::string color_file_name (bool use_my, bool with_version) const; -#undef UI_CONFIG_VARIABLE -#undef CANVAS_VARIABLE -#define UI_CONFIG_VARIABLE(Type,var,name,val) UIConfigVariable var; -#define CANVAS_VARIABLE(var,name) UIConfigVariable var; + typedef std::map Colors; + typedef std::map ColorAliases; + typedef std::map Modifiers; + + Colors colors; + ColorAliases color_aliases; + Modifiers modifiers; + + void set_alias (std::string const & name, std::string const & alias); + void set_color (const std::string& name, Gtkmm2ext::Color); + void set_modifier (std::string const &, Gtkmm2ext::SVAModifier svam); + + std::string color_as_alias (Gtkmm2ext::Color c); + Gtkmm2ext::Color quantized (Gtkmm2ext::Color) const; + + Gtkmm2ext::Color color (const std::string&, bool* failed = 0) const; + Gtkmm2ext::Color color_mod (std::string const & color, std::string const & modifier) const; + Gtkmm2ext::Color color_mod (const Gtkmm2ext::Color& color, std::string const & modifier) const; + Gtkmm2ext::HSV color_hsv (const std::string&) const; + Gtkmm2ext::SVAModifier modifier (const std::string&) const; + + static std::string color_to_hex_string (Gtkmm2ext::Color c); + static std::string color_to_hex_string_no_alpha (Gtkmm2ext::Color c); + + void reset_dpi (); + float get_ui_scale (); + + sigc::signal ParameterChanged; + void map_parameters (boost::function&); + + void parameter_changed (std::string); + + /** called before initializing any part of the GUI. Sets up + * any runtime environment required to make the GUI work + * in specific ways. + */ + int pre_gui_init (); + + /** called after the GUI toolkit has been initialized. */ + UIConfiguration* post_gui_init (); + +#undef UI_CONFIG_VARIABLE +#define UI_CONFIG_VARIABLE(Type,var,name,value) \ + Type get_##var () const { return var.get(); } \ + bool set_##var (Type val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; } #include "ui_config_vars.h" +#undef UI_CONFIG_VARIABLE +#define CANVAS_FONT_VARIABLE(var,name) \ + Pango::FontDescription get_##var () const { return ARDOUR_UI_UTILS::sanitized_font (var.get()); } \ + bool set_##var (const std::string& val) { bool ret = var.set (val); if (ret) { ParameterChanged (name); } return ret; } #include "canvas_vars.h" +#undef CANVAS_FONT_VARIABLE + +private: + /* declare variables */ + #undef UI_CONFIG_VARIABLE -#undef CANVAS_VARIABLE +#define UI_CONFIG_VARIABLE(Type,var,name,value) PBD::ConfigVariable var; +#include "ui_config_vars.h" +#undef UI_CONFIG_VARIABLE + +#define CANVAS_FONT_VARIABLE(var,name) PBD::ConfigVariable var; +#include "canvas_vars.h" +#undef CANVAS_FONT_VARIABLE - private: XMLNode& state (); - bool hack; + bool _dirty; + bool aliases_modified; + bool colors_modified; + bool modifiers_modified; + + int store_color_theme (); + void load_color_aliases (XMLNode const &); + void load_colors (XMLNode const &); + void load_modifiers (XMLNode const &); + void reset_gtk_theme (); + int load_color_file (std::string const &); + void colors_changed (); + + uint32_t block_save; }; #endif /* __ardour_ui_configuration_h__ */ -