No-Op: rename Normalizer to Intermediate
[ardour.git] / gtk2_ardour / region_layering_order_editor.cc
index dbf3fa9dcfdd063ec7d3859d605e53b9a31e6fba..e58c7c9768f2402ba6b5f6869e14c9cc98529904 100644 (file)
@@ -20,6 +20,9 @@
 #include <gtkmm/table.h>
 #include <gtkmm/stock.h>
 #include <gtkmm/alignment.h>
+
+#include "pbd/stateful_diff_command.h"
+
 #include "ardour/region.h"
 
 #include "gui_thread.h"
 #include "region_layering_order_editor.h"
 #include "region_view.h"
 #include "utils.h"
-#include "i18n.h"
+#include "pbd/i18n.h"
 
 using namespace std;
 using namespace Gtk;
 using namespace ARDOUR;
+using namespace ARDOUR_UI_UTILS;
 
 RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe)
        : ArdourWindow (_("RegionLayeringOrderEditor"))
@@ -80,7 +84,7 @@ RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe)
         info_table->attach (track_label, 0, 1, 0, 1, FILL, FILL);
         info_table->attach (track_name_label, 1, 2, 0, 1, FILL, FILL);
         info_table->attach (clock_label, 0, 1, 1, 2, FILL, FILL);
-        info_table->attach (clock, 1, 2, 1, 2, FILL, FILL);
+        info_table->attach (clock, 1, 2, 1, 2, Gtk::AttachOptions(0), FILL);
 
        Gtk::VBox* vbox = Gtk::manage (new Gtk::VBox ());
        vbox->set_spacing (12);
@@ -92,8 +96,8 @@ RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe)
         scroller_table->set_name ("RegionLayeringOrderTable");
 
        layering_order_display.set_name ("RegionLayeringOrderDisplay");
-
-       layering_order_display.signal_row_activated ().connect (mem_fun (*this, &RegionLayeringOrderEditor::row_activated));
+       layering_order_display.get_selection()->set_mode (SELECTION_SINGLE);
+       layering_order_display.get_selection()->signal_changed ().connect (mem_fun (*this, &RegionLayeringOrderEditor::row_selected));
 
        layering_order_display.grab_focus ();
 
@@ -103,30 +107,36 @@ RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe)
 
 RegionLayeringOrderEditor::~RegionLayeringOrderEditor ()
 {
-       
+
 }
 
 void
-RegionLayeringOrderEditor::row_activated (const TreeModel::Path& path, TreeViewColumn*)
+RegionLayeringOrderEditor::row_selected ()
 {
        if (in_row_change) {
                return;
        }
 
-       TreeModel::iterator iter = layering_order_model->get_iter (path);
+       Glib::RefPtr<TreeSelection> selection = layering_order_display.get_selection();
+       TreeModel::iterator iter = selection->get_selected(); // only used with Gtk::SELECTION_SINGLE
 
        if (!iter) {
                return;
        }
-       
+
        TreeModel::Row row = *iter;
        RegionView* rv = row[layering_order_columns.region_view];
-       
+
        vector<RegionView*> eq;
-       editor.get_equivalent_regions (rv, eq, Properties::edit.property_id);
-       
+       editor.get_equivalent_regions (rv, eq, Properties::group_select.property_id);
+
+       /* XXX this should be reversible, really */
+
        for (vector<RegionView*>::iterator i = eq.begin(); i != eq.end(); ++i) {
-               (*i)->region()->raise_to_top ();
+               boost::shared_ptr<Playlist> pl = (*i)->region()->playlist();
+               if (pl) {
+                       pl->raise_region_to_top ((*i)->region());
+               }
        }
 }
 
@@ -140,7 +150,7 @@ void
 RegionLayeringOrderEditor::refill ()
 {
        assert (_time_axis_view);
-       
+
        regions_at_position = 0;
        in_row_change = true;
        layering_order_model->clear ();
@@ -212,7 +222,7 @@ RegionLayeringOrderEditor::on_key_press_event (GdkEventKey* ev)
        }
 
        if (!handled) {
-               handled = key_press_focus_accelerator_handler (editor, ev);
+               handled = relay_key_press (ev, this);
        }
 
        if (!handled) {