Ardour  8.12
meterbridge.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2013-2019 Robin Gareus <robin@gareus.org>
3  * Copyright (C) 2016 Paul Davis <paul@linuxaudiosystems.com>
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 along
16  * with this program; if not, write to the Free Software Foundation, Inc.,
17  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
18  */
19 #ifndef __ardour_meterbridge_h__
20 #define __ardour_meterbridge_h__
21 
22 #include <glibmm/thread.h>
23 
24 #include <gtkmm/box.h>
25 #include <gtkmm/scrolledwindow.h>
26 #include <gtkmm/label.h>
27 #include <gtkmm/window.h>
28 
29 #include "ardour/ardour.h"
30 #include "ardour/types.h"
31 #include "ardour/session_handle.h"
32 
33 #include "pbd/stateful.h"
34 #include "pbd/signals.h"
35 
37 
38 #include "meter_strip.h"
39 
40 class Meterbridge :
41  public Gtk::Window,
45 {
46 public:
47  static Meterbridge* instance();
49 
51 
52  XMLNode& get_state () const;
53  int set_state (const XMLNode& );
54 
55  void show_window ();
57 
58 private:
61 
62  bool _visible;
65  bool _show_midi;
66 
71 
72  gint start_updating ();
73  gint stop_updating ();
74 
77 
80 
82  void sync_order_keys ();
84  mutable Glib::Threads::Mutex _resync_mutex;
85 
88  bool visible;
89 
91  s = ss;
92  visible = true;
93  }
94  };
95 
97  {
98  bool operator() (struct MeterBridgeStrip ma, struct MeterBridgeStrip mb) {
99  std::shared_ptr<ARDOUR::Route> a = ma.s->route();
100  std::shared_ptr<ARDOUR::Route> b = mb.s->route();
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 ARDOUR::Stripable::Sorter (true) (a, b);
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 
136 
140 
141  void scroll_left ();
142  void scroll_right ();
143 
146 
147  void parameter_changed (std::string const & p);
149 
150  void on_scroll ();
151  sigc::connection scroll_connection;
152 
155 
157 };
158 
159 #endif
std::shared_ptr< ARDOUR::Route > route()
Definition: meter_strip.h:63
static const int32_t default_height
Definition: meterbridge.h:126
ARDOUR::MeterType _mt_left
Definition: meterbridge.h:154
void session_going_away()
void on_size_allocate(Gtk::Allocation &)
This is a default handler for the signal signal_size_allocate().
void fast_update_strips()
int set_state(const XMLNode &)
void add_strips(ARDOUR::RouteList &)
std::list< MeterBridgeStrip > strips
Definition: meterbridge.h:114
sigc::connection scroll_connection
Definition: meterbridge.h:151
Glib::Threads::Mutex _resync_mutex
Definition: meterbridge.h:84
ARDOUR::MeterType _mt_right
Definition: meterbridge.h:154
std::vector< MeterStrip * > _metrics
Definition: meterbridge.h:118
bool _show_midi
Definition: meterbridge.h:65
int cur_max_width
Definition: meterbridge.h:128
void sync_order_keys()
MeterStrip metrics_left
Definition: meterbridge.h:116
void set_session(ARDOUR::Session *)
bool _show_busses
Definition: meterbridge.h:63
bool _visible
Definition: meterbridge.h:62
void show_window()
void on_scroll()
Gtk::HBox meterarea
Definition: meterbridge.h:68
sigc::connection fast_screen_update_connection
Definition: meterbridge.h:75
MeterStrip metrics_right
Definition: meterbridge.h:117
static const int32_t default_width
Definition: meterbridge.h:125
void on_size_request(Gtk::Requisition *)
This is a default handler for the signal signal_size_request().
static const int max_height
Definition: meterbridge.h:127
Gtk::VBox metrics_vpacker_left
Definition: meterbridge.h:120
Gtk::HBox metrics_spacer_left
Definition: meterbridge.h:122
static Meterbridge * instance()
void update_title()
void scroll_right()
Gtk::VBox global_vpacker
Definition: meterbridge.h:70
bool on_configure_event(GdkEventConfigure *conf)
This is a default handler for the signal signal_configure_event().
void resync_order(PBD::PropertyChange what_changed=ARDOUR::Properties::order)
bool on_key_release_event(GdkEventKey *)
This is a default handler for the signal signal_key_release_event().
XMLNode & get_state() const
void set_window_pos_and_size()
void scroll_left()
gint stop_updating()
Gtk::HBox metrics_spacer_right
Definition: meterbridge.h:123
Gtk::HBox global_hpacker
Definition: meterbridge.h:69
static Meterbridge * _instance
Definition: meterbridge.h:60
bool _show_master
Definition: meterbridge.h:64
void on_theme_changed()
Gtk::VBox metrics_vpacker_right
Definition: meterbridge.h:121
void parameter_changed(std::string const &p)
bool on_scroll_event(GdkEventScroll *)
This is a default handler for the signal signal_scroll_event().
gint start_updating()
Gtk::ScrolledWindow scroller
Definition: meterbridge.h:67
bool hide_window(GdkEventAny *ev)
bool on_key_press_event(GdkEventKey *)
This is a default handler for the signal signal_key_press_event().
void remove_strip(MeterStrip *)
Definition: xml++.h:114
PBD::PropertyDescriptor< uint32_t > order
std::list< std::shared_ptr< Route > > RouteList
MeterBridgeStrip(MeterStrip *ss)
Definition: meterbridge.h:90
bool operator()(struct MeterBridgeStrip ma, struct MeterBridgeStrip mb)
Definition: meterbridge.h:98