Make send automation work (#4734).
[ardour.git] / gtk2_ardour / audio_region_view.h
index 270f9821463c5d6330552a69df60e0861507caab..773e136952ee398629bb8943125d08a959a9d1af 100644 (file)
@@ -35,7 +35,7 @@
 
 namespace ARDOUR {
        class AudioRegion;
-       class PeakData;
+       struct PeakData;
 };
 
 class AudioTimeAxisView;
@@ -61,7 +61,6 @@ class AudioRegionView : public RegionView
                         bool recording,
                         TimeAxisViewItem::Visibility);
 
-       AudioRegionView (const AudioRegionView& other);
        AudioRegionView (const AudioRegionView& other, boost::shared_ptr<ARDOUR::AudioRegion>);
 
        ~AudioRegionView ();
@@ -80,7 +79,7 @@ class AudioRegionView : public RegionView
        void temporarily_hide_envelope (); ///< Dangerous!
        void unhide_envelope ();           ///< Dangerous!
 
-       void set_envelope_visible (bool);
+       void update_envelope_visibility ();
        void set_waveform_visible (bool yn);
        void set_waveform_shape (ARDOUR::WaveformShape);
        void set_waveform_scale (ARDOUR::WaveformScale);
@@ -88,24 +87,26 @@ class AudioRegionView : public RegionView
        bool waveform_rectified() const { return _flags & WaveformRectified; }
        bool waveform_logscaled() const { return _flags & WaveformLogScaled; }
        bool waveform_visible()   const { return _flags & WaveformVisible; }
-       bool envelope_visible()   const { return _flags & EnvelopeVisible; }
 
        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; }
+       boost::shared_ptr<AudioRegionGainLine> get_gain_line() const { return gain_line; }
 
        void region_changed (const PBD::PropertyChange&);
        void envelope_active_changed ();
 
        GhostRegion* add_ghost (TimeAxisView&);
 
-       void reset_fade_in_shape_width (nframes_t);
-       void reset_fade_out_shape_width (nframes_t);
+       void reset_fade_in_shape_width (framecnt_t);
+       void reset_fade_out_shape_width (framecnt_t);
+
+       void show_fade_line(framepos_t pos);
+       void hide_fade_line();
 
        void set_fade_visibility (bool);
        void update_coverage_frames (LayerDisplay);
-       
+
        void update_transient(float old_pos, float new_pos);
        void remove_transient(float pos);
 
@@ -114,73 +115,93 @@ class AudioRegionView : public RegionView
        virtual void entered (bool);
        virtual void exited ();
 
+       void thaw_after_trim ();
+
+       void drag_start ();
+       void drag_end ();
+
+       void redraw_start_xfade_to (boost::shared_ptr<ARDOUR::AudioRegion>, framecnt_t);
+       void redraw_end_xfade_to (boost::shared_ptr<ARDOUR::AudioRegion>, framecnt_t);
+       void redraw_start_xfade ();
+       void redraw_end_xfade ();
+       
+       void hide_xfades ();
+       void show_xfades ();
+
   protected:
 
-    /* this constructor allows derived types
-       to specify their visibility requirements
-       to the TimeAxisViewItem parent class
-    */
-
-    enum Flags {
-           EnvelopeVisible = 0x1,
-           WaveformVisible = 0x4,
-           WaveformRectified = 0x8,
-           WaveformLogScaled = 0x10,
-    };
-
-    std::vector<ArdourCanvas::WaveView *> waves;
-    std::vector<ArdourCanvas::WaveView *> tmp_waves; ///< see ::create_waves()
-    
-    std::list<std::pair<nframes64_t, ArdourCanvas::SimpleLine*> > feature_lines;
-    
-    ArdourCanvas::Polygon*           sync_mark; ///< polgyon for sync position
-    ArdourCanvas::SimpleLine*        zero_line;
-    ArdourCanvas::Polygon*           fade_in_shape;
-    ArdourCanvas::Polygon*           fade_out_shape;
-    ArdourCanvas::SimpleRect*        fade_in_handle;
-    ArdourCanvas::SimpleRect*        fade_out_handle;
-
-    AudioRegionGainLine * gain_line;
-
-    double _amplitude_above_axis;
-
-    uint32_t _flags;
-    uint32_t fade_color;
-
-    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 ();
-
-    void region_resized (const PBD::PropertyChange&);
-    void region_muted ();
-    void region_scale_amplitude_changed ();
+       /* this constructor allows derived types
+          to specify their visibility requirements
+          to the TimeAxisViewItem parent class
+       */
+
+       enum Flags {
+               WaveformVisible = 0x4,
+               WaveformRectified = 0x8,
+               WaveformLogScaled = 0x10,
+       };
+
+       std::vector<ArdourCanvas::WaveView *> waves;
+       std::vector<ArdourCanvas::WaveView *> tmp_waves; ///< see ::create_waves()
+
+       std::list<std::pair<framepos_t, ArdourCanvas::Line*> > feature_lines;
+
+       ArdourCanvas::Polygon*           sync_mark; ///< polgyon for sync position
+       ArdourCanvas::Polygon*           fade_in_shape;
+       ArdourCanvas::Polygon*           fade_out_shape;
+       ArdourCanvas::SimpleRect*        fade_in_handle; ///< fade in handle, or 0
+       ArdourCanvas::SimpleRect*        fade_out_handle; ///< fade out handle, or 0
+       ArdourCanvas::SimpleLine*        fade_position_line;
+
+       ArdourCanvas::Line *start_xfade_in;
+       ArdourCanvas::Line *start_xfade_out;
+       ArdourCanvas::SimpleRect* start_xfade_rect;
+
+       ArdourCanvas::Line *end_xfade_in;
+       ArdourCanvas::Line *end_xfade_out;
+       ArdourCanvas::SimpleRect* end_xfade_rect;
+
+       boost::shared_ptr<AudioRegionGainLine> gain_line;
+
+       double _amplitude_above_axis;
+
+       uint32_t _flags;
+       uint32_t fade_color;
+
+       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 ();
+
+       void region_resized (const PBD::PropertyChange&);
+       void region_muted ();
+       void region_scale_amplitude_changed ();
        void region_renamed ();
 
-    void create_one_wave (uint32_t, bool);
-    void manage_zero_line ();
-    void peaks_ready_handler (uint32_t);
-    void set_flags (XMLNode *);
-    void store_flags ();
+       void create_one_wave (uint32_t, bool);
+       void peaks_ready_handler (uint32_t);
+       void set_flags (XMLNode *);
+       void store_flags ();
+
+       void set_colors ();
+       void compute_colors (Gdk::Color const &);
+       void reset_width_dependent_items (double pixel_width);
+       void set_waveview_data_src();
+       void set_frame_color ();
 
-    void set_colors ();
-    void compute_colors (Gdk::Color const &);
-    void reset_width_dependent_items (double pixel_width);
-    void set_waveview_data_src();
-    void set_frame_color ();
+       void color_handler ();
 
-    void color_handler ();
+       std::vector<GnomeCanvasWaveViewCache*> wave_caches;
 
-    std::vector<GnomeCanvasWaveViewCache*> wave_caches;
-    
-    void transients_changed();
+       void transients_changed();
 
-  private:
+       AutomationLine::VisibleAspects automation_line_visibility () const;
 
-    void setup_fade_handle_positions ();
+private:
+       void setup_fade_handle_positions ();
 
        /** A ScopedConnection for each PeaksReady callback (one per channel).  Each member
         *  may be 0 if no connection exists.