Move panner bypass state up to the PannerShell so that it is preserved even when...
[ardour.git] / gtk2_ardour / region_view.h
index 5421d7d6134d376630aeec47c7b7d95316461f00..135c573ac2d59487e7a6aff0ba9d3bb56a6334b6 100644 (file)
@@ -38,6 +38,10 @@ class GhostRegion;
 class AutomationTimeAxisView;
 class AutomationRegionView;
 
+namespace Gnome { namespace Canvas {
+       class NoEventText;
+} }
+
 class RegionView : public TimeAxisViewItem
 {
   public:
@@ -45,7 +49,8 @@ class RegionView : public TimeAxisViewItem
                    TimeAxisView&        time_view,
                    boost::shared_ptr<ARDOUR::Region> region,
                    double               samples_per_unit,
-                   Gdk::Color const &   basic_color);
+                   Gdk::Color const &   basic_color,
+                   bool                 automation = false);
 
        RegionView (const RegionView& other);
        RegionView (const RegionView& other, boost::shared_ptr<ARDOUR::Region> other_region);
@@ -62,14 +67,14 @@ class RegionView : public TimeAxisViewItem
 
        virtual void set_height (double);
        virtual void set_samples_per_unit (double);
-       virtual bool set_duration (nframes64_t, void*);
+       virtual bool set_duration (framecnt_t, void*);
 
        void move (double xdelta, double ydelta);
 
        void raise_to_top ();
        void lower_to_bottom ();
 
-       bool set_position(nframes64_t pos, void* src, double* delta = 0);
+       bool set_position(framepos_t pos, void* src, double* delta = 0);
        void fake_set_opaque (bool yn);
 
        virtual void show_region_editor ();
@@ -91,55 +96,75 @@ class RegionView : public TimeAxisViewItem
 
        static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
 
+       ARDOUR::BeatsFramesConverter const & time_converter () {
+               return _time_converter;
+       }
+
+       /** Called when a front trim is about to begin */
+       virtual void trim_front_starting () {}
+
+       void trim_front (framepos_t, bool);
+
+       /** Called when a start trim has finished */
+       virtual void trim_front_ending () {}
+
+       void trim_end (framepos_t, bool);
+       void trim_contents (framepos_t, bool, bool);
+       virtual void thaw_after_trim ();
+
+        void set_silent_frames (const ARDOUR::AudioIntervalResult&, double threshold);
+        void drop_silent_frames ();
+        void hide_silent_frames ();
+
   protected:
 
        /** Allows derived types to specify their visibility requirements
-     * to the TimeAxisViewItem parent class
-     */
-    RegionView (ArdourCanvas::Group *,
-               TimeAxisView&,
-               boost::shared_ptr<ARDOUR::Region>,
-               double samples_per_unit,
-               Gdk::Color const & basic_color,
-               bool recording,
-               TimeAxisViewItem::Visibility);
+        * to the TimeAxisViewItem parent class
+        */
+       RegionView (ArdourCanvas::Group *,
+                   TimeAxisView&,
+                   boost::shared_ptr<ARDOUR::Region>,
+                   double samples_per_unit,
+                   Gdk::Color const & basic_color,
+                   bool recording,
+                   TimeAxisViewItem::Visibility);
 
-    virtual void region_resized (const PBD::PropertyChange&);
-    virtual void region_muted ();
-    void         region_locked ();
-    void         region_opacity ();
-    virtual void region_renamed ();
-    void         region_sync_changed ();
+       virtual void region_resized (const PBD::PropertyChange&);
+       virtual void region_muted ();
+       void         region_locked ();
+       void         region_opacity ();
+       virtual void region_renamed ();
+       void         region_sync_changed ();
 
-    Glib::ustring make_name () const;
+       std::string make_name () const;
 
-    static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*);
-    void        lock_toggle ();
+       static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*);
+       void        lock_toggle ();
 
-    virtual void set_colors ();
-    virtual void set_frame_color ();
-    virtual void reset_width_dependent_items (double pixel_width);
+       virtual void set_colors ();
+       virtual void set_frame_color ();
+       virtual void reset_width_dependent_items (double pixel_width);
 
-    virtual void color_handler () {}
+       virtual void color_handler () {}
 
-    boost::shared_ptr<ARDOUR::Region> _region;
+       boost::shared_ptr<ARDOUR::Region> _region;
 
-    ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position
-    ArdourCanvas::Line* sync_line; ///< polgyon for sync position
+       ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position
+       ArdourCanvas::Line* sync_line; ///< polgyon for sync position
 
-    RegionEditor* editor;
+       RegionEditor* editor;
 
-    std::vector<ControlPoint *> control_points;
-    double current_visible_sync_position;
+       std::vector<ControlPoint *> control_points;
+       double current_visible_sync_position;
 
-    bool    valid; ///< see StreamView::redisplay_diskstream()
-    bool    _enable_display; ///< see StreamView::redisplay_diskstream()
-    double  _pixel_width;
-    bool    in_destructor;
+       bool    valid; ///< see StreamView::redisplay_diskstream()
+       bool    _enable_display; ///< see StreamView::redisplay_diskstream()
+       double  _pixel_width;
+       bool    in_destructor;
 
-    bool wait_for_data;
+       bool wait_for_data;
 
-    std::vector<GhostRegion*> ghosts;
+       std::vector<GhostRegion*> ghosts;
 
        /** a list of rectangles which are used in stacked display mode to colour
            different bits of regions according to whether or not they are the one
@@ -147,6 +172,16 @@ class RegionView : public TimeAxisViewItem
        */
        std::list<ArdourCanvas::SimpleRect*> _coverage_frames;
 
+       /** a list of rectangles used to show silent segments
+       */
+       std::list<ArdourCanvas::SimpleRect*> _silent_frames;
+       /** a list of rectangles used to show the current silence threshold
+       */
+       std::list<ArdourCanvas::SimpleRect*> _silent_threshold_frames;
+        /** a text item to display strip silence statistics
+         */
+        ArdourCanvas::NoEventText* _silence_text;
+
        ARDOUR::BeatsFramesConverter _time_converter;
 };