Prevent Ok being pressed when no device is selected
[pulseview.git] / pv / dialogs / connect.cpp
index f7a75da0c6e081840ee9cd597c90a31d1605d4ac..51de735e00e1d5e24eb1ad6d5e0dab13ee877f15 100644 (file)
@@ -70,6 +70,15 @@ Connect::Connect(QWidget *parent) :
        _layout.addWidget(&_button_box);
 }
 
+struct sr_dev_inst* Connect::get_selected_device() const
+{
+       const QListWidgetItem *const item = _device_list.currentItem();
+       if (!item)
+               return NULL;
+
+       return (sr_dev_inst*)item->data(Qt::UserRole).value<void*>();
+}
+
 void Connect::populate_drivers()
 {
        const int *hwopts;
@@ -103,6 +112,7 @@ void Connect::unset_connection()
        _device_list.clear();
        _serial_device.hide();
        _form_layout.labelForField(&_serial_device)->hide();
+       _button_box.button(QDialogButtonBox::Ok)->setDisabled(true);
 }
 
 void Connect::set_serial_connection()
@@ -150,11 +160,17 @@ void Connect::scan_pressed()
                                g_slist_length(sdi->probes));
                }
 
-               _device_list.addItem(text);
+               QListWidgetItem *const item = new QListWidgetItem(text,
+                       &_device_list);
+               item->setData(Qt::UserRole, qVariantFromValue((void*)sdi));
+               _device_list.addItem(item);
        }
 
        g_slist_free(devices);
        g_slist_free_full(drvopts, (GDestroyNotify)free_drvopts);
+
+       _device_list.setCurrentRow(0);
+       _button_box.button(QDialogButtonBox::Ok)->setDisabled(false);
 }
 
 void Connect::device_selected(int index)