+public:
+ GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+ virtual ~GhostRegion();
+
+ virtual void set_samples_per_pixel (double) = 0;
+ virtual void set_height();
+ virtual void set_colors();
+
+ void set_duration(double units);
+
+ guint source_track_color(unsigned char alpha = 0xff);
+ bool is_automation_ghost();
+
+ /** TimeAxisView that is the AutomationTimeAxisView that we are on */
+ TimeAxisView& trackview;
+ /** TimeAxisView that we are a ghost for */
+ TimeAxisView& source_trackview;
+ ArdourCanvas::Group* group;
+ ArdourCanvas::Rectangle* base_rect;
+
+ static PBD::Signal1<void,GhostRegion*> CatchDeletion;
+};
+
+class AudioGhostRegion : public GhostRegion {
+public:
+ AudioGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+
+ void set_samples_per_pixel (double);
+ void set_height();
+ void set_colors();
+
+ std::vector<ArdourCanvas::WaveView*> waves;
+};
+
+class MidiGhostRegion : public GhostRegion {
+public:
+ class GhostEvent : public sigc::trackable {
+ public:
+ GhostEvent(::NoteBase *, ArdourCanvas::Group *);
+ virtual ~GhostEvent ();
+
+ NoteBase* event;
+ ArdourCanvas::Rectangle* rect;
+ };
+
+ MidiGhostRegion(TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+ MidiGhostRegion(MidiStreamView& msv, TimeAxisView& source_tv, double initial_unit_pos);
+ ~MidiGhostRegion();
+
+ MidiStreamView* midi_view();
+
+ void set_height();
+ void set_samples_per_pixel (double spu);
+ void set_colors();
+
+ void update_range();
+
+ void add_note(NoteBase*);
+ void update_note (NoteBase*);
+ void remove_note (NoteBase*);
+
+ void clear_events();