some (unfinished) work on incorporating Ben's rev 6919 changes regarding track select...
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 26 Aug 2010 23:25:44 +0000 (23:25 +0000)
committerPaul Davis <paul@linuxaudiosystems.com>
Thu, 26 Aug 2010 23:25:44 +0000 (23:25 +0000)
git-svn-id: svn://localhost/ardour2/branches/3.0@7696 d708f5d6-7413-0410-9779-e7cbd77b26cf

14 files changed:
gtk2_ardour/editor.h
gtk2_ardour/editor_drag.cc
gtk2_ardour/editor_mouse.cc
gtk2_ardour/editor_route_groups.cc
gtk2_ardour/editor_route_groups.h
gtk2_ardour/editor_selection.cc
gtk2_ardour/gain_meter.cc
gtk2_ardour/ui_config.cc
libs/ardour/ardour/session.h
libs/ardour/audioengine.cc
libs/ardour/midi_ui.cc
libs/ardour/session.cc
libs/ardour/session_state.cc
libs/evoral/src/ControlList.cpp

index 3b306e1594b3c2b89a403b0b61432d7f17db40e6..3f9dc6d8806c21e0964d81af58dbd33c035e0405 100644 (file)
@@ -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>);
index cef27660a6882edc7c821a6b0d3f96600c11658b..90e67d77af95146345608563a1c9f426845eeb42 100644 (file)
@@ -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);
                }
index a7b370a04b91979de38d8df9ad9c14e65acec1f0..0346ca11ef93693e57c543e73bfcbf2014bff4db 100644 (file)
@@ -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:
index 2f9f27ae2c107372906c2ed099dbf5487e16ca2e..d4ab4542ea451946196083841e52e03e78ab250a 100644 (file)
@@ -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));
        }
index 402f8e2aed5f9644837179456fdb0af75dbdc3ce..5610596be109e013a73adc6caa118de4e72671cf 100644 (file)
@@ -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;
 };
index e99b31c478af31040fa92341dc026138f30478ea..bde72e53740a9fd4a3178c9f3a67d6fe80ecb70b 100644 (file)
@@ -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());
index 9ae59f63e6039e7938d5c1fca590f2498cb05a6f..1bc9dc3f79651f2fdaa9c97566ed66c4eba3aa48 100644 (file)
@@ -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;
index e80c85da8ffd8f972e198c23e86eb4ca057d2623..b61ef1b5516b0c24e0b408406f21cd6472b1eb39 100644 (file)
@@ -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;
index 75b9fb1831cc289de714b8a3b0f153696ca2094f..88f62aa9b394b76907002edfea52e688f77c3fb8 100644 (file)
@@ -393,7 +393,8 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
        void add_route_group (RouteGroup *);
        void remove_route_group (RouteGroup&);
 
-       RouteGroup *route_group_by_name (std::string);
+       RouteGroup* route_group_by_name (std::string);
+        RouteGroup& all_route_group() const;
 
        PBD::Signal1<void,RouteGroup*> route_group_added;
        PBD::Signal0<void>             route_group_removed;
@@ -1171,6 +1172,7 @@ class Session : public PBD::StatefulDestructible, public PBD::ScopedConnectionLi
        int load_route_groups (const XMLNode&, int);
 
        std::list<RouteGroup *> _route_groups;
+        RouteGroup*             _all_route_group;
 
        /* routes stuff */
 
index 12f0254ec2b4bbb2f5793afc57e813367bc0562f..9a946a1c0a97c16ea5d62c108d4b583467f4d1d2 100644 (file)
@@ -243,7 +243,6 @@ AudioEngine::start ()
                         error << _("Cannot create temporary MIDI port to determine MIDI buffer size") << endmsg;
                 } else {
                         _raw_buffer_sizes[DataType::MIDI] = jack_midi_max_event_size (jack_port_get_buffer(midi_port, blocksize));
-                        cerr << "MIDI port buffers = " << _raw_buffer_sizes[DataType::MIDI] << endl;
                         jack_port_unregister (_priv_jack, midi_port);
                 }
        }
