summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct2
-rw-r--r--ardour_system.rc77
-rw-r--r--gtk2_ardour/SConscript9
-rw-r--r--gtk2_ardour/ardour2_ui.rc12
-rw-r--r--gtk2_ardour/audio_time_axis.cc2
-rw-r--r--gtk2_ardour/editor.cc104
-rw-r--r--gtk2_ardour/editor.h72
-rw-r--r--gtk2_ardour/editor_canvas.cc12
-rw-r--r--gtk2_ardour/editor_edit_groups.cc158
-rw-r--r--gtk2_ardour/editor_route_list.cc358
-rw-r--r--gtk2_ardour/po/SConscript4
-rw-r--r--gtk2_ardour/public_editor.h2
-rw-r--r--gtk2_ardour/visual_time_axis.cc2
-rw-r--r--libs/gtkmm2ext/dndtreeview.cc8
-rw-r--r--libs/gtkmm2ext/gtkmm2ext/dndtreeview.h6
-rw-r--r--libs/midi++2/SConscript4
-rw-r--r--libs/pbd3/SConscript3
-rw-r--r--libs/sigc++2/SConscript11
18 files changed, 449 insertions, 397 deletions
diff --git a/SConstruct b/SConstruct
index ae66aef2d3..2dfdd79476 100644
--- a/SConstruct
+++ b/SConstruct
@@ -13,7 +13,7 @@ import SCons.Node.FS
SConsignFile()
EnsureSConsVersion(0, 96)
-version = '1.9beta1'
+version = '2.0alpha1'
subst_dict = { }
diff --git a/ardour_system.rc b/ardour_system.rc
index 911eb60181..05cdcab3fd 100644
--- a/ardour_system.rc
+++ b/ardour_system.rc
@@ -14,81 +14,4 @@
<Option name="mmc-port" value="trident"/>
<Option name="monitor-inputs" value="no"/>
</Config>
- <Keys>
- <context name="default">
- <binding keys="Ctrl-w" action="close-dialog"/>
- <binding keys="Ctrl-u" action="start-prefix"/>
- <binding keys="Alt-e" action="toggle-editor-window"/>
- <binding keys="Alt-m" action="toggle-mixer-window"/>
- <binding keys="Alt-r" action="toggle-recorder-window"/>
- <binding keys="Alt-l" action="toggle-locations-window"/>
- <binding keys="Alt-c" action="toggle-big-clock-window"/>
- <binding keys="Alt-o" action="toggle-options-window"/>
- <binding keys=" " action="toggle-playback"/>
- <binding keys="Ctrl-Shift- " action="toggle-playback-forget-capture"/>
- <binding keys="Ctrl-n" action="new-session"/>
- <binding keys="Ctrl-t" action="add-audio-track"/>
- <binding keys="Ctrl-s" action="save-state"/>
- <binding keys="Ctrl-q" action="quit"/>
- <binding keys="Left" action="transport-rewind"/>
- <binding keys="Right" action="transport-forward"/>
- <binding keys="r" action="transport-record"/>
- <binding keys="Home" action="transport-goto-start"/>
- <binding keys="Ctrl-a" action="transport-goto-start"/>
- <binding keys="End" action="transport-goto-end"/>
- <binding keys="Ctrl-e" action="transport-goto-end"/>
- </context>
- <context name="editor">
- <binding keys="Tab" action="playhead-to-next-region-start"/>
- <binding keys="Ctrl-Tab" action="playhead-to-next-region-end"/>
- <binding keys="`" action="playhead-to-previous-region-start"/>
- <binding keys="Ctrl-`" action="playhead-to-previous-region-end"/>
- <binding keys="[" action="edit-cursor-to-previous-region-start"/>
- <binding keys="Ctrl-[" action="edit-cursor-to-previous-region-end"/>
- <binding keys="]" action="edit-cursor-to-next-region-start"/>
- <binding keys="Ctrl-]" action="edit-cursor-to-next-region-end"/>
- <binding keys="'" action="edit-cursor-to-next-region-sync"/>
- <binding keys=";" action="edit-cursor-to-previous-region-sync"/>
- <binding keys="Left" action="scroll-backward"/>
- <binding keys="Right" action="scroll-forward"/>
- <binding keys="KP_6" action="jump-forward-to-mark"/>
- <binding keys="KP_Right" action="jump-forward-to-mark"/>
- <binding keys="KP_4" action="jump-backward-to-mark"/>
- <binding keys="KP_Left" action="jump-backward-to-mark"/>
- <binding keys="KP_Enter" action="add-location-from-playhead"/>
- <binding keys="KP_Add" action="nudge-forward"/>
- <binding keys="Ctrl-KP_Add" action="nudge-next-forward"/>
- <binding keys="KP_Subtract" action="nudge-backward"/>
- <binding keys="Ctrl-KP_Subtract" action="nudge-next-backward"/>
- <binding keys="=" action="temporal-zoom-out"/>
- <binding keys="-" action="temporal-zoom-in"/>
- <binding keys="Page_Up" action="scroll-tracks-up"/>
- <binding keys="Page_Down" action="scroll-tracks-down"/>
- <binding keys="o" action="set-mouse-mode-object"/>
- <binding keys="g" action="set-mouse-mode-range"/>
- <binding keys="G" action="set-mouse-mode-gain"/>
- <binding keys="t" action="set-mouse-mode-timefx"/>
- <binding keys="f" action="toggle-follow-playhead"/>
- <binding keys="z" action="set-mouse-mode-zoom"/>
- <binding keys="Z" action="zoom-focus-playhead"/>
- <binding keys="Ctrl-z" action="set-undo"/>
- <binding keys="Ctrl-r" action="set-redo"/>
- <binding keys="Ctrl-x" action="editor-cut"/>
- <binding keys="Ctrl-c" action="editor-copy"/>
- <binding keys="Ctrl-v" action="editor-paste"/>
- <binding keys="Insert" action="insert-region"/>
- <binding keys="Delete" action="editor-cut"/>
- <binding keys="Meta-d" action="duplicate-region"/>
- <binding keys="Alt-r" action="reverse-region"/>
- <binding keys="Alt-n" action="normalize-region"/>
- <binding keys="Ctrl-l" action="center-playhead"/>
- <binding keys="Ctrl-g" action="goto"/>
- <binding keys="Ctrl-f" action="scroll-forward"/>
- <binding keys="Ctrl-b" action="scroll-backward"/>
- <binding keys="Alt-f" action="playhead-forward"/>
- <binding keys="Alt-b" action="playhead-backward"/>
- <binding keys="Return" action="playhead-to-edit"/>
- <binding keys="Alt-Return" action="edit-to-playhead"/>
- </context>
- </Keys>
</Ardour>
diff --git a/gtk2_ardour/SConscript b/gtk2_ardour/SConscript
index 79297a64f0..ee1d713cce 100644
--- a/gtk2_ardour/SConscript
+++ b/gtk2_ardour/SConscript
@@ -224,7 +224,8 @@ if env['NLS']:
env.Alias('install', env.InstallAs(os.path.join(install_prefix, 'bin')+'/ardour', ardour))
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour2_ui.rc'))
-env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour-menus.xml'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour.menus'))
+env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour.bindings'))
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour'), 'splash.ppm'))
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/glade'), glade_files))
@@ -232,8 +233,10 @@ env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/glad
env.Alias ('tarball', env.Distribute (env['DISTTREE'],
[ 'SConscript',
'i18n.h', 'gettext.h',
- 'editor_xpms', 'misc_xpms',
- 'ardour2_ui.rc', 'splash.ppm'
+ 'editor_xpms', 'misc_xpms',
+ 'crossfade_xpms.h', 'meter_xpms.h',
+ 'ardour2_ui.rc', 'splash.ppm',
+ 'ardour.menus', 'ardour.bindings'
] +
gtkardour_files + vst_files + glade_files +
glob.glob('po/*.po') + glob.glob('*.h')))
diff --git a/gtk2_ardour/ardour2_ui.rc b/gtk2_ardour/ardour2_ui.rc
index 5421c3082d..248d5d00ad 100644
--- a/gtk2_ardour/ardour2_ui.rc
+++ b/gtk2_ardour/ardour2_ui.rc
@@ -644,12 +644,11 @@ style "plugin_slider"
style "track_list_display" = "small_bold_text"
{
- fg[NORMAL] = { 0.80, 0.80, 0.80 }
- fg[ACTIVE] = { 0.80, 0.80, 0.80 }
- fg[SELECTED] = { 0.50, 1.0, 1.0 }
- bg[NORMAL] = { 0, 0, 0 }
- bg[ACTIVE] = { 0, 0, 0 }
- bg[SELECTED] = { 0, 0, 0 }
+ text[NORMAL] = { 0.80, 0.80, 0.80 }
+ text[ACTIVE] = { 0.3, 0.3, 0.3 }
+ text[INSENSITIVE] = { 0, 0, 0 }
+ text[SELECTED] = { 0.8, 0.8, 0.8 }
+
base[NORMAL] = { 0, 0, 0 }
base[ACTIVE] = { 0, 0, 0 }
base[INSENSITIVE] = { 0, 0, 0 }
@@ -1045,6 +1044,7 @@ widget "*PluginUIClickBox*" style "medium_bold_entry"
widget "*PluginSlider" style "plugin_slider"
widget "*TrackListDisplay" style "track_list_display"
widget "*TrackListDisplay.*" style "small_bold_text"
+widget "*EditGroupList" style "track_list_display"
widget "*RegionListDisplay" style "small_bold_entry"
widget "*RegionListDisplay.*" style "small_bold_text"
widget "*MixerRedirectSelector" style "small_bold_entry"
diff --git a/gtk2_ardour/audio_time_axis.cc b/gtk2_ardour/audio_time_axis.cc
index 4e3ce96bc9..5c05c951b6 100644
--- a/gtk2_ardour/audio_time_axis.cc
+++ b/gtk2_ardour/audio_time_axis.cc
@@ -1120,7 +1120,7 @@ AudioTimeAxisView::visual_click ()
void
AudioTimeAxisView::hide_click ()
{
- editor.unselect_strip_in_display (*this);
+ editor.hide_track_in_display (*this);
}
Region*
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc
index 59d3caee4c..20a7ca360a 100644
--- a/gtk2_ardour/editor.cc
+++ b/gtk2_ardour/editor.cc
@@ -522,66 +522,74 @@ Editor::Editor (AudioEngine& eng)
bottom_hbox.set_border_width (3);
bottom_hbox.set_spacing (3);
- route_display_model = ListStore::create(route_display_columns);
+ route_display_model = TreeStore::create(route_display_columns);
route_list_display.set_model (route_display_model);
- route_list_display.append_column (_("Tracks"), route_display_columns.text);
- route_list_display.set_headers_visible (false);
+ route_list_display.append_column (_("Visible"), route_display_columns.visible);
+ route_list_display.append_column (_("Name"), route_display_columns.text);
+ route_list_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
+ route_list_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
+ route_list_display.set_headers_visible (true);
route_list_display.set_name ("TrackListDisplay");
- route_list_display.get_selection()->set_mode (SELECTION_MULTIPLE);
+ route_list_display.get_selection()->set_mode (SELECTION_NONE);
route_list_display.set_reorderable (true);
route_list_display.set_size_request (75,-1);
- route_display_model->signal_rows_reordered().connect (mem_fun (*this, &Editor::route_list_reordered));
- route_display_model->set_sort_func (0, mem_fun (*this, &Editor::route_list_compare_func));
- route_display_model->set_sort_column (0, SORT_ASCENDING);
+ CellRendererToggle* route_list_visible_cell = dynamic_cast<CellRendererToggle*>(route_list_display.get_column_cell_renderer (0));
+ route_list_visible_cell->property_activatable() = true;
+ route_list_visible_cell->property_radio() = false;
+
+ route_display_model->signal_row_deleted().connect (mem_fun (*this, &Editor::route_list_delete));
+ route_display_model->signal_row_changed().connect (mem_fun (*this, &Editor::route_list_change));
+
+ route_list_display.signal_button_press_event().connect (mem_fun (*this, &Editor::route_list_display_button_press), false);
route_list_scroller.add (route_list_display);
route_list_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC);
- route_list_display.get_selection()->signal_changed().connect (mem_fun (*this, &Editor::route_display_selection_changed));
-
- 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");
-
group_model = ListStore::create(group_columns);
edit_group_display.set_model (group_model);
- edit_group_display.append_column (_("active"), group_columns.is_active);
- edit_group_display.append_column (_("groupname"), group_columns.text);
+ edit_group_display.append_column (_("Active"), group_columns.is_active);
+ edit_group_display.append_column (_("Visible"), group_columns.is_visible);
+ edit_group_display.append_column (_("Name"), group_columns.text);
edit_group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0));
- edit_group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
- edit_group_display.set_headers_visible (false);
+ edit_group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
+ edit_group_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2));
+ edit_group_display.set_headers_visible (true);
+
+ /* use checkbox for the active + visible columns */
- /* use checkbox for the active column */
+ CellRendererToggle* active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (0));
+ active_cell->property_activatable() = true;
+ active_cell->property_radio() = false;
- CellRendererToggle *active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (0));
+ active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (1));
active_cell->property_activatable() = true;
active_cell->property_radio() = false;
- edit_group_display.set_name ("MixerGroupList");
- edit_group_display.columns_autosize ();
- edit_group_display.get_selection()->set_mode (SELECTION_MULTIPLE);
+ edit_group_display.set_name ("EditGroupList");
+
+ group_model->signal_row_changed().connect (mem_fun (*this, &Editor::edit_group_row_change));
+
+ edit_group_display.set_name ("EditGroupList");
+ edit_group_display.get_selection()->set_mode (SELECTION_NONE);
edit_group_display.set_reorderable (false);
edit_group_display.set_size_request (75, -1);
- edit_group_list_scroller.add (edit_group_display);
- edit_group_list_scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
+ edit_group_display_scroller.add (edit_group_display);
+ edit_group_display_scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
- edit_group_list_button.signal_clicked().connect (mem_fun(*this, &Editor::edit_group_list_button_clicked));
- edit_group_display.signal_button_press_event().connect (mem_fun(*this, &Editor::edit_group_list_button_press_event));
- edit_group_display.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-"));
- row[group_columns.routegroup] = 0;
- edit_group_display.get_selection()->select (row);
+ edit_group_display.signal_button_press_event().connect (mem_fun(*this, &Editor::edit_group_list_button_press_event), false);
+
+ {
+ TreeModel::Row row;
+ row = *(group_model->append());
+ row[group_columns.is_active] = false;
+ row[group_columns.is_visible] = true;
+ row[group_columns.text] = (_("-all-"));
+ row[group_columns.routegroup] = 0;
+ }
- edit_group_vbox.pack_start (edit_group_list_button, false, false);
- edit_group_vbox.pack_start (edit_group_list_scroller, true, true);
-
region_list_display.set_size_request (100, -1);
region_list_display.set_name ("RegionListDisplay");
@@ -600,8 +608,6 @@ Editor::Editor (AudioEngine& eng)
tv_col->add_attribute(renderer->property_text(), region_list_columns.name);
tv_col->add_attribute(renderer->property_foreground_gdk(), region_list_columns.color_);
- region_list_display.set_reorderable (true);
-
region_list_display.get_selection()->set_mode (SELECTION_MULTIPLE);
region_list_display.add_object_drag (region_list_columns.region.index(), "regions");
@@ -659,7 +665,7 @@ Editor::Editor (AudioEngine& eng)
the_notebook.append_page (region_list_scroller, _("Regions"));
the_notebook.append_page (route_list_scroller, _("Tracks/Busses"));
the_notebook.append_page (snapshot_display_scroller, _("Snapshots"));
- the_notebook.append_page (edit_group_vbox, _("Edit Groups"));
+ the_notebook.append_page (edit_group_display_scroller, _("Edit Groups"));
the_notebook.append_page (named_selection_scroller, _("Chunks"));
the_notebook.set_show_tabs (true);
the_notebook.set_scrollable (true);
@@ -1255,11 +1261,7 @@ Editor::connect_to_session (Session *t)
redisplay_named_selections ();
redisplay_snapshots ();
- route_display_model->clear ();
- no_route_list_redisplay = true;
- session->foreach_route (this, &Editor::handle_new_route);
- no_route_list_redisplay = false;
- route_list_display.get_selection()->select_all ();
+ initial_route_list_display ();
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
@@ -1293,21 +1295,21 @@ Editor::connect_to_session (Session *t)
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
- //route_list_display.freeze ();
+ no_route_list_redisplay = true;
for (i = rows.begin(); i != rows.end(); ++i) {
- TimeAxisView *tv = (*i)[route_display_columns.tv];
+ TimeAxisView *tv = (*i)[route_display_columns.tv];
AudioTimeAxisView *atv;
-
+
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
if (atv->route().master()) {
route_list_display.get_selection()->unselect (i);
- //(*i)->unselect ();
}
}
}
-
- //route_list_display.thaw ();
+
+ no_route_list_redisplay = false;
+ redisplay_route_list ();
}
}
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 54b5fd578d..9d1724e9b0 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -259,8 +259,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 hide_track_in_display (TimeAxisView& tv);
+ void show_track_in_display (TimeAxisView& tv);
/* nudge is initiated by transport controls owned by ARDOUR_UI */
@@ -1035,13 +1035,6 @@ class Editor : public PublicEditor
void hide_all_tracks (bool with_select);
- void route_display_selection_changed ();
- void redisplay_route_list();
- void route_list_reordered (const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, int* what);
- bool ignore_route_list_reorder;
- bool no_route_list_redisplay;
- void queue_route_list_reordered ();
-
struct DragInfo {
ArdourCanvas::Item* item;
void* data;
@@ -1452,39 +1445,59 @@ class Editor : public PublicEditor
struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
RouteDisplayModelColumns() {
add (text);
+ add (visible);
add (tv);
}
Gtk::TreeModelColumn<Glib::ustring> text;
- Gtk::TreeModelColumn<TimeAxisView*> tv;
+ Gtk::TreeModelColumn<bool> visible;
+ Gtk::TreeModelColumn<TimeAxisView*> tv;
};
- RouteDisplayModelColumns route_display_columns;
- Glib::RefPtr<Gtk::ListStore> route_display_model;
+ RouteDisplayModelColumns route_display_columns;
+ Glib::RefPtr<Gtk::TreeStore> route_display_model;
Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
- Gtkmm2ext::DnDTreeView route_list_display;
- Gtk::ScrolledWindow route_list_scroller;
- Gtk::Menu* route_list_menu;
+ Gtkmm2ext::DnDTreeView route_list_display;
+ Gtk::ScrolledWindow route_list_scroller;
+ Gtk::Menu* route_list_menu;
+
+ bool route_list_display_button_press (GdkEventButton*);
+ bool route_list_selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
+
+ void route_list_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
+ void route_list_delete (const Gtk::TreeModel::Path&);
+ void initial_route_list_display ();
+ void redisplay_route_list();
+ void route_list_reordered (const Gtk::TreeModel::Path& path, const Gtk::TreeModel::iterator& iter, int* what);
+ bool ignore_route_list_reorder;
+ bool no_route_list_redisplay;
+ void queue_route_list_reordered ();
- void route_list_column_click ();
void build_route_list_menu ();
- void select_all_routes ();
- void unselect_all_routes ();
- void select_all_audiotracks ();
- void unselect_all_audiotracks ();
- void select_all_audiobus ();
- void unselect_all_audiobus ();
+ void show_route_list_menu ();
+
+ void show_all_routes ();
+ void hide_all_routes ();
+ void show_all_audiotracks ();
+ void hide_all_audiotracks ();
+ void show_all_audiobus ();
+ void hide_all_audiobus ();
+
+ void set_all_tracks_visibility (bool yn);
+ void set_all_audio_visibility (int type, bool yn);
/* edit group management */
struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
GroupListModelColumns () {
add (is_active);
+ add (is_visible);
add (text);
add (routegroup);
}
Gtk::TreeModelColumn<bool> is_active;
+ Gtk::TreeModelColumn<bool> is_visible;
Gtk::TreeModelColumn<std::string> text;
Gtk::TreeModelColumn<ARDOUR::RouteGroup*> routegroup;
};
@@ -1493,17 +1506,16 @@ class Editor : public PublicEditor
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;
- Gtkmm2ext::DnDTreeView edit_group_display;
- Gtk::ScrolledWindow edit_group_list_scroller;
+ Gtk::TreeView edit_group_display;
+ Gtk::ScrolledWindow edit_group_display_scroller;
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 ();
- void unselect_all_edit_groups ();
+ void activate_all_edit_groups ();
+ void disable_all_edit_groups ();
+
+ void edit_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&);
+
void new_edit_group ();
void edit_group_list_button_clicked ();
gint edit_group_list_button_press_event (GdkEventButton* ev);
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index 2c0f72ffe4..d999c1187e 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -367,8 +367,10 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
- pos += tv->effective_height;
- pos += track_spacing;
+ if (tv != 0) {
+ pos += tv->effective_height;
+ pos += track_spacing;
+ }
}
RefPtr<Gdk::Screen> screen = get_screen();
@@ -396,8 +398,10 @@ Editor::controls_layout_size_request (Requisition* req)
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
- pos += tv->effective_height;
- pos += track_spacing;
+ if (tv != 0) {
+ pos += tv->effective_height;
+ pos += track_spacing;
+ }
}
RefPtr<Gdk::Screen> screen = get_screen();
diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc
index b833c8ac5e..d66b313ac0 100644
--- a/gtk2_ardour/editor_edit_groups.cc
+++ b/gtk2_ardour/editor_edit_groups.cc
@@ -41,19 +41,7 @@ using namespace ARDOUR;
using namespace Gtk;
void
-Editor::edit_group_list_column_click (gint col)
-
-{
- if (edit_group_list_menu == 0) {
- build_edit_group_list_menu ();
- }
-
- edit_group_list_menu->popup (0, 0);
-}
-
-void
Editor::build_edit_group_list_menu ()
-
{
using namespace Gtk::Menu_Helpers;
@@ -61,34 +49,33 @@ Editor::build_edit_group_list_menu ()
edit_group_list_menu->set_name ("ArdourContextMenu");
MenuList& items = edit_group_list_menu->items();
- items.push_back (MenuElem (_("Show All"), mem_fun(*this, &Editor::select_all_edit_groups)));
- items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::unselect_all_edit_groups)));
+ items.push_back (MenuElem (_("Activate All"), mem_fun(*this, &Editor::activate_all_edit_groups)));
+ items.push_back (MenuElem (_("Disable All"), mem_fun(*this, &Editor::disable_all_edit_groups)));
+ items.push_back (SeparatorElem());
+ items.push_back (MenuElem (_("Add group"), mem_fun(*this, &Editor::new_edit_group)));
+
}
void
-Editor::unselect_all_edit_groups ()
-
+Editor::activate_all_edit_groups ()
{
+ Gtk::TreeModel::Children children = group_model->children();
+ for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
+ (*iter)[group_columns.is_active] = true;
+ }
}
void
-Editor::select_all_edit_groups ()
-
+Editor::disable_all_edit_groups ()
{
-
- /* XXX potential race with remove_track(), but the select operation
- cannot be done with the track_lock held.
- */
-
Gtk::TreeModel::Children children = group_model->children();
for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
- edit_group_display.get_selection()->select (iter);
+ (*iter)[group_columns.is_active] = false;
}
}
void
Editor::new_edit_group ()
-
{
if (session == 0) {
return;
@@ -104,7 +91,7 @@ Editor::new_edit_group ()
case GTK_RESPONSE_ACCEPT:
prompter.get_result (result);
if (result.length()) {
- session->add_edit_group (result);
+ session->add_edit_group (result);
}
break;
}
@@ -119,84 +106,97 @@ Editor::edit_group_list_button_clicked ()
gint
Editor::edit_group_list_button_press_event (GdkEventButton* ev)
{
+ if (Keyboard::is_context_menu_event (ev)) {
+ if (edit_group_list_menu == 0) {
+ build_edit_group_list_menu ();
+ }
+ edit_group_list_menu->popup (1, 0);
+ return true;
+ }
+
+
RouteGroup* group;
TreeIter iter;
TreeModel::Path path;
TreeViewColumn* column;
int cellx;
int celly;
-
+
if (!edit_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
return false;
}
switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
-
- case 1:
-
+ case 2:
if (Keyboard::is_edit_event (ev)) {
- // RouteGroup* group = (RouteGroup *) edit_group_display.row(row).get_data ();
- // edit_route_group (group);
-
- return stop_signal (edit_group_display, "button_press_event");
+ if ((iter = group_model->get_iter (path))) {
+ if ((group = (*iter)[group_columns.routegroup]) != 0) {
+ // edit_route_group (group);
+ return true;
+ }
+ }
+
+ }
+ break;
- } else {
- /* allow regular select to occur */
- return FALSE;
+ case 1:
+ if ((iter = group_model->get_iter (path))) {
+ bool visible = (*iter)[group_columns.is_visible];
+ (*iter)[group_columns.is_visible] = !visible;
+ return true;
}
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);
- }
+ bool active = (*iter)[group_columns.is_active];
+ (*iter)[group_columns.is_active] = !active;
+ return true;
}
break;
+
+ default:
+ break;
}
-
- return stop_signal (edit_group_display, "button_press_event");
-}
+
+ return false;
+ }
-void
-Editor::edit_group_selection_changed ()
+void
+Editor::edit_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
{
- TreeModel::iterator i;
- TreeModel::Children rows = group_model->children();
- Glib::RefPtr<TreeSelection> selection = edit_group_display.get_selection();
-
- for (i = rows.begin(); i != rows.end(); ++i) {
- RouteGroup* group;
-
- group = (*i)[group_columns.routegroup];
-
- 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);
- }
- }
+ RouteGroup* group;
+
+ if ((group = (*iter)[group_columns.routegroup]) == 0) {
+ return;
+ }
+
+ if ((*iter)[group_columns.is_visible]) {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->edit_group() == group) {
+ show_track_in_display (**j);
+ }
+ }
+ } else {
+ for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
+ if ((*j)->edit_group() == group) {
+ hide_track_in_display (**j);
+ }
}
}
+
+ bool active = (*iter)[group_columns.is_active];
+ group->set_active (active, this);
}
void
Editor::add_edit_group (RouteGroup* group)
-
{
-
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::add_edit_group), group));
TreeModel::Row row = *(group_model->append());
row[group_columns.is_active] = group->is_active();
+ row[group_columns.is_visible] = true;
row[group_columns.text] = group->name();
row[group_columns.routegroup] = group;
@@ -206,20 +206,14 @@ Editor::add_edit_group (RouteGroup* group)
void
Editor::group_flags_changed (void* src, RouteGroup* group)
{
- /* GTK2FIX not needed in gtk2?
+ ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::group_flags_changed), src, group));
- if (src != this) {
- // select row
- }
-
- CList_Helpers::RowIterator ri = edit_group_display.rows().find_data (group);
-
- if (group->is_active()) {
- edit_group_display.cell (ri->get_row_num(),0).set_pixmap (check_pixmap, check_mask);
- } else {
- edit_group_display.cell (ri->get_row_num(),0).set_pixmap (empty_pixmap, empty_mask);
+ Gtk::TreeModel::Children children = group_model->children();
+ for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
+ if (group == (*iter)[group_columns.routegroup]) {
+ (*iter)[group_columns.is_active] = group->is_active();
+ }
}
- */
}
diff --git a/gtk2_ardour/editor_route_list.cc b/gtk2_ardour/editor_route_list.cc
index 73928a62f3..4ea2f54fab 100644
--- a/gtk2_ardour/editor_route_list.cc
+++ b/gtk2_ardour/editor_route_list.cc
@@ -29,6 +29,7 @@
#include "gui_thread.h"
#include <ardour/route.h>
+#include <ardour/audio_track.h>
#include "i18n.h"
@@ -48,25 +49,53 @@ Editor::handle_new_route (Route& route)
{
TimeAxisView *tv;
AudioTimeAxisView *atv;
- TreeModel::Row row = *(route_display_model->append());
+ TreeModel::Row parent;
+ TreeModel::Row row;
if (route.hidden()) {
return;
}
-
+
tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
- track_views.push_back (tv);
+#if 0
+ if (route_display_model->children().size() == 0) {
+
+ /* set up basic entries */
+
+ TreeModel::Row row;
+
+ row = *(route_display_model->append()); // path = "0"
+ row[route_display_columns.text] = _("Busses");
+ row[route_display_columns.tv] = 0;
+ row = *(route_display_model->append()); // path = "1"
+ row[route_display_columns.text] = _("Tracks");
+ row[route_display_columns.tv] = 0;
+
+ }
+
+ if (dynamic_cast<AudioTrack*>(&route) != 0) {
+ TreeModel::iterator iter = route_display_model->get_iter ("1"); // audio tracks
+ parent = *iter;
+ } else {
+ TreeModel::iterator iter = route_display_model->get_iter ("0"); // busses
+ parent = *iter;
+ }
+
+
+ row = *(route_display_model->append (parent.children()));
+#else
+ row = *(route_display_model->append ());
+#endif
row[route_display_columns.text] = route.name();
+ row[route_display_columns.visible] = tv->marked_for_display();
row[route_display_columns.tv] = tv;
+
+ track_views.push_back (tv);
ignore_route_list_reorder = true;
- if (!no_route_list_redisplay && tv->marked_for_display()) {
- route_list_display.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) {
@@ -144,57 +173,39 @@ Editor::route_name_changed (TimeAxisView *tv)
}
void
-Editor::route_display_selection_changed ()
+Editor::hide_track_in_display (TimeAxisView& tv)
{
- TimeAxisView *tv;
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
Glib::RefPtr<TreeSelection> selection = route_list_display.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 (false);
- } else {
- AudioTimeAxisView *atv;
- tv->set_marked_for_display (true);
- 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);
- }
- }
+ if ((*i)[route_display_columns.tv] == &tv) {
+ (*i)[route_display_columns.visible] = false;
+ break;
}
}
-
- redisplay_route_list ();
-}
-void
-Editor::unselect_strip_in_display (TimeAxisView& tv)
-{
- TreeModel::Children rows = route_display_model->children();
- TreeModel::Children::iterator i;
- Glib::RefPtr<TreeSelection> selection = route_list_display.get_selection();
-
- for (i = rows.begin(); i != rows.end(); ++i) {
- if ((*i)[route_display_columns.tv] == &tv) {
- selection->unselect (*i);
- }
+ AudioTimeAxisView* atv = dynamic_cast<AudioTimeAxisView*> (&tv);
+
+ if (atv && current_mixer_strip && &(atv->route()) == &(current_mixer_strip->route())) {
+ // this will hide the mixer strip
+ set_selected_mixer_strip (tv);
}
}
void
-Editor::select_strip_in_display (TimeAxisView* tv)
+Editor::show_track_in_display (TimeAxisView& tv)
{
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
Glib::RefPtr<TreeSelection> selection = route_list_display.get_selection();
for (i = rows.begin(); i != rows.end(); ++i) {
- if ((*i)[route_display_columns.tv] == tv) {
- selection->select (*i);
+ if ((*i)[route_display_columns.tv] == &tv) {
+ (*i)[route_display_columns.visible] = true;
+ tv.set_marked_for_display (true);
+ break;
}
}
}
@@ -218,10 +229,15 @@ Editor::redisplay_route_list ()
return;
}
- for (n = 0, order = 0, position = 0, i = rows.begin(); i != rows.end(); ++i, ++order) {
+ for (n = 0, order = 0, position = 0, i = rows.begin(); i != rows.end(); ++i) {
TimeAxisView *tv = (*i)[route_display_columns.tv];
AudioTimeAxisView* at;
+ if (tv == 0) {
+ // just a "title" row
+ continue;
+ }
+
if (!ignore_route_list_reorder) {
/* this reorder is caused by user action, so reassign sort order keys
@@ -230,9 +246,14 @@ Editor::redisplay_route_list ()
if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
at->route().set_order_key (N_("editor"), order);
+ ++order;
}
}
- if (tv->marked_for_display()) {
+
+ bool visible = (*i)[route_display_columns.visible];
+
+ if (visible) {
+ tv->set_marked_for_display (false);
position += tv->show_at (position, n, &edit_controls_vbox);
position += track_spacing;
} else {
@@ -243,7 +264,6 @@ Editor::redisplay_route_list ()
}
- controls_layout.queue_resize ();
reset_scrolling_region ();
}
@@ -253,23 +273,27 @@ Editor::hide_all_tracks (bool with_select)
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
- // GTK2FIX
- // track_display_list.freeze ();
-
+ no_route_list_redisplay = true;
+
for (i = rows.begin(); i != rows.end(); ++i) {
TreeModel::Row row = (*i);
TimeAxisView *tv = row[route_display_columns.tv];
-
- if (with_select) {
- route_list_display.get_selection()->unselect (i);
- } else {
- tv->set_marked_for_display (false);
- tv->hide();
-
+
+ if (tv == 0) {
+ continue;
}
+
+ row[route_display_columns.visible] = false;
}
- //route_list_display.thaw ();
+
+ no_route_list_redisplay = false;
+ redisplay_route_list ();
+
+ /* XXX this seems like a hack and half, but its not clear where to put this
+ otherwise.
+ */
+
reset_scrolling_region ();
}
@@ -279,146 +303,212 @@ Editor::build_route_list_menu ()
using namespace Menu_Helpers;
using namespace Gtk;
-
route_list_menu = new Menu;
MenuList& items = route_list_menu->items();
route_list_menu->set_name ("ArdourContextMenu");
- items.push_back (MenuElem (_("Show All"), mem_fun(*this, &Editor::select_all_routes)));
- items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::unselect_all_routes)));
- items.push_back (MenuElem (_("Show All AbstractTracks"), mem_fun(*this, &Editor::select_all_audiotracks)));
- items.push_back (MenuElem (_("Hide All AbstractTracks"), mem_fun(*this, &Editor::unselect_all_audiotracks)));
- items.push_back (MenuElem (_("Show All AudioBus"), mem_fun(*this, &Editor::select_all_audiobus)));
- items.push_back (MenuElem (_("Hide All AudioBus"), mem_fun(*this, &Editor::unselect_all_audiobus)));
+ items.push_back (MenuElem (_("Show All"), mem_fun(*this, &Editor::show_all_routes)));
+ items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::hide_all_routes)));
+ items.push_back (MenuElem (_("Show All Audio Tracks"), mem_fun(*this, &Editor::show_all_audiotracks)));
+ items.push_back (MenuElem (_("Hide All Audio Tracks"), mem_fun(*this, &Editor::hide_all_audiotracks)));
+ items.push_back (MenuElem (_("Show All Audio Busses"), mem_fun(*this, &Editor::show_all_audiobus)));
+ items.push_back (MenuElem (_("Hide All Audio Busses"), mem_fun(*this, &Editor::hide_all_audiobus)));
}
void
-Editor::unselect_all_routes ()
-{
- hide_all_tracks (true);
-}
-
-void
-Editor::select_all_routes ()
-
+Editor::set_all_tracks_visibility (bool yn)
{
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
+ no_route_list_redisplay = true;
+
for (i = rows.begin(); i != rows.end(); ++i) {
- route_list_display.get_selection()->select (i);
+
+ TreeModel::Row row = (*i);
+ TimeAxisView* tv = row[route_display_columns.tv];
+
+ if (tv == 0) {
+ continue;
+ }
+
+ (*i)[route_display_columns.visible] = yn;
}
+
+ no_route_list_redisplay = false;
+ redisplay_route_list ();
}
void
-Editor::select_all_audiotracks ()
+Editor::set_all_audio_visibility (int tracks, bool yn)
{
TreeModel::Children rows = route_display_model->children();
TreeModel::Children::iterator i;
+ no_route_list_redisplay = true;
+
for (i = rows.begin(); i != rows.end(); ++i) {
- TreeModel::Row row = (*i);
- TimeAxisView* tv = row[route_display_columns.tv];
+ 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()) {
- route_list_display.get_selection()->select (i);
+ if (tv == 0) {
+ continue;
+ }
+ if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
+ switch (tracks) {
+ case 0:
+ (*i)[route_display_columns.visible] = yn;
+ break;
+
+ case 1:
+ if (atv->is_audio_track()) {
+ (*i)[route_display_columns.visible] = yn;
+ }
+ break;
+
+ case 2:
+ if (!atv->is_audio_track()) {
+ (*i)[route_display_columns.visible] = yn;
+ }
+ break;
}
}
}
+ no_route_list_redisplay = false;
+ redisplay_route_list ();
}
void
-Editor::unselect_all_audiotracks ()
+Editor::hide_all_routes ()
{
- 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()) {
- route_list_display.get_selection()->unselect (i);
+ set_all_tracks_visibility (false);
+}
- }
- }
- }
+void
+Editor::show_all_routes ()
+{
+ set_all_tracks_visibility (true);
+}
+void
+Editor::show_all_audiobus ()
+{
+ set_all_audio_visibility (2, true);
+}
+void
+Editor::hide_all_audiobus ()
+{
+ set_all_audio_visibility (2, false);
}
void
-Editor::select_all_audiobus ()
+Editor::show_all_audiotracks()
{
- TreeModel::Children rows = route_display_model->children();
- TreeModel::Children::iterator i;
+ set_all_audio_visibility (1, true);
+}
+void
+Editor::hide_all_audiotracks ()
+{
+ set_all_audio_visibility (1, false);
+}
- for (i = rows.begin(); i != rows.end(); ++i) {
- TreeModel::Row row = (*i);
- TimeAxisView* tv = row[route_display_columns.tv];
- AudioTimeAxisView* atv;
+bool
+Editor::route_list_display_button_press (GdkEventButton* ev)
+{
+ if (Keyboard::is_context_menu_event (ev)) {
+ show_route_list_menu ();
+ return true;
+ }
- if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
- if (!atv->is_audio_track()) {
- route_list_display.get_selection()->select (i);
+ TreeIter iter;
+ TreeModel::Path path;
+ TreeViewColumn* column;
+ int cellx;
+ int celly;
+
+ if (!route_list_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
+ return false;
+ }
+ switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
+ case 0:
+ if ((iter = route_display_model->get_iter (path))) {
+ TimeAxisView* tv = (*iter)[route_display_columns.tv];
+ if (tv) {
+ bool visible = (*iter)[route_display_columns.visible];
+ (*iter)[route_display_columns.visible] = !visible;
}
}
+ return true;
+
+ case 1:
+ /* allow normal processing to occur */
+ return false;
+
+ default:
+ break;
}
+ return false;
}
void
-Editor::unselect_all_audiobus ()
+Editor::show_route_list_menu()
{
- 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()) {
- route_list_display.get_selection()->unselect (i);
-
- }
- }
+ if (route_list_menu == 0) {
+ build_route_list_menu ();
}
+ route_list_menu->popup (1, 0);
+}
+
+bool
+Editor::route_list_selection_filter (const Glib::RefPtr<TreeModel>& model, const TreeModel::Path& path, bool yn)
+{
+ return true;
}
-gint
-Editor::route_list_compare_func (TreeModel::iterator a, TreeModel::iterator b)
+struct EditorOrderRouteSorter {
+ bool operator() (Route* a, Route* b) {
+ /* use of ">" forces the correct sort order */
+ return a->order_key ("editor") > b->order_key ("editor");
+ }
+};
+
+void
+Editor::initial_route_list_display ()
{
- TimeAxisView *tv1;
- TimeAxisView *tv2;
- AudioTimeAxisView *atv1;
- AudioTimeAxisView *atv2;
- Route* ra;
- Route* rb;
-
- 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) {
- return FALSE;
+ Session::RouteList routes = session->get_routes();
+ EditorOrderRouteSorter sorter;
+
+ routes.sort (sorter);
+
+ no_route_list_redisplay = true;
+
+ route_display_model->clear ();
+
+ for (Session::RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
+ handle_new_route (**i);
}
- ra = &atv1->route();
- rb = &atv2->route();
+ no_route_list_redisplay = false;
- /* use of ">" forces the correct sort order */
+ redisplay_route_list ();
+}
- return ra->order_key ("editor") > rb->order_key ("editor");
+void
+Editor::route_list_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
+{
+ redisplay_route_list ();
}
+void
+Editor::route_list_delete (const Gtk::TreeModel::Path& path)
+{
+ redisplay_route_list ();
+}
diff --git a/gtk2_ardour/po/SConscript b/gtk2_ardour/po/SConscript
index 55a4642433..d2a42d2f91 100644
--- a/gtk2_ardour/po/SConscript
+++ b/gtk2_ardour/po/SConscript
@@ -45,3 +45,7 @@ for lang in languages[:]:
modir = (os.path.join (install_prefix, 'share/locale/' + lang + '/LC_MESSAGES/'))
moname = domain + '.mo'
env.Alias('install', env.InstallAs (os.path.join (modir, moname), lang + '.mo'))
+
+env.Alias ('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript' ] +
+ glob.glob('*.po')))
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 25ef7654fd..89afb02bbf 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -103,7 +103,7 @@ class PublicEditor : public Gtk::Window, public Stateful {
virtual void route_name_changed (TimeAxisView *) = 0;
virtual void clear_playlist (ARDOUR::Playlist&) = 0;
virtual void set_selected_mixer_strip (TimeAxisView&) = 0;
- virtual void unselect_strip_in_display (TimeAxisView& tv) = 0;
+ virtual void hide_track_in_display (TimeAxisView& tv) = 0;
virtual void set_follow_playhead (bool yn) = 0;
virtual void toggle_follow_playhead () = 0;
virtual bool follow_playhead() const = 0;
diff --git a/gtk2_ardour/visual_time_axis.cc b/gtk2_ardour/visual_time_axis.cc
index 285f72c8a5..9782a8c9f6 100644
--- a/gtk2_ardour/visual_time_axis.cc
+++ b/gtk2_ardour/visual_time_axis.cc
@@ -222,7 +222,7 @@ VisualTimeAxis::visual_click()
void
VisualTimeAxis::hide_click()
{
- editor.unselect_strip_in_display (*this);
+ editor.hide_track_in_display (*this);
}
diff --git a/libs/gtkmm2ext/dndtreeview.cc b/libs/gtkmm2ext/dndtreeview.cc
index 247e77d8c2..d7ee5a7b27 100644
--- a/libs/gtkmm2ext/dndtreeview.cc
+++ b/libs/gtkmm2ext/dndtreeview.cc
@@ -70,7 +70,7 @@ void
DnDTreeView::on_drag_data_get(const RefPtr<DragContext>& context, SelectionData& selection_data, guint info, guint time)
{
if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
-
+
TreeView::on_drag_data_get (context, selection_data, info, time);
} else if (data_column >= 0) {
@@ -113,4 +113,10 @@ DnDTreeView::on_drag_data_received(const RefPtr<DragContext>& context, int x, in
}
}
+bool
+DnDTreeView::on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time)
+{
+ suggested_action = Gdk::DragAction (0);
+ return TreeView::on_drag_drop (context, x, y, time);
+}
diff --git a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
index d1c2bc4659..82bb7651b9 100644
--- a/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
+++ b/libs/gtkmm2ext/gtkmm2ext/dndtreeview.h
@@ -51,11 +51,7 @@ class DnDTreeView : public Gtk::TreeView
suggested_action = context->get_suggested_action();
return TreeView::on_drag_motion (context, x, y, time);
}
- bool on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time) {
- suggested_action = Gdk::DragAction (0);
- return TreeView::on_drag_drop (context, x, y, time);
- }
-
+ bool on_drag_drop(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, guint time);
void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection_data, guint info, guint time);
void on_drag_data_received(const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& selection_data, guint info, guint time);
diff --git a/libs/midi++2/SConscript b/libs/midi++2/SConscript
index 7c2d3964ce..1a0f887459 100644
--- a/libs/midi++2/SConscript
+++ b/libs/midi++2/SConscript
@@ -46,3 +46,7 @@ midi2.VersionBuild(['version.cc','midi++/version.h'], 'SConscript')
libmidi2 = midi2.StaticLibrary('midi++', [ sources, sysdep_src ])
Default(libmidi2)
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript' ] + sources + sysdep_sources +
+ glob.glob('midi++/*.h')))
diff --git a/libs/pbd3/SConscript b/libs/pbd3/SConscript
index 977cbe6195..47aff4c008 100644
--- a/libs/pbd3/SConscript
+++ b/libs/pbd3/SConscript
@@ -42,3 +42,6 @@ pbd3.VersionBuild(['version.cc','pbd/version.h'], 'SConscript')
libpbd3 = pbd3.StaticLibrary('pbd', pbd3_files)
Default(libpbd3)
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'SConscript' ] + pbd3_files + glob.glob('pbd/*.h')))
diff --git a/libs/sigc++2/SConscript b/libs/sigc++2/SConscript
index ea22ff03de..d476f1ca77 100644
--- a/libs/sigc++2/SConscript
+++ b/libs/sigc++2/SConscript
@@ -16,3 +16,14 @@ if os.path.exists ('CVS'):
Default([sigc2_config_h,libsigc2])
else:
Default([libsigc2])
+
+env.Alias('tarball', env.Distribute (env['DISTTREE'],
+ [ 'NEWS', 'README', 'AUTHORS', 'ChangeLog',
+ 'configure', 'Makefile.am', 'SConscript',
+ 'sigc++/Makefile.am',
+ 'sigc++config.h',
+ ] + sigc2_files +
+ glob.glob('sigc++/*.h') +
+ glob.glob('sigc++/functors/*.h') + glob.glob('sigc++/adaptors/lambda/*.h') +
+ glob.glob('sigc++/adaptors/*.h')
+ ))