X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstreamview.h;h=094a93eaa97fc0f1f6c1c8be2c89f6632d1d6079;hb=b115a04babe8435eeaba36469eeb6145250c70cd;hp=8f7fb416bef79b4a61ddacbe3b306312f04d66a8;hpb=1ae094813858a2b8cf5b08569edcb9b15d910729;p=ardour.git diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 8f7fb416be..094a93eaa9 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001, 2006 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 @@ -20,35 +20,37 @@ #define __ardour_streamview_h__ #include -#include #include -#include +#include "pbd/signals.h" + +#include "ardour/location.h" #include "enums.h" -#include "simplerect.h" -#include "canvas.h" -#include "color.h" namespace Gdk { class Color; } namespace ARDOUR { - class Route; - class Diskstream; class Crossfade; - class PeakData; class Region; + class Route; class Source; + class Track; + struct PeakData; +} + +namespace ArdourCanvas { + class Rectangle; + class Container; } struct RecBoxInfo { - ArdourCanvas::SimpleRect* rectangle; - jack_nframes_t start; - jack_nframes_t length; + ArdourCanvas::Rectangle* rectangle; + framepos_t start; + ARDOUR::framecnt_t length; }; -class PublicEditor; class Selectable; class RouteTimeAxisView; class RegionView; @@ -56,94 +58,134 @@ class RegionSelection; class CrossfadeView; class Selection; -class StreamView : public sigc::trackable +class StreamView : public sigc::trackable, public PBD::ScopedConnectionList { public: virtual ~StreamView (); - RouteTimeAxisView& trackview() { return _trackview; } + RouteTimeAxisView& trackview() { return _trackview; } + const RouteTimeAxisView& trackview() const { return _trackview; } void attach (); void set_zoom_all(); int set_position (gdouble x, gdouble y); - virtual int set_height (gdouble); + virtual int set_height (double); + + virtual int set_samples_per_pixel (double); + gdouble get_samples_per_pixel () const { return _samples_per_pixel; } - virtual int set_samples_per_unit (gdouble spp); - gdouble get_samples_per_unit () { return _samples_per_unit; } + virtual void set_layer_display (LayerDisplay); + virtual bool can_change_layer_display() const { return true; } + LayerDisplay layer_display () const { return _layer_display; } - ArdourCanvas::Item* canvas_item() { return canvas_group; } + ArdourCanvas::Container* canvas_item() { return _canvas_group; } enum ColorTarget { RegionColor, StreamBaseColor }; - Gdk::Color get_region_color () const { return region_color; } - void apply_color (Gdk::Color&, ColorTarget t); + uint32_t get_region_color () const { return region_color; } + void apply_color (uint32_t, ColorTarget t); + void apply_color (Gdk::Color const &, ColorTarget t); - RegionView* find_view (const ARDOUR::Region&); + uint32_t num_selected_regionviews () const; + + RegionView* find_view (boost::shared_ptr); void foreach_regionview (sigc::slot slot); + void foreach_selected_regionview (sigc::slot slot); void set_selected_regionviews (RegionSelection&); - void get_selectables (jack_nframes_t start, jack_nframes_t end, list&); - void get_inverted_selectables (Selection&, list& results); + void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list&, bool within = false); + void get_inverted_selectables (Selection&, std::list& results); + + virtual void update_contents_metrics(boost::shared_ptr) {} + + void add_region_view (boost::weak_ptr); - void add_region_view (ARDOUR::Region*); void region_layered (RegionView*); - - sigc::signal RegionViewAdded; + virtual void update_contents_height (); + + virtual void redisplay_track () = 0; + double child_height () const; + ARDOUR::layer_t layers () const { return _layers; } + + virtual RegionView* create_region_view (boost::shared_ptr, bool, bool) { + return 0; + } + + void check_record_layers (boost::shared_ptr, ARDOUR::framepos_t); + + virtual void playlist_layered (boost::weak_ptr); + + sigc::signal RegionViewAdded; + sigc::signal RegionViewRemoved; + /** Emitted when the height of regions has changed */ + sigc::signal ContentsHeightChanged; protected: - StreamView (RouteTimeAxisView&); - -//private: (FIXME?) + StreamView (RouteTimeAxisView&, ArdourCanvas::Container* canvas_group = 0); void transport_changed(); + void transport_looped(); void rec_enable_changed(); void sess_rec_enable_changed(); + void create_rec_box(framepos_t frame_pos, double width); virtual void setup_rec_box () = 0; - void update_rec_box (); - virtual void update_rec_regions () = 0; - - virtual void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves) = 0; - virtual void remove_region_view (ARDOUR::Region* ); - void remove_rec_region (ARDOUR::Region*); - - void display_diskstream (boost::shared_ptr); - virtual void undisplay_diskstream (); - virtual void redisplay_diskstream () = 0; + virtual void update_rec_box (); + + virtual RegionView* add_region_view_internal (boost::shared_ptr, + bool wait_for_waves, bool recording = false) = 0; + virtual void remove_region_view (boost::weak_ptr ); + + void display_track (boost::shared_ptr); + virtual void undisplay_track (); void diskstream_changed (); - - void playlist_state_changed (ARDOUR::Change); - virtual void playlist_changed (boost::shared_ptr); - virtual void playlist_modified (); - - virtual void color_handler (ColorID, uint32_t) = 0; + void layer_regions (); + + void playlist_switched (boost::weak_ptr); + virtual void color_handler () = 0; RouteTimeAxisView& _trackview; - ArdourCanvas::Group* canvas_group; - ArdourCanvas::SimpleRect* canvas_rect; /* frame around the whole thing */ + ArdourCanvas::Container* _canvas_group; + ArdourCanvas::Rectangle* canvas_rect; /* frame around the whole thing */ - typedef list RegionViewList; + typedef std::list RegionViewList; RegionViewList region_views; - double _samples_per_unit; + double _samples_per_pixel; sigc::connection screen_update_connection; - vector rec_rects; - list rec_regions; + std::vector rec_rects; + std::list< std::pair,RegionView* > > rec_regions; bool rec_updating; bool rec_active; - bool use_rec_regions; - - Gdk::Color region_color; ///< Contained region color - uint32_t stream_base_color; ///< Background color - vector playlist_connections; - sigc::connection playlist_change_connection; + uint32_t region_color; ///< Contained region color + uint32_t stream_base_color; ///< Background color + + PBD::ScopedConnectionList playlist_connections; + PBD::ScopedConnection playlist_switched_connection; + + ARDOUR::layer_t _layers; + LayerDisplay _layer_display; + + double height; + + PBD::ScopedConnectionList rec_data_ready_connections; + framepos_t last_rec_data_frame; + + /* When recording, the session time at which a new layer must be created for the region + being recorded, or max_framepos if not applicable. + */ + framepos_t _new_rec_layer_time; + void setup_new_rec_layer_time (boost::shared_ptr); + +private: + void update_coverage_frames (); }; #endif /* __ardour_streamview_h__ */