summaryrefslogtreecommitdiff
path: root/gtk2_ardour/streamview.h
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/streamview.h
parente4b9aed743fc765219ac775905a221c017c88fba (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.h171
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__ */