summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBen Loftis <ben@harrisonconsoles.com>2014-12-12 17:16:50 -0600
committerDavid Robillard <d@drobilla.net>2014-12-18 20:22:48 -0500
commit7ab8a11fb53782dfcf67b652dc65d8d177b0a1b6 (patch)
tree15975093e1a36db99e29ceca0f9f22fdd662cbb2
parentcebf191cba74dea1c6630aa487a2a434a85ceb40 (diff)
Enforce internal/external selection exclusivity.
-rw-r--r--gtk2_ardour/editor_mouse.cc38
-rw-r--r--gtk2_ardour/midi_region_view.cc9
-rw-r--r--gtk2_ardour/midi_region_view.h5
-rw-r--r--gtk2_ardour/public_editor.h1
-rw-r--r--gtk2_ardour/selection.cc6
-rw-r--r--gtk2_ardour/selection.h4
-rw-r--r--gtk2_ardour/time_axis_view_item.cc9
7 files changed, 57 insertions, 15 deletions
diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc
index ab153b943b..99f0775106 100644
--- a/gtk2_ardour/editor_mouse.cc
+++ b/gtk2_ardour/editor_mouse.cc
@@ -329,13 +329,37 @@ Editor::internal_editing() const
void
Editor::update_time_selection_display ()
{
- switch (mouse_mode) {
- case MouseRange:
- selection->clear_objects ();
- break;
- default:
- selection->clear_time ();
- break;
+ if (smart_mode_action->get_active()) {
+ /* not sure what to do here */
+ if (mouse_mode == MouseObject) {
+ } else {
+ }
+ } else {
+ switch (mouse_mode) {
+ case MouseRange:
+ selection->clear_objects ();
+ selection->ClearMidiNoteSelection(); //signal
+ break;
+ case MouseObject:
+ selection->clear_objects ();
+ selection->clear_time ();
+ selection->clear_tracks ();
+ selection->ClearMidiNoteSelection(); //signal
+ break;
+ case MouseContent:
+ case MouseDraw:
+ //if we go into internal editing, clear everything in the outside world
+ selection->clear_objects ();
+ selection->clear_time ();
+ selection->clear_tracks ();
+ break;
+ default:
+ //clear everything
+ selection->clear_objects ();
+ selection->clear_time ();
+ selection->clear_tracks ();
+ break;
+ }
}
}
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 8533cefdc0..197e190761 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -135,6 +135,9 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
connect_to_diskstream ();
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
+
+ PublicEditor& editor (trackview.editor());
+ editor.get_selection().ClearMidiNoteSelection.connect (_clear_midi_selection_connection, invalidator (*this), boost::bind (&MidiRegionView::clear_midi_selection, this), gui_context ());
}
MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
@@ -181,6 +184,9 @@ MidiRegionView::MidiRegionView (ArdourCanvas::Container* parent,
connect_to_diskstream ();
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
+
+ PublicEditor& editor (trackview.editor());
+ editor.get_selection().ClearMidiNoteSelection.connect (_clear_midi_selection_connection, invalidator (*this), boost::bind (&MidiRegionView::clear_midi_selection, this), gui_context ());
}
void
@@ -315,6 +321,9 @@ MidiRegionView::init (bool wfd)
connect_to_diskstream ();
SelectionCleared.connect (_selection_cleared_connection, invalidator (*this), boost::bind (&MidiRegionView::selection_cleared, this, _1), gui_context ());
+
+ PublicEditor& editor (trackview.editor());
+ editor.get_selection().ClearMidiNoteSelection.connect (_clear_midi_selection_connection, invalidator (*this), boost::bind (&MidiRegionView::clear_midi_selection, this), gui_context ());
}
InstrumentInfo&
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 7280ba6e4e..f9cc7c7299 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -348,6 +348,11 @@ private:
PBD::ScopedConnection _selection_cleared_connection;
void selection_cleared (MidiRegionView *);
+ /** this handles the case when the "external" world wants us to clear our internal selections
+ */
+ PBD::ScopedConnection _clear_midi_selection_connection;
+ void clear_midi_selection () { clear_selection(); }
+
friend class EditNoteDialog;
/** Play the NoteOn event of the given note immediately
diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h
index 884a1b351b..2cc4673463 100644
--- a/gtk2_ardour/public_editor.h
+++ b/gtk2_ardour/public_editor.h
@@ -235,6 +235,7 @@ class PublicEditor : public Gtk::Window, public PBD::StatefulDestructible, publi
virtual void copy_playlists (TimeAxisView*) = 0;
virtual void clear_playlists (TimeAxisView*) = 0;
virtual void select_all_tracks () = 0;
+ virtual void deselect_all () = 0;
virtual void set_selected_track (TimeAxisView&, Selection::Operation op = Selection::Set, bool no_remove = false) = 0;
virtual void set_selected_mixer_strip (TimeAxisView&) = 0;
virtual void hide_track_in_display (TimeAxisView* tv, bool apply_to_selection = false) = 0;
diff --git a/gtk2_ardour/selection.cc b/gtk2_ardour/selection.cc
index b29f5c3241..9f69666497 100644
--- a/gtk2_ardour/selection.cc
+++ b/gtk2_ardour/selection.cc
@@ -42,6 +42,8 @@ using namespace std;
using namespace ARDOUR;
using namespace PBD;
+PBD::Signal0<void> Selection::ClearMidiNoteSelection;
+
struct AudioRangeComparator {
bool operator()(AudioRange a, AudioRange b) {
return a.start < b.start;
@@ -173,6 +175,10 @@ Selection::clear_midi_notes ()
midi_notes.clear ();
MidiNotesChanged ();
}
+
+ /* The note selection is actually stored in MidiRegionView, emit signal to
+ tell them to clear their selection. */
+ ClearMidiNoteSelection(); /* EMIT SIGNAL */
}
void
diff --git a/gtk2_ardour/selection.h b/gtk2_ardour/selection.h
index 3c14eb9a09..1701d69399 100644
--- a/gtk2_ardour/selection.h
+++ b/gtk2_ardour/selection.h
@@ -198,6 +198,8 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
* The Track selection isn't affected when ranges or objects are added.
*/
+ void clear_all() { clear_time(); clear_tracks(); clear_objects(); }
+
void clear_time(); //clears any time selection ( i.e. Range )
void clear_tracks (); //clears the track header selections
void clear_objects(); //clears the items listed below
@@ -219,6 +221,8 @@ class Selection : public sigc::trackable, public PBD::ScopedConnectionList
XMLNode& get_state () const;
int set_state (XMLNode const &, int);
+ static PBD::Signal0<void> ClearMidiNoteSelection;
+
private:
PublicEditor const * editor;
uint32_t next_time_id;
diff --git a/gtk2_ardour/time_axis_view_item.cc b/gtk2_ardour/time_axis_view_item.cc
index 9df14240f5..2f860d897b 100644
--- a/gtk2_ardour/time_axis_view_item.cc
+++ b/gtk2_ardour/time_axis_view_item.cc
@@ -782,14 +782,7 @@ TimeAxisViewItem::set_frame_color()
set_frame_gradient ();
if (!_recregion) {
- uint32_t f = ARDOUR_UI::config()->color ("time axis frame");
-
- if (!rect_visible) {
- /* make the frame outline be visible but rather transparent */
- f = UINT_RGBA_CHANGE_A (f, 64);
- }
-
- frame->set_outline_color (f);
+ frame->set_outline_color (ARDOUR_UI::config()->color ("time axis frame"));
}
}