Use PBD::to_string to convert period count in EngineControl class
[ardour.git] / gtk2_ardour / engine_dialog.cc
index 1a836f919c5962a657400966185cb24cff3662de..98463b783c93a0cd6505edd333027c5038419dc9 100644 (file)
@@ -1482,13 +1482,13 @@ EngineControl::set_nperiods_popdown_strings ()
        }
 
        for (vector<uint32_t>::const_iterator x = np.begin(); x != np.end(); ++x) {
-               s.push_back (nperiods_as_string (*x));
+               s.push_back (to_string (*x));
        }
 
        set_popdown_strings (nperiods_combo, s);
 
        if (!s.empty()) {
-               set_active_text_if_present (nperiods_combo, nperiods_as_string (backend->period_size())); // XXX 
+               set_active_text_if_present (nperiods_combo, to_string (backend->period_size())); // XXX
        }
 
        update_sensitivity ();
@@ -1608,18 +1608,9 @@ EngineControl::output_device_changed ()
 string
 EngineControl::bufsize_as_string (uint32_t sz)
 {
-       return string_compose (P_("%1 sample", "%1 samples", sz), sz);
+       return string_compose (P_("%1 sample", "%1 samples", sz), to_string(sz));
 }
 
-string
-EngineControl::nperiods_as_string (uint32_t np)
-{
-       char buf[8];
-       snprintf (buf, sizeof (buf), "%u", np);
-       return buf;
-}
-
-
 void
 EngineControl::sample_rate_changed ()
 {
@@ -1886,7 +1877,7 @@ EngineControl::maybe_display_saved_state ()
                }
                set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
 
-               set_active_text_if_present (nperiods_combo, nperiods_as_string (state->n_periods));
+               set_active_text_if_present (nperiods_combo, to_string(state->n_periods));
                /* call this explicitly because we're ignoring changes to
                   the controls at this point.
                 */
@@ -1920,30 +1911,31 @@ EngineControl::get_state ()
 
                        XMLNode* node = new XMLNode ("State");
 
-                       node->add_property ("backend", (*i)->backend);
-                       node->add_property ("driver", (*i)->driver);
-                       node->add_property ("device", (*i)->device);
-                       node->add_property ("input-device", (*i)->input_device);
-                       node->add_property ("output-device", (*i)->output_device);
-                       node->add_property ("sample-rate", (*i)->sample_rate);
-                       node->add_property ("buffer-size", (*i)->buffer_size);
-                       node->add_property ("n-periods", (*i)->n_periods);
-                       node->add_property ("input-latency", (*i)->input_latency);
-                       node->add_property ("output-latency", (*i)->output_latency);
-                       node->add_property ("input-channels", (*i)->input_channels);
-                       node->add_property ("output-channels", (*i)->output_channels);
-                       node->add_property ("active", (*i)->active ? "yes" : "no");
-                       node->add_property ("use-buffered-io", (*i)->use_buffered_io ? "yes" : "no");
-                       node->add_property ("midi-option", (*i)->midi_option);
-                       node->add_property ("lru", (*i)->active ? time (NULL) : (*i)->lru);
+                       node->set_property ("backend", (*i)->backend);
+                       node->set_property ("driver", (*i)->driver);
+                       node->set_property ("device", (*i)->device);
+                       node->set_property ("input-device", (*i)->input_device);
+                       node->set_property ("output-device", (*i)->output_device);
+                       node->set_property ("sample-rate", (*i)->sample_rate);
+                       node->set_property ("buffer-size", (*i)->buffer_size);
+                       node->set_property ("n-periods", (*i)->n_periods);
+                       node->set_property ("input-latency", (*i)->input_latency);
+                       node->set_property ("output-latency", (*i)->output_latency);
+                       node->set_property ("input-channels", (*i)->input_channels);
+                       node->set_property ("output-channels", (*i)->output_channels);
+                       node->set_property ("active", (*i)->active);
+                       node->set_property ("use-buffered-io", (*i)->use_buffered_io);
+                       node->set_property ("midi-option", (*i)->midi_option);
+                       int32_t lru_val = (*i)->active ? time (NULL) : (*i)->lru;
+                       node->set_property ("lru", lru_val );
 
                        XMLNode* midi_devices = new XMLNode ("MIDIDevices");
                        for (std::vector<MidiDeviceSettings>::const_iterator p = (*i)->midi_devices.begin(); p != (*i)->midi_devices.end(); ++p) {
                                XMLNode* midi_device_stuff = new XMLNode ("MIDIDevice");
-                               midi_device_stuff->add_property (X_("name"), (*p)->name);
-                               midi_device_stuff->add_property (X_("enabled"), (*p)->enabled);
-                               midi_device_stuff->add_property (X_("input-latency"), (*p)->input_latency);
-                               midi_device_stuff->add_property (X_("output-latency"), (*p)->output_latency);
+                               midi_device_stuff->set_property (X_("name"), (*p)->name);
+                               midi_device_stuff->set_property (X_("enabled"), (*p)->enabled);
+                               midi_device_stuff->set_property (X_("input-latency"), (*p)->input_latency);
+                               midi_device_stuff->set_property (X_("output-latency"), (*p)->output_latency);
                                midi_devices->add_child_nocopy (*midi_device_stuff);
                        }
                        node->add_child_nocopy (*midi_devices);
