From kde-commits Tue Apr 30 21:28:05 2013 From: =?utf-8?b?THVrw6HFoSBUaW5rbA==?= Date: Tue, 30 Apr 2013 21:28:05 +0000 To: kde-commits Subject: [plasma-nm] /: Bond setting widget, WIP, still disabled Message-Id: <20130430212805.B5EF5A603F () git ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-commits&m=136735729717286 Git commit 9fc92caa2317af30c67d7f3aca72b7b225c4b79b by Luk=C3=A1=C5=A1 Tink= l. Committed on 30/04/2013 at 23:27. Pushed by lukas into branch 'master'. Bond setting widget, WIP, still disabled M +109 -5 editor/bondwidget.cpp M +10 -2 editor/bondwidget.h M +62 -37 editor/connectiondetaileditor.cpp M +15 -3 editor/connectiondetaileditor.h M +2 -3 editor/connectioneditor.cpp M +74 -10 editor/ui/bond.ui M +5 -5 lib/hwaddrcombobox.cpp http://commits.kde.org/plasma-nm/9fc92caa2317af30c67d7f3aca72b7b225c4b79b diff --git a/editor/bondwidget.cpp b/editor/bondwidget.cpp index dde2f18..16bdd52 100644 --- a/editor/bondwidget.cpp +++ b/editor/bondwidget.cpp @@ -20,17 +20,51 @@ = #include "bondwidget.h" #include "ui_bond.h" +#include "connectiondetaileditor.h" + +#include = #include +#include = #include = -BondWidget::BondWidget(const NetworkManager::Settings::Setting::Ptr &setti= ng, QWidget* parent, Qt::WindowFlags f): +#define NM_SETTING_BOND_OPTION_MII_MONITOR "mii" +#define NM_SETTING_BOND_OPTION_ARP_MONITOR "arp" + +BondWidget::BondWidget(const QString & masterUuid, const NetworkManager::S= ettings::Setting::Ptr &setting, QWidget* parent, Qt::WindowFlags f): SettingWidget(setting, parent, f), + m_uuid(masterUuid), m_ui(new Ui::BondWidget) { m_ui->setupUi(this); = + // Add context menu + m_menu =3D new QMenu(this); + QAction * action =3D new QAction(i18n("Ethernet"), this); + action->setData(NetworkManager::Settings::ConnectionSettings::Wired); + m_menu->addAction(action); + action =3D new QAction(i18n("InfiniBand"), this); + action->setData(NetworkManager::Settings::ConnectionSettings::Infiniba= nd); + m_menu->addAction(action); + m_ui->btnAdd->setMenu(m_menu); + connect(m_menu, SIGNAL(triggered(QAction*)), SLOT(addBond(QAction*))); + + // mode + m_ui->mode->addItem(i18nc("bond mode", "Round-robin"), QLatin1String("= balance-rr")); + m_ui->mode->addItem(i18nc("bond mode", "Active backup"), QLatin1String= ("active-backup")); + m_ui->mode->addItem(i18nc("bond mode", "Broadcast"), QLatin1String("br= oadcast")); + m_ui->mode->addItem(i18nc("bond mode", "802.3ad"), QLatin1String("802.= 3ad")); + m_ui->mode->addItem(i18nc("bond mode", "Adaptive transmit load balanci= ng"), QLatin1String("balance-tlb")); + m_ui->mode->addItem(i18nc("bond mode", "Adaptive load balancing"), QLa= tin1String("balance-alb")); + + // link monitor + m_ui->linkMonitoring->addItem(i18nc("bond link monitoring", "MII (reco= mmended)"), NM_SETTING_BOND_OPTION_MII_MONITOR); + m_ui->linkMonitoring->addItem(i18nc("bond link monitoring", "ARP"), NM= _SETTING_BOND_OPTION_ARP_MONITOR); + + // bonds + connect(m_ui->bonds, SIGNAL(currentItemChanged(QListWidgetItem*,QListW= idgetItem*)), SLOT(currentBondChanged(QListWidgetItem*,QListWidgetItem*))); + if (setting) loadConfig(setting); } @@ -47,20 +81,90 @@ void BondWidget::loadConfig(const NetworkManager::Setti= ngs::Setting::Ptr &settin = NMStringMap options =3D bondSetting.options(); = - // TODO + // mode + int modeIndex =3D m_ui->mode->findData(options.value(NM_SETTING_BOND_O= PTION_MODE)); + if (modeIndex =3D=3D -1) + modeIndex =3D 0; + m_ui->mode->setCurrentIndex(modeIndex); + + const QString arpTargets =3D options.value(NM_SETTING_BOND_OPTION_ARP_= IP_TARGET); + if (!arpTargets.isEmpty()) { // ARP + m_ui->linkMonitoring->setCurrentIndex(m_ui->linkMonitoring->findDa= ta(NM_SETTING_BOND_OPTION_ARP_MONITOR)); + + bool ok =3D false; + const int arpMonFreq =3D options.value(NM_SETTING_BOND_OPTION_ARP_= INTERVAL).toInt(&ok); + if (ok && arpMonFreq > 0) + m_ui->monitorFreq->setValue(arpMonFreq); + + m_ui->arpTargets->setText(arpTargets); + } else { // MII + m_ui->linkMonitoring->setCurrentIndex(m_ui->linkMonitoring->findDa= ta(NM_SETTING_BOND_OPTION_MII_MONITOR)); + + bool ok =3D false; + const int miiMonFreq =3D options.value(NM_SETTING_BOND_OPTION_MIIM= ON).toInt(&ok); + if (ok && miiMonFreq > 0) + m_ui->monitorFreq->setValue(miiMonFreq); + + ok =3D false; + const int upDelay =3D options.value(NM_SETTING_BOND_OPTION_UPDELAY= ).toInt(&ok); + if (ok && upDelay > 0) + m_ui->upDelay->setValue(upDelay); + + ok =3D false; + const int downDelay =3D options.value(NM_SETTING_BOND_OPTION_DOWND= ELAY).toInt(&ok); + if (ok && downDelay > 0) + m_ui->upDelay->setValue(downDelay); + } } = QVariantMap BondWidget::setting(bool agentOwned) const { - Q_UNUSED(agentOwned); + Q_UNUSED(agentOwned) = NetworkManager::Settings::BondSetting setting; setting.setInterfaceName(m_ui->ifaceName->text()); = NMStringMap options; - - // TODO + options.insert(NM_SETTING_BOND_OPTION_MODE, m_ui->mode->itemData(m_ui-= >mode->currentIndex()).toString()); + + if (m_ui->linkMonitoring->itemData(m_ui->linkMonitoring->currentIndex(= )).toString() =3D=3D NM_SETTING_BOND_OPTION_MII_MONITOR) { // MII + options.insert(NM_SETTING_BOND_OPTION_MIIMON, QString::number(m_ui= ->monitorFreq->value())); + const int upDelay =3D m_ui->upDelay->value(); + if (upDelay) + options.insert(NM_SETTING_BOND_OPTION_UPDELAY, QString::number= (upDelay)); + const int downDelay =3D m_ui->downDelay->value(); + if (downDelay) + options.insert(NM_SETTING_BOND_OPTION_DOWNDELAY, QString::numb= er(downDelay)); + } else { // ARP + options.insert(NM_SETTING_BOND_OPTION_ARP_INTERVAL, QString::numbe= r(m_ui->monitorFreq->value())); + const QString arpTargets =3D m_ui->arpTargets->text(); + if (!arpTargets.isEmpty()) + options.insert(NM_SETTING_BOND_OPTION_ARP_IP_TARGET, arpTarget= s); + } = setting.setOptions(options); return setting.toMap(); } + +void BondWidget::addBond(QAction *action) +{ + qDebug() << "Adding bonded connection:" << action->data(); + qDebug() << "Master UUID:" << m_uuid; + qDebug() << "Slave type:" << type(); + + ConnectionDetailEditor * bondEditor =3D new ConnectionDetailEditor(Net= workManager::Settings::ConnectionSettings::typeFromString(action->data().to= String()), + this,= QString(), m_uuid, type()); + if (bondEditor->exec() =3D=3D QDialog::Accepted) { + qDebug() << "Saving slave connection:" << bondEditor->uuid(); + } +} + +void BondWidget::currentBondChanged(QListWidgetItem *current, QListWidgetI= tem *previous) +{ + Q_UNUSED(previous) + + m_ui->btnEdit->setEnabled(current); + m_ui->btnDelete->setEnabled(current); + + // TODO +} diff --git a/editor/bondwidget.h b/editor/bondwidget.h index a24f96d..794f480 100644 --- a/editor/bondwidget.h +++ b/editor/bondwidget.h @@ -21,7 +21,9 @@ #ifndef PLASMA_NM_BOND_WIDGET_H #define PLASMA_NM_BOND_WIDGET_H = -#include +#include +#include +#include = #include = @@ -36,15 +38,21 @@ class BondWidget : public SettingWidget { Q_OBJECT public: - BondWidget(const NetworkManager::Settings::Setting::Ptr &setting =3D N= etworkManager::Settings::Setting::Ptr(), QWidget* parent =3D 0, Qt::WindowF= lags f =3D 0); + BondWidget(const QString & masterUuid, const NetworkManager::Settings:= :Setting::Ptr &setting =3D NetworkManager::Settings::Setting::Ptr(), QWidge= t* parent =3D 0, Qt::WindowFlags f =3D 0); virtual ~BondWidget(); = void loadConfig(const NetworkManager::Settings::Setting::Ptr &setting); = QVariantMap setting(bool agentOwned =3D false) const; = +private slots: + void addBond(QAction * action); + void currentBondChanged(QListWidgetItem * current, QListWidgetItem * p= revious); + private: + QString m_uuid; Ui::BondWidget * m_ui; + QMenu * m_menu; }; = #endif // PLASMA_NM_BOND_WIDGET_H diff --git a/editor/connectiondetaileditor.cpp b/editor/connectiondetailedi= tor.cpp index 477f309..f7da34f 100644 --- a/editor/connectiondetaileditor.cpp +++ b/editor/connectiondetaileditor.cpp @@ -1,5 +1,6 @@ /* Copyright 2013 Jan Grulich + Copyright 2013 Lukas Tinkl = This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public @@ -33,6 +34,7 @@ #include "cdmawidget.h" #include "btwidget.h" #include "infinibandwidget.h" +#include "bondwidget.h" #include "vpnuiplugin.h" = #include @@ -49,29 +51,32 @@ = using namespace NetworkManager; = -ConnectionDetailEditor::ConnectionDetailEditor(NetworkManager::Settings::C= onnectionSettings::ConnectionType type, const QString &vpnType, QWidget* pa= rent, Qt::WindowFlags f): +ConnectionDetailEditor::ConnectionDetailEditor(NetworkManager::Settings::C= onnectionSettings::ConnectionType type, QWidget* parent, + const QString &vpnType, con= st QString &masterUuid, const QString &slaveType, Qt::WindowFlags f): QDialog(parent, f), - m_detailEditor(new Ui::ConnectionDetailEditor), + m_ui(new Ui::ConnectionDetailEditor), m_connection(new NetworkManager::Settings::ConnectionSettings(type)), m_numSecrets(0), m_new(true), - m_vpnType(vpnType) + m_vpnType(vpnType), + m_masterUuid(masterUuid), + m_slaveType(slaveType) { setAttribute(Qt::WA_DeleteOnClose); - m_detailEditor->setupUi(this); + m_ui->setupUi(this); = initEditor(); } = ConnectionDetailEditor::ConnectionDetailEditor(Settings::ConnectionSetting= s::ConnectionType type, const QVariantList &args, QWidget *parent, Qt::Wind= owFlags f): QDialog(parent, f), - m_detailEditor(new Ui::ConnectionDetailEditor), + m_ui(new Ui::ConnectionDetailEditor), m_connection(new NetworkManager::Settings::ConnectionSettings(type)), m_numSecrets(0), m_new(true) { setAttribute(Qt::WA_DeleteOnClose); - m_detailEditor->setupUi(this); + m_ui->setupUi(this); = // parse args given from the wizard qDebug() << "Editing new mobile connection, number of args:" << args.c= ount(); @@ -112,13 +117,13 @@ ConnectionDetailEditor::ConnectionDetailEditor(Settin= gs::ConnectionSettings::Con = ConnectionDetailEditor::ConnectionDetailEditor(const NetworkManager::Setti= ngs::ConnectionSettings::Ptr &connection, QWidget* parent, Qt::WindowFlags = f): QDialog(parent, f), - m_detailEditor(new Ui::ConnectionDetailEditor), + m_ui(new Ui::ConnectionDetailEditor), m_connection(connection), m_numSecrets(0), m_new(false) { setAttribute(Qt::WA_DeleteOnClose); - m_detailEditor->setupUi(this); + m_ui->setupUi(this); = initEditor(); } @@ -187,10 +192,10 @@ void ConnectionDetailEditor::initEditor() = if (m_connection->id().isEmpty()) { setWindowTitle(i18n("New Connection (%1)", m_connection->typeAsStr= ing(m_connection->connectionType()))); - m_detailEditor->connectionName->setText(i18n("New %1 connection", = m_connection->typeAsString(m_connection->connectionType()))); + m_ui->connectionName->setText(i18n("New %1 connection", m_connecti= on->typeAsString(m_connection->connectionType()))); } else { setWindowTitle(i18n("Edit Connection '%1'", m_connection->id())); - m_detailEditor->connectionName->setText(m_connection->id()); + m_ui->connectionName->setText(m_connection->id()); } = connect(this, SIGNAL(accepted()), SLOT(saveSetting())); @@ -201,48 +206,59 @@ void ConnectionDetailEditor::initEditor() void ConnectionDetailEditor::initTabs() { ConnectionWidget * connectionWidget =3D new ConnectionWidget(m_connect= ion); - m_detailEditor->tabWidget->addTab(connectionWidget, i18n("General")); + m_ui->tabWidget->addTab(connectionWidget, i18n("General")); + + // create/set UUID + QString uuid =3D m_connection->uuid(); + if (QUuid(uuid).isNull()) { + uuid =3D NetworkManager::Settings::ConnectionSettings::createNewUu= id(); + m_connection->setUuid(uuid); + } + qDebug() << "Initting tabs, UUID:" << uuid; = const NetworkManager::Settings::ConnectionSettings::ConnectionType typ= e =3D m_connection->connectionType(); = /*Adsl, Cdma, Gsm, Infiniband, Pppoe, Vpn, Wired, Wireless, Bluetooth,= OlpcMesh, Vlan, Wimax, Bond, Bridge */ if (type =3D=3D NetworkManager::Settings::ConnectionSettings::Wired) { WiredConnectionWidget * wiredWidget =3D new WiredConnectionWidget(= m_connection->setting(NetworkManager::Settings::Setting::Wired), this); - m_detailEditor->tabWidget->addTab(wiredWidget, i18n("Wired")); + m_ui->tabWidget->addTab(wiredWidget, i18n("Wired")); WiredSecurity * wiredSecurity =3D new WiredSecurity(m_connection->= setting(NetworkManager::Settings::Setting::Security8021x).staticCast(), this); - m_detailEditor->tabWidget->addTab(wiredSecurity, i18n("802.1x Secu= rity")); + m_ui->tabWidget->addTab(wiredSecurity, i18n("802.1x Security")); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::W= ireless) { WifiConnectionWidget * wifiWidget =3D new WifiConnectionWidget(m_c= onnection->setting(NetworkManager::Settings::Setting::Wireless), this); - m_detailEditor->tabWidget->addTab(wifiWidget, i18n("Wireless")); + m_ui->tabWidget->addTab(wifiWidget, i18n("Wireless")); WifiSecurity * wifiSecurity =3D new WifiSecurity(m_connection->set= ting(NetworkManager::Settings::Setting::WirelessSecurity), m_connection->setti= ng(NetworkManager::Settings::Setting::Security8021x).staticCast(), this); - m_detailEditor->tabWidget->addTab(wifiSecurity, i18n("Wi-Fi Securi= ty")); + m_ui->tabWidget->addTab(wifiSecurity, i18n("Wi-Fi Security")); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::P= ppoe) { // DSL PppoeWidget * pppoeWidget =3D new PppoeWidget(m_connection->settin= g(NetworkManager::Settings::Setting::Pppoe), this); - m_detailEditor->tabWidget->addTab(pppoeWidget, i18n("DSL")); + m_ui->tabWidget->addTab(pppoeWidget, i18n("DSL")); WiredConnectionWidget * wiredWidget =3D new WiredConnectionWidget(= m_connection->setting(NetworkManager::Settings::Setting::Wired), this); - m_detailEditor->tabWidget->addTab(wiredWidget, i18n("Wired")); + m_ui->tabWidget->addTab(wiredWidget, i18n("Wired")); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::G= sm) { // GSM GsmWidget * gsmWidget =3D new GsmWidget(m_connection->setting(Netw= orkManager::Settings::Setting::Gsm), this); - m_detailEditor->tabWidget->addTab(gsmWidget, i18n("Mobile Broadban= d (%1)", m_connection->typeAsString(m_connection->connectionType()))); + m_ui->tabWidget->addTab(gsmWidget, i18n("Mobile Broadband (%1)", m= _connection->typeAsString(m_connection->connectionType()))); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::C= dma) { // CDMA CdmaWidget * cdmaWidget =3D new CdmaWidget(m_connection->setting(N= etworkManager::Settings::Setting::Cdma), this); - m_detailEditor->tabWidget->addTab(cdmaWidget, i18n("Mobile Broadba= nd (%1)", m_connection->typeAsString(m_connection->connectionType()))); + m_ui->tabWidget->addTab(cdmaWidget, i18n("Mobile Broadband (%1)", = m_connection->typeAsString(m_connection->connectionType()))); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::B= luetooth) { // Bluetooth BtWidget * btWidget =3D new BtWidget(m_connection->setting(Network= Manager::Settings::Setting::Bluetooth), this); - m_detailEditor->tabWidget->addTab(btWidget, i18n("Bluetooth")); + m_ui->tabWidget->addTab(btWidget, i18n("Bluetooth")); NetworkManager::Settings::BluetoothSetting::Ptr btSetting =3D m_co= nnection->setting(NetworkManager::Settings::Setting::Bluetooth).staticCast<= NetworkManager::Settings::BluetoothSetting>(); if (btSetting->profileType() =3D=3D NetworkManager::Settings::Blue= toothSetting::Dun) { GsmWidget * gsmWidget =3D new GsmWidget(m_connection->setting(= NetworkManager::Settings::Setting::Gsm), this); - m_detailEditor->tabWidget->addTab(gsmWidget, i18n("GSM")); + m_ui->tabWidget->addTab(gsmWidget, i18n("GSM")); PPPWidget * pppWidget =3D new PPPWidget(m_connection->setting(= NetworkManager::Settings::Setting::Ppp), this); - m_detailEditor->tabWidget->addTab(pppWidget, i18n("PPP")); + m_ui->tabWidget->addTab(pppWidget, i18n("PPP")); = } } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::I= nfiniband) { // Infiniband InfinibandWidget * infinibandWidget =3D new InfinibandWidget(m_con= nection->setting(NetworkManager::Settings::Setting::Infiniband), this); - m_detailEditor->tabWidget->addTab(infinibandWidget, i18n("Infiniba= nd")); + m_ui->tabWidget->addTab(infinibandWidget, i18n("Infiniband")); + } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::B= ond) { // Bond + BondWidget * bondWidget =3D new BondWidget(uuid, m_connection->set= ting(NetworkManager::Settings::Setting::Bond), this); + m_ui->tabWidget->addTab(bondWidget, i18n("Bond")); } else if (type =3D=3D NetworkManager::Settings::ConnectionSettings::V= pn) { // VPN QString error; VpnUiPlugin * vpnPlugin =3D 0; @@ -266,30 +282,36 @@ void ConnectionDetailEditor::initTabs() if (vpnPlugin && error.isEmpty()) { const QString shortName =3D serviceType.section('.', -1); SettingWidget * vpnWidget =3D vpnPlugin->widget(vpnSetting= , this); - m_detailEditor->tabWidget->addTab(vpnWidget, i18n("VPN (%1= )", shortName)); + m_ui->tabWidget->addTab(vpnWidget, i18n("VPN (%1)", shortN= ame)); } else { qDebug() << error << ", serviceType =3D=3D " << serviceTyp= e; } } } = + // PPP widget if (type =3D=3D Settings::ConnectionSettings::Pppoe || type =3D=3D Set= tings::ConnectionSettings::Cdma || type =3D=3D Settings::ConnectionSettings= ::Gsm) { PPPWidget * pppWidget =3D new PPPWidget(m_connection->setting(Netw= orkManager::Settings::Setting::Ppp), this); - m_detailEditor->tabWidget->addTab(pppWidget, i18n("PPP")); + m_ui->tabWidget->addTab(pppWidget, i18n("PPP")); } = - IPv4Widget * ipv4Widget =3D new IPv4Widget(m_connection->setting(Netwo= rkManager::Settings::Setting::Ipv4), this); - m_detailEditor->tabWidget->addTab(ipv4Widget, i18n("IPv4")); + // IPv4 widget + if (!isSlave()) { + IPv4Widget * ipv4Widget =3D new IPv4Widget(m_connection->setting(N= etworkManager::Settings::Setting::Ipv4), this); + m_ui->tabWidget->addTab(ipv4Widget, i18n("IPv4")); + } = - if (type =3D=3D Settings::ConnectionSettings::Wired || type =3D=3D Set= tings::ConnectionSettings::Wireless || type =3D=3D Settings::ConnectionSett= ings::Infiniband) { + // IPv6 widget + if ((type =3D=3D Settings::ConnectionSettings::Wired || type =3D=3D Se= ttings::ConnectionSettings::Wireless || + type =3D=3D Settings::ConnectionSettings::Infiniband || type = =3D=3D Settings::ConnectionSettings::Bond) && !isSlave()) { IPv6Widget * ipv6Widget =3D new IPv6Widget(m_connection->setting(N= etworkManager::Settings::Setting::Ipv6), this); - m_detailEditor->tabWidget->addTab(ipv6Widget, i18n("IPv6")); + m_ui->tabWidget->addTab(ipv6Widget, i18n("IPv6")); } } = void ConnectionDetailEditor::saveSetting() { - ConnectionWidget * connectionWidget =3D static_cast= (m_detailEditor->tabWidget->widget(0)); + ConnectionWidget * connectionWidget =3D static_cast= (m_ui->tabWidget->widget(0)); = NMVariantMapMap settings =3D connectionWidget->setting(); = @@ -299,8 +321,8 @@ void ConnectionDetailEditor::saveSetting() } = qDebug() << "agent owned - " << agentOwned; - for (int i =3D 1; i < m_detailEditor->tabWidget->count(); ++i) { - SettingWidget * widget =3D static_cast(m_detailEdi= tor->tabWidget->widget(i)); + for (int i =3D 1; i < m_ui->tabWidget->count(); ++i) { + SettingWidget * widget =3D static_cast(m_ui->tabWi= dget->widget(i)); const QString type =3D widget->type(); if (type !=3D NetworkManager::Settings::Setting::typeAsString(Netw= orkManager::Settings::Setting::Security8021x) && type !=3D NetworkManager::Settings::Setting::typeAsString(Netw= orkManager::Settings::Setting::WirelessSecurity)) { @@ -330,7 +352,7 @@ void ConnectionDetailEditor::saveSetting() NetworkManager::Settings::ConnectionSettings * connectionSettings =3D = new NetworkManager::Settings::ConnectionSettings(m_connection->connectionTy= pe()); = connectionSettings->fromMap(settings); - connectionSettings->setId(m_detailEditor->connectionName->text()); + connectionSettings->setId(m_ui->connectionName->text()); = if (connectionSettings->connectionType() =3D=3D Settings::ConnectionSe= ttings::Wireless) { NetworkManager::Settings::WirelessSecuritySetting::Ptr securitySet= ting =3D connectionSettings->setting(Settings::Setting::WirelessSecurity).s= taticCast(); @@ -344,10 +366,12 @@ void ConnectionDetailEditor::saveSetting() } = // set UUID - if (m_new) { - connectionSettings->setUuid(NetworkManager::Settings::ConnectionSe= ttings::createNewUuid()); - } else { - connectionSettings->setUuid(m_connection->uuid()); + connectionSettings->setUuid(m_connection->uuid()); + + // set master & slave type + if (isSlave()) { + connectionSettings->setMaster(m_masterUuid); + connectionSettings->setSlaveType(m_slaveType); } = connectionSettings->printSetting(); // debug @@ -368,6 +392,7 @@ void ConnectionDetailEditor::saveSetting() void ConnectionDetailEditor::connectionAddComplete(const QString& id, bool= success, const QString& msg) { qDebug() << id << " - " << success << " - " << msg; + emit connectionAdded(id, success, msg); // for slave dialogs } = void ConnectionDetailEditor::gotSecrets(const QString& id, bool success, c= onst NMVariantMapMap& secrets, const QString& msg) diff --git a/editor/connectiondetaileditor.h b/editor/connectiondetailedito= r.h index 8aabe19..c0de9b3 100644 --- a/editor/connectiondetaileditor.h +++ b/editor/connectiondetaileditor.h @@ -36,8 +36,11 @@ class ConnectionDetailEditor : public QDialog = public: ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::C= onnectionType type, - const QString &vpnType, - QWidget* parent =3D 0, Qt::WindowFlags f =3D 0); + QWidget* parent =3D 0, + const QString &vpnType =3D QString(), + const QString &masterUuid =3D QString(), + const QString &slaveType =3D QString(), + Qt::WindowFlags f =3D 0); ConnectionDetailEditor(const NetworkManager::Settings::ConnectionSetti= ngs::Ptr &setting, QWidget* parent =3D 0, Qt::WindowFlags f =3D 0); ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::C= onnectionType type, @@ -45,17 +48,26 @@ public: QWidget* parent =3D 0, Qt::WindowFlags f =3D 0); virtual ~ConnectionDetailEditor(); = + bool isSlave() const { return !m_masterUuid.isEmpty() && !m_slaveType.= isEmpty(); } + + QString uuid() const { return m_connection->uuid(); } + +signals: + void connectionAdded(const QString & id, bool success, const QString &= msg); + private Q_SLOTS: void connectionAddComplete(const QString & id, bool success, const QSt= ring & msg); void disconnectSignals(); void gotSecrets(const QString & id, bool success, const NMVariantMapMa= p & secrets, const QString & msg); void saveSetting(); private: - Ui::ConnectionDetailEditor * m_detailEditor; + Ui::ConnectionDetailEditor * m_ui; NetworkManager::Settings::ConnectionSettings::Ptr m_connection; int m_numSecrets; bool m_new; QString m_vpnType; + QString m_masterUuid; + QString m_slaveType; = void initEditor(); void initTabs(); diff --git a/editor/connectioneditor.cpp b/editor/connectioneditor.cpp index 7138ca8..5653247 100644 --- a/editor/connectioneditor.cpp +++ b/editor/connectioneditor.cpp @@ -88,8 +88,7 @@ ConnectionEditor::ConnectionEditor(QWidget* parent, Qt::W= indowFlags flags): = action =3D new QAction(i18n("Bond"), this); action->setData(NetworkManager::Settings::ConnectionSettings::Bond); - // TODO: disabled for now - action->setDisabled(true); + action->setDisabled(true); // TODO m_menu->addAction(action); action =3D new QAction(i18n("Bridge"), this); action->setData(NetworkManager::Settings::ConnectionSettings::Bridge); @@ -288,7 +287,7 @@ void ConnectionEditor::addConnection(QAction* action) wizard.data()->deleteLater(); } } else { - ConnectionDetailEditor * editor =3D new ConnectionDetailEditor(typ= e, vpnType, this); + ConnectionDetailEditor * editor =3D new ConnectionDetailEditor(typ= e, this, vpnType); editor->exec(); } } diff --git a/editor/ui/bond.ui b/editor/ui/bond.ui index 3a98b44..ebf16ce 100644 --- a/editor/ui/bond.ui +++ b/editor/ui/bond.ui @@ -38,27 +38,58 @@ - + + + QAbstractItemView::NoEditTriggers + + + true + + + true + + - + &Add... + + + + + - + + + false + &Edit... + + + + + - + + + false + &Delete + + + + + @@ -202,7 +233,7 @@ - ARP & targets: + ARP &targets: arpTargets @@ -210,7 +241,11 @@ - + + + An IP address or comma-separated list of addresses. + + @@ -218,12 +253,24 @@ + + + KPushButton + QPushButton +
kpushbutton.h
+
+ + KListWidget + QListWidget +
klistwidget.h
+
+
ifaceName bonds - pushButton - pushButton_2 - pushButton_3 + btnAdd + btnEdit + btnDelete mode linkMonitoring monitorFreq @@ -232,5 +279,22 @@ arpTargets - + + + linkMonitoring + currentIndexChanged(int) + monitorStack + setCurrentIndex(int) + + + 310 + 273 + + + 360 + 334 + + + + diff --git a/lib/hwaddrcombobox.cpp b/lib/hwaddrcombobox.cpp index 32a1b60..980f907 100644 --- a/lib/hwaddrcombobox.cpp +++ b/lib/hwaddrcombobox.cpp @@ -49,7 +49,7 @@ QString HwAddrComboBox::hwAddress() const else result =3D currentText(); // FIXME validate = - qDebug() << "Result:" << currentIndex() << result; + //qDebug() << "Result:" << currentIndex() << result; = return result; } @@ -68,7 +68,7 @@ void HwAddrComboBox::init(const NetworkManager::Device::T= ype &deviceType, const { m_initialAddress =3D address; = - qDebug() << "Initial address:" << m_initialAddress; + //qDebug() << "Initial address:" << m_initialAddress; = foreach(const NetworkManager::Device::Ptr & device, NetworkManager::ne= tworkInterfaces()) { const NetworkManager::Device::Type type =3D device->type(); @@ -90,7 +90,7 @@ void HwAddrComboBox::addAddressToCombo(const NetworkManag= er::Device::Ptr &device { const NetworkManager::Device::Type type =3D device->type(); = - qDebug() << "Adding to combo, type:" << type; + //qDebug() << "Adding to combo, type:" << type; = QVariant data; if (type =3D=3D NetworkManager::Device::Ethernet) { @@ -113,7 +113,7 @@ void HwAddrComboBox::addAddressToCombo(const NetworkMan= ager::Device::Ptr &device data =3D device->as()->hwAddress(); } = - qDebug() << "Data:" << data; + //qDebug() << "Data:" << data; = QString name; if (device->state() =3D=3D NetworkManager::Device::Activated) @@ -121,7 +121,7 @@ void HwAddrComboBox::addAddressToCombo(const NetworkMan= ager::Device::Ptr &device else name =3D device->interfaceName(); = - qDebug() << "Name:" << name; + //qDebug() << "Name:" << name; = if (!data.isNull()) { if (name =3D=3D data.toString()) {