basic GUI framework for setting Disk I/O options
authorPaul Davis <paul@linuxaudiosystems.com>
Fri, 21 Jul 2017 21:03:41 +0000 (17:03 -0400)
committerPaul Davis <paul@linuxaudiosystems.com>
Mon, 18 Sep 2017 15:40:53 +0000 (11:40 -0400)
gtk2_ardour/ardour.menus.in
gtk2_ardour/mixer_strip.cc
gtk2_ardour/processor_box.cc
gtk2_ardour/processor_box.h
gtk2_ardour/route_ui.cc
gtk2_ardour/route_ui.h

index 855f5679f44804ef4c78b1f35e345a29b06f3440..41354563c616fe0b05aaff3b04891517b7c6cf52 100644 (file)
     <menuitem action='controls'/>
     <menuitem action='send_options'/>
     <separator/>
+    <menu action="disk-io-menu">
+        <menuitem action='disk-io-prefader'/>
+       <menuitem action='disk-io-postfader'/>
+       <menuitem action='disk-io-custom'/>
+    </menu>
+    <separator/>
     <menuitem action='clear'/>
     <menuitem action='clear_pre'/>
     <menuitem action='clear_post'/>
index ea3aa7206008701437a9840e3ec2df17b8a32966..c3e9b6e1f230cfb9f45c8284445c0a7aaf5f306b 100644 (file)
@@ -1727,6 +1727,18 @@ MixerStrip::build_route_ops_menu ()
                i->signal_activate().connect (sigc::hide_return (sigc::bind (sigc::mem_fun (*_route, &Route::set_strict_io), !_route->strict_io())));
        }
 
+       if (is_track()) {
+               items.push_back (SeparatorElem());
+
+               Gtk::Menu* dio_menu = new Menu;
+               MenuList& dio_items = dio_menu->items();
+               dio_items.push_back (MenuElem (_("Record Pre-Fader"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOPreFader)));
+               dio_items.push_back (MenuElem (_("Record Post-Fader"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOPostFader)));
+               dio_items.push_back (MenuElem (_("Custom Record+Playback Positions"), sigc::bind (sigc::mem_fun (*this, &RouteUI::set_disk_io_point), DiskIOCustom)));
+
+               items.push_back (MenuElem (_("Disk I/O..."), *dio_menu));
+       }
+
        _plugin_insert_cnt = 0;
        _route->foreach_processor (sigc::mem_fun (*this, &MixerStrip::help_count_plugins));
        if (_plugin_insert_cnt > 0) {
index ca1e448b587e4176ba5ab95dac348632d4ec544f..e6d9b44cf45f39820a0753d2db0c86e841590efa 100644 (file)
@@ -113,6 +113,7 @@ RefPtr<Action> ProcessorBox::rename_action;
 RefPtr<Action> ProcessorBox::delete_action;
 RefPtr<Action> ProcessorBox::backspace_action;
 RefPtr<Action> ProcessorBox::manage_pins_action;
+RefPtr<Action> ProcessorBox::disk_io_action;
 RefPtr<Action> ProcessorBox::edit_action;
 RefPtr<Action> ProcessorBox::edit_generic_action;
 RefPtr<ActionGroup> ProcessorBox::processor_box_actions;
@@ -2105,7 +2106,6 @@ ProcessorBox::show_processor_menu (int arg)
 
        /* Sensitise actions as approprioate */
 
-
        const bool sensitive = !processor_display.selection().empty() && ! stub_processor_selected ();
 
        paste_action->set_sensitive (!_p_selection.processors.empty());
@@ -2123,6 +2123,11 @@ ProcessorBox::show_processor_menu (int arg)
        }
 
        manage_pins_action->set_sensitive (pi != 0);
+       if (boost::dynamic_pointer_cast<Track>(_route)) {
+               disk_io_action->set_sensitive (true);
+       } else {
+               disk_io_action->set_sensitive (false);
+       }
 
        /* allow editing with an Ardour-generated UI for plugin inserts with editors */
        edit_action->set_sensitive (pi && pi->plugin()->has_editor ());
@@ -3367,6 +3372,14 @@ ProcessorBox::ab_plugins ()
        ab_direction = !ab_direction;
 }
 
