First part of consolidating ::roll(), ::no_roll()
[ardour.git] / libs / ardour / port_manager.cc
index 268d7cb9feb3b6be80fe6d27089ffadb3b2f082b..dfc1c6442107c4aefdf5c59356d0b92813f0a514 100644 (file)
@@ -27,7 +27,6 @@
 #include <glibmm/fileutils.h>
 #include <glibmm/miscutils.h>
 
-#include "pbd/convert.h"
 #include "pbd/error.h"
 
 #include "ardour/async_midi_port.h"
@@ -40,6 +39,7 @@
 #include "ardour/port_manager.h"
 #include "ardour/profile.h"
 #include "ardour/session.h"
+#include "ardour/types_convert.h"
 
 #include "pbd/i18n.h"
 
@@ -749,7 +749,7 @@ void
 PortManager::cycle_start (pframes_t nframes)
 {
        Port::set_global_port_buffer_offset (0);
-        Port::set_cycle_framecnt (nframes);
+        Port::set_cycle_samplecnt (nframes);
 
        _cycle_ports = ports.reader ();
 
@@ -1069,9 +1069,9 @@ PortManager::save_midi_port_info ()
 
                for (MidiPortInfo::iterator i = midi_port_info.begin(); i != midi_port_info.end(); ++i) {
                        XMLNode* node = new XMLNode (X_("port"));
-                       node->add_property (X_("name"), i->first);
-                       node->add_property (X_("input"), i->second.input ? X_("yes") : X_("no"));
-                       node->add_property (X_("properties"), enum_2_string (i->second.properties));
+                       node->set_property (X_("name"), i->first);
+                       node->set_property (X_("input"), i->second.input);
+                       node->set_property (X_("properties"), i->second.properties);
                        root->add_child_nocopy (*node);
                }
        }
@@ -1103,27 +1103,15 @@ PortManager::load_midi_port_info ()
        midi_port_info.clear ();
 
        for (XMLNodeConstIterator i = tree.root()->children().begin(); i != tree.root()->children().end(); ++i) {
-               XMLProperty const* prop;
                MidiPortInformation mpi;
                string name;
 
-               if ((prop = (*i)->property (X_("name"))) == 0) {
+               if (!(*i)->get_property (X_("name"), name) ||
+                   !(*i)->get_property (X_("input"), mpi.input) ||
+                   !(*i)->get_property (X_("properties"), mpi.properties)) {
                        continue;
                }
 
-               name = prop->value ();
-
-               if ((prop = (*i)->property (X_("input"))) == 0) {
-                       continue;
-               }
-               mpi.input = string_is_affirmative (prop->value());
-
-               if ((prop = (*i)->property (X_("properties"))) == 0) {
-                       continue;
-               }
-
-               mpi.properties = (MidiPortFlags) string_2_enum (prop->value(), mpi.properties);
-
                midi_port_info.insert (make_pair (name, mpi));
        }
 }
@@ -1204,6 +1192,12 @@ PortManager::fill_midi_port_info_locked ()
         * PortManager
         */
 
+       // rg: I don't understand what this attempts to solve
+       //
+       // Naming ports should be left to the backend:
+       // Ardour cannot associate numeric IDs with corresponding hardware.
+       // (see also 7dde6c3b)
+
        for (MidiPortInfo::iterator x = midi_port_info.begin(); x != midi_port_info.end(); ++x) {
                PortEngine::PortHandle ph = _backend->get_port_by_name (x->first);
 
@@ -1215,7 +1209,7 @@ PortManager::fill_midi_port_info_locked ()
                        continue;
                }
 
-               if (x->second.pretty_name != x->first) {
+               if (!x->second.pretty_name.empty () && x->second.pretty_name != x->first) {
                        /* name set in port info ... propagate */
                        _backend->set_port_property (ph, "http://jackaudio.org/metadata/pretty-name", x->second.pretty_name, string());
                } else {