ardour
meterbridge.h
Go to the documentation of this file.
1 /*
2  Copyright (C) 2012 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_meterbridge_h__
21 #define __ardour_meterbridge_h__
22 
23 #include <glibmm/thread.h>
24 
25 #include <gtkmm/box.h>
26 #include <gtkmm/scrolledwindow.h>
27 #include <gtkmm/label.h>
28 #include <gtkmm/window.h>
29 
30 #include "ardour/ardour.h"
31 #include "ardour/types.h"
32 #include "ardour/session_handle.h"
33 
34 #include "pbd/stateful.h"
35 #include "pbd/signals.h"
36 
38 
39 #include "meter_strip.h"
40 
41 class Meterbridge :
42  public Gtk::Window,
46 {
47  public:
48  static Meterbridge* instance();
49  ~Meterbridge();
50 
52 
53  XMLNode& get_state (void);
54  int set_state (const XMLNode& );
55 
56  void show_window ();
57  bool hide_window (GdkEventAny *ev);
58 
59  private:
60  Meterbridge ();
62 
63  bool _visible;
66  bool _show_midi;
67 
68  Gtk::ScrolledWindow scroller;
69  Gtk::HBox meterarea;
70  Gtk::HBox global_hpacker;
71  Gtk::VBox global_vpacker;
72 
73  gint start_updating ();
74  gint stop_updating ();
75 
77  void fast_update_strips ();
78 
80  void remove_strip (MeterStrip *);
81 
82  void session_going_away ();
83  void sync_order_keys ();
84  void resync_order ();
85  mutable Glib::Threads::Mutex _resync_mutex;
86 
89  bool visible;
90 
92  s = ss;
93  visible = true;
94  }
95  };
96 
98  bool operator() (struct MeterBridgeStrip ma, struct MeterBridgeStrip mb) {
101  if (a->is_master() || a->is_monitor()) {
102  /* "a" is a special route (master, monitor, etc), and comes
103  * last in the mixer ordering
104  */
105  return false;
106  } else if (b->is_master() || b->is_monitor()) {
107  /* everything comes before b */
108  return true;
109  }
110  return a->order_key () < b->order_key ();
111  }
112  };
113 
114  std::list<MeterBridgeStrip> strips;
115 
118  std::vector<MeterStrip *> _metrics;
119 
124 
125  static const int32_t default_width = 600;
126  static const int32_t default_height = 400;
127  static const int max_height = 1200; // == 1024 + 148 + 16 + 12 see meter_strip.cc
129 
130  void update_title ();
131 
132  // for restoring window geometry.
134 
135  void set_window_pos_and_size ();
136  void get_window_pos_and_size ();
137 
138  bool on_key_press_event (GdkEventKey*);
139  bool on_key_release_event (GdkEventKey*);
140  bool on_scroll_event (GdkEventScroll*);
141 
142  void scroll_left ();
143  void scroll_right ();
144 
145  void on_size_allocate (Gtk::Allocation&);
146  void on_size_request (Gtk::Requisition*);
147 
148  void parameter_changed (std::string const & p);
149  void on_theme_changed ();
150 
151  void on_scroll ();
152  sigc::connection scroll_connection;
153 
156 };
157 
158 #endif
void session_going_away()
Definition: meterbridge.cc:448
ARDOUR::MeterType _mt_left
Definition: meterbridge.h:155
void scroll_right()
Definition: meterbridge.cc:313
MeterStrip metrics_left
Definition: meterbridge.h:116
Gtk::HBox meterarea
Definition: meterbridge.h:69
void parameter_changed(std::string const &p)
Definition: meterbridge.cc:757
void on_size_allocate(Gtk::Allocation &)
Definition: meterbridge.cc:347
bool operator()(struct MeterBridgeStrip ma, struct MeterBridgeStrip mb)
Definition: meterbridge.h:98
gint start_updating()
Definition: meterbridge.cc:546
void fast_update_strips()
Definition: meterbridge.cc:560
void get_window_pos_and_size()
Definition: meterbridge.cc:240
void set_window_pos_and_size()
Definition: meterbridge.cc:231
void on_size_request(Gtk::Requisition *)
Definition: meterbridge.cc:322
void resync_order()
Definition: meterbridge.cc:751
static Meterbridge * _instance
Definition: meterbridge.h:61
XMLNode & get_state(void)
Definition: meterbridge.cc:520
bool _show_master
Definition: meterbridge.h:65
void sync_order_keys()
Definition: meterbridge.cc:614
static Meterbridge * instance()
Definition: meterbridge.cc:75
std::list< MeterBridgeStrip > strips
Definition: meterbridge.h:114
void on_scroll()
Definition: meterbridge.cc:371
void scroll_left()
Definition: meterbridge.cc:304
Gtk::HBox global_hpacker
Definition: meterbridge.h:70
Gtk::HBox metrics_spacer_right
Definition: meterbridge.h:123
MeterStrip metrics_right
Definition: meterbridge.h:117
std::vector< MeterStrip * > _metrics
Definition: meterbridge.h:118
uint32_t order_key() const
Definition: route.cc:306
MeterBridgeStrip(MeterStrip *ss)
Definition: meterbridge.h:91
bool _show_busses
Definition: meterbridge.h:64
MeterType
Definition: types.h:182
int set_state(const XMLNode &)
Definition: meterbridge.cc:466
void on_theme_changed()
Definition: meterbridge.cc:798
Gtk::VBox metrics_vpacker_left
Definition: meterbridge.h:120
static const int32_t default_height
Definition: meterbridge.h:126
Gtk::HBox metrics_spacer_left
Definition: meterbridge.h:122
static const int max_height
Definition: meterbridge.h:127
static const int32_t default_width
Definition: meterbridge.h:125
boost::shared_ptr< ARDOUR::Route > route()
Definition: meter_strip.h:55
bool is_master() const
Definition: route.h:111
Definition: xml++.h:95
void show_window()
Definition: meterbridge.cc:191
Gtk::ScrolledWindow scroller
Definition: meterbridge.h:68
bool on_scroll_event(GdkEventScroll *)
Definition: meterbridge.cc:275
Gtk::VBox metrics_vpacker_right
Definition: meterbridge.h:121
void add_strips(ARDOUR::RouteList &)
Definition: meterbridge.cc:572
sigc::connection fast_screen_update_connection
Definition: meterbridge.h:76
Glib::Threads::Mutex _resync_mutex
Definition: meterbridge.h:85
Gtk::VBox global_vpacker
Definition: meterbridge.h:71
bool _show_midi
Definition: meterbridge.h:66
bool on_key_press_event(GdkEventKey *)
Definition: meterbridge.cc:256
bool hide_window(GdkEventAny *ev)
Definition: meterbridge.cc:247
std::list< boost::shared_ptr< Route > > RouteList
Definition: types.h:532
bool _visible
Definition: meterbridge.h:63
ARDOUR::MeterType _mt_right
Definition: meterbridge.h:155
void update_title()
Definition: meterbridge.cc:202
void remove_strip(MeterStrip *)
Definition: meterbridge.cc:596
sigc::connection scroll_connection
Definition: meterbridge.h:152
gint stop_updating()
Definition: meterbridge.cc:553
bool is_monitor() const
Definition: route.h:112
bool on_key_release_event(GdkEventKey *)
Definition: meterbridge.cc:265
int cur_max_width
Definition: meterbridge.h:128
void set_session(ARDOUR::Session *)
Definition: meterbridge.cc:406