+
+void InputMappingDialog::ok_clicked()
+{
+ global_mixer->get_audio_mixer()->set_input_mapping(mapping);
+ accept();
+}
+
+void InputMappingDialog::cancel_clicked()
+{
+ global_mixer->get_audio_mixer()->set_input_mapping(old_mapping);
+ reject();
+}
+
+void InputMappingDialog::cell_changed(int row, int column)
+{
+ if (column != 0) {
+ // Spurious; only really the name column should fire these.
+ return;
+ }
+ mapping.buses[row].name = ui->table->item(row, column)->text().toStdString();
+}
+
+void InputMappingDialog::card_selected(unsigned row, int index)
+{
+ if (index == 0) {
+ mapping.buses[row].input_source_type = InputSourceType::SILENCE;
+ } else {
+ mapping.buses[row].input_source_type = InputSourceType::CAPTURE_CARD;
+ mapping.buses[row].input_source_index = index - 1;
+ }
+ setup_channel_choices_from_bus(row, mapping.buses[row]);
+}
+
+void InputMappingDialog::channel_selected(unsigned row, unsigned channel, int index)
+{
+ mapping.buses[row].source_channel[channel] = index - 1;
+}
+
+void InputMappingDialog::add_clicked()
+{
+ InputMapping::Bus new_bus;
+ new_bus.name = "New input";
+ new_bus.input_source_type = InputSourceType::SILENCE;
+ mapping.buses.push_back(new_bus);
+ ui->table->setRowCount(mapping.buses.size());
+
+ unsigned row = mapping.buses.size() - 1;
+ fill_row_from_bus(row, new_bus);
+ ui->table->editItem(ui->table->item(row, 0)); // Start editing the name.
+}