Ardour  9.2-79-gba93f2fe52
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 #pragma once
20 
21 #include <ytkmm/box.h>
22 #include <ytkmm/scrolledwindow.h>
23 #include <ytkmm/label.h>
24 #include <ytkmm/window.h>
25 
26 #include "ardour/ardour.h"
27 #include "ardour/types.h"
28 #include "ardour/session_handle.h"
29 
30 #include "pbd/stateful.h"
31 #include "pbd/signals.h"
32 
34 
35 #include "meter_strip.h"
36 
37 class Meterbridge :
38  public Gtk::Window,
42 {
43 public:
44  static Meterbridge* instance();
46 
48 
49  XMLNode& get_state () const;
50  int set_state (const XMLNode& );
51 
52  void show_window ();
54 
55 private:
58 
59  bool _visible;
62  bool _show_midi;
63 
68 
69  gint start_updating ();
70  gint stop_updating ();
71 
74 
77 
79  void sync_order_keys ();
82 
85  bool visible;
86 
88  s = ss;
89  visible = true;
90  }
91  };
92 
94  {
95  bool operator() (struct MeterBridgeStrip ma, struct MeterBridgeStrip mb) {
96  std::shared_ptr<ARDOUR::Route> a = ma.s->route();
97  std::shared_ptr<ARDOUR::Route> b = mb.s->route();
98  if (a->is_master() || a->is_monitor()) {
99  /* "a" is a special route (master, monitor, etc), and comes
100  * last in the mixer ordering
101  */
102  return false;
103  } else if (b->is_master() || b->is_monitor()) {
104  /* everything comes before b */
105  return true;
106  }
107  return ARDOUR::Stripable::Sorter (true) (a, b);
108  }
109  };
110 
111  std::list<MeterBridgeStrip> strips;
112 
115  std::vector<MeterStrip *> _metrics;
116 
121 
122  static const int32_t default_width = 600;
123  static const int32_t default_height = 400;
124  static const int max_height = 1200; // == 1024 + 148 + 16 + 12 see meter_strip.cc
126 
127  void update_title ();
128 
129  // for restoring window geometry.
131 
133 
137 
138  void scroll_left ();
139  void scroll_right ();
140 
143 
144  void parameter_changed (std::string const & p);
146 
147  void on_scroll ();
148  sigc::connection scroll_connection;
149 
152 
154 };
155 
std::shared_ptr< ARDOUR::Route > route()
Definition: meter_strip.h:63
static const int32_t default_height
Definition: meterbridge.h:123
ARDOUR::MeterType _mt_left
Definition: meterbridge.h:151
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:111
sigc::connection scroll_connection
Definition: meterbridge.h:148
ARDOUR::MeterType _mt_right
Definition: meterbridge.h:151
std::vector< MeterStrip * > _metrics
Definition: meterbridge.h:115
bool _show_midi
Definition: meterbridge.h:62
int cur_max_width
Definition: meterbridge.h:125
void sync_order_keys()
MeterStrip metrics_left
Definition: meterbridge.h:113
void set_session(ARDOUR::Session *)
bool _show_busses
Definition: meterbridge.h:60
bool _visible
Definition: meterbridge.h:59
void show_window()
void on_scroll()
Gtk::HBox meterarea
Definition: meterbridge.h:65
sigc::connection fast_screen_update_connection
Definition: meterbridge.h:72
MeterStrip metrics_right
Definition: meterbridge.h:114
static const int32_t default_width
Definition: meterbridge.h:122
void on_size_request(Gtk::Requisition *)
This is a default handler for the signal signal_size_request().
PBD::Mutex _resync_mutex
Definition: meterbridge.h:81
static const int max_height
Definition: meterbridge.h:124
Gtk::VBox metrics_vpacker_left
Definition: meterbridge.h:117
Gtk::HBox metrics_spacer_left
Definition: meterbridge.h:119
static Meterbridge * instance()
void update_title()
void scroll_right()
Gtk::VBox global_vpacker
Definition: meterbridge.h:67
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:120
Gtk::HBox global_hpacker
Definition: meterbridge.h:66
static Meterbridge * _instance
Definition: meterbridge.h:57
bool _show_master
Definition: meterbridge.h:61
void on_theme_changed()
Gtk::VBox metrics_vpacker_right
Definition: meterbridge.h:118
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:64
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:87
bool operator()(struct MeterBridgeStrip ma, struct MeterBridgeStrip mb)
Definition: meterbridge.h:95