ardour
meter_strip.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2013 Paul Davis
3  Author: Robin Gareus
4 
5  This program is free software; you can redistribute it and/or modify
6  it under the terms of the GNU General Public License as published by
7  the Free Software Foundation; either version 2 of the License, or
8  (at your option) any later version.
9 
10  This program is distributed in the hope that it will be useful,
11  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  GNU General Public License for more details.
14 
15  You should have received a copy of the GNU General Public License
16  along with this program; if not, write to the Free Software
17  Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19 
20 #ifndef __ardour_meter_strip__
21 #define __ardour_meter_strip__
22 
23 #include <vector>
24 
25 #include <cmath>
26 
27 #include "pbd/stateful.h"
28 
29 #include "ardour/types.h"
30 #include "ardour/ardour.h"
31 #include "route_ui.h"
32 #include "ardour_button.h"
33 
34 #include "level_meter.h"
35 
36 namespace ARDOUR {
37  class Route;
38  class RouteGroup;
39  class Session;
40 }
41 namespace Gtk {
42  class Window;
43  class Style;
44 }
45 
46 class MeterStrip : public Gtk::VBox, public RouteUI
47 {
48  public:
51  ~MeterStrip ();
52 
53  void set_session (ARDOUR::Session* s);
54  void fast_update ();
56 
57  static PBD::Signal1<void,MeterStrip*> CatchDeletion;
58  static PBD::Signal0<void> MetricChanged;
59  static PBD::Signal0<void> ConfigurationChanged;
60 
61  void reset_peak_display ();
64 
66 
68  int get_metric_mode() { return _metricmode; }
69  void set_tick_bar (int);
70  int get_tick_bar() { return _tick_bar; }
71  bool has_midi() { return _has_midi; }
72  bool is_metric_display() { return _strip_type == 0; }
74 
75  protected:
79  void self_delete ();
80 
81  gint meter_metrics_expose (GdkEventExpose *);
82  gint meter_ticks1_expose (GdkEventExpose *);
83  gint meter_ticks2_expose (GdkEventExpose *);
84 
85  void on_theme_changed ();
86 
87  void on_size_allocate (Gtk::Allocation&);
88  void on_size_request (Gtk::Requisition*);
89 
90  /* route UI */
91  void blink_rec_display (bool onoff);
92  std::string state_id() const;
93  void set_button_names ();
94 
95  private:
96  Gtk::VBox mtr_vbox;
97  Gtk::VBox nfo_vbox;
98  Gtk::EventBox mtr_container;
99  Gtk::HSeparator mtr_hsep;
100  Gtk::HBox meterbox;
101  Gtk::HBox spacer;
102  Gtk::HBox namebx;
103  Gtk::VBox namenumberbx;
106  Gtk::DrawingArea meter_metric_area;
107  Gtk::DrawingArea meter_ticks1_area;
108  Gtk::DrawingArea meter_ticks2_area;
109 
110  Gtk::HBox mutebox;
111  Gtk::HBox solobox;
112  Gtk::HBox recbox;
113  Gtk::HBox mon_in_box;
114  Gtk::HBox mon_disk_box;
115 
116  Gtk::Alignment meter_align;
117  Gtk::Alignment peak_align;
118  Gtk::HBox peakbx;
119  Gtk::VBox btnbox;
121 
122  std::vector<ARDOUR::DataType> _types;
124 
125  float max_peak;
126  bool _has_midi;
130 
132 
137 
138  bool peak_button_release (GdkEventButton*);
139 
140  void parameter_changed (std::string const & p);
141  void redraw_metrics ();
142  void update_button_box ();
143  void update_name_box ();
144  void name_changed ();
145 
146  void route_color_changed ();
147 
149  bool level_meter_button_press (GdkEventButton* ev);
150  void popup_level_meter_menu (GdkEventButton* ev);
151  void add_level_meter_type_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, ARDOUR::MeterType);
152 
153  bool name_label_button_release (GdkEventButton* ev);
154  void popup_name_label_menu (GdkEventButton* ev);
155  void add_label_height_item (Gtk::Menu_Helpers::MenuList&, Gtk::RadioMenuItem::Group&, std::string const &, uint32_t);
156 
157  void set_meter_type (ARDOUR::MeterType mode);
158  void set_label_height (uint32_t);
159 };
160 
161 #endif /* __ardour_mixer_strip__ */
LevelMeterHBox * level_meter
Definition: meter_strip.h:131
void update_name_box()
Definition: meter_strip.cc:757
bool _has_midi
Definition: meter_strip.h:126
void redraw_metrics()
Definition: meter_strip.cc:713
void set_session(ARDOUR::Session *s)
Definition: meter_strip.cc:339
int get_metric_mode()
Definition: meter_strip.h:68
ArdourButton name_label
Definition: meter_strip.h:104
Gtk::Alignment meter_align
Definition: meter_strip.h:116
void fast_update()
Definition: meter_strip.cc:413
static PBD::Signal0< void > ConfigurationChanged
Definition: meter_strip.h:59
Gtk::VBox namenumberbx
Definition: meter_strip.h:103
void on_size_request(Gtk::Requisition *)
Definition: meter_strip.cc:508
void self_delete()
Definition: meter_strip.cc:333
Definition: ardour_ui.h:130
void set_meter_type(ARDOUR::MeterType mode)
Definition: meter_strip.cc:927
void reset_group_peak_display(ARDOUR::RouteGroup *)
Definition: meter_strip.cc:681
bool level_meter_button_press(GdkEventButton *ev)
Definition: meter_strip.cc:821
void meter_configuration_changed(ARDOUR::ChanCount)
Definition: meter_strip.cc:437
bool name_label_button_release(GdkEventButton *ev)
Definition: meter_strip.cc:872
static PBD::Signal1< void, MeterStrip * > CatchDeletion
Definition: meter_strip.h:57
void popup_level_meter_menu(GdkEventButton *ev)
Definition: meter_strip.cc:834
void set_button_names()
Definition: meter_strip.cc:365
Gtk::DrawingArea meter_ticks1_area
Definition: meter_strip.h:107
void on_size_allocate(Gtk::Allocation &)
Definition: meter_strip.cc:514
void meter_type_changed(ARDOUR::MeterType)
Definition: meter_strip.cc:943
MeterStrip(ARDOUR::Session *, boost::shared_ptr< ARDOUR::Route >)
Definition: meter_strip.cc:119
Gtk::HBox mon_in_box
Definition: meter_strip.h:113
Gtk::HBox peakbx
Definition: meter_strip.h:118
void strip_property_changed(const PBD::PropertyChange &)
Definition: meter_strip.cc:392
Gtk::HBox solobox
Definition: meter_strip.h:111
void reset_peak_display()
Definition: meter_strip.cc:689
PBD::ScopedConnectionList level_meter_connection
Definition: meter_strip.h:78
void popup_name_label_menu(GdkEventButton *ev)
Definition: meter_strip.cc:886
void reset_route_peak_display(ARDOUR::Route *)
Definition: meter_strip.cc:673
Gtk::VBox mtr_vbox
Definition: meter_strip.h:96
Gtk::DrawingArea meter_metric_area
Definition: meter_strip.h:106
void name_changed()
Definition: meter_strip.cc:798
void blink_rec_display(bool onoff)
Definition: meter_strip.cc:349
bool is_metric_display()
Definition: meter_strip.h:72
Gtk::EventBox mtr_container
Definition: meter_strip.h:98
ARDOUR::MeterType meter_type()
Definition: meter_strip.cc:651
Gtk::HBox recbox
Definition: meter_strip.h:112
void set_metric_mode(int, ARDOUR::MeterType)
Definition: meter_strip.cc:597
MeterType
Definition: types.h:182
Definition: amp.h:29
Gtk::HBox mutebox
Definition: meter_strip.h:110
Gtk::HBox spacer
Definition: meter_strip.h:101
Gtk::Alignment peak_align
Definition: meter_strip.h:117
float max_peak
Definition: meter_strip.h:125
static PBD::Signal0< void > MetricChanged
Definition: meter_strip.h:58
void update_background(ARDOUR::MeterType)
Definition: meter_strip.cc:630
gint meter_ticks2_expose(GdkEventExpose *)
Definition: meter_strip.cc:666
void add_label_height_item(Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, uint32_t)
Definition: meter_strip.cc:907
std::string state_id() const
Definition: meter_strip.cc:355
PBD::ScopedConnectionList meter_route_connections
Definition: meter_strip.h:77
void add_level_meter_type_item(Gtk::Menu_Helpers::MenuList &, Gtk::RadioMenuItem::Group &, std::string const &, ARDOUR::MeterType)
Definition: meter_strip.cc:917
void route_color_changed()
Definition: meter_strip.cc:406
Gtk::HBox mon_disk_box
Definition: meter_strip.h:114
boost::shared_ptr< ARDOUR::Route > route()
Definition: meter_strip.h:55
Gtk::HBox namebx
Definition: meter_strip.h:102
boost::shared_ptr< ARDOUR::Route > _route
Definition: meter_strip.h:76
Gtk::DrawingArea meter_ticks2_area
Definition: meter_strip.h:108
int get_tick_bar()
Definition: meter_strip.h:70
bool _suspend_menu_callbacks
Definition: meter_strip.h:148
Gtk::VBox btnbox
Definition: meter_strip.h:119
gint meter_metrics_expose(GdkEventExpose *)
Definition: meter_strip.cc:587
bool peak_button_release(GdkEventButton *)
Definition: meter_strip.cc:698
void set_meter_type_multi(int, ARDOUR::RouteGroup *, ARDOUR::MeterType)
Definition: meter_strip.cc:953
Gtk::HSeparator mtr_hsep
Definition: meter_strip.h:99
Gtk::VBox nfo_vbox
Definition: meter_strip.h:97
void set_tick_bar(int)
Definition: meter_strip.cc:479
void parameter_changed(std::string const &p)
Definition: meter_strip.cc:768
std::vector< ARDOUR::DataType > _types
Definition: meter_strip.h:122
gint meter_ticks1_expose(GdkEventExpose *)
Definition: meter_strip.cc:659
bool has_midi()
Definition: meter_strip.h:71
int _strip_type
Definition: meter_strip.h:128
void set_label_height(uint32_t)
Definition: meter_strip.cc:936
int _metricmode
Definition: meter_strip.h:129
void update_button_box()
Definition: meter_strip.cc:721
ArdourButton peak_display
Definition: meter_strip.h:120
Gtk::HBox meterbox
Definition: meter_strip.h:100
ARDOUR::MeterType metric_type
Definition: meter_strip.h:123
ArdourButton number_label
Definition: meter_strip.h:105
void on_theme_changed()
Definition: meter_strip.cc:425