#include "ardour/mididm.h"
#include "ardour/rc_configuration.h"
#include "ardour/types.h"
+#include "ardour/profile.h"
#include "pbd/convert.h"
#include "pbd/error.h"
EngineControl::EngineControl ()
: ArdourDialog (_("Audio/MIDI Setup"))
+ , engine_status ("")
, basic_packer (9, 4)
, input_latency_adjustment (0, 0, 99999, 1)
, input_latency (input_latency_adjustment)
get_vbox()->set_border_width (12);
get_vbox()->pack_start (notebook);
+ get_action_area()->pack_start (engine_status);
+ engine_status.show();
+
/* need a special function to print "all available channels" when the
* channel counts hit zero.
*/
control_app_button.signal_clicked().connect (mem_fun (*this, &EngineControl::control_app_button_clicked));
manage_control_app_sensitivity ();
- cancel_button = add_button (Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
- ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
+ cancel_button = add_button (Gtk::Stock::CLOSE, Gtk::RESPONSE_CANCEL);
apply_button = add_button (Gtk::Stock::APPLY, Gtk::RESPONSE_APPLY);
+ ok_button = add_button (Gtk::Stock::OK, Gtk::RESPONSE_OK);
/* Pick up any existing audio setup configuration, if appropriate */
basic_vbox.pack_start (basic_hbox, false, false);
- if (_have_control) {
- Gtk::HBox* hpacker = manage (new HBox);
- hpacker->set_border_width (12);
- hpacker->pack_start (control_app_button, false, false);
- hpacker->show ();
- control_app_button.show();
- basic_vbox.pack_start (*hpacker);
- }
-
{
PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
basic_vbox.show_all ();
basic_packer.attach (buffer_size_combo, 1, 2, row, row + 1, xopt, (AttachOptions) 0);
buffer_size_duration_label.set_alignment (0.0); /* left-align */
basic_packer.attach (buffer_size_duration_label, 2, 3, row, row+1, SHRINK, (AttachOptions) 0);
+
+ /* button spans 2 rows */
+
+ basic_packer.attach (control_app_button, 3, 4, row-1, row+1, xopt, xopt);
row++;
input_channels.set_name ("InputChannels");
input_channels.set_wrap (false);
output_channels.set_editable (true);
- label = manage (left_aligned_label (_("Input Channels:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (input_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
-
+ if (!ARDOUR::Profile->get_mixbus()) {
+ label = manage (left_aligned_label (_("Input Channels:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (input_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ ++row;
+ }
+
output_channels.set_name ("OutputChannels");
output_channels.set_flags (Gtk::CAN_FOCUS);
output_channels.set_digits (0);
output_channels.set_wrap (false);
output_channels.set_editable (true);
- label = manage (left_aligned_label (_("Output Channels:")));
- basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
- basic_packer.attach (output_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
- ++row;
-
+ if (!ARDOUR::Profile->get_mixbus()) {
+ label = manage (left_aligned_label (_("Output Channels:")));
+ basic_packer.attach (*label, 0, 1, row, row+1, xopt, (AttachOptions) 0);
+ basic_packer.attach (output_channels, 1, 2, row, row+1, xopt, (AttachOptions) 0);
+ ++row;
+ }
+
input_latency.set_name ("InputLatency");
input_latency.set_flags (Gtk::CAN_FOCUS);
input_latency.set_digits (0);
bool
EngineControl::print_channel_count (Gtk::SpinButton* sb)
{
+ if (ARDOUR::Profile->get_mixbus()) {
+ cout << "Mixbus crash trap. sb->get_value(): " << sb->get_value();
+ return true;
+ }
+
uint32_t cnt = (uint32_t) sb->get_value();
if (cnt == 0) {
sb->set_text (_("all available channels"));
assert (backend);
string device_name = device_combo.get_active_text ();
vector<string> s;
+
+ //the device name must be set FIRST so ASIO can populate buffersizes and the control panel button
+ backend->set_device_name(device_name);
{
PBD::Unwinder<uint32_t> protect_ignore_changes (ignore_changes, ignore_changes + 1);
uint32_t
EngineControl::get_input_channels() const
{
+ if (ARDOUR::Profile->get_mixbus()) {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ if (!backend) return 0;
+ return backend->input_channels();
+ }
return (uint32_t) input_channels_adjustment.get_value();
}
uint32_t
EngineControl::get_output_channels() const
{
+ if (ARDOUR::Profile->get_mixbus()) {
+ boost::shared_ptr<ARDOUR::AudioBackend> backend = ARDOUR::AudioEngine::instance()->current_backend();
+ if (!backend) return 0;
+ return backend->input_channels();
+ }
return (uint32_t) output_channels_adjustment.get_value();
}
solid = false;
}
+ lm_results.set_markup (string_compose (results_markup, buf));
+
if (solid) {
have_lm_results = true;
end_latency_detection ();
return false;
}
- lm_results.set_markup (string_compose (results_markup, buf));
-
return true;
}
have_lm_results = true;
end_latency_detection ();
lm_use_button.set_sensitive (true);
+ lm_results.set_markup (string_compose (results_markup, buf));
return false;
} else if (mididm->processed () > 400) {
have_lm_results = false;
connect_disconnect_button.show();
started_at_least_once = true;
+ engine_status.set_markup(string_compose ("<span foreground=\"green\">%1</span>", _("Active")));
}
void
sample_rate_combo.set_sensitive (true);
buffer_size_combo.set_sensitive (true);
+ engine_status.set_markup(string_compose ("<span foreground=\"red\">%1</span>", _("Inactive")));
}
void