sfdb paths are saved and restored.
[ardour.git] / gtk2_ardour / regionview.h
index 0a40622bd050ef0eca780a1da40c4515b5064c1d..f49b46aea4373056ab36dde420f4c666fea48748 100644 (file)
 #define __gtk_ardour_region_view_h__
 
 #include <vector>
-#include <gtk--.h>
-#include <gtk-canvas.h>
-#include <sigc++/signal_system.h>
+
+#include <libgnomecanvasmm.h>
+#include <libgnomecanvasmm/polygon.h>
+#include <sigc++/signal.h>
 #include <ardour/region.h>
 
 #include "time_axis_view_item.h"
 #include "automation_line.h"
 #include "enums.h"
-#include "canvas-waveview.h"
+#include "waveview.h"
+#include "canvas.h"
+#include "color.h"
 
 namespace ARDOUR {
        class AudioRegion;
@@ -46,20 +49,20 @@ class AutomationTimeAxisView;
 class AudioRegionView : public TimeAxisViewItem
 {
   public:
-    AudioRegionView (GtkCanvasGroup *, 
-                    AudioTimeAxisView&,
-                    ARDOUR::AudioRegion&,
-                    double initial_samples_per_unit,
-                    double amplitude_above_axis,
-                    GdkColor& base_color,
-                    bool wait_for_waves);
-    ~AudioRegionView ();
-
+       AudioRegionView (ArdourCanvas::Group *, 
+                        AudioTimeAxisView&,
+                        ARDOUR::AudioRegion&,
+                        double initial_samples_per_unit,
+                        Gdk::Color& basic_color);
+
+       ~AudioRegionView ();
+       
+       virtual void init (double amplitude_above_axis, Gdk::Color& base_color, bool wait_for_waves);
+    
     ARDOUR::AudioRegion& region;  // ok, let 'em have it
     bool is_valid() const { return valid; }
     void set_valid (bool yn) { valid = yn; }
 
-    std::string get_item_name();
     void set_height (double);
     void set_samples_per_unit (double);
     bool set_duration (jack_nframes_t, void*);
@@ -89,16 +92,16 @@ class AudioRegionView : public TimeAxisViewItem
     void show_region_editor ();
     void hide_region_editor();
 
-    void add_gain_point_event (GtkCanvasItem *item, GdkEvent *event);
-    void remove_gain_point_event (GtkCanvasItem *item, GdkEvent *event);
+    void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
+    void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event);
 
     AudioRegionGainLine* get_gain_line() const { return gain_line; }
 
     void region_changed (ARDOUR::Change);
     void envelope_active_changed ();
 
-    static SigC::Signal1<void,AudioRegionView*> AudioRegionViewGoingAway;
-    SigC::Signal0<void> GoingAway;
+    static sigc::signal<void,AudioRegionView*> AudioRegionViewGoingAway;
+    sigc::signal<void> GoingAway;
 
     GhostRegion* add_ghost (AutomationTimeAxisView&);
     void remove_ghost (GhostRegion*);
@@ -113,22 +116,35 @@ class AudioRegionView : public TimeAxisViewItem
     virtual void entered ();
     virtual void exited ();
 
-  private:
+  protected:
+
+    /* this constructor allows derived types
+       to specify their visibility requirements
+       to the TimeAxisViewItem parent class
+    */
+    
+    AudioRegionView (ArdourCanvas::Group *, 
+                    AudioTimeAxisView&,
+                    ARDOUR::AudioRegion&,
+                    double initial_samples_per_unit,
+                    Gdk::Color& basic_color,
+                    TimeAxisViewItem::Visibility);
+    
     enum Flags {
            EnvelopeVisible = 0x1,
            WaveformVisible = 0x4,
            WaveformRectified = 0x8
     };
 
-    vector<GtkCanvasItem *> waves; /* waveviews */
-    vector<GtkCanvasItem *> tmp_waves; /* see ::create_waves()*/
-    GtkCanvasItem* sync_mark; /* polgyon for sync position */
-    GtkCanvasItem* no_wave_msg; /* text */
-    GtkCanvasItem* zero_line; /* simpleline */
-    GtkCanvasItem* fade_in_shape; /* polygon */
-    GtkCanvasItem* fade_out_shape; /* polygon */
-    GtkCanvasItem* fade_in_handle; /* simplerect */
-    GtkCanvasItem* fade_out_handle; /* simplerect */
+    vector<ArdourCanvas::WaveView *> waves; /* waveviews */
+    vector<ArdourCanvas::WaveView *> tmp_waves; /* see ::create_waves()*/
+    ArdourCanvas::Polygon* sync_mark; /* polgyon for sync position */
+    ArdourCanvas::Text* no_wave_msg; /* text */
+    ArdourCanvas::SimpleLine* zero_line; /* simpleline */
+    ArdourCanvas::Polygon* fade_in_shape; /* polygon */
+    ArdourCanvas::Polygon* fade_out_shape; /* polygon */
+    ArdourCanvas::SimpleRect* fade_in_handle; /* simplerect */
+    ArdourCanvas::SimpleRect* fade_out_handle; /* simplerect */
 
     AudioRegionGainLine* gain_line;
     AudioRegionEditor *editor;
@@ -144,6 +160,7 @@ class AudioRegionView : public TimeAxisViewItem
     double _height;
     bool    in_destructor;
     bool    wait_for_waves;
+    sigc::connection peaks_ready_connection;
 
     void reset_fade_shapes ();
     void reset_fade_in_shape ();
@@ -163,7 +180,7 @@ class AudioRegionView : public TimeAxisViewItem
     void region_sync_changed ();
     void region_scale_amplitude_changed ();
 
-    static gint _lock_toggle (GtkCanvasItem*, GdkEvent*, void*);
+    static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*);
     void lock_toggle ();
 
     void create_waves ();
@@ -175,13 +192,15 @@ class AudioRegionView : public TimeAxisViewItem
     void store_flags ();
 
     void set_colors ();
-    void compute_colors (GdkColor&);
-    void set_frame_color ();
+    void compute_colors (Gdk::Color&);
+    virtual void set_frame_color ();
     void reset_width_dependent_items (double pixel_width);
     void set_waveview_data_src();
 
-    vector<GtkCanvasWaveViewCache*> wave_caches;
+    vector<GnomeCanvasWaveViewCache*> wave_caches;
     vector<GhostRegion*> ghosts;
+    
+    void color_handler (ColorID, uint32_t);
 };
 
 #endif /* __gtk_ardour_region_view_h__ */