2 Copyright (C) 2000-2007 Paul Davis
4 This program is free software; you can redistribute it and/or modify
5 it under the terms of the GNU General Public License as published by
6 the Free Software Foundation; either version 2 of the License, or
7 (at your option) any later version.
9 This program is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 GNU General Public License for more details.
14 You should have received a copy of the GNU General Public License
15 along with this program; if not, write to the Free Software
16 Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
20 #ifndef __ardour_gtk_automation_time_axis_h__
21 #define __ardour_gtk_automation_time_axis_h__
27 #include <boost/shared_ptr.hpp>
29 #include "ardour/types.h"
30 #include "ardour/automatable.h"
31 #include "ardour/automation_list.h"
34 #include "time_axis_view.h"
35 #include "simplerect.h"
36 #include "automation_controller.h"
41 class AutomationControl
;
46 class RegionSelection
;
51 class AutomationStreamView
;
52 class AutomationController
;
55 class AutomationTimeAxisView
: public TimeAxisView
{
57 AutomationTimeAxisView (ARDOUR::Session
*,
58 boost::shared_ptr
<ARDOUR::Route
>,
59 boost::shared_ptr
<ARDOUR::Automatable
>,
60 boost::shared_ptr
<ARDOUR::AutomationControl
>,
65 ArdourCanvas::Canvas
& canvas
,
66 const std::string
& name
, /* translatable */
67 const std::string
& plug_name
= "");
69 ~AutomationTimeAxisView();
71 virtual void set_height (uint32_t);
72 void set_samples_per_unit (double);
73 bool set_visibility (bool yn
);
74 std::string
name() const { return _name
; }
76 void add_automation_event (ArdourCanvas::Item
*item
, GdkEvent
*event
, framepos_t
, double);
80 /** @return Our AutomationLine, if this view has one, or 0 if it uses AutomationRegionViews */
81 boost::shared_ptr
<AutomationLine
> line() { return _line
; }
83 /** @return All AutomationLines associated with this view */
84 std::list
<boost::shared_ptr
<AutomationLine
> > lines () const;
86 void set_selected_points (PointSelection
&);
87 void get_selectables (ARDOUR::framepos_t start
, ARDOUR::framepos_t end
, double top
, double bot
, std::list
<Selectable
*>&);
88 void get_inverted_selectables (Selection
&, std::list
<Selectable
*>& results
);
90 void show_timestretch (framepos_t
/*start*/, framepos_t
/*end*/) {}
91 void hide_timestretch () {}
93 /* editing operations */
95 void cut_copy_clear (Selection
&, Editing::CutCopyOp
);
96 void cut_copy_clear_objects (PointSelection
&, Editing::CutCopyOp
);
97 bool paste (ARDOUR::framepos_t
, float times
, Selection
&, size_t nth
);
98 void reset_objects (PointSelection
&);
100 int set_state (const XMLNode
&, int version
);
101 guint32
show_at (double y
, int& nth
, Gtk::VBox
*parent
);
104 static const std::string state_node_name
;
105 XMLNode
* get_state_node();
107 boost::shared_ptr
<ARDOUR::AutomationControl
> control() { return _control
; }
108 boost::shared_ptr
<AutomationController
> controller() { return _controller
; }
109 Evoral::Parameter
parameter () const {
113 ArdourCanvas::Item
* base_item () const {
117 bool has_automation () const;
119 boost::shared_ptr
<ARDOUR::Route
> parent_route () {
125 boost::shared_ptr
<ARDOUR::Route
> _route
;
126 /** control; 0 if we are editing region-based automation */
127 boost::shared_ptr
<ARDOUR::AutomationControl
> _control
;
128 /** control owner; may be _route, or 0 if we are editing region-based automation */
129 boost::shared_ptr
<ARDOUR::Automatable
> _automatable
;
130 /** controller owner; 0 if we are editing region-based automation */
131 boost::shared_ptr
<AutomationController
> _controller
;
132 Evoral::Parameter _parameter
;
134 ArdourCanvas::SimpleRect
* _base_rect
;
135 boost::shared_ptr
<AutomationLine
> _line
;
137 /** AutomationStreamView if we are editing region-based automation (for MIDI), otherwise 0 */
138 AutomationStreamView
* _view
;
143 bool first_call_to_set_height
;
145 Gtk::Button hide_button
;
146 Gtk::Button auto_button
;
147 Gtk::Menu
* automation_menu
;
148 Gtk::Label
* plugname
;
149 bool plugname_packed
;
151 Gtk::CheckMenuItem
* auto_off_item
;
152 Gtk::CheckMenuItem
* auto_play_item
;
153 Gtk::CheckMenuItem
* auto_touch_item
;
154 Gtk::CheckMenuItem
* auto_write_item
;
156 Gtk::CheckMenuItem
* mode_discrete_item
;
157 Gtk::CheckMenuItem
* mode_line_item
;
159 void add_line (boost::shared_ptr
<AutomationLine
>);
161 void clear_clicked ();
162 void hide_clicked ();
163 void auto_clicked ();
165 void build_display_menu ();
167 void cut_copy_clear_one (AutomationLine
&, Selection
&, Editing::CutCopyOp
);
168 void cut_copy_clear_objects_one (AutomationLine
&, PointSelection
&, Editing::CutCopyOp
);
169 bool paste_one (AutomationLine
&, ARDOUR::framepos_t
, float times
, Selection
&, size_t nth
);
170 void reset_objects_one (AutomationLine
&, PointSelection
&);
171 void route_going_away ();
173 void set_automation_state (ARDOUR::AutoState
);
174 bool ignore_state_request
;
176 void automation_state_changed ();
178 void set_interpolation (ARDOUR::AutomationList::InterpolationStyle
);
179 void interpolation_changed (ARDOUR::AutomationList::InterpolationStyle
);
181 PBD::ScopedConnectionList _list_connections
;
182 PBD::ScopedConnectionList _route_connections
;
184 void update_extra_xml_shown (bool editor_shown
);
189 //void set_colors ();
190 void color_handler ();
192 static Pango::FontDescription
* name_font
;
193 static bool have_name_font
;
196 int set_state_2X (const XMLNode
&, int);
199 #endif /* __ardour_gtk_automation_time_axis_h__ */