26 #include <glibmm/miscutils.h>
27 #include <glib/gstdio.h>
63 #include
"ui_config_vars.h"
64 #include
"canvas_vars.h"
69 aliases_modified (false),
70 colors_modified (false),
71 modifiers_modified (false),
113 if (param ==
"ui-rc-file") {
115 }
else if (param ==
"color-file") {
127 ss <<
"gtk_color_scheme = \"" << hex;
131 if (g->first.find (
"gtk_") == 0) {
132 ColorAliases::const_iterator a =
color_aliases.find (g->first);
133 const string gtk_name = g->first.substr (4);
134 ss << gtk_name <<
":#" << std::setw (6) << setfill (
'0') << (
color (g->second) >> 8) <<
';';
138 ss <<
'"' << dec << endl;
142 Gtk::Settings::get_default()->property_gtk_color_scheme() = ss.str();
148 #undef UI_CONFIG_VARIABLE
149 #define UI_CONFIG_VARIABLE(Type,var,Name,value) functor (Name);
151 #undef UI_CONFIG_VARIABLE
165 if (!tree.
read (rcfile.c_str())) {
168 if (
set_state (*tree.
root(), Stateful::loading_state_version)) {
198 basename += color_file.get();
199 basename +=
".colors";
207 basename = color_file.get();
208 basename +=
".colors";
221 if (!tree.
read (cfile.c_str())) {
226 if (
set_state (*tree.
root(), Stateful::loading_state_version)) {
248 for (Colors::const_iterator i =
colors.begin(); i !=
colors.end(); ++i) {
252 ss <<
"0x" << setw (8) << setfill (
'0') << hex << i->second;
258 parent =
new XMLNode (
X_(
"ColorAliases"));
277 std::string colorfile = Glib::build_filename (
user_config_directory(), (
string (
"my-") + color_file.get() +
".colors"));
281 if (!tree.
write (colorfile.c_str())){
302 if (!tree.
read (rcfile.c_str())) {
307 if (
set_state (*tree.
root(), Stateful::loading_state_version)) {
319 if (!tree.
read (rcfile)) {
324 if (
set_state (*tree.
root(), Stateful::loading_state_version)) {
333 error <<
_(
"could not find any ui configuration file, canvas will look broken.") <<
endmsg;
350 if (!tree.
write (rcfile.c_str())){
398 node =
new XMLNode (which_node);
400 #undef UI_CONFIG_VARIABLE
401 #undef CANVAS_FONT_VARIABLE
402 #define UI_CONFIG_VARIABLE(Type,var,Name,value) if (node->name() == "UI") { var.add_to_node (*node); }
403 #define CANVAS_FONT_VARIABLE(var,Name) if (node->name() == "Canvas") { var.add_to_node (*node); }
406 #undef UI_CONFIG_VARIABLE
407 #undef CANVAS_FONT_VARIABLE
417 if (root.
name() !=
"Ardour") {
421 Stateful::save_extra_xml (root);
427 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
431 if (node->
name() ==
"Canvas" || node->
name() ==
"UI") {
468 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
469 if ((*niter)->name() !=
X_(
"ColorAlias")) {
472 name = (*niter)->property (
X_(
"name"));
473 alias = (*niter)->property (
X_(
"alias"));
491 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
492 if ((*niter)->name() !=
X_(
"Color")) {
495 name = (*niter)->property (
X_(
"name"));
496 color = (*niter)->property (
X_(
"value"));
499 ArdourCanvas::Color c;
500 c = strtoul (color->
value().c_str(), 0, 16);
517 for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
518 if ((*niter)->name() !=
X_(
"Modifier")) {
522 name = (*niter)->property (
X_(
"name"));
523 mod = (*niter)->property (
X_(
"modifier"));
526 SVAModifier svam (mod->
value());
535 #undef UI_CONFIG_VARIABLE
536 #define UI_CONFIG_VARIABLE(Type,var,name,val) if (var.set_from_node (node)) { ParameterChanged (name); }
537 #define CANVAS_FONT_VARIABLE(var,name) if (var.set_from_node (node)) { ParameterChanged (name); }
540 #undef UI_CONFIG_VARIABLE
541 #undef CANVAS_FONT_VARIABLE
544 ArdourCanvas::SVAModifier
547 Modifiers::const_iterator m =
modifiers.find (name);
551 return SVAModifier ();
557 return HSV (
color (colorname)).mod (
modifier (modifiername)).color ();
563 return HSV (color).mod (
modifier (modifiername)).color ();
576 Colors::const_iterator rc =
colors.find (e->second);
582 Colors::const_iterator rc =
colors.find (name);
599 return rgba_to_color ((g_random_int()%256)/255.0,
600 (g_random_int()%256)/255.0,
601 (g_random_int()%256)/255.0,
616 Colors::iterator i =
colors.find (name);
643 Modifiers::iterator m =
modifiers.find (name);
658 string basename = ui_rc_file.get();
659 std::string rc_file_path;
668 info <<
"Loading ui configuration file " << rc_file_path <<
endmsg;
ArdourCanvas::Color color(const std::string &, bool *failed=0) const
std::string to_string(T t, std::ios_base &(*f)(std::ios_base &))
void load_colors(XMLNode const &)
ArdourCanvas::SVAModifier modifier(const std::string &) const
const std::string & value() const
const std::string & name() const
static const char * ui_config_file_name
XMLNode & get_state(void)
XMLNode * add_child_copy(const XMLNode &)
LIBPBD_API Transmitter error
LIBPBD_API Transmitter warning
const XMLNodeList & children(const std::string &str=std::string()) const
#define CANVAS_FONT_VARIABLE(var, name)
std::ostream & endmsg(std::ostream &ostr)
static const char * default_ui_config_file_name
void map_parameters(boost::function< void(std::string)> &)
bool find_file(const Searchpath &search_path, const string &filename, std::string &result)
void load_color_aliases(XMLNode const &)
std::list< XMLNode * > XMLNodeList
#define UI_CONFIG_VARIABLE(Type, var, name, val)
LIBARDOUR_API std::string user_config_directory(int version=-1)
ColorAliases color_aliases
void set_color(const std::string &name, ArdourCanvas::Color)
XMLNode * set_root(XMLNode *n)
int load_rcfile(std::string, bool themechange=false)
void load_rc_file(bool themechange, bool allow_own=true)
static UIConfiguration * _instance
void parameter_changed(std::string)
LIBARDOUR_API XMLNode * find_named_node(const XMLNode &node, std::string name)
LIBARDOUR_API PBD::Searchpath ardour_config_search_path()
LIBPBD_API Transmitter info
XMLProperty * add_property(const char *name, const std::string &value)
void add_child_nocopy(XMLNode &)
static const double hue_width
ArdourCanvas::Color color_mod(std::string const &color, std::string const &modifier) const
sigc::signal< void > ColorsChanged
void set_alias(std::string const &name, std::string const &alias)
sigc::signal< void, std::string > ParameterChanged
int load_color_theme(bool allow_own=true)
ArdourCanvas::Color quantized(ArdourCanvas::Color) const
XMLNodeList::const_iterator XMLNodeConstIterator
void set_variables(const XMLNode &)
void set_modifier(std::string const &, ArdourCanvas::SVAModifier svam)
XMLNode & get_variables(std::string)
void load_modifiers(XMLNode const &)
std::string string_compose(const std::string &fmt, const T1 &o1)
int set_state(const XMLNode &, int version)
LIBARDOUR_API PBD::PropertyDescriptor< bool > color