summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gtk2_ardour/canvas-note-event.cc8
-rw-r--r--gtk2_ardour/editor_drag.cc7
-rw-r--r--gtk2_ardour/editor_ops.cc8
-rw-r--r--gtk2_ardour/editor_regions.cc38
-rw-r--r--gtk2_ardour/editor_regions.h9
-rw-r--r--gtk2_ardour/midi_region_view.cc6
-rw-r--r--gtk2_ardour/midi_region_view.h1
7 files changed, 63 insertions, 14 deletions
diff --git a/gtk2_ardour/canvas-note-event.cc b/gtk2_ardour/canvas-note-event.cc
index 80275d9362..739019b31e 100644
--- a/gtk2_ardour/canvas-note-event.cc
+++ b/gtk2_ardour/canvas-note-event.cc
@@ -239,6 +239,14 @@ CanvasNoteEvent::on_event(GdkEvent* ev)
_region.note_left (this);
break;
+ case GDK_MOTION_NOTIFY:
+ double ix, iy;
+ ix = ev->motion.x;
+ iy = ev->motion.y;
+ _item->w2i (ix, iy);
+ cerr << "note motion at " << ix << ',' << iy << endl;
+ break;
+
case GDK_BUTTON_PRESS:
if (ev->button.button == 3 && Keyboard::no_modifiers_active (ev->button.state)) {
show_channel_selector();
diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc
index 37f71c6026..f8047868f4 100644
--- a/gtk2_ardour/editor_drag.cc
+++ b/gtk2_ardour/editor_drag.cc
@@ -366,7 +366,8 @@ RegionDrag::RegionDrag (Editor* e, ArdourCanvas::Item* i, RegionView* p, list<Re
}
}
- assert (!v.empty ());
+ /* the list of views can be empty at this point if this is a region list-insert drag
+ */
for (list<RegionView*>::const_iterator i = v.begin(); i != v.end(); ++i) {
_views.push_back (DraggingView (*i, this));
@@ -692,7 +693,7 @@ RegionMoveDrag::motion (GdkEvent* event, bool first_move)
MidiRegionView* mrv = dynamic_cast<MidiRegionView*>(rv);
const boost::shared_ptr<const Region> original = rv->region();
- boost::shared_ptr<Region> region_copy = RegionFactory::create (original);
+ boost::shared_ptr<Region> region_copy = RegionFactory::create (original, true);
region_copy->set_position (original->position(), this);
RegionView* nrv;
@@ -915,7 +916,7 @@ RegionMoveDrag::finished_no_copy (
/* insert into new playlist */
RegionView* new_view = insert_region_into_playlist (
- RegionFactory::create (rv->region ()), dest_rtv, dest_layer, where, modified_playlists
+ RegionFactory::create (rv->region (), true), dest_rtv, dest_layer, where, modified_playlists
);
if (new_view == 0) {
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 426e42ced2..abd319583b 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -2218,7 +2218,7 @@ Editor::insert_region_list_drag (boost::shared_ptr<Region> region, int x, int y)
begin_reversible_command (_("insert dragged region"));
playlist->clear_changes ();
- playlist->add_region (RegionFactory::create (region), where, 1.0);
+ playlist->add_region (RegionFactory::create (region, true), where, 1.0);
_session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();
}
@@ -2297,7 +2297,7 @@ Editor::insert_region_list_selection (float times)
begin_reversible_command (_("insert region"));
playlist->clear_changes ();
- playlist->add_region ((RegionFactory::create (region)), get_preferred_edit_position(), times);
+ playlist->add_region ((RegionFactory::create (region, true)), get_preferred_edit_position(), times);
_session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();
}
@@ -3106,7 +3106,7 @@ Editor::region_fill_track ()
}
pl->clear_changes ();
- pl->add_region (RegionFactory::create (region), region->last_frame(), times);
+ pl->add_region (RegionFactory::create (region, true), region->last_frame(), times);
_session->add_command (new StatefulDiffCommand (pl));
}
@@ -3150,7 +3150,7 @@ Editor::region_fill_selection ()
}
playlist->clear_changes ();
- playlist->add_region (RegionFactory::create (region), start, times);
+ playlist->add_region (RegionFactory::create (region, true), start, times);
_session->add_command (new StatefulDiffCommand (playlist));
}
diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc
index a66282a7ef..0cc8926371 100644
--- a/gtk2_ardour/editor_regions.cc
+++ b/gtk2_ardour/editor_regions.cc
@@ -25,7 +25,6 @@
#include "pbd/basename.h"
#include "pbd/enumwriter.h"
-#include "pbd/stacktrace.h"
#include "ardour/audioregion.h"
#include "ardour/audiofilesource.h"
@@ -346,18 +345,41 @@ EditorRegions::region_changed (boost::shared_ptr<Region> r, const PropertyChange
our_interests.add (ARDOUR::Properties::opaque);
our_interests.add (ARDOUR::Properties::fade_in);
our_interests.add (ARDOUR::Properties::fade_out);
+
+ if (last_row != NULL){
+
+ TreeModel::iterator j = _model->get_iter (last_row.get_path());
+ boost::shared_ptr<Region> c = (*j)[_columns.region];
+
+ if (c == r) {
+ populate_row (r, (*j));
+
+ if (what_changed.contains (ARDOUR::Properties::hidden)) {
+ redisplay ();
+ }
+
+ return;
+ }
+ }
+
if (what_changed.contains (our_interests)) {
/* find the region in our model and update its row */
TreeModel::Children rows = _model->children ();
TreeModel::iterator i = rows.begin ();
+
while (i != rows.end ()) {
+
TreeModel::Children children = (*i)->children ();
TreeModel::iterator j = children.begin ();
+
while (j != children.end()) {
+
boost::shared_ptr<Region> c = (*j)[_columns.region];
+
if (c == r) {
+ last_row = TreeRowReference(_model, TreePath(j));
break;
}
++j;
@@ -403,7 +425,6 @@ EditorRegions::region_changed (boost::shared_ptr<Region> r, const PropertyChange
++i;
}
-
}
if (what_changed.contains (ARDOUR::Properties::hidden)) {
@@ -438,8 +459,11 @@ EditorRegions::selection_changed ()
boost::shared_ptr<Region> region = (*iter)[_columns.region];
// they could have clicked on a row that is just a placeholder, like "Hidden"
-
if (region) {
+
+ cerr << "Selected region has use count "
+ << _session->playlists->region_use_count (region)
+ << endl;
if (region->automatic()) {
@@ -464,10 +488,12 @@ EditorRegions::selection_changed ()
void
EditorRegions::set_selected (RegionSelection& regions)
{
+ TreeModel::Children rows = _model->children();
+
for (RegionSelection::iterator iter = regions.begin(); iter != regions.end(); ++iter) {
TreeModel::iterator i;
- TreeModel::Children rows = _model->children();
+
boost::shared_ptr<Region> r ((*iter)->region());
for (i = rows.begin(); i != rows.end(); ++i) {
@@ -509,6 +535,7 @@ EditorRegions::set_selected_in_subrow (boost::shared_ptr<Region> region, TreeMod
}
}
}
+
return false;
}
@@ -550,9 +577,6 @@ EditorRegions::redisplay ()
insert_into_tmp_regionlist (i->second);
}
- stacktrace (cerr, 22);
- cerr << "Redisplay with " << tmp_region_list.size() << " regions\n";
-
for (list<boost::shared_ptr<Region> >::iterator r = tmp_region_list.begin(); r != tmp_region_list.end(); ++r) {
add_region (*r);
}
diff --git a/gtk2_ardour/editor_regions.h b/gtk2_ardour/editor_regions.h
index f899b00c55..8e41327c37 100644
--- a/gtk2_ardour/editor_regions.h
+++ b/gtk2_ardour/editor_regions.h
@@ -40,16 +40,20 @@ public:
void reset_sort_type (Editing::RegionListSortType, bool);
void set_selected (RegionSelection &);
void selection_mapover (sigc::slot<void,boost::shared_ptr<ARDOUR::Region> >);
+
boost::shared_ptr<ARDOUR::Region> get_dragged_region ();
boost::shared_ptr<ARDOUR::Region> get_single_selection ();
+
Editing::RegionListSortType sort_type () const {
return _sort_type;
}
+
void redisplay ();
void suspend_redisplay () {
_no_redisplay = true;
}
+
void resume_redisplay () {
_no_redisplay = false;
redisplay ();
@@ -108,12 +112,17 @@ private:
};
Columns _columns;
+
+ Gtk::TreeModel::RowReference last_row;
void region_changed (boost::shared_ptr<ARDOUR::Region>, PBD::PropertyChange const &);
void selection_changed ();
+
sigc::connection _change_connection;
+
bool set_selected_in_subrow (boost::shared_ptr<ARDOUR::Region>, Gtk::TreeModel::Row const &, int);
bool selection_filter (const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::Path& path, bool yn);
+
void name_edit (const std::string&, const std::string&);
void locked_changed (std::string const &);
void glued_changed (std::string const &);
diff --git a/gtk2_ardour/midi_region_view.cc b/gtk2_ardour/midi_region_view.cc
index 6f582b3518..20b93b71e5 100644
--- a/gtk2_ardour/midi_region_view.cc
+++ b/gtk2_ardour/midi_region_view.cc
@@ -2664,6 +2664,12 @@ MidiRegionView::note_left (ArdourCanvas::CanvasNoteEvent* note)
}
void
+MidiRegionView::note_motion (float fraction)
+{
+ cerr << "Now at " << fraction << " within note\n";
+}
+
+void
MidiRegionView::switch_source(boost::shared_ptr<Source> src)
{
boost::shared_ptr<MidiSource> msrc = boost::dynamic_pointer_cast<MidiSource>(src);
diff --git a/gtk2_ardour/midi_region_view.h b/gtk2_ardour/midi_region_view.h
index 53b8c1ef0b..c66c6dc220 100644
--- a/gtk2_ardour/midi_region_view.h
+++ b/gtk2_ardour/midi_region_view.h
@@ -192,6 +192,7 @@ class MidiRegionView : public RegionView
void note_entered(ArdourCanvas::CanvasNoteEvent* ev);
void note_left(ArdourCanvas::CanvasNoteEvent* ev);
+ void note_motion (float fraction);
void unique_select(ArdourCanvas::CanvasNoteEvent* ev);
void note_selected(ArdourCanvas::CanvasNoteEvent* ev, bool add, bool extend=false);
void note_deselected(ArdourCanvas::CanvasNoteEvent* ev);