summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2010-08-26 23:25:44 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2010-08-26 23:25:44 +0000
commit1526735d7925bf07f7a6c3378a87bf559e11050a (patch)
treee95c8086296e3b45b2b91579a8e588dc609ec0c9 /gtk2_ardour
parentbdb84342381310f6162418e0603e7eeaabde20bd (diff)
some (unfinished) work on incorporating Ben's rev 6919 changes regarding track selection; make newly selected tracks show the current range selection; fix crashes related to meter display; remove "all" group from main group tab display and just put it down in its own button (totally incomplete); minor cleanups
git-svn-id: svn://localhost/ardour2/branches/3.0@7696 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_drag.cc7
-rw-r--r--gtk2_ardour/editor_mouse.cc12
-rw-r--r--gtk2_ardour/editor_route_groups.cc21
-rw-r--r--gtk2_ardour/editor_route_groups.h6
-rw-r--r--gtk2_ardour/editor_selection.cc85
-rw-r--r--gtk2_ardour/gain_meter.cc7
-rw-r--r--gtk2_ardour/ui_config.cc2
8 files changed, 109 insertions, 33 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 3b306e1594..3f9dc6d880 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -645,7 +645,7 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
bool set_selected_control_point_from_click (Selection::Operation op = Selection::Set, bool no_remove=false);
void set_selected_track_from_click (bool press, Selection::Operation op = Selection::Set, bool no_remove=false);
- void set_selected_track_as_side_effect (bool force = false);
+ void set_selected_track_as_side_effect (Selection::Operation op, bool force = false);
bool set_selected_regionview_from_click (bool press, Selection::Operation op = Selection::Set, bool no_track_remove=false);
bool set_selected_regionview_from_map_event (GdkEventAny*, StreamView*, boost::weak_ptr<ARDOUR::Region>);
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index cef27660a6..90e67d77af 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -3401,14 +3401,16 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
if (_copy) {
/* adding to the selection */
- _editor->selection->add (_editor->clicked_axisview);
+ _editor->set_selected_track_as_side_effect (Selection::Add);
+ //_editor->selection->add (_editor->clicked_axisview);
_editor->clicked_selection = _editor->selection->add (start, end);
_copy = false;
} else {
/* new selection */
if (_editor->clicked_axisview && !_editor->selection->selected (_editor->clicked_axisview)) {
- _editor->selection->set (_editor->clicked_axisview);
+ //_editor->selection->set (_editor->clicked_axisview);
+ _editor->set_selected_track_as_side_effect (Selection::Set);
}
_editor->clicked_selection = _editor->selection->set (start, end);
@@ -3417,6 +3419,7 @@ SelectionDrag::motion (GdkEvent* event, bool first_move)
/* select the track that we're in */
if (find (_added_time_axes.begin(), _added_time_axes.end(), pending_time_axis.first) == _added_time_axes.end()) {
+ // _editor->set_selected_track_as_side_effect (Selection::Add);
_editor->selection->add (pending_time_axis.first);
_added_time_axes.push_back (pending_time_axis.first);
}
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index a7b370a04b..0346ca11ef 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -478,7 +478,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
set_selected_regionview_from_click (press, op, true);
} else if (event->type == GDK_BUTTON_PRESS) {
selection->clear_tracks ();
- set_selected_track_as_side_effect (true);
+ set_selected_track_as_side_effect (op, true);
}
if (_join_object_range_state == JOIN_OBJECT_RANGE_OBJECT && !selection->regions.empty()) {
clicked_selection = select_range_around_region (selection->regions.front());
@@ -492,7 +492,7 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
set_selected_regionview_from_click (press, op, true);
} else if (event->type == GDK_BUTTON_PRESS) {
- set_selected_track_as_side_effect ();
+ set_selected_track_as_side_effect (op);
}
break;
@@ -504,12 +504,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
set_selected_regionview_from_click (press, op, true);
} else if (event->type == GDK_BUTTON_PRESS) {
- set_selected_track_as_side_effect ();
+ set_selected_track_as_side_effect (op);
}
break;
case ControlPointItem:
- set_selected_track_as_side_effect (true);
+ set_selected_track_as_side_effect (op, true);
if (mouse_mode != MouseRange || _join_object_range_state == JOIN_OBJECT_RANGE_OBJECT) {
set_selected_control_point_from_click (op, false);
}
@@ -519,12 +519,12 @@ Editor::button_selection (ArdourCanvas::Item* /*item*/, GdkEvent* event, ItemTyp
/* for context click, select track */
if (event->button.button == 3) {
selection->clear_tracks ();
- set_selected_track_as_side_effect (true);
+ set_selected_track_as_side_effect (op, true);
}
break;
case AutomationTrackItem:
- set_selected_track_as_side_effect (true);
+ set_selected_track_as_side_effect (op, true);
break;
default:
diff --git a/gtk2_ardour/editor_route_groups.cc b/gtk2_ardour/editor_route_groups.cc
index 2f9f27ae2c..d4ab4542ea 100644
--- a/gtk2_ardour/editor_route_groups.cc
+++ b/gtk2_ardour/editor_route_groups.cc
@@ -47,8 +47,9 @@ using namespace Gtk;
using Gtkmm2ext::Keyboard;
EditorRouteGroups::EditorRouteGroups (Editor* e)
- : EditorComponent (e),
- _in_row_change (false)
+ : EditorComponent (e)
+ , _all_group_active_button (_("\"all\" group"))
+ , _in_row_change (false)
{
_model = ListStore::create (_columns);
@@ -135,7 +136,6 @@ EditorRouteGroups::EditorRouteGroups (Editor* e)
_display.signal_button_press_event().connect (sigc::mem_fun(*this, &EditorRouteGroups::button_press_event), false);
- _display_packer = new VBox;
HBox* button_box = manage (new HBox());
button_box->set_homogeneous (true);
@@ -158,8 +158,11 @@ EditorRouteGroups::EditorRouteGroups (Editor* e)
button_box->pack_start (*add_button);
button_box->pack_start (*remove_button);
- _display_packer->pack_start (_scroller, true, true);
- _display_packer->pack_start (*button_box, false, false);
+ _all_group_active_button.show ();
+
+ _display_packer.pack_start (_scroller, true, true);
+ _display_packer.pack_start (_all_group_active_button, false, false);
+ _display_packer.pack_start (*button_box, false, false);
}
void
@@ -418,14 +421,6 @@ EditorRouteGroups::groups_changed ()
_model->clear ();
- {
- TreeModel::Row row;
- row = *(_model->append());
- row[_columns.is_visible] = true;
- row[_columns.text] = (_("-all-"));
- row[_columns.routegroup] = 0;
- }
-
if (_session) {
_session->foreach_route_group (sigc::mem_fun (*this, &EditorRouteGroups::add));
}
diff --git a/gtk2_ardour/editor_route_groups.h b/gtk2_ardour/editor_route_groups.h
index 402f8e2aed..5610596be1 100644
--- a/gtk2_ardour/editor_route_groups.h
+++ b/gtk2_ardour/editor_route_groups.h
@@ -27,10 +27,11 @@ public:
void set_session (ARDOUR::Session *);
Gtk::Widget& widget () {
- return *_display_packer;
+ return _display_packer;
}
void clear ();
+ Gtk::ToggleButton& all_group_active_button() { return _all_group_active_button; }
private:
@@ -75,7 +76,8 @@ private:
Glib::RefPtr<Gtk::TreeSelection> _selection;
Gtk::TreeView _display;
Gtk::ScrolledWindow _scroller;
- Gtk::VBox* _display_packer;
+ Gtk::VBox _display_packer;
+ Gtk::ToggleButton _all_group_active_button;
bool _in_row_change;
PBD::ScopedConnection property_changed_connection;
};
diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc
index e99b31c478..bde72e5374 100644
--- a/gtk2_ardour/editor_selection.cc
+++ b/gtk2_ardour/editor_selection.cc
@@ -174,12 +174,83 @@ Editor::select_all_tracks ()
* tracks, in which case nothing will happen unless `force' is true.
*/
void
-Editor::set_selected_track_as_side_effect (bool force)
+Editor::set_selected_track_as_side_effect (Selection::Operation op, bool force)
{
+ cerr << "E::sstase ca = " << clicked_axisview << " cr = " << clicked_routeview
+ << " op = " << op << " force = " << force
+ << endl;
+
if (!clicked_axisview) {
return;
}
+#if 1
+ if (!clicked_routeview) {
+ return;
+ }
+
+ RouteGroup* group = clicked_routeview->route()->route_group();
+
+ switch (op) {
+ case Selection::Toggle:
+ if (selection->selected (clicked_axisview)) {
+ if (_session->all_route_group().is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->remove(*i);
+ }
+ } else if (group && group->is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ((*i)->route_group() == group)
+ selection->remove(*i);
+ }
+ } else {
+ selection->remove (clicked_axisview);
+ }
+ } else {
+ if (_session->all_route_group().is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->add(*i);
+ }
+ } else if (group && group->is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ( (*i)->route_group() == group)
+ selection->add(*i);
+ }
+ } else {
+ selection->add (clicked_axisview);
+ }
+ }
+ break;
+
+ case Selection::Add:
+ selection->clear();
+ cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
+ break;
+
+ case Selection::Set:
+ selection->clear();
+ if (_session->all_route_group().is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ selection->add(*i);
+ }
+ } else if (group && group->is_active()) {
+ for (TrackViewList::iterator i = track_views.begin(); i != track_views.end (); ++i) {
+ if ((*i)->route_group() == group)
+ selection->add(*i);
+ }
+ } else {
+ selection->set (clicked_axisview);
+ }
+ break;
+
+ case Selection::Extend:
+ selection->clear();
+ cerr << ("Editor::set_selected_track_as_side_effect case Selection::Add not yet implemented\n");
+ break;
+ }
+
+#else // the older version
+
if (!selection->tracks.empty()) {
if (!selection->selected (clicked_axisview)) {
selection->add (clicked_axisview);
@@ -188,6 +259,7 @@ Editor::set_selected_track_as_side_effect (bool force)
} else if (force) {
selection->set (clicked_axisview);
}
+#endif
}
void
@@ -797,12 +869,21 @@ Editor::track_selection_changed ()
}
for (TrackViewList::iterator i = track_views.begin(); i != track_views.end(); ++i) {
- (*i)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
+
+ bool yn = (find (selection->tracks.begin(), selection->tracks.end(), *i) != selection->tracks.end());
+
+ (*i)->set_selected (yn);
TimeAxisView::Children c = (*i)->get_child_list ();
for (TimeAxisView::Children::iterator j = c.begin(); j != c.end(); ++j) {
(*j)->set_selected (find (selection->tracks.begin(), selection->tracks.end(), j->get()) != selection->tracks.end());
}
+
+ if (yn) {
+ (*i)->reshow_selection (selection->time);
+ } else {
+ (*i)->hide_selection ();
+ }
}
ActionManager::set_sensitive (ActionManager::track_selection_sensitive_actions, !selection->tracks.empty());
diff --git a/gtk2_ardour/gain_meter.cc b/gtk2_ardour/gain_meter.cc
index 9ae59f63e6..1bc9dc3f79 100644
--- a/gtk2_ardour/gain_meter.cc
+++ b/gtk2_ardour/gain_meter.cc
@@ -92,7 +92,6 @@ GainMeterBase::GainMeterBase (Session* s,
ignore_toggle = false;
meter_menu = 0;
next_release_selects = false;
- style_changed = true;
_width = Wide;
if (horizontal) {
@@ -915,12 +914,8 @@ GainMeter::render_metrics (Gtk::Widget& w)
gint
GainMeter::meter_metrics_expose (GdkEventExpose *ev)
{
- static Glib::RefPtr<Gtk::Style> meter_style;
- if (style_changed) {
- meter_style = meter_metric_area.get_style();
- }
Glib::RefPtr<Gdk::Window> win (meter_metric_area.get_window());
- Glib::RefPtr<Gdk::GC> bg_gc (meter_style->get_bg_gc (Gtk::STATE_INSENSITIVE));
+ Glib::RefPtr<Gdk::GC> bg_gc (meter_metric_area.get_style()->get_bg_gc (Gtk::STATE_INSENSITIVE));
GdkRectangle base_rect;
GdkRectangle draw_rect;
gint width, height;
diff --git a/gtk2_ardour/ui_config.cc b/gtk2_ardour/ui_config.cc
index e80c85da8f..b61ef1b551 100644
--- a/gtk2_ardour/ui_config.cc
+++ b/gtk2_ardour/ui_config.cc
@@ -134,7 +134,7 @@ UIConfiguration::load_state ()
string rcfile = user_ui_rc_file.to_string();
- info << string_compose (_("Loading user ui configuration file %1"), rcfile) << endl;
+ info << string_compose (_("Loading user ui configuration file %1"), rcfile) << endmsg;
if (!tree.read (rcfile)) {
error << string_compose(_("cannot read ui configuration file \"%1\""), rcfile) << endmsg;