X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Feditor_edit_groups.cc;h=20179f84c65b923fb0294d4555b5a90286c5b864;hb=fc26b49ac5e177857a155a567ff9f966f330e261;hp=d66b313ac046fba4eb7ae0988a0ba436a92a09df;hpb=a9e38032a376df3c8a930457211813958f3ba73b;p=ardour.git diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc index d66b313ac0..20179f84c6 100644 --- a/gtk2_ardour/editor_edit_groups.cc +++ b/gtk2_ardour/editor_edit_groups.cc @@ -15,7 +15,6 @@ along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. - $Id$ */ #include @@ -38,6 +37,7 @@ using namespace sigc; using namespace ARDOUR; +using namespace PBD; using namespace Gtk; void @@ -77,23 +77,31 @@ Editor::disable_all_edit_groups () void Editor::new_edit_group () { - if (session == 0) { + session->add_edit_group (""); +} + +void +Editor::remove_selected_edit_group () +{ + Glib::RefPtr selection = edit_group_display.get_selection(); + TreeView::Selection::ListHandle_Path rows = selection->get_selected_rows (); + + if (rows.empty()) { return; } - ArdourPrompter prompter; - string result; + TreeView::Selection::ListHandle_Path::iterator i = rows.begin(); + TreeIter iter; + + /* selection mode is single, so rows.begin() is it */ + + if ((iter = group_model->get_iter (*i))) { - prompter.set_prompt (_("Name for new edit group")); - prompter.show_all (); + RouteGroup* rg = (*iter)[group_columns.routegroup]; - switch (prompter.run ()) { - case GTK_RESPONSE_ACCEPT: - prompter.get_result (result); - if (result.length()) { - session->add_edit_group (result); + if (rg) { + session->remove_edit_group (*rg); } - break; } } @@ -110,7 +118,7 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev) if (edit_group_list_menu == 0) { build_edit_group_list_menu (); } - edit_group_list_menu->popup (1, 0); + edit_group_list_menu->popup (1, ev->time); return true; } @@ -127,7 +135,7 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev) } switch (GPOINTER_TO_UINT (column->get_data (X_("colnum")))) { - case 2: + case 0: if (Keyboard::is_edit_event (ev)) { if ((iter = group_model->get_iter (path))) { if ((group = (*iter)[group_columns.routegroup]) != 0) { @@ -141,20 +149,20 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev) case 1: if ((iter = group_model->get_iter (path))) { - bool visible = (*iter)[group_columns.is_visible]; - (*iter)[group_columns.is_visible] = !visible; + bool active = (*iter)[group_columns.is_active]; + (*iter)[group_columns.is_active] = !active; return true; } break; - - case 0: + + case 2: if ((iter = group_model->get_iter (path))) { - bool active = (*iter)[group_columns.is_active]; - (*iter)[group_columns.is_active] = !active; + bool visible = (*iter)[group_columns.is_visible]; + (*iter)[group_columns.is_visible] = !visible; return true; } break; - + default: break; } @@ -167,6 +175,10 @@ Editor::edit_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeM { RouteGroup* group; + if (in_edit_group_row_change) { + return; + } + if ((group = (*iter)[group_columns.routegroup]) == 0) { return; } @@ -187,20 +199,66 @@ Editor::edit_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeM bool active = (*iter)[group_columns.is_active]; group->set_active (active, this); + + + string name = (*iter)[group_columns.text]; + + if (name != group->name()) { + group->set_name (name); + } } void Editor::add_edit_group (RouteGroup* group) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::add_edit_group), group)); + bool focus = false; TreeModel::Row row = *(group_model->append()); row[group_columns.is_active] = group->is_active(); - row[group_columns.is_visible] = true; - row[group_columns.text] = group->name(); + row[group_columns.is_visible] = !group->is_hidden(); + + in_edit_group_row_change = true; + row[group_columns.routegroup] = group; + if (!group->name().empty()) { + row[group_columns.text] = group->name(); + } else { + row[group_columns.text] = _("unnamed"); + focus = true; + } + group->FlagsChanged.connect (bind (mem_fun(*this, &Editor::group_flags_changed), group)); + + if (focus) { + TreeViewColumn* col = edit_group_display.get_column (0); + CellRendererText* name_cell = dynamic_cast(edit_group_display.get_column_cell_renderer (0)); + edit_group_display.set_cursor (group_model->get_path (row), *col, *name_cell, true); + } + + in_edit_group_row_change = false; +} + +void +Editor::edit_groups_changed () +{ + ENSURE_GUI_THREAD (mem_fun (*this, &Editor::edit_groups_changed)); + + /* just rebuild the while thing */ + + group_model->clear (); + + { + TreeModel::Row row; + row = *(group_model->append()); + row[group_columns.is_active] = false; + row[group_columns.is_visible] = true; + row[group_columns.text] = (_("-all-")); + row[group_columns.routegroup] = 0; + } + + session->foreach_edit_group (mem_fun (*this, &Editor::add_edit_group)); } void @@ -208,12 +266,34 @@ Editor::group_flags_changed (void* src, RouteGroup* group) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &Editor::group_flags_changed), src, group)); + in_edit_group_row_change = true; + Gtk::TreeModel::Children children = group_model->children(); for(Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) { if (group == (*iter)[group_columns.routegroup]) { (*iter)[group_columns.is_active] = group->is_active(); + (*iter)[group_columns.is_visible] = !group->is_hidden(); + (*iter)[group_columns.text] = group->name(); } } -} + in_edit_group_row_change = false; +} +void +Editor::edit_group_name_edit (const Glib::ustring& path, const Glib::ustring& new_text) +{ + RouteGroup* group; + TreeIter iter; + + if ((iter = group_model->get_iter (path))) { + + if ((group = (*iter)[group_columns.routegroup]) == 0) { + return; + } + + if (new_text != group->name()) { + group->set_name (new_text); + } + } +}