From: Nikolaus Gullotta Date: Tue, 3 Apr 2018 20:38:54 +0000 (-0500) Subject: add Gtk::ColorButton widget to LuaDialog and add ability to change multiple route... X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=112a1ab1c42ffce4822dbb1bbe4c26c95dbce63d;p=ardour.git add Gtk::ColorButton widget to LuaDialog and add ability to change multiple route colors at a time --- diff --git a/gtk2_ardour/luadialog.cc b/gtk2_ardour/luadialog.cc index 90464d26af..943b077b77 100644 --- a/gtk2_ardour/luadialog.cc +++ b/gtk2_ardour/luadialog.cc @@ -22,6 +22,7 @@ #include "ardour/dB.h" #include "ardour/rc_configuration.h" +#include "gtk2_ardour/stripable_colorpicker.h" #include "gtkmm2ext/utils.h" @@ -169,6 +170,34 @@ protected: Gtk::HSeparator _sep; }; +class LuaColorPicker : public LuaDialogWidget +{ +public: + LuaColorPicker (std::string const& key) + : LuaDialogWidget (key, "", 0, 1) + {} + + Gtk::Widget* widget () + { + return &_cs; + } + void assign (luabridge::LuaRef* rv) const { + uint32_t rgba = ARDOUR_UI_UTILS::gdk_color_to_rgba(_cs.get_color()); + (*rv)[_key] = rgba; + } +protected: + Gtk::ColorButton _cs; +}; +/* +local a = { + {type = "color", key = "col", title = ""} +} + +local rv = LuaDialog.Dialog("", a):run() + +print(rv['col']) +*/ + class LuaDialogCheckbox : public LuaDialogWidget { public: @@ -675,6 +704,8 @@ Dialog::Dialog (std::string const& title, luabridge::LuaRef lr) path = i.value ()["path"].cast (); } w = new LuaFileChooser (key, title, Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER, path); + } else if (type == "color") { + w = new LuaColorPicker (key); } if (w) { diff --git a/gtk2_ardour/stripable_colorpicker.cc b/gtk2_ardour/stripable_colorpicker.cc index 4e8fe339d4..66602a9f67 100644 --- a/gtk2_ardour/stripable_colorpicker.cc +++ b/gtk2_ardour/stripable_colorpicker.cc @@ -19,6 +19,7 @@ #include "pbd/compose.h" #include "pbd/i18n.h" +#include "public_editor.h" #include "stripable_colorpicker.h" #include "ui_config.h" #include "utils.h" @@ -142,10 +143,15 @@ StripableColorDialog::popup (boost::shared_ptr s) void StripableColorDialog::finish_color_edit (int response) { + ARDOUR::RouteList rl = PublicEditor::instance().get_selection().tracks.routelist(); + if (response == RESPONSE_OK) { ColorChanged (gdk_color_to_rgba (get_colorsel()->get_current_color())); /* EMIT SIGNAL */ } if (_stripable && response == RESPONSE_OK) { + for (ARDOUR::RouteList::iterator i = rl.begin(); i != rl.end(); ++i) { + (*i)->presentation_info().set_color (gdk_color_to_rgba (get_colorsel()->get_current_color())); + } _stripable->presentation_info().set_color (gdk_color_to_rgba (get_colorsel()->get_current_color())); } else if (_stripable) { _stripable->presentation_info().set_color (_initial_color);