X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fregionview.h;h=29c5817a251b1d0dc046c35cc301ab087dbb089f;hb=60454cc8dc1ca5e1819b853b55916d52497d495c;hp=ee42e6209ffd0699d6ba85dfde5512c279aeeeb7;hpb=54a80321064aa543023cd0b224ba9d433520983f;p=ardour.git diff --git a/gtk2_ardour/regionview.h b/gtk2_ardour/regionview.h index ee42e6209f..29c5817a25 100644 --- a/gtk2_ardour/regionview.h +++ b/gtk2_ardour/regionview.h @@ -1,5 +1,5 @@ /* - Copyright (C) 2001-2004 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,16 +14,14 @@ 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 __gtk_ardour_region_view_h__ #define __gtk_ardour_region_view_h__ #include -#include -#include + +#include #include #include #include @@ -33,41 +31,35 @@ #include "enums.h" #include "waveview.h" #include "canvas.h" +#include "color.h" -namespace ARDOUR { - class AudioRegion; - class PeakData; -}; - -class AudioTimeAxisView; -class AudioRegionGainLine; -class AudioRegionEditor; +class TimeAxisView; +class RegionEditor; class GhostRegion; class AutomationTimeAxisView; -class AudioRegionView : public TimeAxisViewItem +class RegionView : public TimeAxisViewItem { public: - AudioRegionView (ArdourCanvas::Group *, - AudioTimeAxisView&, - ARDOUR::AudioRegion&, - double initial_samples_per_unit, - double amplitude_above_axis, - Gdk::Color& base_color, - bool wait_for_waves); - ~AudioRegionView (); - - ARDOUR::AudioRegion& region; // ok, let 'em have it - bool is_valid() const { return valid; } + RegionView (ArdourCanvas::Group* parent, + TimeAxisView& time_view, + ARDOUR::Region& region, + double samples_per_unit, + Gdk::Color& basic_color); + + ~RegionView (); + + virtual void init (Gdk::Color& base_color, bool wait_for_waves); + + ARDOUR::Region& region() const { return _region; } + + bool is_valid() const { return valid; } void set_valid (bool yn) { valid = yn; } - std::string get_item_name(); - void set_height (double); + virtual void set_height (double) = 0; void set_samples_per_unit (double); bool set_duration (jack_nframes_t, void*); - void set_amplitude_above_axis (gdouble spp); - void move (double xdelta, double ydelta); void raise (); @@ -76,84 +68,60 @@ class AudioRegionView : public TimeAxisViewItem void lower_to_bottom (); bool set_position(jack_nframes_t pos, void* src, double* delta = 0); - - void temporarily_hide_envelope (); // dangerous - void unhide_envelope (); // dangerous - - void set_envelope_visible (bool); - void set_waveform_visible (bool yn); - void set_waveform_shape (WaveformShape); - bool waveform_rectified() const { return _flags & WaveformRectified; } - bool waveform_visible() const { return _flags & WaveformVisible; } - bool envelope_visible() const { return _flags & EnvelopeVisible; } - - void show_region_editor (); + virtual void show_region_editor () = 0; void hide_region_editor(); - void add_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); - void remove_gain_point_event (ArdourCanvas::Item *item, GdkEvent *event); - - AudioRegionGainLine* get_gain_line() const { return gain_line; } - void region_changed (ARDOUR::Change); - void envelope_active_changed (); - - static sigc::signal AudioRegionViewGoingAway; - sigc::signal GoingAway; - - GhostRegion* add_ghost (AutomationTimeAxisView&); - void remove_ghost (GhostRegion*); - void reset_fade_in_shape_width (jack_nframes_t); - void reset_fade_out_shape_width (jack_nframes_t); - void set_fade_in_active (bool); - void set_fade_out_active (bool); + virtual GhostRegion* add_ghost (AutomationTimeAxisView&) = 0; + void remove_ghost (GhostRegion*); uint32_t get_fill_color (); - virtual void entered (); - virtual void exited (); - - private: + virtual void entered () {} + virtual void exited () {} + + static sigc::signal RegionViewGoingAway; + sigc::signal GoingAway; + + protected: + + /** Allows derived types to specify their visibility requirements + * to the TimeAxisViewItem parent class + */ + RegionView (ArdourCanvas::Group *, + TimeAxisView&, + ARDOUR::Region&, + double initial_samples_per_unit, + Gdk::Color& basic_color, + TimeAxisViewItem::Visibility); + + ARDOUR::Region& _region; + enum Flags { EnvelopeVisible = 0x1, WaveformVisible = 0x4, WaveformRectified = 0x8 }; - vector waves; /* waveviews */ - vector tmp_waves; /* see ::create_waves()*/ - ArdourCanvas::Polygon* sync_mark; /* polgyon for sync position */ - ArdourCanvas::Text* no_wave_msg; /* text */ - ArdourCanvas::Line* zero_line; /* simpleline */ - ArdourCanvas::Polygon* fade_in_shape; /* polygon */ - ArdourCanvas::Polygon* fade_out_shape; /* polygon */ - ArdourCanvas::SimpleRect* fade_in_handle; /* simplerect */ - ArdourCanvas::SimpleRect* fade_out_handle; /* simplerect */ + ArdourCanvas::Polygon* sync_mark; ///< polgyon for sync position + ArdourCanvas::Text* no_wave_msg; ///< text - AudioRegionGainLine* gain_line; - AudioRegionEditor *editor; + RegionEditor *editor; vector control_points; - double _amplitude_above_axis; double current_visible_sync_position; uint32_t _flags; uint32_t fade_color; - bool valid; /* see StreamView::redisplay_diskstream() */ - double _pixel_width; - double _height; + bool valid; ///< see StreamView::redisplay_diskstream() + double _pixel_width; + double _height; bool in_destructor; bool wait_for_waves; - - void reset_fade_shapes (); - void reset_fade_in_shape (); - void reset_fade_out_shape (); - void fade_in_changed (); - void fade_out_changed (); - void fade_in_active_changed (); - void fade_out_active_changed (); + + sigc::connection peaks_ready_connection; void region_resized (ARDOUR::Change); void region_moved (void *); @@ -166,24 +134,19 @@ class AudioRegionView : public TimeAxisViewItem void region_scale_amplitude_changed (); static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*); - void lock_toggle (); + void lock_toggle (); - void create_waves (); - void create_one_wave (uint32_t, bool); - void manage_zero_line (); void peaks_ready_handler (uint32_t); void reset_name (gdouble width); - void set_flags (XMLNode *); - void store_flags (); void set_colors (); void compute_colors (Gdk::Color&); - void set_frame_color (); + virtual void set_frame_color (); void reset_width_dependent_items (double pixel_width); - void set_waveview_data_src(); - vector wave_caches; vector ghosts; + + virtual void color_handler (ColorID, uint32_t) {} }; #endif /* __gtk_ardour_region_view_h__ */