13
0

add Gtk::ColorButton widget to LuaDialog and add ability to change multiple route colors at a time

This commit is contained in:
Nikolaus Gullotta 2018-04-03 15:38:54 -05:00
parent 37fe6b8ba1
commit 112a1ab1c4
2 changed files with 37 additions and 0 deletions

View File

@ -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<std::string> ();
}
w = new LuaFileChooser (key, title, Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER, path);
} else if (type == "color") {
w = new LuaColorPicker (key);
}
if (w) {

View File

@ -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<ARDOUR::Stripable> 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);