PBD::Signal<...>::connect() is already thread safe, so drop intermediate proxy/call_s...
[ardour.git] / gtk2_ardour / visibility_group.h
index d9e13e1e930c04ec5ec706de8be08980cf499506..ce1adecdd46d804b7b46613d14eb49e2167bcbc1 100644 (file)
@@ -36,8 +36,15 @@ class VisibilityGroup
 {
 public:
        VisibilityGroup (std::string const &);
-       
-       void add (Gtk::Widget *, std::string const &, std::string const &, bool visible = true);
+
+       void add (
+               Gtk::Widget *,
+               std::string const &,
+               std::string const &,
+               bool visible = false,
+               boost::function<boost::optional<bool> ()> = 0
+               );
+
        Gtk::Menu* menu ();
        Gtk::Widget* list_view ();
        bool button_press_event (GdkEventButton *);
@@ -48,7 +55,10 @@ public:
        std::string get_state_value () const;
 
        PBD::Signal0<void> VisibilityChanged;
-       
+
+       static std::string remove_element (std::string const& from, std::string const& element);
+       static std::string add_element (std::string const& from, std::string const& element);
+
 private:
 
        struct Member {
@@ -56,6 +66,7 @@ private:
                std::string  id;
                std::string  name;
                bool         visible;
+               boost::function<boost::optional<bool> ()> override;
        };
 
        class ModelColumns : public Gtk::TreeModelColumnRecord {
@@ -74,6 +85,7 @@ private:
        void toggle (std::vector<Member>::iterator);
        void list_view_visible_changed (std::string const &);
        void update_list_view ();
+       bool should_actually_be_visible (Member const &) const;
 
        std::vector<Member> _members;
        std::string _xml_property_name;