index 5d9407d5796dd7b9d312cfd925d8697263f88419..5c36d46c3bcedd7a50f279fcd8953ce0812fbdb5 100644 (file)
@@ -158,8 +158,6 @@ MidiControlUI::thread_init ()
        strcpy (c, X_("midiUI"));
        pthread_set_name (c);
 
-       cerr << "MIDI UI running\n";
-
        PBD::notify_gui_about_thread_creation (X_("gui"), pthread_self(), X_("MIDI"), 2048);
        SessionEvent::create_per_thread_pool (X_("MIDI I/O"), 128);
 
index ee475c0f326c0d05e56469a8627782e84dd7162e..f687580d3dd856e3900df6ca070792563cbec58b 100644 (file)
@@ -136,31 +136,35 @@ Session::Session (AudioEngine &eng,
                   BusProfile* bus_profile,
                  string mix_template)
 
-       : _engine (eng),
-         _target_transport_speed (0.0),
-         _requested_return_frame (-1),
-         _session_dir (new SessionDirectory(fullpath)),
-         state_tree (0),
-         _butler (new Butler (*this)),
-         _post_transport_work (0),
-         _send_timecode_update (false),
-         route_graph (new Graph(*this)),
-         routes (new RouteList),
-         _total_free_4k_blocks (0),
-         _bundles (new BundleList),
-         _bundle_xml_node (0),
-         _click_io ((IO*) 0),
-         click_data (0),
-         click_emphasis_data (0),
-         main_outs (0),
-         _metadata (new SessionMetadata()),
-         _have_rec_enabled_track (false),
-         _suspend_timecode_transmission (0)
+       : _engine (eng)
+        , _target_transport_speed (0.0)
+        , _requested_return_frame (-1)
+        , _session_dir (new SessionDirectory(fullpath))
+        , state_tree (0)
+        , _butler (new Butler (*this))
+        , _post_transport_work (0)
+        , _send_timecode_update (false)
+        , _all_route_group (new RouteGroup (*this, "all"))
+        , route_graph (new Graph(*this))
+        , routes (new RouteList)
+        , _total_free_4k_blocks (0)
+        , _bundles (new BundleList)
+        , _bundle_xml_node (0)
+        , _click_io ((IO*) 0)
+        , click_data (0)
+        , click_emphasis_data (0)
+        , main_outs (0)
+        , _metadata (new SessionMetadata())
+        , _have_rec_enabled_track (false)
+        , _suspend_timecode_transmission (0)
 {
        _locations = new Locations (*this);
                
        playlists.reset (new SessionPlaylists);
-       
+
+        _all_route_group->set_edit (true);
+        _all_route_group->set_active (true, this);
+
        interpolation.add_channel_to (0, 0);
 
        if (!eng.connected()) {
@@ -241,6 +245,7 @@ Session::destroy ()
        _butler->drop_references ();
        delete _butler;
        delete midi_control_ui;
+        delete _all_route_group;
 
        if (click_data != default_click) {
                delete [] click_data;
index 225b7c1909fb05253e8d9bd9ba30be97dd56a733..6d319d23b864b3d4b4619373cb252adf66a99f06 100644 (file)
@@ -2295,6 +2295,12 @@ Session::route_group_by_name (string name)
        return 0;
 }
 
+RouteGroup&
+Session::all_route_group() const
+{
+        return *_all_route_group;
+}
+
 UndoTransaction*
 Session::start_reversible_command (const string& name)
 {
index 72af04a2d14f7a7eb16275544f237acc10b6cd26..b41141a61e6e08b68fb89b596767e66152e84ddf 100644 (file)
@@ -390,7 +390,9 @@ ControlList::fast_simple_add (double when, double value)
 void
 ControlList::add (double when, double value)
 {
-       /* this is for graphical editing */
+        /* this is for making changes from some kind of user interface or 
+           control surface (GUI, MIDI, OSC etc) 
+        */
 
        {
                Glib::Mutex::Lock lm (_lock);