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