X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fregion_layering_order_editor.cc;h=63a39cd270e921326458f40ff5576bed3f900e1f;hb=5981b7f1b8bc85444d66ab0ffac2dee412dd21ea;hp=dbf3fa9dcfdd063ec7d3859d605e53b9a31e6fba;hpb=a0723271459cd3124a3ded4a961fd0d90ddc3aa3;p=ardour.git diff --git a/gtk2_ardour/region_layering_order_editor.cc b/gtk2_ardour/region_layering_order_editor.cc index dbf3fa9dcf..63a39cd270 100644 --- a/gtk2_ardour/region_layering_order_editor.cc +++ b/gtk2_ardour/region_layering_order_editor.cc @@ -20,6 +20,9 @@ #include #include #include + +#include "pbd/stateful_diff_command.h" + #include "ardour/region.h" #include "gui_thread.h" @@ -28,19 +31,20 @@ #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")) , position (0) , in_row_change (false) - , regions_at_position (0) + , regions_at_position (0) , layering_order_model (Gtk::ListStore::create (layering_order_columns)) - , clock ("layer dialog", true, "", false, false, false) + , clock ("layer dialog", true, "", false, false, false) , editor (pe) , _time_axis_view (0) { @@ -58,29 +62,29 @@ RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe) clock.set_mode (AudioClock::BBT); - Gtk::Table* scroller_table = manage (new Gtk::Table); - scroller_table->set_size_request (300, 250); - scroller_table->attach (scroller, 0, 1, 0, 1); - scroller_table->set_col_spacings (5); - scroller_table->set_row_spacings (5); + Gtk::Table* scroller_table = manage (new Gtk::Table); + scroller_table->set_size_request (300, 250); + scroller_table->attach (scroller, 0, 1, 0, 1); + scroller_table->set_col_spacings (5); + scroller_table->set_row_spacings (5); - track_label.set_name ("RegionLayeringOrderEditorLabel"); - track_label.set_text (_("Track:")); + track_label.set_name ("RegionLayeringOrderEditorLabel"); + track_label.set_text (_("Track:")); track_label.set_alignment (0, 0.5); - clock_label.set_name ("RegionLayeringOrderEditorLabel"); - clock_label.set_text (_("Position:")); + clock_label.set_name ("RegionLayeringOrderEditorLabel"); + clock_label.set_text (_("Position:")); clock_label.set_alignment (0, 0.5); - track_name_label.set_name ("RegionLayeringOrderEditorNameLabel"); + track_name_label.set_name ("RegionLayeringOrderEditorNameLabel"); track_name_label.set_alignment (0, 0.5); - clock.set_mode (AudioClock::BBT); + clock.set_mode (AudioClock::BBT); - Gtk::Table* info_table = manage (new Gtk::Table (2, 2)); - info_table->set_col_spacings (5); - info_table->set_row_spacings (5); - 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); + Gtk::Table* info_table = manage (new Gtk::Table (2, 2)); + info_table->set_col_spacings (5); + info_table->set_row_spacings (5); + 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, Gtk::AttachOptions(0), FILL); Gtk::VBox* vbox = Gtk::manage (new Gtk::VBox ()); vbox->set_spacing (12); @@ -88,12 +92,12 @@ RegionLayeringOrderEditor::RegionLayeringOrderEditor (PublicEditor& pe) vbox->pack_start (*scroller_table, true, true); add (*vbox); - info_table->set_name ("RegionLayeringOrderTable"); - scroller_table->set_name ("RegionLayeringOrderTable"); + info_table->set_name ("RegionLayeringOrderTable"); + 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 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 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::iterator i = eq.begin(); i != eq.end(); ++i) { - (*i)->region()->raise_to_top (); + boost::shared_ptr 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 (); @@ -167,18 +177,18 @@ RegionLayeringOrderEditor::refill () newrow[layering_order_columns.name] = (*i)->region()->name(); newrow[layering_order_columns.region_view] = *i; - if (i == region_list.begin()) { - layering_order_display.get_selection()->select(newrow); - } + if (i == region_list.begin()) { + layering_order_display.get_selection()->select(newrow); + } } in_row_change = false; } void -RegionLayeringOrderEditor::set_context (const string& a_name, Session* s, TimeAxisView* tav, boost::shared_ptr pl, framepos_t pos) +RegionLayeringOrderEditor::set_context (const string& a_name, Session* s, TimeAxisView* tav, boost::shared_ptr pl, samplepos_t pos) { - track_name_label.set_text (a_name); + track_name_label.set_text (a_name); clock.set_session (s); clock.set (pos, true); @@ -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) {