mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-13 10:06:33 +01:00
route list + edit group list now pretty much functional, plus preparations for ardour2.0-alpha1
git-svn-id: svn://localhost/trunk/ardour2@253 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
86f540cb05
commit
a9e38032a3
18 changed files with 458 additions and 406 deletions
|
|
@ -13,7 +13,7 @@ import SCons.Node.FS
|
|||
SConsignFile()
|
||||
EnsureSConsVersion(0, 96)
|
||||
|
||||
version = '1.9beta1'
|
||||
version = '2.0alpha1'
|
||||
|
||||
subst_dict = { }
|
||||
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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))
|
||||
|
||||
|
|
@ -233,7 +234,9 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
|||
[ 'SConscript',
|
||||
'i18n.h', 'gettext.h',
|
||||
'editor_xpms', 'misc_xpms',
|
||||
'ardour2_ui.rc', 'splash.ppm'
|
||||
'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')))
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -1120,7 +1120,7 @@ AudioTimeAxisView::visual_click ()
|
|||
void
|
||||
AudioTimeAxisView::hide_click ()
|
||||
{
|
||||
editor.unselect_strip_in_display (*this);
|
||||
editor.hide_track_in_display (*this);
|
||||
}
|
||||
|
||||
Region*
|
||||
|
|
|
|||
|
|
@ -522,65 +522,73 @@ 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 column */
|
||||
/* use checkbox for the active + visible columns */
|
||||
|
||||
CellRendererToggle *active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (0));
|
||||
CellRendererToggle* active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (0));
|
||||
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);
|
||||
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 ("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));
|
||||
edit_group_display.signal_button_press_event().connect (mem_fun(*this, &Editor::edit_group_list_button_press_event), false);
|
||||
|
||||
TreeModel::Row row = *(group_model->append());
|
||||
{
|
||||
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_display.get_selection()->select (row);
|
||||
|
||||
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,7 +1295,7 @@ 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];
|
||||
|
|
@ -1302,12 +1304,12 @@ Editor::connect_to_session (Session *t)
|
|||
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 ();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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,14 +1445,16 @@ class Editor : public PublicEditor
|
|||
struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
|
||||
RouteDisplayModelColumns() {
|
||||
add (text);
|
||||
add (visible);
|
||||
add (tv);
|
||||
}
|
||||
Gtk::TreeModelColumn<Glib::ustring> text;
|
||||
Gtk::TreeModelColumn<bool> visible;
|
||||
Gtk::TreeModelColumn<TimeAxisView*> tv;
|
||||
};
|
||||
|
||||
RouteDisplayModelColumns route_display_columns;
|
||||
Glib::RefPtr<Gtk::ListStore> route_display_model;
|
||||
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);
|
||||
|
|
@ -1467,24 +1462,42 @@ class Editor : public PublicEditor
|
|||
Gtk::ScrolledWindow route_list_scroller;
|
||||
Gtk::Menu* route_list_menu;
|
||||
|
||||
void route_list_column_click ();
|
||||
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 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);
|
||||
|
|
|
|||
|
|
@ -367,9 +367,11 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
|
|||
|
||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
if (tv != 0) {
|
||||
pos += tv->effective_height;
|
||||
pos += track_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
RefPtr<Gdk::Screen> screen = get_screen();
|
||||
|
||||
|
|
@ -396,9 +398,11 @@ Editor::controls_layout_size_request (Requisition* req)
|
|||
|
||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||
if (tv != 0) {
|
||||
pos += tv->effective_height;
|
||||
pos += track_spacing;
|
||||
}
|
||||
}
|
||||
|
||||
RefPtr<Gdk::Screen> screen = get_screen();
|
||||
|
||||
|
|
|
|||
|
|
@ -40,20 +40,8 @@ using namespace sigc;
|
|||
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 ()
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
Editor::select_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] = true;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::disable_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] = false;
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
Editor::new_edit_group ()
|
||||
|
||||
{
|
||||
if (session == 0) {
|
||||
return;
|
||||
|
|
@ -119,6 +106,15 @@ 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;
|
||||
|
|
@ -131,72 +127,76 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev)
|
|||
}
|
||||
|
||||
switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
|
||||
case 2:
|
||||
if (Keyboard::is_edit_event (ev)) {
|
||||
if ((iter = group_model->get_iter (path))) {
|
||||
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
||||
// edit_route_group (group);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
break;
|
||||
|
||||
case 1:
|
||||
|
||||
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");
|
||||
|
||||
} else {
|
||||
/* allow regular select to occur */
|
||||
return FALSE;
|
||||
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 */
|
||||
bool active = (*iter)[group_columns.is_active];
|
||||
(*iter)[group_columns.is_active] = !active;
|
||||
return true;
|
||||
}
|
||||
break;
|
||||
|
||||
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
||||
group->set_active (!group->is_active (), this);
|
||||
}
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return stop_signal (edit_group_display, "button_press_event");
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
void
|
||||
Editor::edit_group_selection_changed ()
|
||||
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 ((group = (*iter)[group_columns.routegroup]) == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (selection->is_selected (i)) {
|
||||
if ((*iter)[group_columns.is_visible]) {
|
||||
for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
|
||||
if ((*j)->edit_group() == group) {
|
||||
select_strip_in_display (*j);
|
||||
show_track_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);
|
||||
}
|
||||
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
|
||||
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();
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -29,6 +29,7 @@
|
|||
#include "gui_thread.h"
|
||||
|
||||
#include <ardour/route.h>
|
||||
#include <ardour/audio_track.h>
|
||||
|
||||
#include "i18n.h"
|
||||
|
||||
|
|
@ -48,7 +49,8 @@ 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;
|
||||
|
|
@ -56,16 +58,43 @@ Editor::handle_new_route (Route& route)
|
|||
|
||||
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;
|
||||
|
||||
ignore_route_list_reorder = true;
|
||||
track_views.push_back (tv);
|
||||
|
||||
if (!no_route_list_redisplay && tv->marked_for_display()) {
|
||||
route_list_display.get_selection()->select (row);
|
||||
}
|
||||
ignore_route_list_reorder = true;
|
||||
|
||||
if ((atv = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
|
||||
/* added a new fresh one at the end */
|
||||
|
|
@ -144,35 +173,7 @@ Editor::route_name_changed (TimeAxisView *tv)
|
|||
}
|
||||
|
||||
void
|
||||
Editor::route_display_selection_changed ()
|
||||
{
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
redisplay_route_list ();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::unselect_strip_in_display (TimeAxisView& tv)
|
||||
Editor::hide_track_in_display (TimeAxisView& tv)
|
||||
{
|
||||
TreeModel::Children rows = route_display_model->children();
|
||||
TreeModel::Children::iterator i;
|
||||
|
|
@ -180,21 +181,31 @@ Editor::unselect_strip_in_display (TimeAxisView& tv)
|
|||
|
||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||
if ((*i)[route_display_columns.tv] == &tv) {
|
||||
selection->unselect (*i);
|
||||
(*i)[route_display_columns.visible] = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
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];
|
||||
AudioTimeAxisView* atv;
|
||||
|
||||
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()) {
|
||||
route_list_display.get_selection()->select (i);
|
||||
|
||||
}
|
||||
}
|
||||
(*i)[route_display_columns.visible] = yn;
|
||||
}
|
||||
break;
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
Editor::unselect_all_audiotracks ()
|
||||
{
|
||||
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);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void
|
||||
Editor::select_all_audiobus ()
|
||||
{
|
||||
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) {
|
||||
case 2:
|
||||
if (!atv->is_audio_track()) {
|
||||
route_list_display.get_selection()->select (i);
|
||||
|
||||
(*i)[route_display_columns.visible] = yn;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
no_route_list_redisplay = false;
|
||||
redisplay_route_list ();
|
||||
}
|
||||
|
||||
void
|
||||
Editor::unselect_all_audiobus ()
|
||||
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);
|
||||
}
|
||||
|
||||
gint
|
||||
Editor::route_list_compare_func (TreeModel::iterator a, TreeModel::iterator b)
|
||||
void
|
||||
Editor::show_all_routes ()
|
||||
{
|
||||
TimeAxisView *tv1;
|
||||
TimeAxisView *tv2;
|
||||
AudioTimeAxisView *atv1;
|
||||
AudioTimeAxisView *atv2;
|
||||
Route* ra;
|
||||
Route* rb;
|
||||
set_all_tracks_visibility (true);
|
||||
}
|
||||
|
||||
tv1 = (*a)[route_display_columns.tv];
|
||||
tv2 = (*b)[route_display_columns.tv];
|
||||
void
|
||||
Editor::show_all_audiobus ()
|
||||
{
|
||||
set_all_audio_visibility (2, true);
|
||||
}
|
||||
void
|
||||
Editor::hide_all_audiobus ()
|
||||
{
|
||||
set_all_audio_visibility (2, false);
|
||||
}
|
||||
|
||||
if ((atv1 = dynamic_cast<AudioTimeAxisView*>(tv1)) == 0 ||
|
||||
(atv2 = dynamic_cast<AudioTimeAxisView*>(tv2)) == 0) {
|
||||
return FALSE;
|
||||
void
|
||||
Editor::show_all_audiotracks()
|
||||
{
|
||||
set_all_audio_visibility (1, true);
|
||||
}
|
||||
void
|
||||
Editor::hide_all_audiotracks ()
|
||||
{
|
||||
set_all_audio_visibility (1, false);
|
||||
}
|
||||
|
||||
bool
|
||||
Editor::route_list_display_button_press (GdkEventButton* ev)
|
||||
{
|
||||
if (Keyboard::is_context_menu_event (ev)) {
|
||||
show_route_list_menu ();
|
||||
return true;
|
||||
}
|
||||
|
||||
ra = &atv1->route();
|
||||
rb = &atv2->route();
|
||||
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::show_route_list_menu()
|
||||
{
|
||||
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;
|
||||
}
|
||||
|
||||
struct EditorOrderRouteSorter {
|
||||
bool operator() (Route* a, Route* b) {
|
||||
/* use of ">" forces the correct sort order */
|
||||
return a->order_key ("editor") > b->order_key ("editor");
|
||||
}
|
||||
};
|
||||
|
||||
return ra->order_key ("editor") > rb->order_key ("editor");
|
||||
void
|
||||
Editor::initial_route_list_display ()
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
no_route_list_redisplay = false;
|
||||
|
||||
redisplay_route_list ();
|
||||
}
|
||||
|
||||
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 ();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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')))
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ VisualTimeAxis::visual_click()
|
|||
void
|
||||
VisualTimeAxis::hide_click()
|
||||
{
|
||||
editor.unselect_strip_in_display (*this);
|
||||
editor.hide_track_in_display (*this);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
||||
|
|
|
|||
|
|
@ -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')))
|
||||
|
|
|
|||
|
|
@ -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')))
|
||||
|
|
|
|||
|
|
@ -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')
|
||||
))
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue