#include "devicetcpdriver.h" #include "ui_devicetcpdriversettings.h" #include DeviceTCPDriver::DeviceTCPDriver(QString driverName) { specificSettings.push_back(Savable::SettingDescription(&searchAddressString, driverName+".searchAddressString", "")); } QWidget *DeviceTCPDriver::createSettingsWidget() { parseSearchAddressString(); auto w = new QWidget(); auto ui = new Ui::DeviceTCPDriverSettingsWidget; ui->setupUi(w); ui->list->clear(); for(auto &a : searchAddresses) { auto item = new QListWidgetItem(); if(a.isNull()) { item->setText("0.0.0.0"); } else { item->setText(a.toString()); } item->setFlags(item->flags() | Qt::ItemIsEditable); ui->list->addItem(item); } connect(ui->list->itemDelegate(), &QAbstractItemDelegate::commitData, this, [=](QWidget *pLineEdit) { QString strNewText = reinterpret_cast(pLineEdit)->text(); int nRow = ui->list->currentRow(); auto address = QHostAddress(strNewText); if(!address.isNull()) { // valid IP searchAddresses[nRow] = address; updateSearchAddressString(); } ui->list->item(nRow)->setText(searchAddresses[nRow].toString()); }); connect(ui->add, &QPushButton::clicked, [=](){ searchAddresses.push_back(QHostAddress("0.0.0.0")); auto item = new QListWidgetItem(searchAddresses.back().toString()); item->setFlags(item->flags() | Qt::ItemIsEditable); ui->list->addItem(item); updateSearchAddressString(); }); connect(ui->remove, &QPushButton::clicked, [=](){ auto index = ui->list->currentRow(); if(index >= 0 && index < (int) searchAddresses.size()) { delete ui->list->takeItem(index); searchAddresses.erase(searchAddresses.begin() + index); updateSearchAddressString(); } }); return w; } std::vector DeviceTCPDriver::getSearchAddresses() { parseSearchAddressString(); return searchAddresses; } void DeviceTCPDriver::parseSearchAddressString() { QStringList list = searchAddressString.split(","); searchAddresses.clear(); for(auto &l : list) { searchAddresses.push_back(QHostAddress(l)); } } void DeviceTCPDriver::updateSearchAddressString() { searchAddressString = ""; for(auto &a : searchAddresses) { searchAddressString += a.toString(); searchAddressString += ","; } if(searchAddressString.length() > 0) { // remove trailing comma searchAddressString.chop(1); } }