+void Connect::scan_pressed()
+{
+ _device_list.clear();
+
+ const int index = _drivers.currentIndex();
+ if (index == -1)
+ return;
+
+ shared_ptr<Driver> driver =
+ _drivers.itemData(index).value<shared_ptr<Driver>>();
+
+ assert(driver);
+
+ map<const ConfigKey *, VariantBase> drvopts;
+
+ if (_serial_device.isVisible())
+ drvopts[ConfigKey::CONN] = Variant<ustring>::create(
+ _serial_device.text().toUtf8().constData());
+
+ list< shared_ptr<HardwareDevice> > devices =
+ _device_manager.driver_scan(driver, drvopts);
+
+ for (shared_ptr<HardwareDevice> device : devices)
+ {
+ assert(device);
+
+ QString text = QString::fromStdString(
+ _device_manager.get_display_name(device));
+ text += QString(" with %1 channels").arg(device->channels().size());
+
+ QListWidgetItem *const item = new QListWidgetItem(text,
+ &_device_list);
+ item->setData(Qt::UserRole, qVariantFromValue(device));
+ _device_list.addItem(item);
+ }
+
+ _device_list.setCurrentRow(0);
+ _button_box.button(QDialogButtonBox::Ok)->setDisabled(_device_list.count() == 0);
+}
+
+void Connect::device_selected(int index)
+{
+ shared_ptr<Driver> driver =
+ _drivers.itemData(index).value<shared_ptr<Driver>>();
+
+ unset_connection();
+
+ if (driver->config_check(ConfigKey::SERIALCOMM, ConfigKey::SCAN_OPTIONS))
+ set_serial_connection();
+}