+void
+ProcessorBox::set_disk_io_position (DiskIOPoint diop)
+{
+       boost::shared_ptr<Track> t = boost::dynamic_pointer_cast<Track> (_route);
+       if (t) {
+               t->set_disk_io_position (diop);
+       }
+}
 
 void
 ProcessorBox::clear_processors ()
@@ -3647,6 +3660,12 @@ ProcessorBox::register_actions ()
                processor_box_actions, X_("manage-pins"), _("Pin Connections..."),
                sigc::ptr_fun (ProcessorBox::rb_manage_pins));
 
+       /* Disk IO stuff */
+       disk_io_action = myactions.register_action (processor_box_actions, X_("disk-io-menu"), _("Disk I/O ..."));
+       myactions.register_action (processor_box_actions, X_("disk-io-prefader"), _("Pre-Fader."), sigc::bind (sigc::ptr_fun (ProcessorBox::rb_set_disk_io_position), DiskIOPreFader));
+       myactions.register_action (processor_box_actions, X_("disk-io-postfader"), _("Post-Fader."), sigc::bind (sigc::ptr_fun (ProcessorBox::rb_set_disk_io_position), DiskIOPostFader));
+       myactions.register_action (processor_box_actions, X_("disk-io-custom"), _("Custom."), sigc::bind (sigc::ptr_fun (ProcessorBox::rb_set_disk_io_position), DiskIOCustom));
+
        /* show editors */
        edit_action = myactions.register_action (
                processor_box_actions, X_("edit"), _("Edit..."),
@@ -3679,6 +3698,16 @@ ProcessorBox::rb_ab_plugins ()
        _current_processor_box->ab_plugins ();
 }
 
+void
+ProcessorBox::rb_set_disk_io_position (DiskIOPoint diop)
+{
+       if (_current_processor_box == 0) {
+               return;
+       }
+
+       _current_processor_box->set_disk_io_position (diop);
+}
+
 void
 ProcessorBox::rb_manage_pins ()
 {
index 400b9fafc9da2c8febf9ee331d3865f4d09bfb83..cb13f42b436b0a3504b76e703db598e6a2d045f4 100644 (file)
@@ -552,6 +552,8 @@ private:
        void for_selected_processors (void (ProcessorBox::*pmf)(boost::shared_ptr<ARDOUR::Processor>));
        void get_selected_processors (ProcSelection&) const;
 
+       void set_disk_io_position (ARDOUR::DiskIOPoint);
+
        bool can_cut() const;
        bool stub_processor_selected() const;
 
@@ -562,6 +564,7 @@ private:
        static Glib::RefPtr<Gtk::Action> delete_action;
        static Glib::RefPtr<Gtk::Action> backspace_action;
        static Glib::RefPtr<Gtk::Action> manage_pins_action;
+       static Glib::RefPtr<Gtk::Action> disk_io_action;
        static Glib::RefPtr<Gtk::Action> edit_action;
        static Glib::RefPtr<Gtk::Action> edit_generic_action;
        void paste_processor_state (const XMLNodeList&, boost::shared_ptr<ARDOUR::Processor>);
@@ -595,6 +598,7 @@ private:
        static void rb_deactivate_all ();
        static void rb_ab_plugins ();
        static void rb_manage_pins ();
+       static void rb_set_disk_io_position (ARDOUR::DiskIOPoint);
        static void rb_edit ();
        static void rb_edit_generic ();
 
index 2aa3212a902e771a973feab0efb72554e3f0fe21..0eea9d8d44b2992034e171ce9b50640a3f02a8ec 100644 (file)
@@ -2426,3 +2426,11 @@ RouteUI::stripable () const
 {
        return _route;
 }
+
+void
+RouteUI::set_disk_io_point (DiskIOPoint diop)
+{
+       if (_route && is_track()) {
+               track()->set_disk_io_position (diop);
+       }
+}
index d39e8deabf3271d608daa592e0d193072a2b24fa..bac608eed43dcf217f522e0dac2c75247a9997a3 100644 (file)
@@ -271,6 +271,8 @@ public:
        void comment_edited ();
        bool ignore_comment_edit;
 
+       void set_disk_io_point (ARDOUR::DiskIOPoint);
+
 protected:
 
        ArdourWindow*  comment_window;