10 #include <QStandardItemModel>
11 #include <QNetworkInterface>
12 #include <QNetworkConfigurationManager>
13 #include <xmlsettingsdialog/datasourceroles.h>
14 #include <xmlsettingsdialog/basesettingsmanager.h>
22 , Model_ {
new QStandardItemModel {
this } }
25 Model_->setHorizontalHeaderLabels ({ tr (
"Host"), tr (
"Port") });
26 Model_->horizontalHeaderItem (0)->setData (DataSources::DataFieldType::Enum,
27 DataSources::DataSourceRole::FieldType);
28 Model_->horizontalHeaderItem (1)->setData (DataSources::DataFieldType::Integer,
29 DataSources::DataSourceRole::FieldType);
31 const auto confManager =
new QNetworkConfigurationManager {
this };
33 SIGNAL (configurationAdded (QNetworkConfiguration)),
35 SLOT (updateAvailInterfaces ()));
37 SIGNAL (configurationRemoved (QNetworkConfiguration)),
39 SLOT (updateAvailInterfaces ()));
41 SIGNAL (configurationChanged (QNetworkConfiguration)),
43 SLOT (updateAvailInterfaces ()));
45 updateAvailInterfaces ();
47 const auto& addrs = BSM_->Property (
"ListenAddresses",
49 qDebug () << Q_FUNC_INFO << addrs;
50 for (
const auto& addr : addrs)
54 void AddressesModelManager::RegisterTypes ()
56 qRegisterMetaType<AddrList_t> (
"LC::Util::AddrList_t");
57 qRegisterMetaTypeStreamOperators<AddrList_t> ();
60 QAbstractItemModel* AddressesModelManager::GetModel ()
const
65 AddrList_t AddressesModelManager::GetAddresses ()
const
68 for (
auto i = 0; i < Model_->rowCount (); ++i)
70 auto hostItem = Model_->item (i, 0);
71 auto portItem = Model_->item (i, 1);
72 addresses.push_back ({ hostItem->text (), portItem->text () });
77 void AddressesModelManager::SaveSettings ()
const
79 BSM_->setProperty (
"ListenAddresses",
80 QVariant::fromValue (GetAddresses ()));
83 void AddressesModelManager::AppendRow (
const QPair<QString, QString>& pair)
87 new QStandardItem { pair.first },
88 new QStandardItem { pair.second }
90 for (
const auto item : items)
91 item->setEditable (
false);
92 Model_->appendRow (items);
94 emit addressesChanged ();
97 void AddressesModelManager::updateAvailInterfaces ()
100 for (
const auto& addr : QNetworkInterface::allAddresses ())
102 if (!addr.scopeId ().isEmpty ())
106 map [
"ID"] = map [
"Name"] = addr.toString ();
109 Model_->horizontalHeaderItem (0)->setData (hosts,
110 DataSources::DataSourceRole::FieldValues);
113 void AddressesModelManager::addRequested (
const QString&,
const QVariantList& data)
115 const auto port = data.value (1).toInt ();
116 if (port < 1024 || port > 65535)
119 AppendRow ({ data.value (0).
toString (), QString::number (port) });
123 void AddressesModelManager::removeRequested (
const QString&,
const QModelIndexList& list)
125 for (
const auto& item : list)
126 Model_->removeRow (item.row ());
129 emit addressesChanged ();