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
>,
64 ArdourCanvas::Canvas
& canvas
,
65 const std::string
& name
, /* translatable */
66 const std::string
& plug_name
= "");
68 ~AutomationTimeAxisView();
70 virtual void set_height (uint32_t);
71 void set_samples_per_unit (double);
72 bool set_visibility (bool yn
);
73 std::string
name() const { return _name
; }
75 void add_automation_event (ArdourCanvas::Item
*item
, GdkEvent
*event
, nframes_t
, double);
78 boost::shared_ptr
<AutomationLine
> line() { return _line
; }
80 void set_selected_points (PointSelection
&);
81 void get_selectables (nframes_t start
, nframes_t end
, double top
, double bot
, std::list
<Selectable
*>&);
82 void get_inverted_selectables (Selection
&, std::list
<Selectable
*>& results
);
84 void show_timestretch (nframes_t
/*start*/, nframes_t
/*end*/) {}
85 void hide_timestretch () {}
87 /* editing operations */
89 bool cut_copy_clear (Selection
&, Editing::CutCopyOp
);
90 bool cut_copy_clear_objects (PointSelection
&, Editing::CutCopyOp
);
91 bool paste (nframes_t
, float times
, Selection
&, size_t nth
);
92 void reset_objects (PointSelection
&);
94 int set_state (const XMLNode
&, int version
);
95 guint32
show_at (double y
, int& nth
, Gtk::VBox
*parent
);
98 static const std::string state_node_name
;
99 XMLNode
* get_state_node();
101 boost::shared_ptr
<ARDOUR::AutomationControl
> control() { return _control
; }
102 boost::shared_ptr
<AutomationController
> controller() { return _controller
; }
104 ArdourCanvas::Item
* base_item () const {
108 bool has_automation () const;
111 boost::shared_ptr
<ARDOUR::Route
> _route
; ///< Parent route
112 boost::shared_ptr
<ARDOUR::AutomationControl
> _control
; ///< Control
113 boost::shared_ptr
<ARDOUR::Automatable
> _automatable
; ///< Control owner, maybe = _route
115 boost::shared_ptr
<AutomationController
> _controller
;
117 ArdourCanvas::SimpleRect
* _base_rect
;
118 boost::shared_ptr
<AutomationLine
> _line
;
119 /** AutomationStreamView if we are editing region-based automation (for MIDI), otherwise 0 */
120 AutomationStreamView
* _view
;
125 bool first_call_to_set_height
;
127 Gtk::Button hide_button
;
128 Gtk::Button auto_button
;
129 Gtk::Menu
* automation_menu
;
130 Gtk::Label
* plugname
;
131 bool plugname_packed
;
133 Gtk::CheckMenuItem
* auto_off_item
;
134 Gtk::CheckMenuItem
* auto_play_item
;
135 Gtk::CheckMenuItem
* auto_touch_item
;
136 Gtk::CheckMenuItem
* auto_write_item
;
138 Gtk::CheckMenuItem
* mode_discrete_item
;
139 Gtk::CheckMenuItem
* mode_line_item
;
141 void add_line (boost::shared_ptr
<AutomationLine
>);
143 void clear_clicked ();
144 void hide_clicked ();
145 void auto_clicked ();
147 void build_display_menu ();
149 bool cut_copy_clear_one (AutomationLine
&, Selection
&, Editing::CutCopyOp
);
150 bool cut_copy_clear_objects_one (AutomationLine
&, PointSelection
&, Editing::CutCopyOp
);
151 bool paste_one (AutomationLine
&, nframes_t
, float times
, Selection
&, size_t nth
);
152 void reset_objects_one (AutomationLine
&, PointSelection
&);
154 void set_automation_state (ARDOUR::AutoState
);
155 bool ignore_state_request
;
157 void automation_state_changed ();
159 void set_interpolation (ARDOUR::AutomationList::InterpolationStyle
);
160 void interpolation_changed (ARDOUR::AutomationList::InterpolationStyle
);
162 PBD::ScopedConnectionList _list_connections
;
164 void update_extra_xml_shown (bool editor_shown
);
169 //void set_colors ();
170 void color_handler ();
172 static Pango::FontDescription
* name_font
;
173 static bool have_name_font
;
176 #endif /* __ardour_gtk_automation_time_axis_h__ */