ardour
region_view.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2001-2006 Paul Davis
3 
4  This program is free software; you can redistribute it and/or modify
5  it under the terms of the GNU General Public License as published by
6  the Free Software Foundation; either version 2 of the License, or
7  (at your option) any later version.
8 
9  This program is distributed in the hope that it will be useful,
10  but WITHOUT ANY WARRANTY; without even the implied warranty of
11  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12  GNU General Public License for more details.
13 
14  You should have received a copy of the GNU General Public License
15  along with this program; if not, write to the Free Software
16  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17 */
18 
19 #ifndef __gtk_ardour_region_view_h__
20 #define __gtk_ardour_region_view_h__
21 
22 #ifdef interface
23 #undef interface
24 #endif
25 
26 #include <vector>
27 
28 #include <sigc++/signal.h>
29 #include "ardour/region.h"
31 
32 #include "canvas/fwd.h"
33 
34 #include "time_axis_view_item.h"
35 #include "automation_line.h"
36 #include "enums.h"
37 
38 class TimeAxisView;
39 class RegionEditor;
40 class GhostRegion;
43 
44 namespace ArdourCanvas {
45  class Polygon;
46  class Text;
47 }
48 
50 {
51  public:
52  RegionView (ArdourCanvas::Container* parent,
53  TimeAxisView& time_view,
55  double samples_per_pixel,
56  uint32_t base_color,
57  bool automation = false);
58 
59  RegionView (const RegionView& other);
60  RegionView (const RegionView& other, boost::shared_ptr<ARDOUR::Region> other_region);
61 
62  ~RegionView ();
63 
64  virtual void init (bool wait_for_data);
65 
67 
68  bool is_valid() const { return valid; }
69 
70  void set_valid (bool yn) { valid = yn; }
71 
72  virtual void set_height (double);
73  virtual void set_samples_per_pixel (double);
74  virtual bool set_duration (framecnt_t, void*);
75 
76  void move (double xdelta, double ydelta);
77 
78  void raise_to_top ();
79  void lower_to_bottom ();
80 
81  bool set_position(framepos_t pos, void* src, double* delta = 0);
82 
83  virtual void show_region_editor ();
84  void hide_region_editor ();
85 
86  virtual void region_changed (const PBD::PropertyChange&);
87 
88  uint32_t get_fill_color () const;
89 
90  virtual GhostRegion* add_ghost (TimeAxisView&) = 0;
92  void remove_ghost (GhostRegion*);
93 
94  virtual void entered () {}
95  virtual void exited () {}
96 
97  virtual void enable_display(bool yn) { _enable_display = yn; }
98  virtual void update_coverage_frames (LayerDisplay);
99 
100  static PBD::Signal1<void,RegionView*> RegionViewGoingAway;
101 
103  virtual void trim_front_starting () {}
104 
105  bool trim_front (framepos_t, bool);
106 
108  virtual void trim_front_ending () {}
109 
110  bool trim_end (framepos_t, bool);
112  virtual void thaw_after_trim ();
113 
114  void set_silent_frames (const ARDOUR::AudioIntervalResult&, double threshold);
115  void drop_silent_frames ();
116  void hide_silent_frames ();
117 
118  struct PositionOrder {
119  bool operator()(const RegionView* a, const RegionView* b) {
120  return a->region()->position() < b->region()->position();
121  }
122  };
123 
125 
126  protected:
127 
131  RegionView (ArdourCanvas::Container *,
132  TimeAxisView&,
134  double samples_per_pixel,
135  uint32_t basic_color,
136  bool recording,
138 
139  bool canvas_group_event (GdkEvent*);
140 
141  virtual void region_resized (const PBD::PropertyChange&);
142  virtual void region_muted ();
143  void region_locked ();
144  void region_opacity ();
145  virtual void region_renamed ();
146  void region_sync_changed ();
147 
148  std::string make_name () const;
149 
150  static gint _lock_toggle (ArdourCanvas::Item*, GdkEvent*, void*);
151  void lock_toggle ();
152 
153  virtual void set_colors ();
154  virtual void set_sync_mark_color ();
155  virtual void reset_width_dependent_items (double pixel_width);
156 
157  virtual void color_handler () {}
158 
160 
161  ArdourCanvas::Polygon* sync_mark;
162  ArdourCanvas::Line* sync_line;
163 
165 
166  std::vector<ControlPoint *> control_points;
168 
169  bool valid;
171  double _pixel_width;
173 
175 
176  std::vector<GhostRegion*> ghosts;
177 
182  std::list<ArdourCanvas::Rectangle*> _coverage_frames;
183 
186  std::list<ArdourCanvas::Rectangle*> _silent_frames;
189  std::list<ArdourCanvas::Rectangle*> _silent_threshold_frames;
192  ArdourCanvas::Text* _silence_text;
193 };
194 
195 #endif /* __gtk_ardour_region_view_h__ */
void set_silent_frames(const ARDOUR::AudioIntervalResult &, double threshold)
Definition: region_view.cc:226
static PBD::Signal1< void, RegionView * > RegionViewGoingAway
Definition: region_view.h:100
void set_valid(bool yn)
Definition: region_view.h:70
void remove_ghost_in(TimeAxisView &)
Definition: region_view.cc:704
virtual void region_resized(const PBD::PropertyChange &)
Definition: region_view.cc:405
bool in_destructor
Definition: region_view.h:172
boost::shared_ptr< ARDOUR::Region > _region
Definition: region_view.h:159
virtual void exited()
Definition: region_view.h:95
virtual void trim_front_ending()
Definition: region_view.h:108
ArdourCanvas::Polygon * sync_mark
polgyon for sync position
Definition: region_view.h:161
virtual void color_handler()
Definition: region_view.h:157
bool _enable_display
see StreamView::redisplay_diskstream()
Definition: region_view.h:170
bool trim_end(framepos_t, bool)
Definition: region_view.cc:880
std::list< std::pair< frameoffset_t, frameoffset_t > > AudioIntervalResult
Definition: types.h:83
virtual void entered()
Definition: region_view.h:94
void drop_silent_frames()
Definition: region_view.cc:336
std::vector< ControlPoint * > control_points
Definition: region_view.h:166
std::string make_name() const
Definition: region_view.cc:566
virtual GhostRegion * add_ghost(TimeAxisView &)=0
virtual void update_coverage_frames(LayerDisplay)
Definition: region_view.cc:760
std::list< ArdourCanvas::Rectangle * > _coverage_frames
Definition: region_view.h:182
bool set_position(framepos_t pos, void *src, double *delta=0)
Definition: region_view.cc:464
void region_opacity()
Definition: region_view.cc:446
virtual void enable_display(bool yn)
Definition: region_view.h:97
void move(double xdelta, double ydelta)
Definition: region_view.cc:677
double current_visible_sync_position
Definition: region_view.h:167
double _pixel_width
Definition: region_view.h:171
bool canvas_group_event(GdkEvent *)
Definition: region_view.cc:217
int64_t framecnt_t
Definition: types.h:76
std::list< ArdourCanvas::Rectangle * > _silent_threshold_frames
Definition: region_view.h:189
boost::shared_ptr< ARDOUR::Region > region() const
Definition: region_view.h:66
void lower_to_bottom()
Definition: region_view.cc:458
void raise_to_top()
Definition: region_view.cc:452
virtual void init(bool wait_for_data)
Definition: region_view.cc:149
bool valid
see StreamView::redisplay_diskstream()
Definition: region_view.h:169
ARDOUR::frameoffset_t snap_frame_to_frame(ARDOUR::frameoffset_t) const
Definition: region_view.cc:945
virtual void region_renamed()
Definition: region_view.cc:596
virtual void thaw_after_trim()
Definition: region_view.cc:920
void lock_toggle()
Definition: region_view.cc:362
static gint _lock_toggle(ArdourCanvas::Item *, GdkEvent *, void *)
Definition: region_view.cc:348
uint32_t get_fill_color() const
Definition: region_view.cc:532
virtual void region_muted()
Definition: region_view.cc:439
virtual void set_sync_mark_color()
Definition: region_view.cc:521
void move_contents(ARDOUR::frameoffset_t)
Definition: region_view.cc:931
int64_t frameoffset_t
Definition: types.h:71
RegionView(ArdourCanvas::Container *parent, TimeAxisView &time_view, boost::shared_ptr< ARDOUR::Region > region, double samples_per_pixel, uint32_t base_color, bool automation=false)
Definition: region_view.cc:67
virtual void show_region_editor()
Definition: region_view.cc:547
virtual void reset_width_dependent_items(double pixel_width)
Definition: region_view.cc:432
void hide_silent_frames()
Definition: region_view.cc:327
framepos_t position() const
Definition: region.h:112
void remove_ghost(GhostRegion *)
Definition: region_view.cc:715
bool operator()(const RegionView *a, const RegionView *b)
Definition: region_view.h:119
bool trim_front(framepos_t, bool)
Definition: region_view.cc:844
bool is_valid() const
Definition: region_view.h:68
virtual bool set_duration(framecnt_t, void *)
Definition: region_view.cc:500
virtual void set_height(double)
Definition: region_view.cc:730
std::list< ArdourCanvas::Rectangle * > _silent_frames
Definition: region_view.h:186
std::vector< GhostRegion * > ghosts
Definition: region_view.h:176
virtual void trim_front_starting()
Definition: region_view.h:103
virtual void set_samples_per_pixel(double)
Definition: region_view.cc:487
virtual void region_changed(const PBD::PropertyChange &)
Definition: region_view.cc:368
void region_locked()
Definition: region_view.cc:398
LayerDisplay
Definition: enums.h:34
void region_sync_changed()
Definition: region_view.cc:606
bool wait_for_data
Definition: region_view.h:174
LIBGTKMM2EXT_API int pixel_width(const std::string &str, Pango::FontDescription &font)
void hide_region_editor()
Definition: region_view.cc:558
ArdourCanvas::Text * _silence_text
Definition: region_view.h:192
int64_t framepos_t
ArdourCanvas::Line * sync_line
polgyon for sync position
Definition: region_view.h:162
virtual void set_colors()
Definition: region_view.cc:514
RegionEditor * editor
Definition: region_view.h:164