#include "engine_dialog.h"
#include "gui_thread.h"
#include "ui_config.h"
+#include "public_editor.h"
#include "utils.h"
#include "pbd/i18n.h"
#include "splash.h"
set_name (X_("AudioMIDISetup"));
- if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) {
- set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
- } else {
- set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
- }
-
/* the backend combo is the one thing that is ALWAYS visible */
vector<const ARDOUR::AudioBackendInfo*> backends = ARDOUR::AudioEngine::instance()->available_backends();
start_stop_button.set_name ("generic button");
start_stop_button.set_can_focus(true);
start_stop_button.set_can_default(true);
+ start_stop_button.set_act_on_release (false);
update_devices_button.signal_clicked.connect (mem_fun (*this, &EngineControl::update_devices_button_clicked));
update_devices_button.set_sensitive (false);
EngineControl::on_show ()
{
ArdourDialog::on_show ();
- if (Splash::instance()) {
- Splash::instance()->hide ();
- }
if (!ARDOUR::AudioEngine::instance()->current_backend() || !ARDOUR::AudioEngine::instance()->running()) {
// re-check _have_control (jackd running) see #6041
backend_changed ();
start_stop_button.grab_focus();
}
+void
+EngineControl::on_map ()
+{
+ if (!ARDOUR_UI::instance()->session_loaded && !PublicEditor::_instance) {
+ set_type_hint (Gdk::WINDOW_TYPE_HINT_NORMAL);
+ } else if (UIConfiguration::instance().get_all_floating_windows_are_dialogs()) {
+ set_type_hint (Gdk::WINDOW_TYPE_HINT_DIALOG);
+ } else {
+ set_type_hint (Gdk::WINDOW_TYPE_HINT_UTILITY);
+ }
+ ArdourDialog::on_map ();
+}
+
bool
EngineControl::try_autostart ()
{
bool valid = true;
size_t devices_available = 0;
+ bool engine_running = ARDOUR::AudioEngine::instance()->running();
if (backend->use_separate_input_and_output_devices ()) {
devices_available += get_popdown_string_count (input_device_combo);
} else {
input_latency.set_sensitive (true);
output_latency.set_sensitive (true);
- input_channels.set_sensitive (true);
- output_channels.set_sensitive (true);
+ input_channels.set_sensitive (!engine_running);
+ output_channels.set_sensitive (!engine_running);
}
if (get_popdown_string_count (buffer_size_combo) > 0) {
- if (!ARDOUR::AudioEngine::instance()->running()) {
+ if (!engine_running) {
buffer_size_combo.set_sensitive (valid);
} else if (backend->can_change_sample_rate_when_running()) {
buffer_size_combo.set_sensitive (valid || !_have_control);
if (get_popdown_string_count (sample_rate_combo) > 0) {
bool allow_to_set_rate = false;
- if (!ARDOUR::AudioEngine::instance()->running()) {
+ if (!engine_running) {
if (!ARDOUR_UI::instance()->session_loaded) {
// engine is not running, no session loaded -> anything goes.
allow_to_set_rate = true;
}
if (get_popdown_string_count (nperiods_combo) > 0) {
- if (!ARDOUR::AudioEngine::instance()->running()) {
+ if (!engine_running) {
nperiods_combo.set_sensitive (true);
} else {
nperiods_combo.set_sensitive (false);
if (_have_control) {
start_stop_button.set_sensitive(true);
start_stop_button.show();
- if (ARDOUR::AudioEngine::instance()->running()) {
+ if (engine_running) {
start_stop_button.set_text("Stop");
update_devices_button.set_sensitive(false);
use_buffered_io_button.set_sensitive(false);
start_stop_button.hide();
}
- if (ARDOUR::AudioEngine::instance()->running() && _have_control) {
+ if (engine_running && _have_control) {
input_device_combo.set_sensitive (false);
output_device_combo.set_sensitive (false);
device_combo.set_sensitive (false);
driver_combo.set_sensitive (false);
}
}
+
+ midi_option_combo.set_sensitive (!engine_running);
}
void
return false;
}
+// sort active first, then most recently used to the beginning of the list
bool
EngineControl::state_sort_cmp (const State &a, const State &b) {
if (a->active) {
return false;
}
else {
- return a->lru < b->lru;
+ return a->lru > b->lru;
}
}
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);
XMLNodeConstIterator citer, cciter;
XMLNode const * child;
XMLNode const * grandchild;
- XMLProperty const * prop = NULL;
if (root.name() != "AudioMIDISetup") {
return false;
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) {
- continue;
- }
- state->device = prop->value ();
-
- if ((prop = grandchild->property ("input-device")) == 0) {
- continue;
- }
- state->input_device = prop->value ();
-
- if ((prop = grandchild->property ("output-device")) == 0) {
+ if (!grandchild->get_property ("backend", state->backend)) {
continue;
}
- state->output_device = prop->value ();
- if ((prop = grandchild->property ("sample-rate")) == 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->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
start_engine ();
if (!ARDOUR_UI::instance()->session_loaded) {
ArdourDialog::on_response (RESPONSE_OK);
- if (Splash::instance()) {
- Splash::instance()->pop_front ();
- }
}
}
}
start_engine ();
if (!ARDOUR_UI::instance()->session_loaded) {
ArdourDialog::on_response (RESPONSE_OK);
- if (Splash::instance()) {
- Splash::instance()->pop_front ();
- }
}
}
}