From: Hans Baier Date: Thu, 25 Dec 2008 09:28:57 +0000 (+0000) Subject: * Made MIDI channel coloring work in the track channel selector X-Git-Tag: 3.0-alpha5~3908 X-Git-Url: https://main.carlh.net/gitweb/?a=commitdiff_plain;h=c3636a8c61401c2e487313566348e0f6d1fab990;p=ardour.git * Made MIDI channel coloring work in the track channel selector * added loudspeaker button to MIDI toolbar git-svn-id: svn://localhost/ardour2/branches/3.0@4347 d708f5d6-7413-0410-9779-e7cbd77b26cf --- diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 634f1fd2be..9740c8857c 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3241,15 +3241,18 @@ Editor::setup_toolbar () } void -Editor::midi_panic_toggle () +Editor::midi_panic_button_pressed () { if (session) { session->midi_panic(); - midi_panic_button.set_active (false); - midi_panic_button.set_state (STATE_NORMAL); } } +void Editor::midi_sound_notes_toggled () +{ + cerr << "toggle sound notes" << endl; +} + void Editor::setup_midi_toolbar () { @@ -3281,18 +3284,18 @@ Editor::setup_midi_toolbar () midi_tool_button_box.pack_start(midi_tool_pencil_button, true, true); midi_tool_button_box.pack_start(midi_tool_select_button, true, true); midi_tool_button_box.pack_start(midi_tool_resize_button, true, true); - midi_tool_button_box.pack_start(midi_tool_erase_button, true, true); + midi_tool_button_box.pack_start(midi_tool_erase_button , true, true); midi_tool_button_box.set_homogeneous(true); midi_tool_pencil_button.set_name ("MouseModeButton"); midi_tool_select_button.set_name ("MouseModeButton"); midi_tool_resize_button.set_name ("MouseModeButton"); - midi_tool_erase_button.set_name ("MouseModeButton"); + midi_tool_erase_button .set_name ("MouseModeButton"); ARDOUR_UI::instance()->tooltips().set_tip (midi_tool_pencil_button, _("Add/Move/Stretch Notes")); ARDOUR_UI::instance()->tooltips().set_tip (midi_tool_select_button, _("Select/Move Notes")); ARDOUR_UI::instance()->tooltips().set_tip (midi_tool_resize_button, _("Resize Notes")); - ARDOUR_UI::instance()->tooltips().set_tip (midi_tool_erase_button, _("Erase Notes")); + ARDOUR_UI::instance()->tooltips().set_tip (midi_tool_erase_button, _("Erase Notes")); midi_tool_pencil_button.unset_flags (CAN_FOCUS); midi_tool_select_button.unset_flags (CAN_FOCUS); @@ -3308,12 +3311,22 @@ Editor::setup_midi_toolbar () midi_tool_erase_button.signal_toggled().connect (bind (mem_fun(*this, &Editor::midi_edit_mode_toggled), Editing::MidiEditErase)); + + /* Midi sound notes */ + midi_sound_notes.add (*(manage (new Image (::get_icon("midi_sound_notes"))))); + midi_sound_notes.set_relief(Gtk::RELIEF_NONE); + ARDOUR_UI::instance()->tooltips().set_tip (midi_sound_notes, _("Sound Notes")); + midi_sound_notes.unset_flags (CAN_FOCUS); + midi_sound_notes.signal_toggled().connect (mem_fun(*this, + &Editor::midi_sound_notes_toggled)); + /* Panic */ - VBox* panic_box = manage (new VBox); + HBox* panic_box = manage (new HBox); midi_panic_button.set_name("MidiPanicButton"); midi_panic_button.signal_pressed().connect ( - mem_fun(this, &Editor::midi_panic_toggle)); + mem_fun(this, &Editor::midi_panic_button_pressed)); + panic_box->pack_start (midi_sound_notes , true, true); panic_box->pack_start (midi_panic_button, true, true); /* Pack everything in... */ diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index e9f83ddf68..a79b165ba1 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1749,9 +1749,13 @@ public: Gtk::ToggleButton midi_tool_select_button; Gtk::ToggleButton midi_tool_resize_button; Gtk::ToggleButton midi_tool_erase_button; - Gtk::ToggleButton midi_panic_button; + Gtk::Button midi_panic_button; + Gtk::ToggleButton midi_sound_notes; GroupedButtons *midi_tool_button_set; void midi_edit_mode_toggled (Editing::MidiEditMode m); + void midi_panic_button_pressed (); + void midi_sound_notes_toggled(); + bool ignore_midi_edit_mode_toggle; Gtkmm2ext::TearOff* midi_tools_tearoff; @@ -1759,7 +1763,6 @@ public: Gtk::EventBox midi_toolbar_base; Gtk::Frame midi_toolbar_frame; - void midi_panic_toggle (); void setup_midi_toolbar (); /* selection process */ diff --git a/gtk2_ardour/icons/midi_sound_notes.png b/gtk2_ardour/icons/midi_sound_notes.png new file mode 100644 index 0000000000..65f52e1fb0 Binary files /dev/null and b/gtk2_ardour/icons/midi_sound_notes.png differ diff --git a/gtk2_ardour/midi_channel_selector.cc b/gtk2_ardour/midi_channel_selector.cc index 281c6f5e2d..4415a65f65 100644 --- a/gtk2_ardour/midi_channel_selector.cc +++ b/gtk2_ardour/midi_channel_selector.cc @@ -21,6 +21,7 @@ #include "midi_channel_selector.h" #include "gtkmm/separator.h" #include "i18n.h" +#include "rgb_macros.h" using namespace std; using namespace Gtk; @@ -63,6 +64,32 @@ MidiChannelSelector::~MidiChannelSelector() { } +void +MidiChannelSelector::set_channel_colors(const uint32_t new_channel_colors[16]) +{ + for (int row = 0; row < 4; ++row) { + for (int column = 0; column < 4; ++column) { + char color_normal[8]; + char color_active[8]; + snprintf(color_normal, 8, "#%x", UINT_INTERPOLATE(new_channel_colors[row * 4 + column], 0x000000ff, 0.6)); + snprintf(color_active, 8, "#%x", new_channel_colors[row * 4 + column]); + _buttons[row][column].modify_bg(STATE_NORMAL, Gdk::Color(color_normal)); + _buttons[row][column].modify_bg(STATE_ACTIVE, Gdk::Color(color_active)); + } + } +} + +void +MidiChannelSelector::set_default_channel_color() +{ + for (int row = 0; row < 4; ++row) { + for (int column = 0; column < 4; ++column) { + _buttons[row][column].unset_bg(STATE_NORMAL); + _buttons[row][column].unset_bg(STATE_ACTIVE); + } + } +} + SingleMidiChannelSelector::SingleMidiChannelSelector(uint8_t active_channel) : MidiChannelSelector() { diff --git a/gtk2_ardour/midi_channel_selector.h b/gtk2_ardour/midi_channel_selector.h index 1f15f3eef5..e026c12325 100644 --- a/gtk2_ardour/midi_channel_selector.h +++ b/gtk2_ardour/midi_channel_selector.h @@ -38,6 +38,9 @@ public: sigc::signal mode_changed; + void set_channel_colors(const uint32_t new_channel_colors[16]); + void set_default_channel_color(); + protected: virtual void button_toggled(Gtk::ToggleButton* button, uint8_t button_nr) = 0; Gtk::Label _button_labels[4][4]; diff --git a/gtk2_ardour/midi_time_axis.cc b/gtk2_ardour/midi_time_axis.cc index 1b66fa53af..709f740bf0 100644 --- a/gtk2_ardour/midi_time_axis.cc +++ b/gtk2_ardour/midi_time_axis.cc @@ -71,6 +71,7 @@ #include "midi_scroomer.h" #include "piano_roll_header.h" #include "ghostregion.h" +#include "canvas-note-event.h" #include @@ -369,6 +370,12 @@ void MidiTimeAxisView::set_color_mode(ColorMode mode) { if (_color_mode != mode) { + if (mode == ChannelColors) { + _channel_selector.set_channel_colors(CanvasNoteEvent::midi_channel_colors); + } else { + _channel_selector.set_default_channel_color(); + } + _color_mode = mode; _view->redisplay_diskstream(); }