@@ -1980,7 +1972,6 @@ EngineControl::set_state (const XMLNode& root)
        XMLNodeConstIterator citer, cciter;
        XMLNode const * child;
        XMLNode const * grandchild;
-       XMLProperty const * prop = NULL;
 
        if (root.name() != "AudioMIDISetup") {
                return false;
@@ -2009,108 +2000,59 @@ EngineControl::set_state (const XMLNode& root)
                                continue;
                        }
 
-                       if ((prop = grandchild->property ("backend")) == 0) {
-                               continue;
-                       }
-                       state->backend = prop->value ();
-
-                       if ((prop = grandchild->property ("driver")) == 0) {
-                               continue;
-                       }
-                       state->driver = prop->value ();
-
-                       if ((prop = grandchild->property ("device")) == 0) {
+                       if (!grandchild->get_property ("backend", state->backend)) {
                                continue;
                        }
-                       state->device = prop->value ();
 
-                       if ((prop = grandchild->property ("input-device")) == 0) {
+                       // If any of the required properties are not found in the state node
+                       // then continue/skip to the next engine state
+                       if (!grandchild->get_property ("driver", state->driver) ||
+                           !grandchild->get_property ("device", state->device) ||
+                           !grandchild->get_property ("input-device", state->input_device) ||
+                           !grandchild->get_property ("output-device", state->output_device) ||
+                           !grandchild->get_property ("sample-rate", state->sample_rate) ||
+                           !grandchild->get_property ("buffer-size", state->buffer_size) ||
+                           !grandchild->get_property ("input-latency", state->input_latency) ||
+                           !grandchild->get_property ("output-latency", state->output_latency) ||
+                           !grandchild->get_property ("input-channels", state->input_channels) ||
+                           !grandchild->get_property ("output-channels", state->output_channels) ||
+                           !grandchild->get_property ("active", state->active) ||
+                           !grandchild->get_property ("use-buffered-io", state->use_buffered_io) ||
+                           !grandchild->get_property ("midi-option", state->midi_option)) {
                                continue;
                        }
-                       state->input_device = prop->value ();
 
-                       if ((prop = grandchild->property ("output-device")) == 0) {
-                               continue;
-                       }
-                       state->output_device = prop->value ();
-
-                       if ((prop = grandchild->property ("sample-rate")) == 0) {
-                               continue;
-                       }
-                       state->sample_rate = atof (prop->value ());
-
-                       if ((prop = grandchild->property ("buffer-size")) == 0) {
-                               continue;
-                       }
-                       state->buffer_size = atoi (prop->value ());
-
-                       if ((prop = grandchild->property ("n-periods")) == 0) {
+                       if (!grandchild->get_property ("n-periods", state->n_periods)) {
                                // optional (new value in 4.5)
                                state->n_periods = 0;
-                       } else {
-                               state->n_periods = atoi (prop->value ());
-                       }
-
-                       if ((prop = grandchild->property ("input-latency")) == 0) {
-                               continue;
-                       }
-                       state->input_latency = atoi (prop->value ());
-
-                       if ((prop = grandchild->property ("output-latency")) == 0) {
-                               continue;
-                       }
-                       state->output_latency = atoi (prop->value ());
-
-                       if ((prop = grandchild->property ("input-channels")) == 0) {
-                               continue;
-                       }
-                       state->input_channels = atoi (prop->value ());
-
-                       if ((prop = grandchild->property ("output-channels")) == 0) {
-                               continue;
-                       }
-                       state->output_channels = atoi (prop->value ());
-
-                       if ((prop = grandchild->property ("active")) == 0) {
-                               continue;
-                       }
-                       state->active = string_is_affirmative (prop->value ());
-
-                       if ((prop = grandchild->property ("use-buffered-io")) == 0) {
-                               continue;
-                       }
-                       state->use_buffered_io = string_is_affirmative (prop->value ());
-
-                       if ((prop = grandchild->property ("midi-option")) == 0) {
-                               continue;
                        }
-                       state->midi_option = prop->value ();
 
                        state->midi_devices.clear();
                        XMLNode* midinode;
                        if ((midinode = ARDOUR::find_named_node (*grandchild, "MIDIDevices")) != 0) {
                                const XMLNodeList mnc = midinode->children();
                                for (XMLNodeList::const_iterator n = mnc.begin(); n != mnc.end(); ++n) {
-                                       if ((*n)->property (X_("name")) == 0
-                                                       || (*n)->property (X_("enabled")) == 0
-                                                       || (*n)->property (X_("input-latency")) == 0
-                                                       || (*n)->property (X_("output-latency")) == 0
-                                                ) {
+                                       std::string name;
+                                       bool enabled;
+                                       uint32_t input_latency;
+                                       uint32_t output_latency;
+
+                                       if (!(*n)->get_property (X_("name"), name) ||
+                                           !(*n)->get_property (X_("enabled"), enabled) ||
+                                           !(*n)->get_property (X_("input-latency"), input_latency) ||
+                                           !(*n)->get_property (X_("output-latency"), output_latency)) {
                                                continue;
                                        }
 
-                                       MidiDeviceSettings ptr (new MidiDeviceSetting(
-                                                               (*n)->property (X_("name"))->value (),
-                                                               string_is_affirmative ((*n)->property (X_("enabled"))->value ()),
-                                                               atoi ((*n)->property (X_("input-latency"))->value ()),
-                                                               atoi ((*n)->property (X_("output-latency"))->value ())
-                                                               ));
+                                       MidiDeviceSettings ptr (
+                                           new MidiDeviceSetting (name, enabled, input_latency, output_latency));
                                        state->midi_devices.push_back (ptr);
                                }
                        }
 
-                       if ((prop = grandchild->property ("lru"))) {
-                               state->lru = atoi (prop->value ());
+                       int32_t lru_val;
+                       if (grandchild->get_property ("lru", lru_val)) {
+                               state->lru = lru_val;
                        }
 
 #if 1
@@ -2252,7 +2194,7 @@ EngineControl::set_current_state (const State& state)
                sample_rate_combo.set_active_text (rate_as_string (state->sample_rate));
        }
        set_active_text_if_present (buffer_size_combo, bufsize_as_string (state->buffer_size));
-       set_active_text_if_present (nperiods_combo, nperiods_as_string (state->n_periods));
+       set_active_text_if_present (nperiods_combo, to_string (state->n_periods));
        input_latency.set_value (state->input_latency);
        output_latency.set_value (state->output_latency);
        midi_option_combo.set_active_text (state->midi_option);
@@ -3090,7 +3032,7 @@ EngineControl::engine_running ()
        sample_rate_combo.set_active_text (rate_as_string (backend->sample_rate()));
 
        if (backend->can_set_period_size ()) {
-               set_active_text_if_present (nperiods_combo, nperiods_as_string (backend->period_size()));
+               set_active_text_if_present (nperiods_combo, to_string (backend->period_size()));
        }
 
        connect_disconnect_button.set_label (string_compose (_("Disconnect from %1"), backend->name()));