Split pretty much the entire GUI in 3. Audio and Midi "editor strips" and
[ardour.git] / gtk2_ardour / regionview.h
index ee42e6209ffd0699d6ba85dfde5512c279aeeeb7..29c5817a251b1d0dc046c35cc301ab087dbb089f 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2001-2004 Paul Davis 
+    Copyright (C) 2001-2006 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
     You should have received a copy of the GNU General Public License
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
-
-    $Id$
 */
 
 #ifndef __gtk_ardour_region_view_h__
 #define __gtk_ardour_region_view_h__
 
 #include <vector>
-#include <gtkmm.h>
-#include <libgnomecanvasmm/libgnomecanvasmm.h>
+
+#include <libgnomecanvasmm.h>
 #include <libgnomecanvasmm/polygon.h>
 #include <sigc++/signal.h>
 #include <ardour/region.h>
 #include "enums.h"
 #include "waveview.h"
 #include "canvas.h"
+#include "color.h"
 
-namespace ARDOUR {
-       class AudioRegion;
-       class PeakData;
-};
-
-class AudioTimeAxisView;
-class AudioRegionGainLine;
-class AudioRegionEditor;
+class TimeAxisView;
+class RegionEditor;
 class GhostRegion;
 class AutomationTimeAxisView;
 
-class AudioRegionView : public TimeAxisViewItem
+class RegionView : public TimeAxisViewItem
 {
   public:
-  AudioRegionView (ArdourCanvas::Group *, 
-                    AudioTimeAxisView&,
-                    ARDOUR::AudioRegion&,
-                    double initial_samples_per_unit,
-                    double amplitude_above_axis,
-                    Gdk::Color& base_color,
-                    bool wait_for_waves);
-    ~AudioRegionView ();
-
-    ARDOUR::AudioRegion& region;  // ok, let 'em have it
-    bool is_valid() const { return valid; }
+       RegionView (ArdourCanvas::Group* parent, 
+                   TimeAxisView&        time_view,
+                   ARDOUR::Region&      region,
+                   double               samples_per_unit,
+                   Gdk::Color&          basic_color);
+
+       ~RegionView ();
+       
+       virtual void init (Gdk::Color& base_color, bool wait_for_waves);
+    
+       ARDOUR::Region& region() const { return _region; }
+       
+       bool is_valid() const    { return valid; }
     void set_valid (bool yn) { valid = yn; }
 
-    std::string get_item_name();
-    void set_height (double);
+    virtual void set_height (double) = 0;
     void set_samples_per_unit (double);
     bool set_duration (jack_nframes_t, void*);
 
-    void set_amplitude_above_axis (gdouble spp);
-
     void move (double xdelta, double ydelta);
 
     void raise ();
@@ -76,84 +68,60 @@ class AudioRegionView : public TimeAxisViewItem
     void lower_to_bottom ();
 
     bool set_position(jack_nframes_t pos, void* src, double* delta = 0);
-    
-    void temporarily_hide_envelope (); // dangerous
-    void unhide_envelope (); // dangerous
-
-    void set_envelope_visible (bool);
-    void set_waveform_visible (bool yn);
-    void set_waveform_shape (WaveformShape);
 
-    bool waveform_rectified() const { return _flags & WaveformRectified; }
-    bool waveform_visible() const { return _flags & WaveformVisible; }
-    bool envelope_visible() const { return _flags & EnvelopeVisible; }
-    
-    void show_region_editor ();
+    virtual void show_region_editor () = 0;
     void hide_region_editor();
 
-    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::signal<void,AudioRegionView*> AudioRegionViewGoingAway;
-    sigc::signal<void> GoingAway;
-
-    GhostRegion* add_ghost (AutomationTimeAxisView&);
-    void remove_ghost (GhostRegion*);
 
-    void reset_fade_in_shape_width (jack_nframes_t);
-    void reset_fade_out_shape_width (jack_nframes_t);
-    void set_fade_in_active (bool);
-    void set_fade_out_active (bool);
+    virtual GhostRegion* add_ghost (AutomationTimeAxisView&) = 0;
+    void                 remove_ghost (GhostRegion*);
 
     uint32_t get_fill_color ();
 
-    virtual void entered ();
-    virtual void exited ();
-
-  private:
+    virtual void entered () {}
+    virtual void exited () {}
+    
+       static sigc::signal<void,RegionView*> RegionViewGoingAway;
+    sigc::signal<void>                    GoingAway;
+
+  protected:
+
+    /** Allows derived types to specify their visibility requirements
+     * to the TimeAxisViewItem parent class
+        */
+    RegionView (ArdourCanvas::Group *, 
+                   TimeAxisView&,
+                   ARDOUR::Region&,
+                   double initial_samples_per_unit,
+                   Gdk::Color& basic_color,
+                   TimeAxisViewItem::Visibility);
+    
+       ARDOUR::Region& _region;
+    
     enum Flags {
            EnvelopeVisible = 0x1,
            WaveformVisible = 0x4,
            WaveformRectified = 0x8
     };
 
-    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::Line* 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 */
+    ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position 
+    ArdourCanvas::Text* no_wave_msg; ///< text 
 
-    AudioRegionGainLine* gain_line;
-    AudioRegionEditor *editor;
+    RegionEditor *editor;
 
     vector<ControlPoint *> control_points;
-    double _amplitude_above_axis;
     double current_visible_sync_position;
 
     uint32_t _flags;
     uint32_t fade_color;
-    bool     valid; /* see StreamView::redisplay_diskstream() */
-    double _pixel_width;
-    double _height;
+    bool     valid; ///< see StreamView::redisplay_diskstream() 
+    double  _pixel_width;
+    double  _height;
     bool    in_destructor;
     bool    wait_for_waves;
-
-    void reset_fade_shapes ();
-    void reset_fade_in_shape ();
-    void reset_fade_out_shape ();
-    void fade_in_changed ();
-    void fade_out_changed ();
-    void fade_in_active_changed ();
-    void fade_out_active_changed ();
+    
+       sigc::connection peaks_ready_connection;
 
     void region_resized (ARDOUR::Change);
     void region_moved (void *);
@@ -166,24 +134,19 @@ class AudioRegionView : public TimeAxisViewItem
     void region_scale_amplitude_changed ();
 
     static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*);
-    void lock_toggle ();
+    void        lock_toggle ();
 
-    void create_waves ();
-    void create_one_wave (uint32_t, bool);
-    void manage_zero_line ();
     void peaks_ready_handler (uint32_t);
     void reset_name (gdouble width);
-    void set_flags (XMLNode *);
-    void store_flags ();
 
     void set_colors ();
     void compute_colors (Gdk::Color&);
-    void set_frame_color ();
+    virtual void set_frame_color ();
     void reset_width_dependent_items (double pixel_width);
-    void set_waveview_data_src();
 
-    vector<GnomeCanvasWaveViewCache*> wave_caches;
     vector<GhostRegion*> ghosts;
+    
+    virtual void color_handler (ColorID, uint32_t) {}
 };
 
 #endif /* __gtk_ardour_region_view_h__ */