31 #include <QStandardItemModel>
32 #include <QNetworkInterface>
33 #include <QNetworkConfigurationManager>
34 #include <xmlsettingsdialog/datasourceroles.h>
35 #include <xmlsettingsdialog/basesettingsmanager.h>
43 , Model_ {
new QStandardItemModel {
this } }
46 Model_->setHorizontalHeaderLabels ({ tr (
"Host"), tr (
"Port") });
47 Model_->horizontalHeaderItem (0)->setData (DataSources::DataFieldType::Enum,
48 DataSources::DataSourceRole::FieldType);
49 Model_->horizontalHeaderItem (1)->setData (DataSources::DataFieldType::Integer,
50 DataSources::DataSourceRole::FieldType);
52 const auto confManager =
new QNetworkConfigurationManager {
this };
54 SIGNAL (configurationAdded (QNetworkConfiguration)),
56 SLOT (updateAvailInterfaces ()));
58 SIGNAL (configurationRemoved (QNetworkConfiguration)),
60 SLOT (updateAvailInterfaces ()));
62 SIGNAL (configurationChanged (QNetworkConfiguration)),
64 SLOT (updateAvailInterfaces ()));
66 updateAvailInterfaces ();
68 const auto& addrs = BSM_->Property (
"ListenAddresses",
70 qDebug () << Q_FUNC_INFO << addrs;
71 for (
const auto& addr : addrs)
75 void AddressesModelManager::RegisterTypes ()
77 qRegisterMetaType<AddrList_t> (
"LC::Util::AddrList_t");
78 qRegisterMetaTypeStreamOperators<AddrList_t> ();
81 QAbstractItemModel* AddressesModelManager::GetModel ()
const
86 AddrList_t AddressesModelManager::GetAddresses ()
const
89 for (
auto i = 0; i < Model_->rowCount (); ++i)
91 auto hostItem = Model_->item (i, 0);
92 auto portItem = Model_->item (i, 1);
93 addresses.push_back ({ hostItem->text (), portItem->text () });
98 void AddressesModelManager::SaveSettings ()
const
100 BSM_->setProperty (
"ListenAddresses",
101 QVariant::fromValue (GetAddresses ()));
104 void AddressesModelManager::AppendRow (
const QPair<QString, QString>& pair)
108 new QStandardItem { pair.first },
109 new QStandardItem { pair.second }
111 for (
const auto item : items)
112 item->setEditable (
false);
113 Model_->appendRow (items);
115 emit addressesChanged ();
118 void AddressesModelManager::updateAvailInterfaces ()
121 for (
const auto& addr : QNetworkInterface::allAddresses ())
123 if (!addr.scopeId ().isEmpty ())
127 map [
"ID"] = map [
"Name"] = addr.toString ();
130 Model_->horizontalHeaderItem (0)->setData (hosts,
131 DataSources::DataSourceRole::FieldValues);
134 void AddressesModelManager::addRequested (
const QString&,
const QVariantList& data)
136 const auto port = data.value (1).toInt ();
137 if (port < 1024 || port > 65535)
140 AppendRow ({ data.value (0).toString (), QString::number (port) });
144 void AddressesModelManager::removeRequested (
const QString&,
const QModelIndexList& list)
146 for (
const auto& item : list)
147 Model_->removeRow (item.row ());
150 emit addressesChanged ();