Remove all use of nframes_t.
[ardour.git] / gtk2_ardour / ghostregion.h
index 0abb1b9b914067360c4f471e25b3966f12d59ef0..3939c46a4b897f3e4e8b0dd0029128d0454747fd 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2004 Paul Davis 
+    Copyright (C) 2004 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __ardour_gtk_ghost_region_h__
 #define __ardour_gtk_ghost_region_h__
 
 #include <vector>
-#include <sigc++/signal_system.h>
-#include <gtk-canvas.h>
+#include <libgnomecanvasmm.h>
+#include "pbd/signals.h"
+#include "canvas.h"
 
-class AutomationTimeAxisView;
+namespace Gnome {
+       namespace Canvas {
+               class CanvasNoteEvent;
+               class CanvasNote;
+               class CanvasHit;
+               class Diamond;
+       }
+}
 
-struct GhostRegion : public SigC::Object
+class MidiStreamView;
+class TimeAxisView;
+
+class GhostRegion
 {
-    AutomationTimeAxisView& trackview;
-    GtkCanvasItem* group;
-    GtkCanvasItem* base_rect;
-    std::vector<GtkCanvasItem*> waves;
+public:
+       GhostRegion(ArdourCanvas::Group* parent, TimeAxisView& tv, TimeAxisView& source_tv, double initial_unit_pos);
+       virtual ~GhostRegion();
+
+       virtual void set_samples_per_unit(double spu) = 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& trackview;
+       TimeAxisView& source_trackview;
+       ArdourCanvas::Group* group;
+       ArdourCanvas::SimpleRect* 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_unit(double spu);
+       void set_height();
+       void set_colors();
+
+       std::vector<ArdourCanvas::WaveView*> waves;
+};
+
+class MidiGhostRegion : public GhostRegion {
+public:
+       class Event : public sigc::trackable {
+       public:
+               Event(ArdourCanvas::CanvasNoteEvent*);
+               virtual ~Event() {}
+
+               virtual void x_changed() = 0;
+               ArdourCanvas::CanvasNoteEvent* event;
+       };
+
+       class Note : public Event {
+       public:
+               Note(ArdourCanvas::CanvasNote*, ArdourCanvas::Group*);
+               ~Note();
+
+               void x_changed();
+               ArdourCanvas::SimpleRect* rect;
+       };
+
+       class Hit : public Event {
+       public:
+               Hit(ArdourCanvas::CanvasHit*, ArdourCanvas::Group*);
+               ~Hit();
+
+               void x_changed();
+               ArdourCanvas::Diamond* diamond;
+       };
+
+       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_unit(double spu);
+       void set_colors();
+
+       void update_range();
 
-    GhostRegion (AutomationTimeAxisView& tv, double initial_unit_pos);
-    ~GhostRegion ();
+       void add_note(ArdourCanvas::CanvasNote*);
+       void add_hit(ArdourCanvas::CanvasHit*);
 
-    void set_samples_per_unit (double spu);
-    void set_duration (double units);
-    void set_height ();
+       void clear_events();
 
-    SigC::Signal1<void,GhostRegion*> GoingAway;
+       typedef std::list<MidiGhostRegion::Event*> EventList;
+       EventList events;
 };
 
 #endif /* __ardour_gtk_ghost_region_h__ */