use syntactic sugar
[ardour.git] / gtk2_ardour / region_view.h
index 30161173530d929df45da51d2516e79adddd08d7..b33d6abf2ca341bac983c752cf072e96b10dbf7a 100644 (file)
 
 #include <vector>
 
-#include <libgnomecanvasmm.h>
-#include <libgnomecanvasmm/polygon.h>
 #include <sigc++/signal.h>
 #include "ardour/region.h"
-#include "ardour/beats_frames_converter.h"
+#include "ardour/beats_samples_converter.h"
+
+#include "canvas/fwd.h"
 
 #include "time_axis_view_item.h"
 #include "automation_line.h"
 #include "enums.h"
-#include "canvas.h"
 
 class TimeAxisView;
 class RegionEditor;
@@ -42,26 +41,32 @@ class GhostRegion;
 class AutomationTimeAxisView;
 class AutomationRegionView;
 
-namespace Gnome { namespace Canvas {
-       class NoEventText;
-} }
+namespace ArdourCanvas {
+       class Polygon;
+       class Text;
+}
 
 class RegionView : public TimeAxisViewItem
 {
-  public:
-       RegionView (ArdourCanvas::Group* parent,
+public:
+       RegionView (ArdourCanvas::Container* parent,
                    TimeAxisView&        time_view,
                    boost::shared_ptr<ARDOUR::Region> region,
-                   double               samples_per_unit,
-                   Gdk::Color const &   basic_color,
-                   bool                 automation = false);
+                   double               samples_per_pixel,
+                   uint32_t             base_color,
+                   bool                 automation = false);
 
        RegionView (const RegionView& other);
        RegionView (const RegionView& other, boost::shared_ptr<ARDOUR::Region> other_region);
 
        ~RegionView ();
 
-       virtual void init (Gdk::Color const & base_color, bool wait_for_data);
+       virtual void set_selected (bool yn) {
+               _region->set_selected_for_solo(yn);
+               TimeAxisViewItem::set_selected(yn);
+       }
+
+       virtual void init (bool wait_for_data);
 
        boost::shared_ptr<ARDOUR::Region> region() const { return _region; }
 
@@ -70,74 +75,73 @@ class RegionView : public TimeAxisViewItem
        void set_valid (bool yn) { valid = yn; }
 
        virtual void set_height (double);
-       virtual void set_samples_per_unit (double);
-       virtual bool set_duration (framecnt_t, void*);
+       virtual void set_samples_per_pixel (double);
+       virtual bool set_duration (samplecnt_t, void*);
 
        void move (double xdelta, double ydelta);
 
        void raise_to_top ();
        void lower_to_bottom ();
 
-       bool set_position(framepos_t pos, void* src, double* delta = 0);
-       void fake_set_opaque (bool yn);
+       bool set_position(samplepos_t pos, void* src, double* delta = 0);
 
        virtual void show_region_editor ();
        void hide_region_editor ();
 
        virtual void region_changed (const PBD::PropertyChange&);
 
+       uint32_t get_fill_color () const;
+
        virtual GhostRegion* add_ghost (TimeAxisView&) = 0;
        void remove_ghost_in (TimeAxisView&);
        void remove_ghost (GhostRegion*);
 
-       uint32_t get_fill_color ();
-
-       virtual void entered (bool) {}
+       virtual void entered () {}
        virtual void exited () {}
 
        virtual void enable_display(bool yn) { _enable_display = yn; }
-       virtual void update_coverage_frames (LayerDisplay);
+       virtual void update_coverage_samples (LayerDisplay);
 
        static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
 
-       ARDOUR::BeatsFramesConverter const & region_relative_time_converter () const {
-               return _region_relative_time_converter;
-       }
-
-       ARDOUR::BeatsFramesConverter const & source_relative_time_converter () const {
-               return _source_relative_time_converter;
-       }
-
        /** Called when a front trim is about to begin */
        virtual void trim_front_starting () {}
 
-       bool trim_front (framepos_t, bool);
+       bool trim_front (samplepos_t, bool, const int32_t sub_num);
 
        /** Called when a start trim has finished */
        virtual void trim_front_ending () {}
 
-       bool trim_end (framepos_t, bool);
-       void trim_contents (framepos_t, bool, bool);
+       bool trim_end (samplepos_t, bool, const int32_t sub_num);
+       void move_contents (ARDOUR::sampleoffset_t);
        virtual void thaw_after_trim ();
 
-        void set_silent_frames (const ARDOUR::AudioIntervalResult&, double threshold);
-        void drop_silent_frames ();
-        void hide_silent_frames ();
+       void set_silent_samples (const ARDOUR::AudioIntervalResult&, double threshold);
+       void drop_silent_samples ();
+       void hide_silent_samples ();
+
+       struct PositionOrder {
+               bool operator()(const RegionView* a, const RegionView* b) {
+                       return a->region()->position() < b->region()->position();
+               }
+       };
 
-       ARDOUR::frameoffset_t snap_frame_to_frame (ARDOUR::frameoffset_t) const;
-       
-  protected:
+       ARDOUR::MusicSample snap_sample_to_sample (ARDOUR::sampleoffset_t, bool ensure_snap = false) const;
+
+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);
+       RegionView (ArdourCanvas::Container *,
+                   TimeAxisView&,
+                   boost::shared_ptr<ARDOUR::Region>,
+                   double samples_per_pixel,
+                   uint32_t basic_color,
+                   bool recording,
+                   TimeAxisViewItem::Visibility);
+
+       bool canvas_group_event (GdkEvent*);
 
        virtual void region_resized (const PBD::PropertyChange&);
        virtual void region_muted ();
@@ -152,7 +156,7 @@ class RegionView : public TimeAxisViewItem
        void        lock_toggle ();
 
        virtual void set_colors ();
-       virtual void set_frame_color ();
+       virtual void set_sync_mark_color ();
        virtual void reset_width_dependent_items (double pixel_width);
 
        virtual void color_handler () {}
@@ -177,23 +181,19 @@ class RegionView : public TimeAxisViewItem
        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
-           that will be played at any given time.
-       */
-       std::list<ArdourCanvas::SimpleRect*> _coverage_frames;
+        * different bits of regions according to whether or not they are the one
+        * that will be played at any given time.
+        */
+       std::list<ArdourCanvas::Rectangle*> _coverage_samples;
 
        /** a list of rectangles used to show silent segments
        */
-       std::list<ArdourCanvas::SimpleRect*> _silent_frames;
+       std::list<ArdourCanvas::Rectangle*> _silent_samples;
        /** 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 _region_relative_time_converter;
-       ARDOUR::BeatsFramesConverter _source_relative_time_converter;
+       std::list<ArdourCanvas::Rectangle*> _silent_threshold_samples;
+       /** a text item to display strip silence statistics */
+       ArdourCanvas::Text* _silence_text;
 };
 
 #endif /* __gtk_ardour_region_view_h__ */