* Made MIDI channel coloring work in the track channel selector
authorHans Baier <hansfbaier@googlemail.com>
Thu, 25 Dec 2008 09:28:57 +0000 (09:28 +0000)
committerHans Baier <hansfbaier@googlemail.com>
Thu, 25 Dec 2008 09:28:57 +0000 (09:28 +0000)
* added loudspeaker button to MIDI toolbar

git-svn-id: svn://localhost/ardour2/branches/3.0@4347 d708f5d6-7413-0410-9779-e7cbd77b26cf

gtk2_ardour/editor.cc
gtk2_ardour/editor.h
gtk2_ardour/icons/midi_sound_notes.png [new file with mode: 0644]
gtk2_ardour/midi_channel_selector.cc
gtk2_ardour/midi_channel_selector.h
gtk2_ardour/midi_time_axis.cc

index 634f1fd2be4d880fefc7c64bf7ed9d48cca4c2ef..9740c8857c89335ede480af7f0c2d6a14b0d8eb6 100644 (file)
@@ -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... */
index e9f83ddf68eac6d2f85bb7d6e23a33e2eabad15d..a79b165ba191f63eda416b5d7a386c2422f364f6 100644 (file)
@@ -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 (file)
index 0000000..65f52e1
Binary files /dev/null and b/gtk2_ardour/icons/midi_sound_notes.png differ
index 281c6f5e2d58fe866fa3531cf82a454b2a0a54b6..4415a65f6539ee6fabbf29940d67295cc7c0bf68 100644 (file)
@@ -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()
 {
index 1f15f3eef530f3b27afc7b39bc1595fedc89e168..e026c1232527d69983ffc3a8a226d40fe56f8094 100644 (file)
@@ -38,6 +38,9 @@ public:
        
        sigc::signal<void, ARDOUR::ChannelMode, uint16_t> 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];
index 1b66fa53afe6a4b63922ae3ca98e6cbf03db890b..709f740bf0c4ce1a4f9f8127748f61bbee442dda 100644 (file)
@@ -71,6 +71,7 @@
 #include "midi_scroomer.h"
 #include "piano_roll_header.h"
 #include "ghostregion.h"
+#include "canvas-note-event.h"
 
 #include <ardour/midi_track.h>
 
@@ -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();
        }