a start at the group/master menu related structure
authorPaul Davis <paul@linuxaudiosystems.com>
Thu, 19 May 2016 03:44:09 +0000 (23:44 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Tue, 31 May 2016 19:30:43 +0000 (15:30 -0400)
gtk2_ardour/editor_route_groups.cc
gtk2_ardour/group_tabs.cc
gtk2_ardour/group_tabs.h
gtk2_ardour/mixer_ui.cc

index 85644359f6fa747836f107e6824edaae0c0396aa..f518cf8ef9d6bb811bcd1e28e20c5d24decb5251 100644 (file)
@@ -574,7 +574,7 @@ EditorRouteGroups::run_new_group_dialog ()
 {
        RouteList rl;
 
-       return _editor->_group_tabs->run_new_group_dialog (rl);
+       return _editor->_group_tabs->run_new_group_dialog (rl, false);
 }
 
 /** Called when a model row is deleted, but also when the model is
index e079aa13869ae95212f6a1f79bf08a68a591b708..32b6569488d89b794d595a55b360732377e45c6c 100644 (file)
@@ -307,22 +307,45 @@ GroupTabs::get_menu (RouteGroup* g, bool TabArea)
 
        delete _menu;
 
-       Menu* new_from = new Menu;
-       MenuList& f = new_from->items ();
-       f.push_back (MenuElem (_("Selection..."), sigc::mem_fun (*this, &GroupTabs::new_from_selection)));
-       f.push_back (MenuElem (_("Record Enabled..."), sigc::mem_fun (*this, &GroupTabs::new_from_rec_enabled)));
-       f.push_back (MenuElem (_("Soloed..."), sigc::mem_fun (*this, &GroupTabs::new_from_soloed)));
-
        _menu = new Menu;
        _menu->set_name ("ArdourContextMenu");
        MenuList& items = _menu->items();
 
        if (!TabArea) {
                items.push_back (MenuElem (_("Create New Group ..."), hide_return (sigc::mem_fun(*this, &GroupTabs::create_and_add_group))));
+               items.push_back (MenuElem (_("Create New Control Master ..."), hide_return (sigc::mem_fun(*this, &GroupTabs::create_and_add_master))));
+               items.push_back (MenuElem (_("Create New Group & Control Master ..."), hide_return (sigc::mem_fun(*this, &GroupTabs::create_and_add_group_with_master))));
        }
 
+       Menu* new_from = new Menu;
+       {
+               MenuList& f = new_from->items ();
+               f.push_back (MenuElem (_("Selection..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_selection), false, false)));
+               f.push_back (MenuElem (_("Record Enabled..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_rec_enabled), false, false)));
+               f.push_back (MenuElem (_("Soloed..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_soloed), false, false)));
+       }
        items.push_back (MenuElem (_("Create New Group From"), *new_from));
 
+       new_from = new Menu;
+       {
+               MenuList& f = new_from->items ();
+               f.push_back (MenuElem (_("Selection..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_selection), true, false)));
+               f.push_back (MenuElem (_("Record Enabled..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_rec_enabled), true, false)));
+               f.push_back (MenuElem (_("Soloed..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_soloed), true, false)));
+       }
+       items.push_back (MenuElem (_("Create New Master From"), *new_from));
+
+       new_from = new Menu;
+       {
+               MenuList& f = new_from->items ();
+               f.push_back (MenuElem (_("Selection..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_selection), true, true)));
+               f.push_back (MenuElem (_("Record Enabled..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_rec_enabled), true, true)));
+               f.push_back (MenuElem (_("Soloed..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::new_from_soloed), true, true)));
+       }
+       items.push_back (MenuElem (_("Create New Group & Master From"), *new_from));
+
+       Menu* vca_menu;
+
        if (g) {
                items.push_back (MenuElem (_("Edit Group..."), sigc::bind (sigc::mem_fun (*this, &GroupTabs::edit_group), g)));
                items.push_back (MenuElem (_("Collect Group"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::collect), g)));
@@ -335,6 +358,13 @@ GroupTabs::get_menu (RouteGroup* g, bool TabArea)
                }
                items.push_back (MenuElem (_("Add New Aux Bus (pre-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PreFader)));
                items.push_back (MenuElem (_("Add New Aux Bus (post-fader)"), sigc::bind (sigc::mem_fun (*this, &GroupTabs::subgroup), g, true, PostFader)));
+               items.push_back (SeparatorElem());
+
+               vca_menu = new Menu;
+               MenuList& f (vca_menu->items());
+               f.push_back (MenuElem ("New", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 0)));
+               f.push_back (MenuElem ("VCA 1", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 1)));
+               items.push_back (MenuElem (_("Assign Group to Control Master..."), *vca_menu));
        }
 
        add_menu_items (_menu, g);
@@ -342,24 +372,68 @@ GroupTabs::get_menu (RouteGroup* g, bool TabArea)
        items.push_back (SeparatorElem());
        items.push_back (MenuElem (_("Enable All Groups"), sigc::mem_fun(*this, &GroupTabs::activate_all)));
        items.push_back (MenuElem (_("Disable All Groups"), sigc::mem_fun(*this, &GroupTabs::disable_all)));
+       items.push_back (SeparatorElem());
+
+       vca_menu = new Menu;
+       {
+               MenuList& f (vca_menu->items());
+               f.push_back (MenuElem ("New", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 0)));
+               f.push_back (MenuElem ("VCA 1", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 1)));
+
+       }
+
+       items.push_back (MenuElem (_("Assign Selection to Control Master..."), *vca_menu));
+
+       vca_menu = new Menu;
+       {
+               MenuList& f (vca_menu->items());
+               f.push_back (MenuElem ("New", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 0)));
+               f.push_back (MenuElem ("VCA 1", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_recenabled_to_master), 1)));
+
+       }
+       items.push_back (MenuElem (_("Assign Record Enabled to Control Master..."), *vca_menu));
+
+       vca_menu = new Menu;
+       {
+               MenuList& f (vca_menu->items());
+               f.push_back (MenuElem ("New", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_selection_to_master), 0)));
+               f.push_back (MenuElem ("VCA 1", sigc::bind (sigc::mem_fun (*this, &GroupTabs::assign_soloed_to_master), 1)));
+
+       }
+       items.push_back (MenuElem (_("Assign Soloed to Control Master...")));
 
        return _menu;
 
 }
 
 void
-GroupTabs::new_from_selection ()
+GroupTabs::assign_selection_to_master (uint32_t which)
+{
+}
+
+void
+GroupTabs::assign_recenabled_to_master (uint32_t which)
+{
+}
+
+void
+GroupTabs::assign_soloed_to_master (uint32_t which)
+{
+}
+
+void
+GroupTabs::new_from_selection (bool just_master, bool with_master)
 {
        RouteList rl = selected_routes ();
        if (rl.empty()) {
                return;
        }
 
-       run_new_group_dialog (rl);
+       run_new_group_dialog (rl, with_master);
 }
 
 void
-GroupTabs::new_from_rec_enabled ()
+GroupTabs::new_from_rec_enabled (bool just_master, bool with_master)
 {
        boost::shared_ptr<RouteList> rl = _session->get_routes ();
 
@@ -376,11 +450,11 @@ GroupTabs::new_from_rec_enabled ()
                return;
        }
 
-       run_new_group_dialog (rec_enabled);
+       run_new_group_dialog (rec_enabled, with_master);
 }
 
 void
-GroupTabs::new_from_soloed ()
+GroupTabs::new_from_soloed (bool just_master, bool with_master)
 {
        boost::shared_ptr<RouteList> rl = _session->get_routes ();
 
@@ -396,11 +470,11 @@ GroupTabs::new_from_soloed ()
                return;
        }
 
-       run_new_group_dialog (soloed);
+       run_new_group_dialog (soloed, with_master);
 }
 
 void
-GroupTabs::run_new_group_dialog (RouteList const & rl)
+GroupTabs::run_new_group_dialog (RouteList const & rl, bool with_master)
 {
        RouteGroup* g = new RouteGroup (*_session, "");
        RouteGroupDialog d (g, true);
@@ -430,6 +504,27 @@ GroupTabs::create_and_add_group () const
        return g;
 }
 
+RouteGroup *
+GroupTabs::create_and_add_master () const
+{
+       return 0;
+}
+
+RouteGroup *
+GroupTabs::create_and_add_group_with_master () const
+{
+       RouteGroup* g = new RouteGroup (*_session, "");
+       RouteGroupDialog d (g, true);
+
+       if (d.do_run ()) {
+               delete g;
+               return 0;
+       }
+
+       _session->add_route_group (g);
+       return g;
+}
+
 void
 GroupTabs::edit_group (RouteGroup* g)
 {
index 325e3f7ee76494de35964ddbee8e974cc2a1900e..ff20cac32ad25708b67fb36c745c1870ecfa637d 100644 (file)
@@ -48,7 +48,7 @@ public:
         */
        Gtk::Menu* get_menu (ARDOUR::RouteGroup* g, bool tabArea = false);
 
-       void run_new_group_dialog (ARDOUR::RouteList const &);
+       void run_new_group_dialog (ARDOUR::RouteList const &, bool with_master);
 
        static void set_group_color (ARDOUR::RouteGroup *, uint32_t);
        static std::string group_gui_id (ARDOUR::RouteGroup *);
@@ -93,10 +93,12 @@ private:
        virtual void add_menu_items (Gtk::Menu *, ARDOUR::RouteGroup *) {}
        virtual ARDOUR::RouteList selected_routes () const = 0;
 
-       void new_from_selection ();
-       void new_from_rec_enabled ();
-       void new_from_soloed ();
+       void new_from_selection (bool just_master, bool with_master);
+       void new_from_rec_enabled (bool just_master, bool with_master);
+       void new_from_soloed (bool just_master, bool with_master);
        ARDOUR::RouteGroup* create_and_add_group () const;
+       ARDOUR::RouteGroup* create_and_add_master () const;
+       ARDOUR::RouteGroup* create_and_add_group_with_master () const;
        void collect (ARDOUR::RouteGroup *);
        void set_activation (ARDOUR::RouteGroup *, bool);
        void edit_group (ARDOUR::RouteGroup *);
@@ -118,6 +120,10 @@ private:
        void route_added_to_route_group (ARDOUR::RouteGroup *, boost::weak_ptr<ARDOUR::Route>);
        void route_removed_from_route_group (ARDOUR::RouteGroup *, boost::weak_ptr<ARDOUR::Route>);
 
+       void assign_selection_to_master (uint32_t which);
+       void assign_recenabled_to_master (uint32_t which);
+       void assign_soloed_to_master (uint32_t which);
+
        Gtk::Menu* _menu;
        std::list<Tab> _tabs; ///< current list of tabs
        Tab* _dragging; ///< tab being dragged, or 0
index ab437725528ef368cdd5668cdfe6db9837ec86dc..249f34f8ad8f89c521a80875f6753bf3d82a75c7 100644 (file)
@@ -1535,7 +1535,7 @@ Mixer_UI::new_route_group ()
 {
        RouteList rl;
 
-       _group_tabs->run_new_group_dialog (rl);
+       _group_tabs->run_new_group_dialog (rl, false);
 }
 
 void