summaryrefslogtreecommitdiff
path: root/gtk2_ardour/panner_ui.h
blob: d587359ecdf62ba74e80d70df88ed217290c9472 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
    Copyright (C) 2004 Paul Davis

    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

*/

#ifndef __ardour_gtk_panner_ui_h__
#define __ardour_gtk_panner_ui_h__

#include <vector>

#include <gtkmm/box.h>
#include <gtkmm/adjustment.h>
#include <gtkmm/viewport.h>
#include <gtkmm/eventbox.h>
#include <gtkmm/arrow.h>
#include <gtkmm/togglebutton.h>
#include <gtkmm/button.h>

#include <gtkmm2ext/click_box.h>
#include <gtkmm2ext/slider_controller.h>

#include "enums.h"

class Panner2d;
class PannerBar;

namespace ARDOUR {
	class IO;
	class Session;
}
namespace Gtkmm2ext {
	class FastMeter;
}

namespace Gtk {
	class Menu;
	class Menuitem;
}

class PannerUI : public Gtk::HBox
{
  public:
	PannerUI (boost::shared_ptr<ARDOUR::IO>, ARDOUR::Session&);
	~PannerUI ();

	void pan_changed (void *);

	void update_pan_sensitive ();
	void update_gain_sensitive ();

	void set_width (Width);
	void setup_pan ();

	void effective_pan_display ();

	void set_meter_strip_name (string name);

  private:
	friend class MixerStrip;
	boost::shared_ptr<ARDOUR::IO> _io;
	ARDOUR::Session& _session;

	bool ignore_toggle;
	bool in_pan_update;

	static const int pan_bar_height;

	Panner2d*   panner;

	Gtk::VBox           pan_bar_packer;
	Gtk::Adjustment	    hAdjustment;
	Gtk::Adjustment     vAdjustment;
	Gtk::Viewport       panning_viewport;
	Gtk::EventBox       panning_up;
	Gtk::Arrow          panning_up_arrow;
	Gtk::EventBox       panning_down;
	Gtk::Arrow          panning_down_arrow;
	Gtk::VBox           pan_vbox;
	Width              _width;

	Gtk::ToggleButton   panning_link_button;
	Gtk::Button         panning_link_direction_button;
	Gtk::HBox           panning_link_box;

	bool panning_link_button_press (GdkEventButton*);
	bool panning_link_button_release (GdkEventButton*);

	Gtk::Menu pan_astate_menu;
	Gtk::Menu pan_astyle_menu;

	Gtk::Button pan_automation_style_button;
	Gtk::ToggleButton pan_automation_state_button;

	void panning_link_direction_clicked ();

	vector<Gtk::Adjustment*> pan_adjustments;
	vector<PannerBar*> pan_bars;

	void pan_adjustment_changed (uint32_t which);
	void pan_value_changed (uint32_t which);
	void pan_printer (char* buf, uint32_t, Gtk::Adjustment*);
	void update_pan_bars (bool only_if_aplay);
	void update_pan_linkage ();
	void update_pan_state ();

	void panner_changed ();
	
	void hide_pans ();

	void panner_moved (int which);
	void panner_bypass_toggled ();

	gint start_pan_touch (GdkEventButton*);
	gint end_pan_touch (GdkEventButton*);

	bool pan_button_event (GdkEventButton*, uint32_t which);

	Gtk::Menu* pan_menu;
	Gtk::CheckMenuItem* bypass_menu_item;
	void build_pan_menu (uint32_t which);
	void pan_mute (uint32_t which);
	void pan_reset ();
	void pan_bypass_toggle ();

	void pan_automation_state_changed();
	void pan_automation_style_changed();
	gint pan_automation_style_button_event (GdkEventButton *);
	gint pan_automation_state_button_event (GdkEventButton *);
	sigc::connection pan_watching;

	std::string astate_string (ARDOUR::AutoState);
	std::string short_astate_string (ARDOUR::AutoState);
	std::string _astate_string (ARDOUR::AutoState, bool);

	std::string astyle_string (ARDOUR::AutoStyle);
	std::string short_astyle_string (ARDOUR::AutoStyle);
	std::string _astyle_string (ARDOUR::AutoStyle, bool);
};

#endif /* __ardour_gtk_panner_ui_h__ */