2 Copyright (C) 2000-2009 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.
19 #ifndef __gtk_ardour_editor_regions_h__
20 #define __gtk_ardour_editor_regions_h__
22 #include "editor_component.h"
23 #include <boost/unordered_map.hpp>
25 class EditorRegions
: public EditorComponent
, public ARDOUR::SessionHandlePtr
28 EditorRegions (Editor
*);
30 void set_session (ARDOUR::Session
*);
32 Gtk::Widget
& widget () {
39 void toggle_show_auto_regions ();
40 void reset_sort_direction (bool);
41 void reset_sort_type (Editing::RegionListSortType
, bool);
42 void set_selected (RegionSelection
&);
43 void selection_mapover (sigc::slot
<void,boost::shared_ptr
<ARDOUR::Region
> >);
45 boost::shared_ptr
<ARDOUR::Region
> get_dragged_region ();
46 boost::shared_ptr
<ARDOUR::Region
> get_single_selection ();
48 Editing::RegionListSortType
sort_type () const {
54 void suspend_redisplay () {
58 void resume_redisplay () {
59 _no_redisplay
= false;
63 void block_change_connection (bool b
) {
64 _change_connection
.block (b
);
67 void unselect_all () {
68 _display
.get_selection()->unselect_all ();
71 void delete_unused_regions();
73 XMLNode
& get_state () const;
74 void set_state (const XMLNode
&);
78 struct Columns
: public Gtk::TreeModel::ColumnRecord
{
95 add (property_toggles_visible
);
98 Gtk::TreeModelColumn
<std::string
> name
;
99 Gtk::TreeModelColumn
<boost::shared_ptr
<ARDOUR::Region
> > region
;
100 Gtk::TreeModelColumn
<Gdk::Color
> color_
;
101 Gtk::TreeModelColumn
<std::string
> position
;
102 Gtk::TreeModelColumn
<std::string
> end
;
103 Gtk::TreeModelColumn
<std::string
> length
;
104 Gtk::TreeModelColumn
<std::string
> sync
;
105 Gtk::TreeModelColumn
<std::string
> fadein
;
106 Gtk::TreeModelColumn
<std::string
> fadeout
;
107 Gtk::TreeModelColumn
<bool> locked
;
108 Gtk::TreeModelColumn
<bool> glued
;
109 Gtk::TreeModelColumn
<bool> muted
;
110 Gtk::TreeModelColumn
<bool> opaque
;
111 Gtk::TreeModelColumn
<std::string
> used
;
112 Gtk::TreeModelColumn
<std::string
> path
;
113 /** used to indicate whether the locked/glued/muted/opaque should be visible or not */
114 Gtk::TreeModelColumn
<bool> property_toggles_visible
;
119 Gtk::TreeModel::RowReference last_row
;
121 void freeze_tree_model ();
122 void thaw_tree_model ();
123 void region_changed (boost::shared_ptr
<ARDOUR::Region
>, PBD::PropertyChange
const &);
124 void selection_changed ();
126 sigc::connection _change_connection
;
128 bool selection_filter (const Glib::RefPtr
<Gtk::TreeModel
>& model
, const Gtk::TreeModel::Path
& path
, bool yn
);
130 Gtk::Widget
* old_focus
;
131 Gtk::CellEditable
* name_editable
;
132 void name_editing_started (Gtk::CellEditable
*, const Glib::ustring
&);
134 void name_edit (const std::string
&, const std::string
&);
135 void locked_changed (std::string
const &);
136 void glued_changed (std::string
const &);
137 void muted_changed (std::string
const &);
138 void opaque_changed (std::string
const &);
140 bool key_press (GdkEventKey
*);
141 bool button_press (GdkEventButton
*);
143 bool focus_in (GdkEventFocus
*);
144 bool focus_out (GdkEventFocus
*);
145 bool enter_notify (GdkEventCrossing
*);
146 bool leave_notify (GdkEventCrossing
*);
148 void show_context_menu (int button
, int time
);
150 int sorter (Gtk::TreeModel::iterator
, Gtk::TreeModel::iterator
);
152 void format_position (ARDOUR::framepos_t pos
, char* buf
, size_t bufsize
);
154 void add_region (boost::shared_ptr
<ARDOUR::Region
>);
156 void populate_row (boost::shared_ptr
<ARDOUR::Region
>, Gtk::TreeModel::Row
const &);
157 void populate_row_used (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
158 void populate_row_position (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
159 void populate_row_end (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
160 void populate_row_sync (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
161 void populate_row_fade_in (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
, boost::shared_ptr
<ARDOUR::AudioRegion
>);
162 void populate_row_fade_out (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
, boost::shared_ptr
<ARDOUR::AudioRegion
>);
163 void populate_row_locked (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
164 void populate_row_muted (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
165 void populate_row_glued (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
166 void populate_row_opaque (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
, uint32_t used
);
167 void populate_row_length (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
);
168 void populate_row_name (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
);
169 void populate_row_source (boost::shared_ptr
<ARDOUR::Region
> region
, Gtk::TreeModel::Row
const& row
);
171 void update_row (boost::shared_ptr
<ARDOUR::Region
>);
172 void update_all_rows ();
174 void insert_into_tmp_regionlist (boost::shared_ptr
<ARDOUR::Region
>);
176 void drag_data_received (
177 Glib::RefPtr
<Gdk::DragContext
> const &, gint
, gint
, Gtk::SelectionData
const &, guint
, guint
180 Glib::RefPtr
<Gtk::RadioAction
> sort_type_action (Editing::RegionListSortType
) const;
181 void set_full (bool);
183 Glib::RefPtr
<Gtk::Action
> hide_action () const;
184 Glib::RefPtr
<Gtk::Action
> show_action () const;
185 Glib::RefPtr
<Gtk::Action
> delete_unused_regions_action() const;
186 Glib::RefPtr
<Gtk::ToggleAction
> toggle_full_action () const;
187 Glib::RefPtr
<Gtk::ToggleAction
> toggle_show_auto_regions_action () const;
190 Gtk::ScrolledWindow _scroller
;
193 Gtkmm2ext::DnDTreeView
<boost::shared_ptr
<ARDOUR::Region
> > _display
;
195 Glib::RefPtr
<Gtk::TreeStore
> _model
;
197 bool _show_automatic_regions
;
198 bool ignore_region_list_selection_change
;
199 bool ignore_selected_region_change
;
202 Editing::RegionListSortType _sort_type
;
204 std::list
<boost::shared_ptr
<ARDOUR::Region
> > tmp_region_list
;
206 typedef boost::unordered_map
<boost::shared_ptr
<ARDOUR::Region
>, Gtk::TreeModel::RowReference
> RegionRowMap
;
207 typedef boost::unordered_map
<std::string
, Gtk::TreeModel::RowReference
> RegionSourceMap
;
209 RegionRowMap region_row_map
;
210 RegionSourceMap parent_regions_sources_map
;
212 PBD::ScopedConnection region_property_connection
;
213 PBD::ScopedConnection check_new_region_connection
;
215 PBD::ScopedConnection editor_freeze_connection
;
216 PBD::ScopedConnection editor_thaw_connection
;
221 #endif /* __gtk_ardour_editor_regions_h__ */