Ardour  8.12
marker.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2005-2017 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2005 Taybin Rutkin <taybin@taybin.com>
4  * Copyright (C) 2008-2011 David Robillard <d@drobilla.net>
5  * Copyright (C) 2009-2011 Carl Hetherington <carl@carlh.net>
6  * Copyright (C) 2014-2017 Robin Gareus <robin@gareus.org>
7  * Copyright (C) 2016-2017 Nick Mainsbridge <mainsbridge@gmail.com>
8  *
9  * This program is free software; you can redistribute it and/or modify
10  * it under the terms of the GNU General Public License as published by
11  * the Free Software Foundation; either version 2 of the License, or
12  * (at your option) any later version.
13  *
14  * This program is distributed in the hope that it will be useful,
15  * but WITHOUT ANY WARRANTY; without even the implied warranty of
16  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17  * GNU General Public License for more details.
18  *
19  * You should have received a copy of the GNU General Public License along
20  * with this program; if not, write to the Free Software Foundation, Inc.,
21  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
22  */
23 
24 #ifndef __gtk_ardour_marker_h__
25 #define __gtk_ardour_marker_h__
26 
27 #include <string>
28 #include <glib.h>
29 
30 #include <sigc++/signal.h>
31 
32 #include "ardour/ardour.h"
33 #include "pbd/signals.h"
34 
35 #include "canvas/fwd.h"
36 #include "canvas/types.h"
37 #include "canvas/circle.h"
38 #include "canvas/text.h"
39 
40 namespace Temporal {
41  class Point;
42  class TempoPoint;
43  class MeterPoint;
44  class MusicTimePoint;
45 }
46 
47 class PublicEditor;
48 class RegionView;
49 class TempoCurve;
50 
55 class ArdourMarker : public sigc::trackable
56 {
57 public:
58  enum Type {
73  Cue,
76  };
77 
78 
79  ArdourMarker (PublicEditor& editor, ArdourCanvas::Item &, std::string const& color_name, std::string const& text, Type,
80  Temporal::timepos_t const & position, bool handle_events = true, RegionView* rv = nullptr, bool use_tooltip = true);
81 
82  virtual ~ArdourMarker ();
83 
84  static PBD::Signal1<void,ArdourMarker*> CatchDeletion;
85 
86  static void setup_sizes (const double timebar_height);
87 
89 
90  void set_selected (bool);
91  void set_entered (bool);
92  void set_show_line (bool);
93  void set_line_height (double);
94 
95  virtual void reposition ();
96  virtual void set_position (Temporal::timepos_t const &);
97  void set_name (const std::string&, const std::string & tooltip = std::string());
98  void set_color (std::string const& color_name);
99  void set_points_color (std::string const& color_name);
100  void setup_line ();
101 
103 
105  void reparent (ArdourCanvas::Item & parent);
106 
107  void hide ();
108  void show ();
109 
110  Type type () { return _type; }
111 
112  void set_left_label_limit (double);
113  void set_right_label_limit (double);
114 
115  std::string name () const {
116  return _name;
117  }
118 
119  bool label_on_left () const;
120 
121  /* this will be null for all global markers; non-null for region markers */
122 
123  RegionView* region_view() const { return _region_view; }
124 
125  /* this will be -1 for all non-cue markers; or cue_index for cue markers */
126 
127  void set_cue_index(int c) { _cue_index = c; set_name(_name); }
128  int cue_index() const { return _cue_index; }
129 
130 protected:
132 
133  Pango::FontDescription name_font;
134 
143 
144  std::string _name;
147  double _shift;
151  bool _selected;
152  bool _entered;
153  bool _shown;
156 
157  std::string _color;
158  std::string _points_color;
159 
163  double _line_height;
164 
166 
168 
169  void setup_line_x ();
171 
172 private:
173  /* disallow copy construction */
176 
177  static uint32_t color (std::string const&);
178  void apply_color ();
179  void color_handler ();
180 };
181 
183 {
184  public:
185  SelectionMarker (PublicEditor& ed, ArdourCanvas::Item& parent, std::string const& color_name, Type);
186 };
187 
189 {
190  public:
191  MetricMarker (PublicEditor& ed, ArdourCanvas::Item& parent, std::string const& color_name, const std::string& annotation, Type type, Temporal::timepos_t const & pos, bool handle_events);
192  virtual Temporal::Point const & point() const = 0;
193  virtual void update() = 0;
194 };
195 
196 class TempoMarker : public MetricMarker
197 {
198  public:
199  TempoMarker (PublicEditor& editor, ArdourCanvas::Item & parent, std::string const& color_name, const std::string& text, Temporal::TempoPoint const &, samplepos_t sample, uint32_t curve_color);
201 
203  void update ();
204  void reposition ();
205 
206  Temporal::TempoPoint const & tempo() const { return *_tempo; }
207  Temporal::Point const & point() const;
208 
210 
211  private:
214 };
215 
216 class MeterMarker : public MetricMarker
217 {
218  public:
219  MeterMarker (PublicEditor& editor, ArdourCanvas::Item &, std::string const& color_name, const std::string& text, Temporal::MeterPoint const &);
221 
223  void update ();
224 
225  Temporal::MeterPoint const & meter() const { return *_meter; }
226  Temporal::Point const & point() const;
227 
228  private:
230 };
231 
232 class BBTMarker : public MetricMarker
233 {
234  public:
235  BBTMarker (PublicEditor& editor, ArdourCanvas::Item &, std::string const& color_name, Temporal::MusicTimePoint const &);
237 
239  void update ();
241 
242  Temporal::MusicTimePoint const & mt_point() const { return *_point; }
243  Temporal::Point const & point() const;
244 
245  private:
249 };
250 
251 #endif /* __gtk_ardour_marker_h__ */
void set_show_line(bool)
virtual void set_position(Temporal::timepos_t const &)
void set_right_label_limit(double)
static PBD::Signal1< void, ArdourMarker * > CatchDeletion
Definition: marker.h:84
void reparent(ArdourCanvas::Item &parent)
ArdourCanvas::Polygon * _pmark
Definition: marker.h:138
ArdourCanvas::Rectangle * _name_flag
Definition: marker.h:142
@ BBTPosition
Definition: marker.h:62
@ SessionStart
session start
Definition: marker.h:63
@ SelectionStart
Definition: marker.h:74
@ SessionEnd
session end
Definition: marker.h:64
@ SelectionEnd
Definition: marker.h:75
@ PunchOut
Definition: marker.h:71
@ RegionCue
Definition: marker.h:72
@ RangeStart
Definition: marker.h:66
@ LoopStart
Definition: marker.h:68
@ RangeEnd
Definition: marker.h:67
double _left_label_limit
the number of pixels available to the left of this marker for a label
Definition: marker.h:160
ArdourCanvas::Item * get_parent()
Definition: marker.h:104
bool _entered
Definition: marker.h:152
void color_handler()
PublicEditor & editor
Definition: marker.h:131
bool _shown
Definition: marker.h:153
double _label_offset
Definition: marker.h:162
void set_entered(bool)
std::string name() const
Definition: marker.h:115
void setup_line()
Type _type
Definition: marker.h:148
virtual void reposition()
int name_descent
Definition: marker.h:150
ArdourMarker(PublicEditor &editor, ArdourCanvas::Item &, std::string const &color_name, std::string const &text, Type, Temporal::timepos_t const &position, bool handle_events=true, RegionView *rv=nullptr, bool use_tooltip=true)
std::string _name
Definition: marker.h:144
static void setup_sizes(const double timebar_height)
bool _selected
Definition: marker.h:151
void setup_name_display()
bool _line_shown
Definition: marker.h:154
ArdourCanvas::Item * group
Definition: marker.h:136
void set_left_label_limit(double)
int cue_index() const
Definition: marker.h:128
void setup_line_x()
std::string _points_color
Definition: marker.h:158
void set_line_height(double)
Type type()
Definition: marker.h:110
void set_name(const std::string &, const std::string &tooltip=std::string())
bool _use_tooltip
Definition: marker.h:155
void set_points_color(std::string const &color_name)
ArdourMarker(ArdourMarker const &)
Pango::FontDescription name_font
Definition: marker.h:133
ARDOUR::timepos_t _position
Definition: marker.h:146
ArdourMarker & operator=(ArdourMarker const &)
RegionView * _region_view
Definition: marker.h:165
void set_selected(bool)
ArdourCanvas::Item & the_item() const
void set_cue_index(int c)
Definition: marker.h:127
RegionView * region_view() const
Definition: marker.h:123
static uint32_t color(std::string const &)
void set_color(std::string const &color_name)
double _line_height
Definition: marker.h:163
std::string _color
Definition: marker.h:157
ArdourCanvas::Item * _parent
Definition: marker.h:135
ArdourCanvas::Text * _name_item
Definition: marker.h:139
ArdourCanvas::Line * _track_canvas_line
Definition: marker.h:141
double _shift
Definition: marker.h:147
double unit_position
Definition: marker.h:145
int name_height
Definition: marker.h:149
void apply_color()
virtual ~ArdourMarker()
ARDOUR::timepos_t position() const
Definition: marker.h:102
bool label_on_left() const
int _cue_index
Definition: marker.h:167
ArdourCanvas::Circle * _pcue
Definition: marker.h:137
double _right_label_limit
the number of pixels available to the right of this marker for a label
Definition: marker.h:161
ArdourCanvas::Points * points
Definition: marker.h:140
void set_position(Temporal::timepos_t const &)
BBTMarker(PublicEditor &editor, ArdourCanvas::Item &, std::string const &color_name, Temporal::MusicTimePoint const &)
Temporal::Point const & point() const
Temporal::MusicTimePoint const * _point
Definition: marker.h:246
MeterMarker * meter_marker
Definition: marker.h:248
TempoMarker * tempo_marker
Definition: marker.h:247
Temporal::MusicTimePoint const & mt_point() const
Definition: marker.h:242
void update()
void reset_point(Temporal::MusicTimePoint const &)
Temporal::Point const & point() const
void update()
MeterMarker(PublicEditor &editor, ArdourCanvas::Item &, std::string const &color_name, const std::string &text, Temporal::MeterPoint const &)
void reset_meter(Temporal::MeterPoint const &m)
Temporal::MeterPoint const * _meter
Definition: marker.h:229
Temporal::MeterPoint const & meter() const
Definition: marker.h:225
MetricMarker(PublicEditor &ed, ArdourCanvas::Item &parent, std::string const &color_name, const std::string &annotation, Type type, Temporal::timepos_t const &pos, bool handle_events)
virtual Temporal::Point const & point() const =0
virtual void update()=0
Representation of the interface of the Editor class.
SelectionMarker(PublicEditor &ed, ArdourCanvas::Item &parent, std::string const &color_name, Type)
void reset_tempo(Temporal::TempoPoint const &t)
TempoMarker(PublicEditor &editor, ArdourCanvas::Item &parent, std::string const &color_name, const std::string &text, Temporal::TempoPoint const &, samplepos_t sample, uint32_t curve_color)
Temporal::Point const & point() const
Temporal::TempoPoint const * _tempo
Definition: marker.h:212
TempoCurve * _curve
Definition: marker.h:213
void update()
TempoCurve & curve()
void reposition()
Temporal::TempoPoint const & tempo() const
Definition: marker.h:206
Temporal::samplepos_t samplepos_t
std::vector< Duple > Points