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 ();