LibreVNA/Software/PC_Application/LibreVNA-GUI/Device/devicetcpdriver.cpp
2023-02-12 22:58:45 +01:00

90 lines
2.6 KiB
C++

#include "devicetcpdriver.h"
#include "ui_devicetcpdriversettings.h"
#include <QLineEdit>
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<QLineEdit*>(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<QHostAddress> 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);
}
}