X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fstreamview.h;h=a1ebe2cc2a9fefee42be4f64d65bcae4a9f7e64b;hb=b5148d93d5a9e6949f82f8685cab50cb772f2b9d;hp=8d9162c8abbe7763de7f5705961b39807442eccf;hpb=209d967b1bb80a9735d690d8f4f0455ecb9970ca;p=ardour.git diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h index 8d9162c8ab..a1ebe2cc2a 100644 --- a/gtk2_ardour/streamview.h +++ b/gtk2_ardour/streamview.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001 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 @@ -14,158 +14,166 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - - $Id$ */ #ifndef __ardour_streamview_h__ #define __ardour_streamview_h__ #include -#include #include -#include -#include +#include "pbd/signals.h" -#include +#include "ardour/location.h" #include "enums.h" +#include "simplerect.h" +#include "canvas.h" + +namespace Gdk { + class Color; +} namespace ARDOUR { class Route; - class DiskStream; + class Diskstream; class Crossfade; class PeakData; - class AudioRegion; + class Region; class Source; } struct RecBoxInfo { - GtkCanvasItem* rectangle; - jack_nframes_t start; - jack_nframes_t length; + ArdourCanvas::SimpleRect* rectangle; + nframes_t start; + nframes_t length; }; -class PublicEditor; class Selectable; -class AudioTimeAxisView; -class AudioRegionView; -class AudioRegionSelection; +class RouteTimeAxisView; +class RegionView; +class RegionSelection; class CrossfadeView; class Selection; -class StreamView : public SigC::Object +class StreamView : public sigc::trackable, public PBD::ScopedConnectionList { - public: - StreamView (AudioTimeAxisView&); - ~StreamView (); +public: + virtual ~StreamView (); - void set_waveform_shape (WaveformShape); + RouteTimeAxisView& trackview() { return _trackview; } + const RouteTimeAxisView& trackview() const { return _trackview; } - AudioTimeAxisView& trackview() { return _trackview; } + void attach (); void set_zoom_all(); - int set_height (gdouble); int set_position (gdouble x, gdouble y); + virtual int set_height (double); - int set_samples_per_unit (gdouble spp); - gdouble get_samples_per_unit () { return _samples_per_unit; } + virtual int set_samples_per_unit (gdouble spp); + gdouble get_samples_per_unit () { return _samples_per_unit; } - int set_amplitude_above_axis (gdouble app); - gdouble get_amplitude_above_axis () { return _amplitude_above_axis; } + void set_layer_display (LayerDisplay); + LayerDisplay layer_display () const { return _layer_display; } - void set_show_waveforms (bool yn); - void set_show_waveforms_recording (bool yn) { use_rec_regions = yn; } - - GtkCanvasItem* canvas_item() { return canvas_group; } - - SigC::Signal1 AudioRegionViewAdded; + ArdourCanvas::Group* background_group() { return _background_group; } + ArdourCanvas::Group* canvas_item() { return canvas_group; } enum ColorTarget { RegionColor, StreamBaseColor }; - void apply_color (GdkColor&, ColorTarget t); - void set_selected_regionviews (AudioRegionSelection&); - void get_selectables (jack_nframes_t start, jack_nframes_t end, list&); - void get_inverted_selectables (Selection&, list& results); - GdkColor get_region_color () const { return region_color; } + Gdk::Color get_region_color () const { return region_color; } + void apply_color (Gdk::Color&, ColorTarget t); - void foreach_regionview (SigC::Slot1 slot); - void foreach_crossfadeview (void (CrossfadeView::*pmf)(void)); + uint32_t num_selected_regionviews () const; - void attach (); - - void region_layered (AudioRegionView*); - - AudioRegionView* find_view (const ARDOUR::AudioRegion&); + 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, nframes_t, double, double, std::list&); + void get_inverted_selectables (Selection&, std::list& results); + + virtual void update_contents_metrics(boost::shared_ptr) {} + + void add_region_view (boost::weak_ptr); + + void region_layered (RegionView*); + virtual void update_contents_height (); + + virtual void redisplay_diskstream () = 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 show_all_xfades (); - void hide_all_xfades (); - void hide_xfades_involving (AudioRegionView&); - void reveal_xfades_involving (AudioRegionView&); + sigc::signal RegionViewAdded; + sigc::signal HeightChanged; - private: - AudioTimeAxisView& _trackview; +protected: + StreamView (RouteTimeAxisView&, ArdourCanvas::Group* group = NULL); - GtkCanvasItem* canvas_group; - GtkCanvasItem* canvas_rect; /* frame around the whole thing */ + 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 (); - typedef list AudioRegionViewList; - AudioRegionViewList region_views; + 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 ); - typedef list CrossfadeViewList; - CrossfadeViewList crossfade_views; + void display_diskstream (boost::shared_ptr); + virtual void undisplay_diskstream (); + void diskstream_changed (); + void layer_regions (); + + virtual void playlist_switched (boost::weak_ptr); + virtual void playlist_layered (boost::weak_ptr); + + virtual void color_handler () = 0; + + RouteTimeAxisView& _trackview; + bool owns_canvas_group; + ArdourCanvas::Group* _background_group; + ArdourCanvas::Group* canvas_group; + ArdourCanvas::SimpleRect* canvas_rect; /* frame around the whole thing */ + + typedef std::list RegionViewList; + RegionViewList region_views; double _samples_per_unit; - double _amplitude_above_axis; - - SigC::Connection screen_update_connection; - vector rec_rects; - list rec_regions; - bool rec_updating; - bool rec_active; - bool use_rec_regions; - list peak_ready_connections; - jack_nframes_t last_rec_peak_frame; - map rec_peak_ready_map; - - void update_rec_box (); - void transport_changed(); - void rec_enable_changed(void* src = 0); - void sess_rec_enable_changed(); - void setup_rec_box (); - void rec_peak_range_ready (jack_nframes_t start, jack_nframes_t cnt, ARDOUR::Source* src); - void update_rec_regions (); - - void add_region_view (ARDOUR::Region*); - void add_region_view_internal (ARDOUR::Region*, bool wait_for_waves); - void remove_region_view (ARDOUR::Region* ); - void remove_rec_region (ARDOUR::Region*); - void remove_audio_region_view (ARDOUR::AudioRegion* ); - void remove_audio_rec_region (ARDOUR::AudioRegion*); - - void display_diskstream (ARDOUR::DiskStream* ); - void undisplay_diskstream (); - void redisplay_diskstream (); - void diskstream_changed (void* ); - void playlist_state_changed (ARDOUR::Change); - void playlist_changed (ARDOUR::DiskStream* ); - void playlist_modified (); - - bool crossfades_visible; - void add_crossfade (ARDOUR::Crossfade*); - void remove_crossfade (ARDOUR::Crossfade*); - - /* XXX why are these different? */ - - GdkColor region_color; - uint32_t stream_base_color; - - vector playlist_connections; - SigC::Connection playlist_change_connection; + + sigc::connection screen_update_connection; + 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 + + PBD::ScopedConnectionList playlist_connections; + PBD::ScopedConnection playlist_switched_connection; + + ARDOUR::layer_t _layers; + LayerDisplay _layer_display; + + double height; + + PBD::ScopedConnectionList rec_data_ready_connections; + nframes_t last_rec_data_frame; + +private: + void update_coverage_frames (); }; #endif /* __ardour_streamview_h__ */ +