+void
+PluginSelector::hidden_changed (const std::string& path)
+{
+ PluginInfoPtr pi;
+
+ if (in_row_change) {
+ return;
+ }
+
+ in_row_change = true;
+
+ TreeModel::iterator iter = plugin_model->get_iter (path);
+
+ if (iter) {
+
+ bool hidden = !(*iter)[plugin_columns.hidden];
+
+ /* change state */
+
+ (*iter)[plugin_columns.favorite] = false;
+ (*iter)[plugin_columns.hidden] = hidden;
+ PluginManager::PluginStatusType status = (hidden ? PluginManager::Hidden : PluginManager::Normal);
+
+ /* save new statuses list */
+
+ pi = (*iter)[plugin_columns.plugin];
+
+ manager.set_status (pi->type, pi->unique_id, status);
+
+ manager.save_statuses ();
+
+ build_plugin_menu ();
+ }
+ in_row_change = false;
+}
+
+bool
+PluginSelector::fil_hidden_button_release (GdkEventButton*)
+{
+ _show_hidden = (fil_hidden_button.active_state() == 0);
+ fil_hidden_button.set_active (_show_hidden);
+ refill ();
+ return false;
+}
+
+static Gtkmm2ext::ActiveState next_state (Gtkmm2ext::ActiveState s){
+ switch (s) {
+ case Gtkmm2ext::Off:
+ return Gtkmm2ext::ImplicitActive;
+ break;
+ case Gtkmm2ext::ImplicitActive:
+ return Gtkmm2ext::ExplicitActive;
+ break;
+ case Gtkmm2ext::ExplicitActive:
+ return Gtkmm2ext::Off;
+ break;
+ default: assert(0); break; // not reached
+ }
+ /* impossible, but keep some compiles happy */
+ fatal << string_compose (_("programming error: %1"),
+ X_("Illegal Active State."))
+ << endmsg;
+ abort(); /*NOTREACHED*/
+ return Gtkmm2ext::Off;
+}
+
+static Gtkmm2ext::ActiveState prev_state (Gtkmm2ext::ActiveState s){
+ switch (s) {
+ case Gtkmm2ext::Off:
+ return Gtkmm2ext::ExplicitActive;
+ break;
+ case Gtkmm2ext::ImplicitActive:
+ return Gtkmm2ext::Off;
+ break;
+ case Gtkmm2ext::ExplicitActive:
+ return Gtkmm2ext::ImplicitActive;
+ break;
+ default: assert(0); break; // not reached
+ }
+ /* impossible, but keep some compiles happy */
+ fatal << string_compose (_("programming error: %1"),
+ X_("Illegal Active State."))
+ << endmsg;
+ abort(); /*NOTREACHED*/
+ return Gtkmm2ext::Off;
+}
+
+bool
+PluginSelector::fil_instruments_button_release (GdkEventButton* ev)
+{
+ if (ev->button == 3) {
+ _show_instruments = prev_state (fil_instruments_button.active_state());
+ } else {
+ _show_instruments = next_state (fil_instruments_button.active_state());
+ }
+ fil_instruments_button.set_active_state (_show_instruments);
+ refill ();
+ return false;
+}
+
+bool
+PluginSelector::fil_analysis_button_release (GdkEventButton* ev)
+{
+ if (ev->button == 3) {
+ _show_analysers = prev_state (fil_analysis_button.active_state());
+ } else {
+ _show_analysers = next_state (fil_analysis_button.active_state());
+ }
+ fil_analysis_button.set_active_state (_show_analysers);
+ refill ();
+ return false;
+}
+
+bool
+PluginSelector::fil_utils_button_release (GdkEventButton* ev)
+{
+ if (ev->button == 3) {
+ _show_utils = prev_state (fil_utils_button.active_state());
+ } else {
+ _show_utils = next_state (fil_utils_button.active_state());
+ }
+ fil_utils_button.set_active_state (_show_utils);
+ refill ();
+ return false;
+}
+