21 #include "gtk2ardour-config.h"
67 , _in_row_change (false)
74 TreeViewColumn* color_column = manage (
new TreeViewColumn (
"", *color_renderer));
78 _display.append_column (*color_column);
96 { 0,
_(
"Col"),
_(
"Group Tab Color") },
97 { 1,
_(
"Name"),
_(
"Name of Group") },
98 { 2,
S_(
"Visible|V"),
_(
"Group is visible?") },
99 { 3,
_(
"On"),
_(
"Group is enabled?") },
100 { 4,
S_(
"Group|G"),
_(
"Sharing Gain?") },
101 { 5,
S_(
"Relative|Rel"),
_(
"Relative Gain Changes?") },
102 { 6,
S_(
"Mute|M"),
_(
"Sharing Mute?") },
103 { 7,
S_(
"Solo|S"),
_(
"Sharing Solo?") },
104 { 8,
_(
"Rec"),
_(
"Sharing Record-enable Status?") },
105 { 9,
S_(
"Monitoring|Mon"),
_(
"Sharing Monitoring Choice?") },
106 { 10,
S_(
"Selection|Sel"),
_(
"Sharing Selected/Editing Status?") },
107 { 11,
S_(
"Active|A"),
_(
"Sharing Active Status?") },
112 for (
int i = 0; ci[i].
index >= 0; ++i) {
113 col =
_display.get_column (ci[i].index);
114 l = manage (
new Label (ci[i].label));
116 col->set_widget (*l);
119 col->set_data (
X_(
"colnum"), GUINT_TO_POINTER(i));
121 col->set_expand (
true);
123 col->set_expand (
false);
124 col->set_alignment (ALIGN_CENTER);
128 _display.set_headers_visible (
true);
130 color_dialog.get_colorsel()->set_has_opacity_control (
false);
132 color_dialog.get_ok_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (
color_dialog, &Gtk::Dialog::response), RESPONSE_ACCEPT));
133 color_dialog.get_cancel_button()->signal_clicked().connect (sigc::bind (sigc::mem_fun (
color_dialog, &Gtk::Dialog::response), RESPONSE_CANCEL));
137 CellRendererText* name_cell =
dynamic_cast<CellRendererText*
>(
_display.get_column_cell_renderer (1));
138 name_cell->property_editable() =
true;
141 for (
int i = 1; ci[i].
index >= 0; ++i) {
142 CellRendererToggle* active_cell = dynamic_cast <CellRendererToggle*> (
_display.get_column_cell_renderer (i));
145 active_cell->property_activatable() =
true;
146 active_cell->property_radio() =
false;
157 _display.set_name (
"EditGroupList");
158 _display.get_selection()->set_mode (SELECTION_SINGLE);
159 _display.set_headers_visible (
true);
164 _scroller.set_policy (POLICY_AUTOMATIC, POLICY_AUTOMATIC);
168 HBox* button_box = manage (
new HBox());
169 button_box->set_homogeneous (
true);
171 Button* add_button = manage (
new Button ());
172 Button* remove_button = manage (
new Button ());
176 w = manage (
new Image (Stock::ADD, ICON_SIZE_BUTTON));
178 add_button->add (*w);
180 w = manage (
new Image (Stock::REMOVE, ICON_SIZE_BUTTON));
182 remove_button->add (*w);
187 button_box->pack_start (*add_button);
188 button_box->pack_start (*remove_button);
197 Glib::RefPtr<TreeSelection> selection =
_display.get_selection();
198 TreeView::Selection::ListHandle_Path rows = selection->get_selected_rows ();
204 TreeView::Selection::ListHandle_Path::iterator i = rows.begin();
209 if ((iter =
_model->get_iter (*i))) {
228 TreeModel::Path path;
231 TreeViewColumn* column;
238 bool const p =
_display.get_path_at_pos ((
int)ev->x, (
int)ev->y, path, column, cellx, celly);
241 iter =
_model->get_iter (path);
248 if (Keyboard::is_context_menu_event (ev)) {
255 _display.get_selection()->unselect_all ();
263 switch (GPOINTER_TO_UINT (column->get_data (
X_(
"colnum")))) {
270 case RESPONSE_CANCEL:
272 case RESPONSE_ACCEPT:
287 if (Keyboard::is_edit_event (ev) && group) {
413 TreeModel::Row row = *(
_model->append());
434 if (!group->
name().empty()) {
444 TreeViewColumn* col =
_display.get_column (0);
445 CellRendererText* name_cell =
dynamic_cast<CellRendererText*
>(
_display.get_column_cell_renderer (1));
446 _display.set_cursor (
_model->get_path (row), *col, *name_cell,
true);
478 Gtk::TreeModel::Children children =
_model->children();
480 for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
511 if ((*i)->route_group() == group) {
527 if ((iter =
_model->get_iter (path))) {
533 if (new_text != group->
name()) {
542 _display.set_model (Glib::RefPtr<Gtk::TreeStore> (0));
550 SessionHandlePtr::set_session (s);
594 list<RouteGroup*> new_list;
596 Gtk::TreeModel::Children children =
_model->children();
597 for (Gtk::TreeModel::Children::iterator i = children.begin(); i != children.end(); ++i) {
PBD::Signal0< void > route_groups_reordered
Glib::RefPtr< Gtk::ListStore > _model
void reorder_route_groups(std::list< RouteGroup * >)
Glib::PropertyProxy< Gdk::Color > property_color()
PBD::Signal1< void, RouteGroup * > route_group_added
PBD::ScopedConnectionList _property_changed_connections
PBD::Signal1< void, const PropertyChange & > PropertyChanged
void set_recenable(bool yn)
void add(ARDOUR::RouteGroup *)
LIBARDOUR_API PBD::PropertyDescriptor< bool > hidden
void set_monitoring(bool yn)
static ARDOUR_UI * instance()
void property_changed(ARDOUR::RouteGroup *, const PBD::PropertyChange &)
static void set_group_color(ARDOUR::RouteGroup *, uint32_t)
Gtk::VBox _display_packer
void remove_route_group(RouteGroup &)
Gtk::TreeModelColumn< Gdk::Color > gdkcolor
LIBARDOUR_API PBD::PropertyDescriptor< bool > gain
Gtk::TreeModelColumn< bool > active_state
void set_route_active(bool yn)
Gtk::TreeModelColumn< bool > is_visible
Gtk::TreeModelColumn< bool > gain
#define ENSURE_GUI_THREAD(obj, method,...)
void row_deleted(Gtk::TreeModel::Path const &)
Gtk::Menu * get_menu(ARDOUR::RouteGroup *g)
Gtk::ScrolledWindow _scroller
void set_relative(bool yn, void *src)
LIBGTKMM2EXT_API uint64_t Keyboard
bool button_press_event(GdkEventButton *ev)
virtual bool apply_changes(PropertyBase const &)
uint32_t gdk_color_to_rgba(Gdk::Color const &)
void foreach_route_group(boost::function< void(RouteGroup *)> f)
TrackViewList const & get_track_views()
void set_color_from_rgba(Gdk::Color &, uint32_t)
LIBARDOUR_API PBD::PropertyDescriptor< bool > recenable
Gtk::TreeModelColumn< std::string > text
LIBARDOUR_API PBD::PropertyDescriptor< bool > route_active
virtual bool set_name(const std::string &str)
bool is_route_active() const
bool is_recenable() const
void show_track_in_display(TimeAxisView &)
Gtk::TreeModelColumn< bool > monitoring
bool deletion_in_progress() const
LIBARDOUR_API PBD::PropertyDescriptor< bool > mute
void set_hidden(bool yn, void *src)
EditorRouteGroups(Editor *)
PBD::ScopedConnectionList _session_connections
LIBARDOUR_API PBD::PropertyDescriptor< bool > active
void run_new_group_dialog()
void name_edit(const std::string &, const std::string &)
void set_tip(Gtk::Widget &w, const gchar *tip)
bool is_monitoring() const
Gtk::ColorSelectionDialog color_dialog
static uint32_t group_color(ARDOUR::RouteGroup *)
void row_change(const Gtk::TreeModel::Path &, const Gtk::TreeModel::iterator &)
LIBARDOUR_API PBD::PropertyDescriptor< bool > solo
LIBARDOUR_API PBD::PropertyDescriptor< bool > relative
LIBARDOUR_API PBD::PropertyDescriptor< bool > select
EditorGroupTabs * _group_tabs
Gtk::TreeModelColumn< ARDOUR::RouteGroup * > routegroup
Gtk::TreeModelColumn< bool > active_shared
Gtk::TreeModelColumn< bool > gain_relative
void set_session(ARDOUR::Session *)
Gtk::TreeModelColumn< bool > mute
Gtk::TreeModelColumn< bool > select
Gtk::TreeModelColumn< bool > solo
#define MISSING_INVALIDATOR
Gtk::TreeModelColumn< bool > record
std::list< boost::shared_ptr< Route > > RouteList
void set_active(bool yn, void *src)
void hide_track_in_display(TimeAxisView *tv, bool apply_to_selection=false)
bool add(PropertyBase *prop)
void run_new_group_dialog(ARDOUR::RouteList const &)
ARDOUR::Session * _session
PBD::Signal0< void > route_group_removed
LIBARDOUR_API PBD::PropertyDescriptor< bool > monitoring