Ardour  8.12
midi_tracer.h
Go to the documentation of this file.
1 /*
2  * Copyright (C) 2010-2018 Paul Davis <paul@linuxaudiosystems.com>
3  * Copyright (C) 2010 Carl Hetherington <carl@carlh.net>
4  * Copyright (C) 2011 David Robillard <d@drobilla.net>
5  * Copyright (C) 2014-2017 Robin Gareus <robin@gareus.org>
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License along
18  * with this program; if not, write to the Free Software Foundation, Inc.,
19  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
20  */
21 
22 #ifndef __ardour_gtk_midi_tracer_h__
23 #define __ardour_gtk_midi_tracer_h__
24 
25 #include <atomic>
26 
27 #include <gtkmm/textview.h>
28 #include <gtkmm/scrolledwindow.h>
29 #include <gtkmm/togglebutton.h>
30 #include <gtkmm/adjustment.h>
31 #include <gtkmm/spinbutton.h>
32 #include <gtkmm/label.h>
33 #include <gtkmm/liststore.h>
34 #include <gtkmm/comboboxtext.h>
35 #include <gtkmm/box.h>
36 
37 #include "pbd/signals.h"
38 #include "pbd/ringbuffer.h"
39 #include "pbd/pool.h"
40 
41 #include "midi++/types.h"
42 #include "ardour_window.h"
43 
44 namespace MIDI {
45  class Parser;
46 }
47 
48 namespace ARDOUR {
49  class MidiPort;
50 }
51 
52 class MidiTracer : public ArdourWindow
53 {
54 public:
57 
58 protected:
59  void on_show ();
60  void on_hide ();
61 
62 private:
70 
71  bool autoscroll;
72  bool show_hex;
74 
79  std::atomic<int> _update_queued;
80 
83  static const size_t buffer_size = 256;
84 
86  void update ();
87 
93 
95  {
96  public:
98  {
99  add (pretty_name);
100  add (port_name);
101  }
104  };
105 
107  Glib::RefPtr<Gtk::ListStore> _midi_port_list;
108 
109  void base_toggle ();
111  void collect_toggle ();
112  void delta_toggle ();
113 
114  void port_changed ();
115  void ports_changed ();
116  void disconnect ();
119  std::shared_ptr<MIDI::Parser> _midi_parser;
120 
121  std::shared_ptr<ARDOUR::MidiPort> tracer_port;
122  std::shared_ptr<ARDOUR::MidiPort> traced_port;
123 
124  static unsigned int window_count;
125 };
126 
127 #endif /* __ardour_gtk_midi_tracer_h__ */
void add(TreeModelColumnBase &column)
Gtk::TreeModelColumn< std::string > pretty_name
Definition: midi_tracer.h:102
Gtk::TreeModelColumn< std::string > port_name
Definition: midi_tracer.h:103
void ports_changed()
static const size_t buffer_size
Definition: midi_tracer.h:83
bool show_hex
Definition: midi_tracer.h:72
Gtk::CheckButton autoscroll_button
Definition: midi_tracer.h:88
void on_show()
This is a default handler for the signal signal_show().
PBD::ScopedConnection _parser_connection
Definition: midi_tracer.h:117
void base_toggle()
Gtk::CheckButton delta_time_button
Definition: midi_tracer.h:91
Gtk::TextView text
Definition: midi_tracer.h:63
MIDI::samplecnt_t _last_receipt
Definition: midi_tracer.h:69
std::shared_ptr< MIDI::Parser > _midi_parser
Definition: midi_tracer.h:119
Gtk::Adjustment line_count_adjustment
Definition: midi_tracer.h:65
Glib::RefPtr< Gtk::ListStore > _midi_port_list
Definition: midi_tracer.h:107
Gtk::ComboBox _midi_port_combo
Definition: midi_tracer.h:92
void on_hide()
This is a default handler for the signal signal_hide().
PBD::RingBuffer< char * > fifo
Definition: midi_tracer.h:81
std::shared_ptr< ARDOUR::MidiPort > tracer_port
Definition: midi_tracer.h:121
Gtk::ScrolledWindow scroller
Definition: midi_tracer.h:64
void autoscroll_toggle()
void collect_toggle()
Gtk::CheckButton base_button
Definition: midi_tracer.h:89
void tracer(MIDI::Parser &, MIDI::byte *, size_t, MIDI::samplecnt_t)
std::atomic< int > _update_queued
Definition: midi_tracer.h:79
PBD::ScopedConnection _manager_connection
Definition: midi_tracer.h:118
bool autoscroll
Definition: midi_tracer.h:71
void port_changed()
bool show_delta_time
Definition: midi_tracer.h:73
MidiPortCols _midi_port_cols
Definition: midi_tracer.h:106
static unsigned int window_count
Definition: midi_tracer.h:124
Gtk::CheckButton collect_button
Definition: midi_tracer.h:90
void delta_toggle()
std::shared_ptr< ARDOUR::MidiPort > traced_port
Definition: midi_tracer.h:122
Gtk::HBox line_count_box
Definition: midi_tracer.h:68
void disconnect()
Gtk::SpinButton line_count_spinner
Definition: midi_tracer.h:66
Gtk::Label line_count_label
Definition: midi_tracer.h:67
PBD::Pool buffer_pool
Definition: midi_tracer.h:82
void update()
Definition: pool.h:41
int64_t samplecnt_t