diff options
author | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
---|---|---|
committer | Taybin Rutkin <taybin@taybin.com> | 2005-09-25 18:42:24 +0000 |
commit | 209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch) | |
tree | 9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/streamview.h | |
parent | e4b9aed743fc765219ac775905a221c017c88fba (diff) |
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/streamview.h')
-rw-r--r-- | gtk2_ardour/streamview.h | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/gtk2_ardour/streamview.h b/gtk2_ardour/streamview.h new file mode 100644 index 0000000000..8d9162c8ab --- /dev/null +++ b/gtk2_ardour/streamview.h @@ -0,0 +1,171 @@ +/* + Copyright (C) 2001 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + 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 <list> +#include <map> +#include <cmath> + +#include <gtk--.h> +#include <gtk-canvas.h> + +#include <ardour/location.h> +#include "enums.h" + +namespace ARDOUR { + class Route; + class DiskStream; + class Crossfade; + class PeakData; + class AudioRegion; + class Source; +} + +struct RecBoxInfo { + GtkCanvasItem* rectangle; + jack_nframes_t start; + jack_nframes_t length; +}; + +class PublicEditor; +class Selectable; +class AudioTimeAxisView; +class AudioRegionView; +class AudioRegionSelection; +class CrossfadeView; +class Selection; + +class StreamView : public SigC::Object +{ + public: + StreamView (AudioTimeAxisView&); + ~StreamView (); + + void set_waveform_shape (WaveformShape); + + AudioTimeAxisView& trackview() { return _trackview; } + + void set_zoom_all(); + + int set_height (gdouble); + int set_position (gdouble x, gdouble y); + + 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_show_waveforms (bool yn); + void set_show_waveforms_recording (bool yn) { use_rec_regions = yn; } + + GtkCanvasItem* canvas_item() { return canvas_group; } + + SigC::Signal1<void,AudioRegionView*> AudioRegionViewAdded; + + 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<Selectable* >&); + void get_inverted_selectables (Selection&, list<Selectable* >& results); + GdkColor get_region_color () const { return region_color; } + + void foreach_regionview (SigC::Slot1<void,AudioRegionView*> slot); + void foreach_crossfadeview (void (CrossfadeView::*pmf)(void)); + + void attach (); + + void region_layered (AudioRegionView*); + + AudioRegionView* find_view (const ARDOUR::AudioRegion&); + + void show_all_xfades (); + void hide_all_xfades (); + void hide_xfades_involving (AudioRegionView&); + void reveal_xfades_involving (AudioRegionView&); + + private: + AudioTimeAxisView& _trackview; + + GtkCanvasItem* canvas_group; + GtkCanvasItem* canvas_rect; /* frame around the whole thing */ + + typedef list<AudioRegionView* > AudioRegionViewList; + AudioRegionViewList region_views; + + typedef list<CrossfadeView*> CrossfadeViewList; + CrossfadeViewList crossfade_views; + + double _samples_per_unit; + double _amplitude_above_axis; + + SigC::Connection screen_update_connection; + vector<RecBoxInfo> rec_rects; + list<ARDOUR::AudioRegion* > rec_regions; + bool rec_updating; + bool rec_active; + bool use_rec_regions; + list<SigC::Connection> peak_ready_connections; + jack_nframes_t last_rec_peak_frame; + map<ARDOUR::Source*, bool> 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<SigC::Connection> playlist_connections; + SigC::Connection playlist_change_connection; +}; + +#endif /* __ardour_streamview_h__ */ |