X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstreamview.h;h=49001f57f6808d590619b75e10f82ac43d335548;hb=25eb9f406960aa8e36ccd90e2cd4397f372bd0fa;hp=adf16e1a3ef5d50757d5c523b4ac68627933a8ad;hpb=4297071b3f7360b17d81ef9cf36b8d75d46d2818;p=ardour.git diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index adf16e1a3e..49001f57f6 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 @@ -22,29 +22,30 @@ #include #include +#include "pbd/signals.h" + #include "ardour/location.h" #include "enums.h" #include "simplerect.h" #include "canvas.h" -#include "shared_ptrs.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; } struct RecBoxInfo { - ArdourCanvas::SimpleRect* rectangle; - nframes_t start; - nframes_t length; + ArdourCanvas::SimpleRect* rectangle; + framepos_t start; + ARDOUR::framecnt_t length; }; class Selectable; @@ -54,13 +55,13 @@ class RegionSelection; class CrossfadeView; class Selection; -class StreamView : public sigc::trackable +class StreamView : public sigc::trackable, public PBD::ScopedConnectionList { public: virtual ~StreamView (); - RouteTimeAxisViewPtr trackview() { return _trackview; } - const RouteTimeAxisViewPtr trackview() const { return _trackview; } + RouteTimeAxisView& trackview() { return _trackview; } + const RouteTimeAxisView& trackview() const { return _trackview; } void attach (); @@ -71,12 +72,16 @@ public: virtual int set_samples_per_unit (gdouble spp); gdouble get_samples_per_unit () { return _samples_per_unit; } + virtual void horizontal_position_changed () {} + + virtual void enter_internal_edit_mode (); + virtual void leave_internal_edit_mode (); void set_layer_display (LayerDisplay); LayerDisplay layer_display () const { return _layer_display; } ArdourCanvas::Group* background_group() { return _background_group; } - ArdourCanvas::Group* canvas_item() { return canvas_group; } + ArdourCanvas::Group* canvas_item() { return _canvas_group; } enum ColorTarget { RegionColor, @@ -84,64 +89,70 @@ public: }; Gdk::Color get_region_color () const { return region_color; } - void apply_color (Gdk::Color&, ColorTarget t); + void apply_color (Gdk::Color, ColorTarget t); + + 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 (nframes_t start, nframes_t end, std::list&); + void get_selectables (ARDOUR::framepos_t, ARDOUR::framepos_t, double, double, std::list&); void get_inverted_selectables (Selection&, std::list& results); - virtual void update_contents_metrics(boost::shared_ptr r) {} + virtual void update_contents_metrics(boost::shared_ptr) {} - void add_region_view_weak (boost::weak_ptr r); - void add_region_view (boost::shared_ptr); + void add_region_view (boost::weak_ptr); void region_layered (RegionView*); virtual void update_contents_height (); - - virtual void redisplay_diskstream () = 0; + + 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 HeightChanged; + sigc::signal RegionViewAdded; + sigc::signal RegionViewRemoved; + /** Emitted when the height of regions has changed */ + sigc::signal ContentsHeightChanged; protected: - StreamView (RouteTimeAxisViewPtr, ArdourCanvas::Group* group = NULL); - + StreamView (RouteTimeAxisView&, ArdourCanvas::Group* background_group = 0, ArdourCanvas::Group* canvas_group = 0); + void transport_changed(); void transport_looped(); void rec_enable_changed(); void sess_rec_enable_changed(); virtual void setup_rec_box () = 0; - void update_rec_box (); - + 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_diskstream (boost::shared_ptr); - virtual void undisplay_diskstream (); + void display_track (boost::shared_ptr); + virtual void undisplay_track (); void diskstream_changed (); void layer_regions (); - - virtual void playlist_changed_weak (boost::weak_ptr); - virtual void playlist_changed (boost::shared_ptr); - virtual void playlist_modified_weak (boost::weak_ptr); - virtual void playlist_modified (boost::shared_ptr); - + + void playlist_switched (boost::weak_ptr); + virtual void color_handler () = 0; - RouteTimeAxisViewPtr _trackview; + RouteTimeAxisView& _trackview; + bool owns_background_group; bool owns_canvas_group; ArdourCanvas::Group* _background_group; - ArdourCanvas::Group* canvas_group; + ArdourCanvas::Group* _canvas_group; ArdourCanvas::SimpleRect* canvas_rect; /* frame around the whole thing */ typedef std::list RegionViewList; @@ -154,21 +165,26 @@ protected: 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 - std::vector playlist_connections; - sigc::connection playlist_change_connection; + PBD::ScopedConnectionList playlist_connections; + PBD::ScopedConnection playlist_switched_connection; ARDOUR::layer_t _layers; LayerDisplay _layer_display; - + double height; - std::list rec_data_ready_connections; - jack_nframes_t last_rec_data_frame; + 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 ();