X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmixer_ui.cc;h=4c5d60d6c753c27479b2a7efe9df713f6c8ae532;hb=e54413ee46831252286ecfd12775236c439d9d44;hp=e3f8111ca6e3fe149d8f0d61bbfcf23cce735d88;hpb=a67008a5cbadba3caaf240043c609513f16e43d9;p=ardour.git diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index e3f8111ca6..4c5d60d6c7 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -280,32 +280,30 @@ Mixer_UI::Mixer_UI () XMLNode const * settings = ARDOUR_UI::instance()->mixer_settings(); - XMLProperty const * prop; float fract; { LocaleGuard lg; - if (!settings || ((prop = settings->property ("mixer-rhs-pane1-pos")) == 0) || ((fract = atof (prop->value())) > 1.0)) { - rhs_pane1.set_divider (0, 0.6f); - } else { - rhs_pane1.set_divider (0, fract); + if (!settings || !settings->get_property ("mixer-rhs-pane1-pos", fract) || fract > 1.0) { + fract = 0.6f; } - if (!settings || ((prop = settings->property ("mixer-rhs-pane2-pos")) == 0) || ((fract = atof (prop->value())) > 1.0)) { - rhs_pane2.set_divider (0, 0.7f); - } else { - rhs_pane2.set_divider (0, fract); + rhs_pane1.set_divider (0, fract); + + if (!settings || !settings->get_property ("mixer-rhs-pane2-pos", fract) || fract > 1.0) { + fract = 0.7f; } - if (!settings || ((prop = settings->property ("mixer-list-hpane-pos")) == 0) || ((fract = atof (prop->value())) > 1.0)) { - list_hpane.set_divider (0, 0.2f); - } else { - list_hpane.set_divider (0, fract); + rhs_pane2.set_divider (0, fract); + + if (!settings || !settings->get_property ("mixer-list-hpane-pos", fract) || fract > 1.0) { + fract = 0.2f; } - if (!settings || ((prop = settings->property ("mixer-inner-pane-pos")) == 0) || ((fract = atof (prop->value())) > 1.0)) { - inner_pane.set_divider (0, 0.8f); - } else { - inner_pane.set_divider (0, atof (prop->value())); + list_hpane.set_divider (0, fract); + + if (!settings || !settings->get_property ("mixer-inner-pane-pos", fract) || fract > 1.0) { + fract = 0.8f; } + inner_pane.set_divider (0, fract); } rhs_pane1.set_drag_cursor (*PublicEditor::instance().cursors()->expand_up_down); @@ -375,6 +373,7 @@ Mixer_UI::~Mixer_UI () delete _monitor_section; } delete _plugin_selector; + delete track_menu; } void @@ -516,7 +515,6 @@ Mixer_UI::add_stripables (StripableList& slist) MixerStrip* strip; - try { PBD::Unwinder uw (no_track_list_redisplay, true); @@ -593,10 +591,6 @@ Mixer_UI::add_stripables (StripableList& slist) row[stripable_columns.stripable] = route; row[stripable_columns.strip] = strip; - if (nroutes != 0) { - _selection.add (strip); - } - } else { out_packer.pack_start (*strip, false, false); @@ -617,6 +611,9 @@ Mixer_UI::add_stripables (StripableList& slist) track_display.set_model (track_model); + /* catch up on selection state, which we left to the editor to set */ + sync_treeview_from_presentation_info (PropertyChange (Properties::selected)); + if (!from_scratch) { sync_presentation_info_from_treeview (); } @@ -1549,21 +1546,14 @@ Mixer_UI::initial_track_display () sync_treeview_from_presentation_info (Properties::order); } -void -Mixer_UI::show_track_list_menu () -{ - if (track_menu == 0) { - build_track_menu (); - } - - track_menu->popup (1, gtk_get_current_event_time()); -} - bool Mixer_UI::track_display_button_press (GdkEventButton* ev) { if (Keyboard::is_context_menu_event (ev)) { - show_track_list_menu (); + if (track_menu == 0) { + build_track_menu (); + } + track_menu->popup (ev->button, ev->time); return true; } if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 1)) { @@ -2077,27 +2067,22 @@ private: int Mixer_UI::set_state (const XMLNode& node, int version) { - XMLProperty const * prop; LocaleGuard lg; + bool yn; Tabbable::set_state (node, version); - if ((prop = node.property ("narrow-strips"))) { - if (string_is_affirmative (prop->value())) { + if (node.get_property ("narrow-strips", yn)) { + if (yn) { set_strip_width (Narrow); } else { set_strip_width (Wide); } } - if ((prop = node.property ("show-mixer"))) { - if (string_is_affirmative (prop->value())) { - _visible = true; - } - } + node.get_property ("show-mixer", _visible); - if ((prop = node.property ("maximised"))) { - bool yn = string_is_affirmative (prop->value()); + if (node.get_property ("maximised", yn)) { Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleMaximalMixer")); assert (act); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); @@ -2107,8 +2092,7 @@ Mixer_UI::set_state (const XMLNode& node, int version) } } - if ((prop = node.property ("show-mixer-list"))) { - bool yn = string_is_affirmative (prop->value()); + if (node.get_property ("show-mixer-list", yn)) { Glib::RefPtr act = ActionManager::get_action (X_("Common"), X_("ToggleMixerList")); assert (act); Glib::RefPtr tact = Glib::RefPtr::cast_dynamic(act); @@ -2126,11 +2110,11 @@ Mixer_UI::set_state (const XMLNode& node, int version) const XMLNodeList& kids = plugin_order->children("PluginInfo"); XMLNodeConstIterator i; for (i = kids.begin(); i != kids.end(); ++i) { - if ((prop = (*i)->property ("unique-id"))) { - std::string unique_id = prop->value(); + std::string unique_id; + if ((*i)->get_property ("unique-id", unique_id)) { order.push_back (unique_id); - if ((prop = (*i)->property ("expanded"))) { - favorite_ui_state[unique_id] = string_is_affirmative (prop->value()); + if ((*i)->get_property ("expanded", yn)) { + favorite_ui_state[unique_id] = yn; } } } @@ -2145,34 +2129,29 @@ XMLNode& Mixer_UI::get_state () { XMLNode* node = new XMLNode (X_("Mixer")); - char buf[128]; LocaleGuard lg; node->add_child_nocopy (Tabbable::get_state()); - snprintf(buf,sizeof(buf), "%f", rhs_pane1.get_divider()); - node->add_property(X_("mixer-rhs-pane1-pos"), string(buf)); - snprintf(buf,sizeof(buf), "%f", rhs_pane2.get_divider()); - node->add_property(X_("mixer-rhs_pane2-pos"), string(buf)); - snprintf(buf,sizeof(buf), "%f", list_hpane.get_divider()); - node->add_property(X_("mixer-list-hpane-pos"), string(buf)); - snprintf(buf,sizeof(buf), "%f", inner_pane.get_divider()); - node->add_property(X_("mixer-inner-pane-pos"), string(buf)); + node->set_property (X_("mixer-rhs-pane1-pos"), rhs_pane1.get_divider()); + node->set_property (X_("mixer-rhs_pane2-pos"), rhs_pane2.get_divider()); + node->set_property (X_("mixer-list-hpane-pos"), list_hpane.get_divider()); + node->set_property (X_("mixer-inner-pane-pos"), inner_pane.get_divider()); - node->add_property ("narrow-strips", _strip_width == Narrow ? "yes" : "no"); - node->add_property ("show-mixer", _visible ? "yes" : "no"); - node->add_property ("show-mixer-list", _show_mixer_list ? "yes" : "no"); - node->add_property ("maximised", _maximised ? "yes" : "no"); + node->set_property ("narrow-strips", (_strip_width == Narrow)); + node->set_property ("show-mixer", _visible); + node->set_property ("show-mixer-list", _show_mixer_list); + node->set_property ("maximised", _maximised); store_current_favorite_order (); XMLNode* plugin_order = new XMLNode ("PluginOrder"); - int cnt = 0; + uint32_t cnt = 0; for (PluginInfoList::const_iterator i = favorite_order.begin(); i != favorite_order.end(); ++i, ++cnt) { XMLNode* p = new XMLNode ("PluginInfo"); - p->add_property ("sort", cnt); - p->add_property ("unique-id", (*i)->unique_id); + p->set_property ("sort", cnt); + p->set_property ("unique-id", (*i)->unique_id); if (favorite_ui_state.find ((*i)->unique_id) != favorite_ui_state.end ()) { - p->add_property ("expanded", favorite_ui_state[(*i)->unique_id]); + p->set_property ("expanded", favorite_ui_state[(*i)->unique_id]); } plugin_order->add_child_nocopy (*p); } @@ -2905,11 +2884,19 @@ Mixer_UI::showing_spill_for (boost::shared_ptr s) const return s == spilled_strip.lock(); } +void +Mixer_UI::show_editor_window () const +{ + PublicEditor::instance().make_visible (); +} + void Mixer_UI::register_actions () { Glib::RefPtr group = myactions.create_action_group (X_("Mixer")); + myactions.register_action (group, "show-editor", _("Show Editor"), sigc::mem_fun (*this, &Mixer_UI::show_editor_window)); + myactions.register_action (group, "solo", _("Toggle Solo on Mixer-Selected Tracks/Busses"), sigc::mem_fun (*this, &Mixer_UI::solo_action)); myactions.register_action (group, "mute", _("Toggle Mute on Mixer-Selected Tracks/Busses"), sigc::mem_fun (*this, &Mixer_UI::mute_action)); myactions.register_action (group, "recenable", _("Toggle Rec-enable on Mixer-Selected Tracks/Busses"), sigc::mem_fun (*this, &Mixer_UI::rec_enable_action));