diff options
-rw-r--r-- | gtk2_ardour/editor.cc | 30 | ||||
-rw-r--r-- | gtk2_ardour/editor.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_edit_groups.cc | 57 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.cc | 24 | ||||
-rw-r--r-- | gtk2_ardour/mixer_strip.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 40 |
6 files changed, 104 insertions, 51 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index dce87f5e1c..6a6fa0e522 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -491,17 +491,23 @@ Editor::Editor (AudioEngine& eng) group_model = ListStore::create(group_columns); edit_group_display.set_model (group_model); + edit_group_display.append_column (_("Name"), group_columns.text); edit_group_display.append_column (_("Active"), group_columns.is_active); edit_group_display.append_column (_("Visible"), group_columns.is_visible); - edit_group_display.append_column (_("Name"), group_columns.text); edit_group_display.get_column (0)->set_data (X_("colnum"), GUINT_TO_POINTER(0)); edit_group_display.get_column (1)->set_data (X_("colnum"), GUINT_TO_POINTER(1)); edit_group_display.get_column (2)->set_data (X_("colnum"), GUINT_TO_POINTER(2)); edit_group_display.set_headers_visible (true); + /* name is directly editable */ + + CellRendererText* name_cell = dynamic_cast<CellRendererText*>(edit_group_display.get_column_cell_renderer (0)); + name_cell->property_editable() = true; + name_cell->signal_edited().connect (mem_fun (*this, &Editor::edit_group_name_edit)); + /* use checkbox for the active + visible columns */ - CellRendererToggle* active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (0)); + CellRendererToggle* active_cell = dynamic_cast<CellRendererToggle*>(edit_group_display.get_column_cell_renderer (1)); active_cell->property_activatable() = true; active_cell->property_radio() = false; @@ -509,11 +515,6 @@ Editor::Editor (AudioEngine& eng) active_cell->property_activatable() = true; active_cell->property_radio() = false; - /* name is directly editable */ - - CellRendererText* name_cell = dynamic_cast<CellRendererText*>(edit_group_display.get_column_cell_renderer (2)); - name_cell->property_editable() = true; - edit_group_display.set_name ("EditGroupList"); group_model->signal_row_changed().connect (mem_fun (*this, &Editor::edit_group_row_change)); @@ -532,8 +533,19 @@ Editor::Editor (AudioEngine& eng) VBox* edit_group_display_packer = manage (new VBox()); HButtonBox* edit_group_display_button_box = manage (new HButtonBox()); edit_group_display_button_box->set_homogeneous (true); - Button* edit_group_add_button = manage (new Button (Stock::ADD)); - Button* edit_group_remove_button = manage (new Button(Stock::REMOVE)); + + Button* edit_group_add_button = manage (new Button ()); + Button* edit_group_remove_button = manage (new Button ()); + + Widget* w; + + w = manage (new Image (Stock::ADD, ICON_SIZE_BUTTON)); + w->show(); + edit_group_add_button->add (*w); + + w = manage (new Image (Stock::REMOVE, ICON_SIZE_BUTTON)); + w->show(); + edit_group_remove_button->add (*w); edit_group_add_button->signal_clicked().connect (mem_fun (*this, &Editor::new_edit_group)); edit_group_remove_button->signal_clicked().connect (mem_fun (*this, &Editor::remove_selected_edit_group)); diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 956720747f..ede72ef808 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -1516,7 +1516,7 @@ class Editor : public PublicEditor bool in_edit_group_row_change; void edit_group_row_change (const Gtk::TreeModel::Path&,const Gtk::TreeModel::iterator&); - + void edit_group_name_edit (const Glib::ustring&, const Glib::ustring&); void new_edit_group (); void edit_group_list_button_clicked (); gint edit_group_list_button_press_event (GdkEventButton* ev); diff --git a/gtk2_ardour/editor_edit_groups.cc b/gtk2_ardour/editor_edit_groups.cc index 2e7179d940..cda8f1c4be 100644 --- a/gtk2_ardour/editor_edit_groups.cc +++ b/gtk2_ardour/editor_edit_groups.cc @@ -77,24 +77,7 @@ Editor::disable_all_edit_groups () void Editor::new_edit_group () { - if (session == 0) { - return; - } - - ArdourPrompter prompter; - string result; - - prompter.set_prompt (_("Name for new edit group")); - prompter.show_all (); - - switch (prompter.run ()) { - case Gtk::RESPONSE_ACCEPT: - prompter.get_result (result); - if (result.length()) { - session->add_edit_group (result); - } - break; - } + session->add_edit_group (""); } void @@ -152,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) { @@ -172,7 +155,7 @@ Editor::edit_group_list_button_press_event (GdkEventButton* ev) } 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; @@ -220,8 +203,6 @@ Editor::edit_group_row_change (const Gtk::TreeModel::Path& path,const Gtk::TreeM string name = (*iter)[group_columns.text]; - cerr << "Row change, name = " << name << endl; - if (name != group->name()) { group->set_name (name); } @@ -231,14 +212,26 @@ 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] = !group->is_hidden(); - row[group_columns.text] = group->name(); + 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) { + edit_group_display.set_cursor (group_model->get_path (row)); + edit_group_display.grab_focus (); + } } void @@ -283,4 +276,20 @@ Editor::group_flags_changed (void* src, RouteGroup* group) 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); + } + } +} diff --git a/gtk2_ardour/mixer_strip.cc b/gtk2_ardour/mixer_strip.cc index e4d023e3a8..391ff0a820 100644 --- a/gtk2_ardour/mixer_strip.cc +++ b/gtk2_ardour/mixer_strip.cc @@ -360,7 +360,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, Route& rt, bool in_mixer) name_button.signal_button_release_event().connect (mem_fun(*this, &MixerStrip::name_button_button_release), false); - group_button.signal_button_press_event().connect (mem_fun(*this, &MixerStrip::select_mix_group), false); + group_button.signal_button_release_event().connect (mem_fun(*this, &MixerStrip::select_mix_group), false); _width = (Width) -1; set_stuff_from_route (); @@ -1147,11 +1147,8 @@ MixerStrip::comment_changed (void *src) void MixerStrip::set_mix_group (RouteGroup *rg) - { _route.set_mix_group (rg, this); - delete group_menu; - group_menu = 0; } void @@ -1160,25 +1157,34 @@ MixerStrip::add_mix_group_to_menu (RouteGroup *rg, RadioMenuItem::Group* group) using namespace Menu_Helpers; MenuList& items = group_menu->items(); + items.push_back (RadioMenuElem (*group, rg->name(), bind (mem_fun(*this, &MixerStrip::set_mix_group), rg))); + + if (_route.mix_group() == rg) { + static_cast<RadioMenuItem*>(&items.back())->set_active (); + } } -gint +bool MixerStrip::select_mix_group (GdkEventButton *ev) { using namespace Menu_Helpers; - group_menu = new Menu; + if (group_menu == 0) { + group_menu = new Menu; + } group_menu->set_name ("ArdourContextMenu"); MenuList& items = group_menu->items(); RadioMenuItem::Group group; - + + items.clear (); items.push_back (RadioMenuElem (group, _("no group"), bind (mem_fun(*this, &MixerStrip::set_mix_group), (RouteGroup *) 0))); _session.foreach_mix_group (bind (mem_fun (*this, &MixerStrip::add_mix_group_to_menu), &group)); + + group_menu->popup (1, 0); - group_menu->popup (ev->button, 0); - return stop_signal (group_button, "button_press_event"); + return true; } void diff --git a/gtk2_ardour/mixer_strip.h b/gtk2_ardour/mixer_strip.h index 1e18d42646..9ce502e919 100644 --- a/gtk2_ardour/mixer_strip.h +++ b/gtk2_ardour/mixer_strip.h @@ -234,7 +234,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox void set_mix_group (ARDOUR::RouteGroup *); void add_mix_group_to_menu (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*); - gint select_mix_group (GdkEventButton *); + bool select_mix_group (GdkEventButton *); void mix_group_changed (void *); void polarity_toggled (); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index 98e9a6c41c..685b96d1fd 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -142,17 +142,32 @@ Mixer_UI::Mixer_UI (AudioEngine& eng) HButtonBox* mix_group_display_button_box = manage (new HButtonBox()); mix_group_display_button_box->set_homogeneous (true); - Button* mix_group_add_button = manage (new Button (Stock::ADD)); - Button* mix_group_remove_button = manage (new Button (Stock::REMOVE)); + + Button* mix_group_add_button = manage (new Button ()); + Button* mix_group_remove_button = manage (new Button ()); + + Widget* w; + + w = manage (new Image (Stock::ADD, ICON_SIZE_BUTTON)); + w->show(); + mix_group_add_button->add (*w); + + w = manage (new Image (Stock::REMOVE, ICON_SIZE_BUTTON)); + w->show(); + mix_group_remove_button->add (*w); mix_group_add_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::new_mix_group)); mix_group_remove_button->signal_clicked().connect (mem_fun (*this, &Mixer_UI::remove_selected_mix_group)); - mix_group_display_button_box->pack_start (*mix_group_add_button); - mix_group_display_button_box->pack_start (*mix_group_remove_button); + mix_group_display_button_box->pack_start (*mix_group_add_button, false, false); + mix_group_display_button_box->pack_start (*mix_group_remove_button, false, false); group_display_vbox.pack_start (group_display_scroller, true, true); - group_display_vbox.pack_start (*mix_group_display_button_box, false, false); + + HBox* hconstraint = manage (new HBox()); + hconstraint->pack_start (*mix_group_display_button_box, false, false); + + group_display_vbox.pack_start (*hconstraint, false, false); track_display_frame.set_name("BaseFrame"); track_display_frame.set_shadow_type (Gtk::SHADOW_IN); @@ -853,7 +868,7 @@ Mixer_UI::new_mix_group () break; } #else - session->add_mix_group ("unnamed"); + session->add_mix_group (""); #endif } @@ -970,14 +985,25 @@ Mixer_UI::add_mix_group (RouteGroup* group) { ENSURE_GUI_THREAD(bind (mem_fun(*this, &Mixer_UI::add_mix_group), group)); + bool focus = false; TreeModel::Row row = *(group_model->append()); row[group_columns.active] = group->is_active(); row[group_columns.visible] = true; - row[group_columns.text] = group->name(); row[group_columns.group] = 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, &Mixer_UI::group_flags_changed), group)); + + if (focus) { + group_display.set_cursor (group_model->get_path (row)); + group_display.grab_focus (); + } } bool |