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()
|
SConsignFile()
|
||||||
EnsureSConsVersion(0, 96)
|
EnsureSConsVersion(0, 96)
|
||||||
|
|
||||||
version = '1.9beta1'
|
version = '2.0alpha1'
|
||||||
|
|
||||||
subst_dict = { }
|
subst_dict = { }
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -14,81 +14,4 @@
|
||||||
<Option name="mmc-port" value="trident"/>
|
<Option name="mmc-port" value="trident"/>
|
||||||
<Option name="monitor-inputs" value="no"/>
|
<Option name="monitor-inputs" value="no"/>
|
||||||
</Config>
|
</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>
|
</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.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'), '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'), 'splash.ppm'))
|
||||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/glade'), glade_files))
|
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'],
|
env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
||||||
[ 'SConscript',
|
[ 'SConscript',
|
||||||
'i18n.h', 'gettext.h',
|
'i18n.h', 'gettext.h',
|
||||||
'editor_xpms', 'misc_xpms',
|
'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 +
|
gtkardour_files + vst_files + glade_files +
|
||||||
glob.glob('po/*.po') + glob.glob('*.h')))
|
glob.glob('po/*.po') + glob.glob('*.h')))
|
||||||
|
|
|
||||||
|
|
@ -644,12 +644,11 @@ style "plugin_slider"
|
||||||
|
|
||||||
style "track_list_display" = "small_bold_text"
|
style "track_list_display" = "small_bold_text"
|
||||||
{
|
{
|
||||||
fg[NORMAL] = { 0.80, 0.80, 0.80 }
|
text[NORMAL] = { 0.80, 0.80, 0.80 }
|
||||||
fg[ACTIVE] = { 0.80, 0.80, 0.80 }
|
text[ACTIVE] = { 0.3, 0.3, 0.3 }
|
||||||
fg[SELECTED] = { 0.50, 1.0, 1.0 }
|
text[INSENSITIVE] = { 0, 0, 0 }
|
||||||
bg[NORMAL] = { 0, 0, 0 }
|
text[SELECTED] = { 0.8, 0.8, 0.8 }
|
||||||
bg[ACTIVE] = { 0, 0, 0 }
|
|
||||||
bg[SELECTED] = { 0, 0, 0 }
|
|
||||||
base[NORMAL] = { 0, 0, 0 }
|
base[NORMAL] = { 0, 0, 0 }
|
||||||
base[ACTIVE] = { 0, 0, 0 }
|
base[ACTIVE] = { 0, 0, 0 }
|
||||||
base[INSENSITIVE] = { 0, 0, 0 }
|
base[INSENSITIVE] = { 0, 0, 0 }
|
||||||
|
|
@ -1045,6 +1044,7 @@ widget "*PluginUIClickBox*" style "medium_bold_entry"
|
||||||
widget "*PluginSlider" style "plugin_slider"
|
widget "*PluginSlider" style "plugin_slider"
|
||||||
widget "*TrackListDisplay" style "track_list_display"
|
widget "*TrackListDisplay" style "track_list_display"
|
||||||
widget "*TrackListDisplay.*" style "small_bold_text"
|
widget "*TrackListDisplay.*" style "small_bold_text"
|
||||||
|
widget "*EditGroupList" style "track_list_display"
|
||||||
widget "*RegionListDisplay" style "small_bold_entry"
|
widget "*RegionListDisplay" style "small_bold_entry"
|
||||||
widget "*RegionListDisplay.*" style "small_bold_text"
|
widget "*RegionListDisplay.*" style "small_bold_text"
|
||||||
widget "*MixerRedirectSelector" style "small_bold_entry"
|
widget "*MixerRedirectSelector" style "small_bold_entry"
|
||||||
|
|
|
||||||
|
|
@ -1120,7 +1120,7 @@ AudioTimeAxisView::visual_click ()
|
||||||
void
|
void
|
||||||
AudioTimeAxisView::hide_click ()
|
AudioTimeAxisView::hide_click ()
|
||||||
{
|
{
|
||||||
editor.unselect_strip_in_display (*this);
|
editor.hide_track_in_display (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
Region*
|
Region*
|
||||||
|
|
|
||||||
|
|
@ -522,66 +522,74 @@ Editor::Editor (AudioEngine& eng)
|
||||||
bottom_hbox.set_border_width (3);
|
bottom_hbox.set_border_width (3);
|
||||||
bottom_hbox.set_spacing (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.set_model (route_display_model);
|
||||||
route_list_display.append_column (_("Tracks"), route_display_columns.text);
|
route_list_display.append_column (_("Visible"), route_display_columns.visible);
|
||||||
route_list_display.set_headers_visible (false);
|
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.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_reorderable (true);
|
||||||
route_list_display.set_size_request (75,-1);
|
route_list_display.set_size_request (75,-1);
|
||||||
|
|
||||||
route_display_model->signal_rows_reordered().connect (mem_fun (*this, &Editor::route_list_reordered));
|
CellRendererToggle* route_list_visible_cell = dynamic_cast<CellRendererToggle*>(route_list_display.get_column_cell_renderer (0));
|
||||||
route_display_model->set_sort_func (0, mem_fun (*this, &Editor::route_list_compare_func));
|
route_list_visible_cell->property_activatable() = true;
|
||||||
route_display_model->set_sort_column (0, SORT_ASCENDING);
|
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.add (route_list_display);
|
||||||
route_list_scroller.set_policy (POLICY_NEVER, POLICY_AUTOMATIC);
|
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);
|
group_model = ListStore::create(group_columns);
|
||||||
edit_group_display.set_model (group_model);
|
edit_group_display.set_model (group_model);
|
||||||
edit_group_display.append_column (_("active"), group_columns.is_active);
|
edit_group_display.append_column (_("Active"), group_columns.is_active);
|
||||||
edit_group_display.append_column (_("groupname"), group_columns.text);
|
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(0));
|
||||||
edit_group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
|
edit_group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1));
|
||||||
edit_group_display.set_headers_visible (false);
|
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_activatable() = true;
|
||||||
active_cell->property_radio() = false;
|
active_cell->property_radio() = false;
|
||||||
|
|
||||||
edit_group_display.set_name ("MixerGroupList");
|
active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (1));
|
||||||
edit_group_display.columns_autosize ();
|
active_cell->property_activatable() = true;
|
||||||
edit_group_display.get_selection()->set_mode (SELECTION_MULTIPLE);
|
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_reorderable (false);
|
||||||
|
|
||||||
edit_group_display.set_size_request (75, -1);
|
edit_group_display.set_size_request (75, -1);
|
||||||
|
|
||||||
edit_group_list_scroller.add (edit_group_display);
|
edit_group_display_scroller.add (edit_group_display);
|
||||||
edit_group_list_scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
|
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), false);
|
||||||
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;
|
||||||
TreeModel::Row row = *(group_model->append());
|
row = *(group_model->append());
|
||||||
row[group_columns.is_active] = false;
|
row[group_columns.is_active] = false;
|
||||||
row[group_columns.text] = (_("-all-"));
|
row[group_columns.is_visible] = true;
|
||||||
row[group_columns.routegroup] = 0;
|
row[group_columns.text] = (_("-all-"));
|
||||||
edit_group_display.get_selection()->select (row);
|
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_size_request (100, -1);
|
||||||
region_list_display.set_name ("RegionListDisplay");
|
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_text(), region_list_columns.name);
|
||||||
tv_col->add_attribute(renderer->property_foreground_gdk(), region_list_columns.color_);
|
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.get_selection()->set_mode (SELECTION_MULTIPLE);
|
||||||
region_list_display.add_object_drag (region_list_columns.region.index(), "regions");
|
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 (region_list_scroller, _("Regions"));
|
||||||
the_notebook.append_page (route_list_scroller, _("Tracks/Busses"));
|
the_notebook.append_page (route_list_scroller, _("Tracks/Busses"));
|
||||||
the_notebook.append_page (snapshot_display_scroller, _("Snapshots"));
|
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.append_page (named_selection_scroller, _("Chunks"));
|
||||||
the_notebook.set_show_tabs (true);
|
the_notebook.set_show_tabs (true);
|
||||||
the_notebook.set_scrollable (true);
|
the_notebook.set_scrollable (true);
|
||||||
|
|
@ -1255,11 +1261,7 @@ Editor::connect_to_session (Session *t)
|
||||||
redisplay_named_selections ();
|
redisplay_named_selections ();
|
||||||
redisplay_snapshots ();
|
redisplay_snapshots ();
|
||||||
|
|
||||||
route_display_model->clear ();
|
initial_route_list_display ();
|
||||||
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 ();
|
|
||||||
|
|
||||||
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
|
||||||
(static_cast<TimeAxisView*>(*i))->set_samples_per_unit (frames_per_unit);
|
(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 rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
|
|
||||||
//route_list_display.freeze ();
|
no_route_list_redisplay = true;
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||||
AudioTimeAxisView *atv;
|
AudioTimeAxisView *atv;
|
||||||
|
|
||||||
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
|
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
|
||||||
if (atv->route().master()) {
|
if (atv->route().master()) {
|
||||||
route_list_display.get_selection()->unselect (i);
|
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;
|
Width editor_mixer_strip_width;
|
||||||
void show_editor_mixer (bool yn);
|
void show_editor_mixer (bool yn);
|
||||||
void set_selected_mixer_strip (TimeAxisView&);
|
void set_selected_mixer_strip (TimeAxisView&);
|
||||||
void unselect_strip_in_display (TimeAxisView& tv);
|
void hide_track_in_display (TimeAxisView& tv);
|
||||||
void select_strip_in_display (TimeAxisView* tv);
|
void show_track_in_display (TimeAxisView& tv);
|
||||||
|
|
||||||
/* nudge is initiated by transport controls owned by ARDOUR_UI */
|
/* 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 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 {
|
struct DragInfo {
|
||||||
ArdourCanvas::Item* item;
|
ArdourCanvas::Item* item;
|
||||||
void* data;
|
void* data;
|
||||||
|
|
@ -1452,39 +1445,59 @@ class Editor : public PublicEditor
|
||||||
struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
|
struct RouteDisplayModelColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
RouteDisplayModelColumns() {
|
RouteDisplayModelColumns() {
|
||||||
add (text);
|
add (text);
|
||||||
|
add (visible);
|
||||||
add (tv);
|
add (tv);
|
||||||
}
|
}
|
||||||
Gtk::TreeModelColumn<Glib::ustring> text;
|
Gtk::TreeModelColumn<Glib::ustring> text;
|
||||||
Gtk::TreeModelColumn<TimeAxisView*> tv;
|
Gtk::TreeModelColumn<bool> visible;
|
||||||
|
Gtk::TreeModelColumn<TimeAxisView*> tv;
|
||||||
};
|
};
|
||||||
|
|
||||||
RouteDisplayModelColumns route_display_columns;
|
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;
|
Glib::RefPtr<Gtk::TreeSelection> route_display_selection;
|
||||||
|
|
||||||
gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
|
gint route_list_compare_func (Gtk::TreeModel::iterator, Gtk::TreeModel::iterator);
|
||||||
Gtkmm2ext::DnDTreeView route_list_display;
|
Gtkmm2ext::DnDTreeView route_list_display;
|
||||||
Gtk::ScrolledWindow route_list_scroller;
|
Gtk::ScrolledWindow route_list_scroller;
|
||||||
Gtk::Menu* route_list_menu;
|
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 build_route_list_menu ();
|
||||||
void select_all_routes ();
|
void show_route_list_menu ();
|
||||||
void unselect_all_routes ();
|
|
||||||
void select_all_audiotracks ();
|
void show_all_routes ();
|
||||||
void unselect_all_audiotracks ();
|
void hide_all_routes ();
|
||||||
void select_all_audiobus ();
|
void show_all_audiotracks ();
|
||||||
void unselect_all_audiobus ();
|
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 */
|
/* edit group management */
|
||||||
|
|
||||||
struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
|
struct GroupListModelColumns : public Gtk::TreeModel::ColumnRecord {
|
||||||
GroupListModelColumns () {
|
GroupListModelColumns () {
|
||||||
add (is_active);
|
add (is_active);
|
||||||
|
add (is_visible);
|
||||||
add (text);
|
add (text);
|
||||||
add (routegroup);
|
add (routegroup);
|
||||||
}
|
}
|
||||||
Gtk::TreeModelColumn<bool> is_active;
|
Gtk::TreeModelColumn<bool> is_active;
|
||||||
|
Gtk::TreeModelColumn<bool> is_visible;
|
||||||
Gtk::TreeModelColumn<std::string> text;
|
Gtk::TreeModelColumn<std::string> text;
|
||||||
Gtk::TreeModelColumn<ARDOUR::RouteGroup*> routegroup;
|
Gtk::TreeModelColumn<ARDOUR::RouteGroup*> routegroup;
|
||||||
};
|
};
|
||||||
|
|
@ -1493,17 +1506,16 @@ class Editor : public PublicEditor
|
||||||
Glib::RefPtr<Gtk::ListStore> group_model;
|
Glib::RefPtr<Gtk::ListStore> group_model;
|
||||||
Glib::RefPtr<Gtk::TreeSelection> group_selection;
|
Glib::RefPtr<Gtk::TreeSelection> group_selection;
|
||||||
|
|
||||||
Gtk::Button edit_group_list_button;
|
Gtk::TreeView edit_group_display;
|
||||||
Gtk::Label edit_group_list_button_label;
|
Gtk::ScrolledWindow edit_group_display_scroller;
|
||||||
Gtkmm2ext::DnDTreeView edit_group_display;
|
|
||||||
Gtk::ScrolledWindow edit_group_list_scroller;
|
|
||||||
Gtk::Menu* edit_group_list_menu;
|
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 build_edit_group_list_menu ();
|
||||||
void select_all_edit_groups ();
|
void activate_all_edit_groups ();
|
||||||
void unselect_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 new_edit_group ();
|
||||||
void edit_group_list_button_clicked ();
|
void edit_group_list_button_clicked ();
|
||||||
gint edit_group_list_button_press_event (GdkEventButton* ev);
|
gint edit_group_list_button_press_event (GdkEventButton* ev);
|
||||||
|
|
|
||||||
|
|
@ -367,8 +367,10 @@ Editor::reset_scrolling_region (Gtk::Allocation* alloc)
|
||||||
|
|
||||||
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||||
pos += tv->effective_height;
|
if (tv != 0) {
|
||||||
pos += track_spacing;
|
pos += tv->effective_height;
|
||||||
|
pos += track_spacing;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Gdk::Screen> screen = get_screen();
|
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) {
|
for (pos = 0, i = rows.begin(); i != rows.end(); ++i) {
|
||||||
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||||
pos += tv->effective_height;
|
if (tv != 0) {
|
||||||
pos += track_spacing;
|
pos += tv->effective_height;
|
||||||
|
pos += track_spacing;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
RefPtr<Gdk::Screen> screen = get_screen();
|
RefPtr<Gdk::Screen> screen = get_screen();
|
||||||
|
|
|
||||||
|
|
@ -40,20 +40,8 @@ using namespace sigc;
|
||||||
using namespace ARDOUR;
|
using namespace ARDOUR;
|
||||||
using namespace Gtk;
|
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
|
void
|
||||||
Editor::build_edit_group_list_menu ()
|
Editor::build_edit_group_list_menu ()
|
||||||
|
|
||||||
{
|
{
|
||||||
using namespace Gtk::Menu_Helpers;
|
using namespace Gtk::Menu_Helpers;
|
||||||
|
|
||||||
|
|
@ -61,34 +49,33 @@ Editor::build_edit_group_list_menu ()
|
||||||
edit_group_list_menu->set_name ("ArdourContextMenu");
|
edit_group_list_menu->set_name ("ArdourContextMenu");
|
||||||
MenuList& items = edit_group_list_menu->items();
|
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 (_("Activate All"), mem_fun(*this, &Editor::activate_all_edit_groups)));
|
||||||
items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::unselect_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
|
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();
|
Gtk::TreeModel::Children children = group_model->children();
|
||||||
for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
|
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
|
void
|
||||||
Editor::new_edit_group ()
|
Editor::new_edit_group ()
|
||||||
|
|
||||||
{
|
{
|
||||||
if (session == 0) {
|
if (session == 0) {
|
||||||
return;
|
return;
|
||||||
|
|
@ -104,7 +91,7 @@ Editor::new_edit_group ()
|
||||||
case GTK_RESPONSE_ACCEPT:
|
case GTK_RESPONSE_ACCEPT:
|
||||||
prompter.get_result (result);
|
prompter.get_result (result);
|
||||||
if (result.length()) {
|
if (result.length()) {
|
||||||
session->add_edit_group (result);
|
session->add_edit_group (result);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
@ -119,84 +106,97 @@ Editor::edit_group_list_button_clicked ()
|
||||||
gint
|
gint
|
||||||
Editor::edit_group_list_button_press_event (GdkEventButton* ev)
|
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;
|
RouteGroup* group;
|
||||||
TreeIter iter;
|
TreeIter iter;
|
||||||
TreeModel::Path path;
|
TreeModel::Path path;
|
||||||
TreeViewColumn* column;
|
TreeViewColumn* column;
|
||||||
int cellx;
|
int cellx;
|
||||||
int celly;
|
int celly;
|
||||||
|
|
||||||
if (!edit_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
|
if (!edit_group_display.get_path_at_pos ((int)ev->x, (int)ev->y, path, column, cellx, celly)) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
|
switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) {
|
||||||
|
case 2:
|
||||||
case 1:
|
|
||||||
|
|
||||||
if (Keyboard::is_edit_event (ev)) {
|
if (Keyboard::is_edit_event (ev)) {
|
||||||
// RouteGroup* group = (RouteGroup *) edit_group_display.row(row).get_data ();
|
if ((iter = group_model->get_iter (path))) {
|
||||||
// edit_route_group (group);
|
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
||||||
|
// edit_route_group (group);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
return stop_signal (edit_group_display, "button_press_event");
|
case 1:
|
||||||
|
if ((iter = group_model->get_iter (path))) {
|
||||||
} else {
|
bool visible = (*iter)[group_columns.is_visible];
|
||||||
/* allow regular select to occur */
|
(*iter)[group_columns.is_visible] = !visible;
|
||||||
return FALSE;
|
return true;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0:
|
case 0:
|
||||||
if ((iter = group_model->get_iter (path))) {
|
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;
|
||||||
if ((group = (*iter)[group_columns.routegroup]) != 0) {
|
return true;
|
||||||
group->set_active (!group->is_active (), this);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return stop_signal (edit_group_display, "button_press_event");
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::edit_group_selection_changed ()
|
Editor::edit_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeModel::iterator& iter)
|
||||||
{
|
{
|
||||||
TreeModel::iterator i;
|
RouteGroup* group;
|
||||||
TreeModel::Children rows = group_model->children();
|
|
||||||
Glib::RefPtr<TreeSelection> selection = edit_group_display.get_selection();
|
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
if ((group = (*iter)[group_columns.routegroup]) == 0) {
|
||||||
RouteGroup* group;
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
group = (*i)[group_columns.routegroup];
|
if ((*iter)[group_columns.is_visible]) {
|
||||||
|
for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
|
||||||
if (selection->is_selected (i)) {
|
if ((*j)->edit_group() == group) {
|
||||||
for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
|
show_track_in_display (**j);
|
||||||
if ((*j)->edit_group() == group) {
|
}
|
||||||
select_strip_in_display (*j);
|
}
|
||||||
}
|
} else {
|
||||||
}
|
for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
|
||||||
} else {
|
if ((*j)->edit_group() == group) {
|
||||||
for (TrackViewList::iterator j = track_views.begin(); j != track_views.end(); ++j) {
|
hide_track_in_display (**j);
|
||||||
if ((*j)->edit_group() == group) {
|
}
|
||||||
unselect_strip_in_display (**j);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool active = (*iter)[group_columns.is_active];
|
||||||
|
group->set_active (active, this);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::add_edit_group (RouteGroup* group)
|
Editor::add_edit_group (RouteGroup* group)
|
||||||
|
|
||||||
{
|
{
|
||||||
|
|
||||||
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::add_edit_group), group));
|
ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::add_edit_group), group));
|
||||||
|
|
||||||
TreeModel::Row row = *(group_model->append());
|
TreeModel::Row row = *(group_model->append());
|
||||||
row[group_columns.is_active] = group->is_active();
|
row[group_columns.is_active] = group->is_active();
|
||||||
|
row[group_columns.is_visible] = true;
|
||||||
row[group_columns.text] = group->name();
|
row[group_columns.text] = group->name();
|
||||||
row[group_columns.routegroup] = group;
|
row[group_columns.routegroup] = group;
|
||||||
|
|
||||||
|
|
@ -206,20 +206,14 @@ Editor::add_edit_group (RouteGroup* group)
|
||||||
void
|
void
|
||||||
Editor::group_flags_changed (void* src, RouteGroup* group)
|
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) {
|
Gtk::TreeModel::Children children = group_model->children();
|
||||||
// select row
|
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 "gui_thread.h"
|
||||||
|
|
||||||
#include <ardour/route.h>
|
#include <ardour/route.h>
|
||||||
|
#include <ardour/audio_track.h>
|
||||||
|
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
|
|
@ -48,25 +49,53 @@ Editor::handle_new_route (Route& route)
|
||||||
{
|
{
|
||||||
TimeAxisView *tv;
|
TimeAxisView *tv;
|
||||||
AudioTimeAxisView *atv;
|
AudioTimeAxisView *atv;
|
||||||
TreeModel::Row row = *(route_display_model->append());
|
TreeModel::Row parent;
|
||||||
|
TreeModel::Row row;
|
||||||
|
|
||||||
if (route.hidden()) {
|
if (route.hidden()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
tv = new AudioTimeAxisView (*this, *session, route, track_canvas);
|
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.text] = route.name();
|
||||||
|
row[route_display_columns.visible] = tv->marked_for_display();
|
||||||
row[route_display_columns.tv] = tv;
|
row[route_display_columns.tv] = tv;
|
||||||
|
|
||||||
|
track_views.push_back (tv);
|
||||||
|
|
||||||
ignore_route_list_reorder = true;
|
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) {
|
if ((atv = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
|
||||||
/* added a new fresh one at the end */
|
/* added a new fresh one at the end */
|
||||||
if (atv->route().order_key(N_("editor")) == -1) {
|
if (atv->route().order_key(N_("editor")) == -1) {
|
||||||
|
|
@ -144,35 +173,29 @@ Editor::route_name_changed (TimeAxisView *tv)
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::route_display_selection_changed ()
|
Editor::hide_track_in_display (TimeAxisView& tv)
|
||||||
{
|
{
|
||||||
TimeAxisView *tv;
|
|
||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
Glib::RefPtr<TreeSelection> selection = route_list_display.get_selection();
|
Glib::RefPtr<TreeSelection> selection = route_list_display.get_selection();
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
tv = (*i)[route_display_columns.tv];
|
if ((*i)[route_display_columns.tv] == &tv) {
|
||||||
|
(*i)[route_display_columns.visible] = false;
|
||||||
if (!selection->is_selected (i)) {
|
break;
|
||||||
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 ();
|
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
|
void
|
||||||
Editor::unselect_strip_in_display (TimeAxisView& tv)
|
Editor::show_track_in_display (TimeAxisView& tv)
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
|
|
@ -180,21 +203,9 @@ Editor::unselect_strip_in_display (TimeAxisView& tv)
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
if ((*i)[route_display_columns.tv] == &tv) {
|
if ((*i)[route_display_columns.tv] == &tv) {
|
||||||
selection->unselect (*i);
|
(*i)[route_display_columns.visible] = true;
|
||||||
}
|
tv.set_marked_for_display (true);
|
||||||
}
|
break;
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::select_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->select (*i);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -218,10 +229,15 @@ Editor::redisplay_route_list ()
|
||||||
return;
|
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];
|
TimeAxisView *tv = (*i)[route_display_columns.tv];
|
||||||
AudioTimeAxisView* at;
|
AudioTimeAxisView* at;
|
||||||
|
|
||||||
|
if (tv == 0) {
|
||||||
|
// just a "title" row
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (!ignore_route_list_reorder) {
|
if (!ignore_route_list_reorder) {
|
||||||
|
|
||||||
/* this reorder is caused by user action, so reassign sort order keys
|
/* 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) {
|
if ((at = dynamic_cast<AudioTimeAxisView*> (tv)) != 0) {
|
||||||
at->route().set_order_key (N_("editor"), order);
|
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 += tv->show_at (position, n, &edit_controls_vbox);
|
||||||
position += track_spacing;
|
position += track_spacing;
|
||||||
} else {
|
} else {
|
||||||
|
|
@ -243,7 +264,6 @@ Editor::redisplay_route_list ()
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
controls_layout.queue_resize ();
|
|
||||||
reset_scrolling_region ();
|
reset_scrolling_region ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -253,23 +273,27 @@ Editor::hide_all_tracks (bool with_select)
|
||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
|
|
||||||
// GTK2FIX
|
no_route_list_redisplay = true;
|
||||||
// track_display_list.freeze ();
|
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
|
|
||||||
TreeModel::Row row = (*i);
|
TreeModel::Row row = (*i);
|
||||||
TimeAxisView *tv = row[route_display_columns.tv];
|
TimeAxisView *tv = row[route_display_columns.tv];
|
||||||
|
|
||||||
if (with_select) {
|
if (tv == 0) {
|
||||||
route_list_display.get_selection()->unselect (i);
|
continue;
|
||||||
} else {
|
|
||||||
tv->set_marked_for_display (false);
|
|
||||||
tv->hide();
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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 ();
|
reset_scrolling_region ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -279,146 +303,212 @@ Editor::build_route_list_menu ()
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
using namespace Gtk;
|
using namespace Gtk;
|
||||||
|
|
||||||
|
|
||||||
route_list_menu = new Menu;
|
route_list_menu = new Menu;
|
||||||
|
|
||||||
MenuList& items = route_list_menu->items();
|
MenuList& items = route_list_menu->items();
|
||||||
route_list_menu->set_name ("ArdourContextMenu");
|
route_list_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Show All"), mem_fun(*this, &Editor::select_all_routes)));
|
items.push_back (MenuElem (_("Show All"), mem_fun(*this, &Editor::show_all_routes)));
|
||||||
items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::unselect_all_routes)));
|
items.push_back (MenuElem (_("Hide All"), mem_fun(*this, &Editor::hide_all_routes)));
|
||||||
items.push_back (MenuElem (_("Show All AbstractTracks"), mem_fun(*this, &Editor::select_all_audiotracks)));
|
items.push_back (MenuElem (_("Show All Audio Tracks"), mem_fun(*this, &Editor::show_all_audiotracks)));
|
||||||
items.push_back (MenuElem (_("Hide All AbstractTracks"), mem_fun(*this, &Editor::unselect_all_audiotracks)));
|
items.push_back (MenuElem (_("Hide All Audio Tracks"), mem_fun(*this, &Editor::hide_all_audiotracks)));
|
||||||
items.push_back (MenuElem (_("Show All AudioBus"), mem_fun(*this, &Editor::select_all_audiobus)));
|
items.push_back (MenuElem (_("Show All Audio Busses"), mem_fun(*this, &Editor::show_all_audiobus)));
|
||||||
items.push_back (MenuElem (_("Hide All AudioBus"), mem_fun(*this, &Editor::unselect_all_audiobus)));
|
items.push_back (MenuElem (_("Hide All Audio Busses"), mem_fun(*this, &Editor::hide_all_audiobus)));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::unselect_all_routes ()
|
Editor::set_all_tracks_visibility (bool yn)
|
||||||
{
|
|
||||||
hide_all_tracks (true);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Editor::select_all_routes ()
|
|
||||||
|
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
|
|
||||||
|
no_route_list_redisplay = true;
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
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
|
void
|
||||||
Editor::select_all_audiotracks ()
|
Editor::set_all_audio_visibility (int tracks, bool yn)
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
TreeModel::Children rows = route_display_model->children();
|
||||||
TreeModel::Children::iterator i;
|
TreeModel::Children::iterator i;
|
||||||
|
|
||||||
|
no_route_list_redisplay = true;
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
for (i = rows.begin(); i != rows.end(); ++i) {
|
||||||
TreeModel::Row row = (*i);
|
TreeModel::Row row = (*i);
|
||||||
TimeAxisView* tv = row[route_display_columns.tv];
|
TimeAxisView* tv = row[route_display_columns.tv];
|
||||||
AudioTimeAxisView* atv;
|
AudioTimeAxisView* atv;
|
||||||
|
|
||||||
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
|
if (tv == 0) {
|
||||||
if (atv->is_audio_track()) {
|
continue;
|
||||||
route_list_display.get_selection()->select (i);
|
}
|
||||||
|
|
||||||
|
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
|
void
|
||||||
Editor::unselect_all_audiotracks ()
|
Editor::hide_all_routes ()
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
set_all_tracks_visibility (false);
|
||||||
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
|
void
|
||||||
Editor::select_all_audiobus ()
|
Editor::show_all_routes ()
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
set_all_tracks_visibility (true);
|
||||||
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()->select (i);
|
|
||||||
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::unselect_all_audiobus ()
|
Editor::show_all_audiobus ()
|
||||||
{
|
{
|
||||||
TreeModel::Children rows = route_display_model->children();
|
set_all_audio_visibility (2, true);
|
||||||
TreeModel::Children::iterator i;
|
}
|
||||||
|
void
|
||||||
|
Editor::hide_all_audiobus ()
|
||||||
|
{
|
||||||
|
set_all_audio_visibility (2, false);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = rows.begin(); i != rows.end(); ++i) {
|
void
|
||||||
TreeModel::Row row = (*i);
|
Editor::show_all_audiotracks()
|
||||||
TimeAxisView* tv = row[route_display_columns.tv];
|
{
|
||||||
AudioTimeAxisView* atv;
|
set_all_audio_visibility (1, true);
|
||||||
|
}
|
||||||
|
void
|
||||||
|
Editor::hide_all_audiotracks ()
|
||||||
|
{
|
||||||
|
set_all_audio_visibility (1, false);
|
||||||
|
}
|
||||||
|
|
||||||
if ((atv = dynamic_cast<AudioTimeAxisView*>(tv)) != 0) {
|
bool
|
||||||
if (!atv->is_audio_track()) {
|
Editor::route_list_display_button_press (GdkEventButton* ev)
|
||||||
route_list_display.get_selection()->unselect (i);
|
{
|
||||||
|
if (Keyboard::is_context_menu_event (ev)) {
|
||||||
|
show_route_list_menu ();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
||||||
|
|
||||||
gint
|
void
|
||||||
Editor::route_list_compare_func (TreeModel::iterator a, TreeModel::iterator b)
|
Editor::show_route_list_menu()
|
||||||
{
|
{
|
||||||
TimeAxisView *tv1;
|
if (route_list_menu == 0) {
|
||||||
TimeAxisView *tv2;
|
build_route_list_menu ();
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ra = &atv1->route();
|
route_list_menu->popup (1, 0);
|
||||||
rb = &atv2->route();
|
|
||||||
|
|
||||||
/* use of ">" forces the correct sort order */
|
|
||||||
|
|
||||||
return ra->order_key ("editor") > rb->order_key ("editor");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
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");
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
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/'))
|
modir = (os.path.join (install_prefix, 'share/locale/' + lang + '/LC_MESSAGES/'))
|
||||||
moname = domain + '.mo'
|
moname = domain + '.mo'
|
||||||
env.Alias('install', env.InstallAs (os.path.join (modir, moname), lang + '.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 route_name_changed (TimeAxisView *) = 0;
|
||||||
virtual void clear_playlist (ARDOUR::Playlist&) = 0;
|
virtual void clear_playlist (ARDOUR::Playlist&) = 0;
|
||||||
virtual void set_selected_mixer_strip (TimeAxisView&) = 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 set_follow_playhead (bool yn) = 0;
|
||||||
virtual void toggle_follow_playhead () = 0;
|
virtual void toggle_follow_playhead () = 0;
|
||||||
virtual bool follow_playhead() const = 0;
|
virtual bool follow_playhead() const = 0;
|
||||||
|
|
|
||||||
|
|
@ -222,7 +222,7 @@ VisualTimeAxis::visual_click()
|
||||||
void
|
void
|
||||||
VisualTimeAxis::hide_click()
|
VisualTimeAxis::hide_click()
|
||||||
{
|
{
|
||||||
editor.unselect_strip_in_display (*this);
|
editor.hide_track_in_display (*this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -70,7 +70,7 @@ void
|
||||||
DnDTreeView::on_drag_data_get(const RefPtr<DragContext>& context, SelectionData& selection_data, guint info, guint time)
|
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") {
|
if (selection_data.get_target() == "GTK_TREE_MODEL_ROW") {
|
||||||
|
|
||||||
TreeView::on_drag_data_get (context, selection_data, info, time);
|
TreeView::on_drag_data_get (context, selection_data, info, time);
|
||||||
|
|
||||||
} else if (data_column >= 0) {
|
} 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -51,11 +51,7 @@ class DnDTreeView : public Gtk::TreeView
|
||||||
suggested_action = context->get_suggested_action();
|
suggested_action = context->get_suggested_action();
|
||||||
return TreeView::on_drag_motion (context, x, y, time);
|
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) {
|
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);
|
|
||||||
}
|
|
||||||
|
|
||||||
void on_drag_data_get(const Glib::RefPtr<Gdk::DragContext>& context, Gtk::SelectionData& selection_data, guint info, 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);
|
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 ])
|
libmidi2 = midi2.StaticLibrary('midi++', [ sources, sysdep_src ])
|
||||||
Default(libmidi2)
|
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)
|
libpbd3 = pbd3.StaticLibrary('pbd', pbd3_files)
|
||||||
Default(libpbd3)
|
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])
|
Default([sigc2_config_h,libsigc2])
|
||||||
else:
|
else:
|
||||||
Default([libsigc2])
|
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