summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNick Mainsbridge <beatroute@iprimus.com.au>2005-10-26 18:12:00 +0000
committerNick Mainsbridge <beatroute@iprimus.com.au>2005-10-26 18:12:00 +0000
commita0ee84a67358a7614cfa1b5e0df9af7e28072490 (patch)
tree310a6fd57e20a11e928078d356fffadf1866a9c7
parentd8efcf6da2c391c0b9bb2269f072e03e6f64ed07 (diff)
editor group list, route list and named selection treeviews
git-svn-id: svn://localhost/trunk/ardour2@68 d708f5d6-7413-0410-9779-e7cbd77b26cf
-rw-r--r--gtk2_ardour/editor.cc98
-rw-r--r--gtk2_ardour/editor.h61
-rw-r--r--gtk2_ardour/editor_edit_groups.cc116
-rw-r--r--gtk2_ardour/editor_route_list.cc262
-rw-r--r--gtk2_ardour/editor_selection_list.cc84
5 files changed, 345 insertions, 276 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 215fbcaf64..34b9730070 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -184,8 +184,6 @@ GdkBitmap *Editor::check_mask = 0;
GdkPixmap *Editor::empty_pixmap = 0;
GdkBitmap *Editor::empty_mask = 0;
-extern gint route_list_compare_func (GtkCList*,gconstpointer,gconstpointer);
-
Editor::Editor (AudioEngine& eng)
: engine (eng),
@@ -357,7 +355,7 @@ Editor::Editor (AudioEngine& eng)
initialize_rulers ();
initialize_canvas ();
- track_canvas_scroller.add (*track_canvas);
+ track_canvas_scroller.add (track_canvas);
track_canvas_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
track_canvas_scroller.set_name ("TrackCanvasScroller");
@@ -376,7 +374,7 @@ Editor::Editor (AudioEngine& eng)
edit_hscrollbar.signal_button_release_event().connect (mem_fun(*this, &Editor::hscroll_slider_button_release));
edit_hscrollbar.size_allocate.connect (mem_fun(*this, &Editor::hscroll_slider_allocate));
- time_canvas_scroller.add (*time_canvas);
+ time_canvas_scroller.add (time_canvas);
time_canvas_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_NEVER);
time_canvas_scroller.set_hadjustment (*track_canvas_scroller.get_hadjustment());
time_canvas_scroller.set_name ("TimeCanvasScroller");
@@ -531,45 +529,66 @@ Editor::Editor (AudioEngine& eng)
bottom_hbox.set_border_width (3);
bottom_hbox.set_spacing (3);
+ route_display_model = ListStore::create(route_display_columns);
+ route_list.set_model (route_display_model);
+ route_list.append_column (_("Tracks"), route_display_columns.text);
route_list.set_name ("TrackListDisplay");
- route_list.set_size_request (75,-1);
- route_list.column_titles_active();
- route_list.set_compare_func (route_list_compare_func);
- route_list.set_shadow_type (Gtk::SHADOW_IN);
- route_list.set_selection_mode (Gtk::SELECTION_MULTIPLE);
+ route_list.get_selection()->set_mode (Gtk::SELECTION_MULTIPLE);
route_list.set_reorderable (true);
- edit_group_list.set_size_request (75, -1);
+
+ route_list.set_size_request (75,-1);
+ route_list.set_headers_visible (true);
+ route_list.set_headers_clickable (true);
+
+ route_display_model->set_sort_func (0, mem_fun (*this, &Editor::route_list_compare_func));
+
+ //route_list.set_shadow_type (Gtk::SHADOW_IN);
route_list_scroller.add (route_list);
route_list_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
- route_list.select_row.connect (mem_fun(*this, &Editor::route_list_selected));
- route_list.unselect_row.connect (mem_fun(*this, &Editor::route_list_unselected));
- route_list.row_move.connect (mem_fun(*this, &Editor::queue_route_list_reordered));
- route_list.click_column.connect (mem_fun(*this, &Editor::route_list_column_click));
+ route_list.get_selection()->signal_changed().connect (mem_fun (*this, &Editor::route_display_selection_changed));
+ route_display_model->signal_rows_reordered().connect (mem_fun (*this, &Editor::queue_route_list_reordered));
+ route_list.signal_button_press_event().connect (mem_fun(*this, &Editor::route_list_column_click));
edit_group_list_button_label.set_text (_("Edit Groups"));
edit_group_list_button_label.set_name ("EditGroupTitleButton");
edit_group_list_button.add (edit_group_list_button_label);
edit_group_list_button.set_name ("EditGroupTitleButton");
- edit_group_list.column_titles_hide();
+ group_model = ListStore::create(group_columns);
+ edit_group_list.set_model (group_model);
+ edit_group_list.append_column (_("active"), group_columns.is_active);
+ edit_group_list.append_column (_("groupname"), group_columns.text);
+ edit_group_list.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
+ edit_group_list.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
+
+ /* use checkbox for the active column */
+
+ CellRendererToggle *active_cell = dynamic_cast<CellRendererToggle*>(edit_group_list.get_column_cell_renderer (0));
+ active_cell->property_activatable() = true;
+ active_cell->property_radio() = false;
+
edit_group_list.set_name ("MixerGroupList");
- edit_group_list.set_shadow_type (Gtk::SHADOW_IN);
- edit_group_list.set_selection_mode (Gtk::SELECTION_MULTIPLE);
+ //edit_group_list.set_shadow_type (Gtk::SHADOW_IN);
+ route_list.set_headers_visible (false);
edit_group_list.set_reorderable (false);
edit_group_list.set_size_request (75, -1);
- edit_group_list.set_column_auto_resize (0, true);
edit_group_list.columns_autosize ();
+ edit_group_list.get_selection()->set_mode (Gtk::SELECTION_MULTIPLE);
edit_group_list_scroller.add (edit_group_list);
edit_group_list_scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
edit_group_list_button.signal_clicked().connect (mem_fun(*this, &Editor::edit_group_list_button_clicked));
edit_group_list.signal_button_press_event().connect (mem_fun(*this, &Editor::edit_group_list_button_press_event));
- edit_group_list.select_row.connect (mem_fun(*this, &Editor::edit_group_selected));
- edit_group_list.unselect_row.connect (mem_fun(*this, &Editor::edit_group_unselected));
-
+ edit_group_list.get_selection()->signal_changed().connect (mem_fun(*this, &Editor::edit_group_selection_changed));
+
+ TreeModel::Row row = *(group_model->append());
+ row[group_columns.is_active] = false;
+ row[group_columns.text] = (_("-all-"));
+ edit_group_list.get_selection()->select (row);
+/* GTK2FIX is set_data(0) setting the is_active to false here?
list<string> stupid_list;
stupid_list.push_back ("*");
@@ -579,6 +598,7 @@ Editor::Editor (AudioEngine& eng)
edit_group_list.rows().back().set_data (0);
edit_group_list.rows().back().select();
+*/
edit_group_vbox.pack_start (edit_group_list_button, false, false);
edit_group_vbox.pack_start (edit_group_list_scroller, true, true);
@@ -595,7 +615,7 @@ Editor::Editor (AudioEngine& eng)
list_vpacker.pack_start (route_group_vpane, true, true);
- region_list_model = TreeStore::create (region_list_columns));
+ region_list_model = TreeStore::create (region_list_columns);
region_list_sort_model = TreeModelSort::create (region_list_model);
region_list_model->set_sort_func (0, mem_fun (*this, &Editor::region_list_sorter));
@@ -629,14 +649,15 @@ Editor::Editor (AudioEngine& eng)
named_selection_scroller.add (named_selection_display);
named_selection_scroller.set_policy (Gtk::POLICY_NEVER, Gtk::POLICY_AUTOMATIC);
+ named_selection_model = TreeStore::create (named_selection_columns);
+ named_selection_display.set_model (named_selection_model);
named_selection_display.set_name ("RegionListDisplay");
named_selection_display.set_size_request (100, -1);
- named_selection_display.column_titles_active ();
- named_selection_display.set_selection_mode (Gtk::SELECTION_SINGLE);
-
+ named_selection_display.set_headers_visible (true);
+ named_selection_display.set_headers_clickable (true);
+ named_selection_display.get_selection()->set_mode (Gtk::SELECTION_SINGLE);
named_selection_display.signal_button_press_event().connect (mem_fun(*this, &Editor::named_selection_display_button_press));
- named_selection_display.select_row.connect (mem_fun(*this, &Editor::named_selection_display_selected));
- named_selection_display.unselect_row.connect (mem_fun(*this, &Editor::named_selection_display_unselected));
+ named_selection_display.get_selection()->signal_changed().connect (mem_fun (*this, &Editor::named_selection_display_selection_changed));
region_selection_vpane.pack1 (region_list_scroller, true, true);
region_selection_vpane.pack2 (named_selection_scroller, true, true);
@@ -713,7 +734,7 @@ Editor::Editor (AudioEngine& eng)
add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);
configure_event.connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::configure_handler));
- delete_event.connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::exit_on_main_window_close));
+ signal_delete_event().connect (mem_fun (*ARDOUR_UI::instance(), &ARDOUR_UI::exit_on_main_window_close));
constructed = true;
instant_save ();
@@ -862,7 +883,7 @@ Editor::initialize_canvas ()
transport_marker_bar->property_fill_color_rgba() << color_map[cTransportMarkerBar];
transport_marker_bar->property_outline_pixels() << 0;
- range_bar_drag_rect = Canvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height);
+ range_bar_drag_rect = Canvas::SimpleRect (*range_marker_group, 0.0, 0.0, max_canvas_coordinate, timebar_height).gobj();
range_bar_drag_rect->property_fill_color_rgba() << color_map[cRangeBarDragRectFill];
range_bar_drag_rect->property_outline_color_rgba() << color_map[cRangeBarDragRect];
range_bar_drag_rect->property_outline_pixels() << 0;
@@ -1641,7 +1662,7 @@ Editor::connect_to_session (Session *t)
redisplay_named_selections ();
route_list.freeze ();
- route_list.clear ();
+ route_display_model.clear ();
session->foreach_route (this, &Editor::handle_new_route);
// route_list.select_all ();
route_list.sort ();
@@ -1685,23 +1706,24 @@ Editor::connect_to_session (Session *t)
if (ARDOUR_UI::instance()->session_is_new ()) {
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+
+ //route_list.freeze ();
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ TimeAxisView *tv = (*i)[route_display_columns.tv];
AudioTimeAxisView *atv;
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (atv->route().master()) {
- (*i)->unselect ();
+ route_list.get_selection()->unselect (i);
+ //(*i)->unselect ();
}
}
}
- route_list.thaw ();
+ //route_list.thaw ();
}
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 46bd6570b1..b90abf4ac3 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -264,8 +264,8 @@ class Editor : public PublicEditor
Width editor_mixer_strip_width;
void show_editor_mixer (bool yn);
void set_selected_mixer_strip (TimeAxisView&);
- void unselect_strip_in_display (TimeAxisView& tv);
- void select_strip_in_display (TimeAxisView& tv);
+ void unselect_strip_in_display (TimeAxisView* tv);
+ void select_strip_in_display (TimeAxisView* tv);
/* nudge is initiated by transport controls owned by ARDOUR_UI */
@@ -765,6 +765,18 @@ class Editor : public PublicEditor
/* named selections */
+ struct NamedSelectionDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
+ NamedSelectionDisplayModelColumns() {
+ add (text);
+ add (selection);
+ }
+ Gtk::TreeModelColumn<Glib::ustring> text;
+ Gtk::TreeModelColumn<ARDOUR::NamedSelection*> selection;
+ };
+
+ NamedSelectionDisplayModelColumns named_selection_columns;
+ Glib::RefPtr<Gtk::TreeStore> named_selection_model;
+
Gtk::VPaned region_selection_vpane;
Gtk::TreeView named_selection_display;
Gtk::ScrolledWindow named_selection_scroller;
@@ -779,8 +791,7 @@ class Editor : public PublicEditor
void redisplay_named_selections ();
gint named_selection_display_button_press (GdkEventButton *ev);
- void named_selection_display_selected (gint row, gint col, GdkEvent *ev);
- void named_selection_display_unselected (gint row, gint col, GdkEvent *ev);
+ void named_selection_display_selection_changed ();
/* track views */
int track_spacing;
@@ -1039,12 +1050,11 @@ class Editor : public PublicEditor
void hide_all_tracks (bool with_select);
- void route_list_selected (gint row, gint col, GdkEvent* ev);
- void route_list_unselected (gint row, gint col, GdkEvent* ev);
+ void route_display_selection_changed ();
void redisplay_route_list();
gint route_list_reordered ();
bool ignore_route_list_reorder;
- void queue_route_list_reordered (gint row, gint col);
+ void queue_route_list_reordered ();
struct DragInfo {
GnomeCanvasItem* item;
@@ -1488,11 +1498,25 @@ class Editor : public PublicEditor
/* diskstream/route display management */
- Gtk::TreeView route_list;
+ struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
+ RouteDisplayModelColumns() {
+ add (text);
+ add (tv);
+ }
+ Gtk::TreeModelColumn<Glib::ustring> text;
+ Gtk::TreeModelColumn<TimeAxisView*> tv;
+ };
+
+ RouteDisplayModelColumns route_display_columns;
+ Glib::RefPtr<Gtk::ListStore> route_display_model;
+ Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
+
+ gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
+ Gtk::TreeView route_list; //GTK2FIX rename to route_display
Gtk::ScrolledWindow route_list_scroller;
Gtk::Menu *route_list_menu;
- void route_list_column_click (gint);
+ void route_list_column_click ();
void build_route_list_menu ();
void select_all_routes ();
void unselect_all_routes ();
@@ -1503,6 +1527,21 @@ class Editor : public PublicEditor
/* edit group management */
+ struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
+ GroupListModelColumns () {
+ add (is_active);
+ add (text);
+ add (routegroup);
+ }
+ Gtk::TreeModelColumn<bool> is_active;
+ Gtk::TreeModelColumn<std::string> text;
+ Gtk::TreeModelColumn<ARDOUR::RouteGroup*> routegroup;
+ };
+
+ GroupListModelColumns group_columns;
+ Glib::RefPtr<Gtk::ListStore> group_model;
+ Glib::RefPtr<Gtk::TreeSelection> group_selection;
+
Gtk::Button edit_group_list_button;
Gtk::Label edit_group_list_button_label;
Gtk::TreeView edit_group_list;
@@ -1510,7 +1549,6 @@ class Editor : public PublicEditor
Gtk::Menu *edit_group_list_menu;
Gtk::VBox edit_group_vbox;
-
void edit_group_list_column_click (gint);
void build_edit_group_list_menu ();
void select_all_edit_groups ();
@@ -1518,8 +1556,7 @@ class Editor : public PublicEditor
void new_edit_group ();
void edit_group_list_button_clicked ();
gint edit_group_list_button_press_event (GdkEventButton* ev);
- void edit_group_selected (gint row, gint col, GdkEvent* ev);
- void edit_group_unselected (gint row, gint col, GdkEvent* ev);
+ void edit_group_selection_changed ();
void fake_add_edit_group (ARDOUR::RouteGroup* group);
void add_edit_group (ARDOUR::RouteGroup* group);
void group_flags_changed (void*, ARDOUR::RouteGroup*);
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index 48f1b13c1c..9e3df176f8 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -22,6 +22,7 @@
#include <cmath>
#include <gtkmm2ext/stop_signal.h>
+#include <gtkmm2ext/gtk_ui.h>
#include <ardour/route_group.h>
#include "editor.h"
@@ -29,6 +30,7 @@
#include "marker.h"
#include "time_axis_view.h"
#include "prompter.h"
+#include "gui_thread.h"
#include <ardour/route.h>
@@ -73,14 +75,14 @@ void
Editor::select_all_edit_groups ()
{
- CList_Helpers::RowList::iterator i;
-
+
/* XXX potential race with remove_track(), but the select operation
cannot be done with the track_lock held.
*/
- for (i = route_list.rows().begin(); i != route_list.rows().end(); ++i) {
- i->select ();
+ Gtk::TreeModel::Children children = group_model->children();
+ for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
+ edit_group_list.get_selection()->select (iter);
}
}
@@ -96,20 +98,15 @@ Editor::new_edit_group ()
string result;
prompter.set_prompt (_("Name for new edit group"));
- prompter.done.connect (Gtk::Main::quit.slot());
-
prompter.show_all ();
-
- Gtk::Main::run ();
-
- if (prompter.status != Gtkmm2ext::Prompter::entered) {
- return;
- }
-
- prompter.get_result (result);
- if (result.length()) {
- session->add_edit_group (result);
+ switch (prompter.run ()) {
+ case GTK_RESPONSE_ACCEPT:
+ prompter.get_result (result);
+ if (result.length()) {
+ session->add_edit_group (result);
+ }
+ break;
}
}
@@ -122,13 +119,21 @@ Editor::edit_group_list_button_clicked ()
gint
Editor::edit_group_list_button_press_event (GdkEventButton* ev)
{
- gint row, col;
- if (edit_group_list.get_selection_info ((int)ev->x, (int)ev->y, &row, &col) == 0) {
- return FALSE;
+ RouteGroup* group;
+ TreeIter iter;
+ TreeModel::Path path;
+ TreeViewColumn* column;
+ int cellx;
+ int celly;
+
+ if (!edit_group_list.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
+ return false;
}
- if (col == 1) {
+ switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
+
+ case 1:
if (Keyboard::is_edit_event (ev)) {
// RouteGroup* group = (RouteGroup *) edit_group_list.row(row).get_data ();
@@ -140,54 +145,61 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
/* allow regular select to occur */
return FALSE;
}
-
- } else if (col == 0) {
-
- RouteGroup* group = reinterpret_cast<RouteGroup *>(edit_group_list.row(row).get_data ());
-
- if (group) {
- group->set_active (!group->is_active(), this);
+ break;
+
+ case 0:
+ if ((iter = group_model->get_iter (path))) {
+ /* path points to a valid node */
+
+ if ((group = (*iter)[group_columns.routegroup]) != 0) {
+ group->set_active (!group->is_active (), this);
+ }
}
+ break;
}
-
+
return stop_signal (edit_group_list, "button_press_event");
}
void
-Editor::edit_group_selected (gint row, gint col, GdkEvent* ev)
+Editor::edit_group_selection_changed ()
{
- RouteGroup* group = (RouteGroup *) edit_group_list.row(row).get_data ();
+ TreeModel::iterator i;
+ TreeModel::Children rows = group_model->children();
+ Glib::RefPtr<TreeSelection> selection = edit_group_list.get_selection();
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- if ((*i)->edit_group() == group) {
- select_strip_in_display (*(*i));
- }
- }
-}
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ RouteGroup* group;
-void
-Editor::edit_group_unselected (gint row, gint col, GdkEvent* ev)
-{
- RouteGroup* group = (RouteGroup *) edit_group_list.row(row).get_data ();
+ group = (*i)[group_columns.routegroup];
- for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- if ((*i)->edit_group() == group) {
- unselect_strip_in_display (*(*i));
+ if (selection->is_selected (i)) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->edit_group() == group) {
+ select_strip_in_display (*j);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->edit_group() == group) {
+ unselect_strip_in_display (*j);
+ }
+ }
}
}
}
void
Editor::add_edit_group (RouteGroup* group)
-{
- list<string> names;
- names.push_back ("*");
- names.push_back (group->name());
+{
+
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::add_edit_group), group));
- edit_group_list.rows().push_back (names);
- edit_group_list.rows().back().set_data (group);
- edit_group_list.rows().back().select();
+ TreeModel::Row row = *(group_model->append());
+ row[group_columns.is_active] = group->is_active();
+ row[group_columns.text] = group->name();
+ row[group_columns.routegroup] = group;
group->FlagsChanged.connect (bind (mem_fun(*this, &Editor::group_flags_changed), group));
}
@@ -195,6 +207,8 @@ Editor::add_edit_group (RouteGroup* group)
void
Editor::group_flags_changed (void* src, RouteGroup* group)
{
+ /* GTK2FIX not needed in gtk2?
+
if (src != this) {
// select row
}
@@ -206,5 +220,7 @@ Editor::group_flags_changed (void* src, RouteGroup* group)
} else {
edit_group_list.cell (ri->get_row_num(),0).set_pixmap (empty_pixmap, empty_mask);
}
+ */
}
+
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index 0f5838066e..9d3090d97c 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -48,29 +48,29 @@ Editor::handle_new_route (Route& route)
{
TimeAxisView *tv;
AudioTimeAxisView *atv;
- const gchar *rowdata[1];
+ TreeModel::Row row = *(route_display_model->append());
if (route.hidden()) {
return;
}
- tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
+ tv = new AudioTimeAxisView (*this, *session, route, &track_canvas);
track_views.push_back (tv);
- rowdata[0] = route.name ().c_str();
+ row[route_display_columns.text] = route.name();
+ row[route_display_columns.tv] = tv;
ignore_route_list_reorder = true;
- route_list.rows().push_back (rowdata);
- route_list.rows().back().set_data (tv);
+
if (tv->marked_for_display()) {
- route_list.rows().back().select();
+ route_list.get_selection()->select (row);
}
if ((atv = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
/* added a new fresh one at the end */
if (atv->route().order_key(N_("editor")) == -1) {
- atv->route().set_order_key (N_("editor"), route_list.rows().size()-1);
+ atv->route().set_order_key (N_("editor"), route_display_model->children().size()-1);
}
}
@@ -94,21 +94,24 @@ Editor::handle_gui_changes (string what, void *src)
}
}
+
void
Editor::remove_route (TimeAxisView *tv)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::remove_route), tv));
+
TrackViewList::iterator i;
- CList_Helpers::RowList::iterator ri;
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator ri;
if ((i = find (track_views.begin(), track_views.end(), tv)) != track_views.end()) {
track_views.erase (i);
}
- for (ri = route_list.rows().begin(); ri != route_list.rows().end(); ++ri) {
- if (tv == ri->get_data()) {
- route_list.rows().erase (ri);
+ for (ri = rows.begin(); ri != rows.end(); ++ri) {
+ if ((*ri)[route_display_columns.tv] == tv) {
+ route_display_model->erase (ri);
break;
}
}
@@ -127,70 +130,78 @@ Editor::remove_route (TimeAxisView *tv)
void
Editor::route_name_changed (TimeAxisView *tv)
{
- CList_Helpers::RowList::iterator i;
- gint row;
-
- for (row = 0, i = route_list.rows().begin(); i != route_list.rows().end(); ++i, ++row) {
- if (tv == i->get_data()) {
- route_list.cell (row, 0).set_text (tv->name());
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::route_name_changed), tv));
+
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ if ((*i)[route_display_columns.tv] == tv) {
+ (*i)[route_display_columns.text] = tv->name();
break;
}
- }
-}
+ }
-void
-Editor::route_list_selected (gint row, gint col, GdkEvent *ev)
-{
- TimeAxisView *tv;
- if ((tv = (TimeAxisView *) route_list.get_row_data (row)) != 0) {
- tv->set_marked_for_display (true);
- route_list_reordered ();
- }
}
void
-Editor::route_list_unselected (gint row, gint col, GdkEvent *ev)
+Editor::route_display_selection_changed ()
{
- TimeAxisView *tv;
- AudioTimeAxisView *atv;
-
- if ((tv = (TimeAxisView *) route_list.get_row_data (row)) != 0) {
-
- tv->set_marked_for_display (false);
- if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
- if (current_mixer_strip && &(atv->route()) == &(current_mixer_strip->route())) {
- /* this will hide the mixer strip */
- set_selected_mixer_strip(*atv);
+ TimeAxisView *tv;
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ Glib::RefPtr<TreeSelection> selection = route_list.get_selection();
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ tv = (*i)[route_display_columns.tv];
+ if (selection->is_selected (i)) {
+ tv->set_marked_for_display (true);
+ } else {
+ AudioTimeAxisView *atv;
+ tv->set_marked_for_display (false);
+ if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
+ if (current_mixer_strip && &(atv->route()) == &(current_mixer_strip->route())) {
+ // this will hide the mixer strip
+ set_selected_mixer_strip(*atv);
+ }
}
}
-
- route_list_reordered ();
}
+
+ route_list_reordered ();
}
void
-Editor::unselect_strip_in_display (TimeAxisView& tv)
+Editor::unselect_strip_in_display (TimeAxisView* tv)
{
- CList_Helpers::RowIterator i;
-
- if ((i = route_list.rows().find_data (&tv)) != route_list.rows().end()) {
- (*i).unselect ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ Glib::RefPtr<TreeSelection> selection = route_list.get_selection();
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ if ((*i)[route_display_columns.tv] == tv) {
+ selection->unselect (*i);
+ }
}
}
void
-Editor::select_strip_in_display (TimeAxisView& tv)
+Editor::select_strip_in_display (TimeAxisView* tv)
{
- CList_Helpers::RowIterator i;
-
- if ((i = route_list.rows().find_data (&tv)) != route_list.rows().end()) {
- (*i).select ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ Glib::RefPtr<TreeSelection> selection = route_list.get_selection();
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ if ((*i)[route_display_columns.tv] == tv) {
+ selection->select (*i);
+ }
}
}
void
-Editor::queue_route_list_reordered (gint arg1, gint arg2)
+Editor::queue_route_list_reordered ()
{
/* the problem here is that we are called *before* the
@@ -199,7 +210,7 @@ Editor::queue_route_list_reordered (gint arg1, gint arg2)
is complete.
*/
- Main::idle.connect (mem_fun(*this, &Editor::route_list_reordered));
+ Glib::signal_idle().connect (mem_fun(*this, &Editor::route_list_reordered));
}
void
@@ -211,16 +222,14 @@ Editor::redisplay_route_list ()
gint
Editor::route_list_reordered ()
{
- CList_Helpers::RowList::iterator i;
- gdouble y;
- int n;
-
- for (n = 0, y = 0, i = route_list.rows().begin(); i != route_list.rows().end(); ++i) {
-
- TimeAxisView *tv = (TimeAxisView *) (*i)->get_data ();
-
- AudioTimeAxisView* at;
-
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ long order;
+int n;
+
+ for (n = 0, order = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
+ TimeAxisView *tv = (*i)[route_display_columns.tv];
+ AudioTimeAxisView* at;
if (!ignore_route_list_reorder) {
/* this reorder is caused by user action, so reassign sort order keys
@@ -228,55 +237,52 @@ Editor::route_list_reordered ()
*/
if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
- at->route().set_order_key (N_("editor"), n);
+ at->route().set_order_key (N_("editor"), order);
}
}
-
if (tv->marked_for_display()) {
- y += tv->show_at (y, n, &edit_controls_vbox);
- y += track_spacing;
+ order += tv->show_at (order, n, &edit_controls_vbox);
+ order += track_spacing;
} else {
tv->hide ();
}
n++;
+
}
-
edit_controls_scroller.queue_resize ();
reset_scrolling_region ();
-
- //gnome_canvas_item_raise_to_top (time_line_group);
- gnome_canvas_item_raise_to_top (cursor_group);
-
return FALSE;
}
void
Editor::hide_all_tracks (bool with_select)
{
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
-
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+ // GTK2FIX
+ // track_display_list.freeze ();
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+
+ TreeModel::Row row = (*i);
+ TimeAxisView *tv = row[route_display_columns.tv];
+
if (with_select) {
- i->unselect ();
+ route_list.get_selection()->unselect (i);
} else {
- tv->set_marked_for_display (false);
+ tv->set_marked_for_display (false);
tv->hide();
+
}
}
-
- route_list.thaw ();
-
+ //route_list.thaw ();
reset_scrolling_region ();
}
void
-Editor::route_list_column_click (gint col)
+Editor::route_list_column_click ()
{
if (route_list_menu == 0) {
build_route_list_menu ();
@@ -288,7 +294,9 @@ Editor::route_list_column_click (gint col)
void
Editor::build_route_list_menu ()
{
- using namespace Gtk::Menu_Helpers;
+ using namespace Menu_Helpers;
+ using namespace Gtk;
+
route_list_menu = new Menu;
@@ -314,107 +322,100 @@ void
Editor::select_all_routes ()
{
- CList_Helpers::RowList::iterator i;
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
- for (i = route_list.rows().begin(); i != route_list.rows().end(); ++i) {
- i->select ();
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ route_list.get_selection()->select (i);
}
}
void
Editor::select_all_audiotracks ()
{
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
-
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ TreeModel::Row row = (*i);
+ TimeAxisView* tv = row[route_display_columns.tv];
AudioTimeAxisView* atv;
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (atv->is_audio_track()) {
- i->select ();
+ route_list.get_selection()->select (i);
+
}
}
}
-
- route_list.thaw ();
}
-void
+void
Editor::unselect_all_audiotracks ()
{
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ TreeModel::Row row = (*i);
+ TimeAxisView *tv = row[route_display_columns.tv];
AudioTimeAxisView* atv;
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (atv->is_audio_track()) {
- i->unselect ();
+ route_list.get_selection()->unselect (i);
+
}
}
}
-
- route_list.thaw ();
}
void
Editor::select_all_audiobus ()
{
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ TreeModel::Row row = (*i);
+ TimeAxisView* tv = row[route_display_columns.tv];
AudioTimeAxisView* atv;
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (!atv->is_audio_track()) {
- i->select ();
+ route_list.get_selection()->select (i);
+
}
}
}
- route_list.thaw ();
-
}
void
Editor::unselect_all_audiobus ()
{
- Gtk::CList_Helpers::RowList::iterator i;
- Gtk::CList_Helpers::RowList& rowlist = route_list.rows();
-
- route_list.freeze ();
+ TreeModel::Children rows = route_display_model->children();
+ TreeModel::Children::iterator i;
- for (i = rowlist.begin(); i != rowlist.end(); ++i) {
- TimeAxisView *tv = (TimeAxisView *) i->get_data ();
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ TreeModel::Row row = (*i);
+ TimeAxisView* tv = row[route_display_columns.tv];
AudioTimeAxisView* atv;
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (!atv->is_audio_track()) {
- i->unselect ();
+ route_list.get_selection()->unselect (i);
+
}
}
}
- route_list.thaw ();
-
}
gint
-route_list_compare_func (GtkCList* clist, gconstpointer a, gconstpointer b)
+Editor::route_list_compare_func (TreeModel::iterator a, TreeModel::iterator b)
{
TimeAxisView *tv1;
TimeAxisView *tv2;
@@ -423,11 +424,8 @@ route_list_compare_func (GtkCList* clist, gconstpointer a, gconstpointer b)
Route* ra;
Route* rb;
- GtkCListRow *row1 = (GtkCListRow *) a;
- GtkCListRow *row2 = (GtkCListRow *) b;
-
- tv1 = static_cast<TimeAxisView*> (row1->data);
- tv2 = static_cast<TimeAxisView*> (row2->data);
+ tv1 = (*a)[route_display_columns.tv];
+ tv2 = (*b)[route_display_columns.tv];
if ((atv1 = dynamic_cast<AudioTimeAxisView*>(tv1)) == 0 ||
(atv2 = dynamic_cast<AudioTimeAxisView*>(tv2)) == 0) {
diff --git a/gtk2_ardour/editor_selection_list.cc b/gtk2_ardour/editor_selection_list.cc
index d6681cf5a5..51789880f0 100644
--- a/gtk2_ardour/editor_selection_list.cc
+++ b/gtk2_ardour/editor_selection_list.cc
@@ -52,60 +52,53 @@ Editor::handle_new_named_selection ()
void
Editor::add_named_selection_to_named_selection_display (NamedSelection& selection)
{
- const gchar *row[1];
-
- row[0] = selection.name.c_str();
- named_selection_display.rows().push_back (row);
- named_selection_display.rows().back().set_data (&selection);
+ TreeModel::Row row = *(named_selection_model->append());
+ row[named_selection_columns.text] = selection.name;
+ row[named_selection_columns.selection] = &selection;
}
void
Editor::redisplay_named_selections ()
{
- named_selection_display.freeze ();
- named_selection_display.clear ();
+ //GTK2FIX
+ //named_selection_display.freeze ();
+ named_selection_model.clear ();
session->foreach_named_selection (*this, &Editor::add_named_selection_to_named_selection_display);
- named_selection_display.thaw ();
+ //named_selection_display.thaw ();
}
gint
Editor::named_selection_display_button_press (GdkEventButton *ev)
{
- NamedSelection* named_selection;
- gint row;
- gint col;
-
- switch (ev->button) {
- case 1:
- if (Keyboard::is_delete_event (ev)) {
- if (named_selection_display.get_selection_info ((int)ev->x, (int)ev->y, &row, &col) != 0) {
- if ((named_selection = reinterpret_cast<NamedSelection *> (named_selection_display.get_row_data (row))) != 0) {
- session->remove_named_selection (named_selection);
+
+ TreeModel::Children rows = named_selection_model->children();
+ TreeModel::Children::iterator i;
+ Glib::RefPtr<TreeSelection> selection = named_selection_display.get_selection();
+
+ for (i = rows.begin(); i != rows.end(); ++i) {
+ if (selection->is_selected (i)) {
+ switch (ev->button) {
+ case 1:
+ if (Keyboard::is_delete_event (ev)) {
+ session->remove_named_selection ((*i)[named_selection_columns.selection]);
return stop_signal (named_selection_display, "button_press_event");
}
+ break;
+ case 2:
+ break;
+ case 3:
+ break;
+ default:
+ break;
}
- }
- break;
-
- case 2:
- break;
-
- case 3:
- break;
- default:
- break;
+ }
}
return FALSE;
}
void
-Editor::named_selection_display_selected (gint row, gint col, GdkEvent *ev)
-{
-}
-
-void
-Editor::named_selection_display_unselected (gint row, gint col, GdkEvent *ev)
+Editor::named_selection_display_selection_changed ()
{
}
@@ -115,20 +108,19 @@ Editor::name_selection ()
ArdourPrompter p;
p.set_prompt (_("name for chunk:"));
- p.done.connect (mem_fun(*this, &Editor::named_selection_name_chosen));
p.change_labels (_("Create chunk"), _("Forget it"));
p.show_all ();
- Gtk::Main::run ();
-
- if (p.status == Prompter::entered) {
- string name;
+ switch (p.run ()) {
+ case GTK_RESPONSE_ACCEPT:
+ string name;
p.get_result (name);
-
- if (name.length()){
- create_named_selection (name);
- }
+ if (name.length()) {
+ create_named_selection (name);
+ }
+ break;
}
+
}
void
@@ -175,11 +167,15 @@ Editor::create_named_selection (string name)
}
NamedSelection* ns;
+ TreeModel::Row row = *(named_selection_model->append());
ns = new NamedSelection (name, thelist);
+ row[named_selection_columns.selection] = ns;
+ row[named_selection_columns.text] = name;
/* make the one we just added be selected */
- named_selection_display.rows().back().select ();
+ named_selection_display.get_selection()->select (row);
+
}