[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [plasma-nm] /: Bond setting widget, WIP, still disabled
From:       Lukáš Tinkl <lukas () kde ! org>
Date:       2013-04-30 21:28:05
Message-ID: 20130430212805.B5EF5A603F () git ! kde ! org
[Download RAW message or body]

Git commit 9fc92caa2317af30c67d7f3aca72b7b225c4b79b by Lukáš Tinkl.
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 <QDebug>
 
 #include <NetworkManagerQt/generic-types.h>
+#include <NetworkManagerQt/connection.h>
 
 #include <KLocalizedString>
 
-BondWidget::BondWidget(const NetworkManager::Settings::Setting::Ptr &setting, \
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::Settings::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 = new QMenu(this);
+    QAction * action = new QAction(i18n("Ethernet"), this);
+    action->setData(NetworkManager::Settings::ConnectionSettings::Wired);
+    m_menu->addAction(action);
+    action = new QAction(i18n("InfiniBand"), this);
+    action->setData(NetworkManager::Settings::ConnectionSettings::Infiniband);
+    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("broadcast")); +    \
m_ui->mode->addItem(i18nc("bond mode", "802.3ad"), QLatin1String("802.3ad")); +    \
m_ui->mode->addItem(i18nc("bond mode", "Adaptive transmit load balancing"), \
QLatin1String("balance-tlb")); +    m_ui->mode->addItem(i18nc("bond mode", "Adaptive \
load balancing"), QLatin1String("balance-alb")); +
+    // link monitor
+    m_ui->linkMonitoring->addItem(i18nc("bond link monitoring", "MII \
(recommended)"), 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*,QListWidgetItem*)), \
SLOT(currentBondChanged(QListWidgetItem*,QListWidgetItem*))); +
     if (setting)
         loadConfig(setting);
 }
@@ -47,20 +81,90 @@ void BondWidget::loadConfig(const \
NetworkManager::Settings::Setting::Ptr &settin  
     NMStringMap options = bondSetting.options();
 
-    // TODO
+    // mode
+    int modeIndex = \
m_ui->mode->findData(options.value(NM_SETTING_BOND_OPTION_MODE)); +    if (modeIndex \
== -1) +        modeIndex = 0;
+    m_ui->mode->setCurrentIndex(modeIndex);
+
+    const QString arpTargets = options.value(NM_SETTING_BOND_OPTION_ARP_IP_TARGET);
+    if (!arpTargets.isEmpty()) { // ARP
+        m_ui->linkMonitoring->setCurrentIndex(m_ui->linkMonitoring->findData(NM_SETTING_BOND_OPTION_ARP_MONITOR));
 +
+        bool ok = false;
+        const int arpMonFreq = \
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->findData(NM_SETTING_BOND_OPTION_MII_MONITOR));
 +
+        bool ok = false;
+        const int miiMonFreq = \
options.value(NM_SETTING_BOND_OPTION_MIIMON).toInt(&ok); +        if (ok && \
miiMonFreq > 0) +            m_ui->monitorFreq->setValue(miiMonFreq);
+
+        ok = false;
+        const int upDelay = \
options.value(NM_SETTING_BOND_OPTION_UPDELAY).toInt(&ok); +        if (ok && upDelay \
> 0) +            m_ui->upDelay->setValue(upDelay);
+
+        ok = false;
+        const int downDelay = \
options.value(NM_SETTING_BOND_OPTION_DOWNDELAY).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() \
== NM_SETTING_BOND_OPTION_MII_MONITOR) { // MII +        \
options.insert(NM_SETTING_BOND_OPTION_MIIMON, \
QString::number(m_ui->monitorFreq->value())); +        const int upDelay = \
m_ui->upDelay->value(); +        if (upDelay)
+            options.insert(NM_SETTING_BOND_OPTION_UPDELAY, \
QString::number(upDelay)); +        const int downDelay = m_ui->downDelay->value();
+        if (downDelay)
+            options.insert(NM_SETTING_BOND_OPTION_DOWNDELAY, \
QString::number(downDelay)); +    } else { // ARP
+        options.insert(NM_SETTING_BOND_OPTION_ARP_INTERVAL, \
QString::number(m_ui->monitorFreq->value())); +        const QString arpTargets = \
m_ui->arpTargets->text(); +        if (!arpTargets.isEmpty())
+            options.insert(NM_SETTING_BOND_OPTION_ARP_IP_TARGET, arpTargets);
+    }
 
     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 = new \
ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::typeFromString(action->data().toString()),
 +                                                                     this, \
QString(), m_uuid, type()); +    if (bondEditor->exec() == QDialog::Accepted) {
+        qDebug() << "Saving slave connection:" << bondEditor->uuid();
+    }
+}
+
+void BondWidget::currentBondChanged(QListWidgetItem *current, QListWidgetItem \
*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 <QtGui/QWidget>
+#include <QWidget>
+#include <QMenu>
+#include <QListWidgetItem>
 
 #include <NetworkManagerQt/settings/bond.h>
 
@@ -36,15 +38,21 @@ class BondWidget : public SettingWidget
 {
     Q_OBJECT
 public:
-    BondWidget(const NetworkManager::Settings::Setting::Ptr &setting = \
NetworkManager::Settings::Setting::Ptr(), QWidget* parent = 0, Qt::WindowFlags f = \
0); +    BondWidget(const QString & masterUuid, const \
NetworkManager::Settings::Setting::Ptr &setting = \
NetworkManager::Settings::Setting::Ptr(), QWidget* parent = 0, Qt::WindowFlags f = \
0);  virtual ~BondWidget();
 
     void loadConfig(const NetworkManager::Settings::Setting::Ptr &setting);
 
     QVariantMap setting(bool agentOwned = false) const;
 
+private slots:
+    void addBond(QAction * action);
+    void currentBondChanged(QListWidgetItem * current, QListWidgetItem * previous);
+
 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/connectiondetaileditor.cpp
index 477f309..f7da34f 100644
--- a/editor/connectiondetaileditor.cpp
+++ b/editor/connectiondetaileditor.cpp
@@ -1,5 +1,6 @@
 /*
     Copyright 2013 Jan Grulich <jgrulich@redhat.com>
+    Copyright 2013 Lukas Tinkl <ltinkl@redhat.com>
 
     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 <QDebug>
@@ -49,29 +51,32 @@
 
 using namespace NetworkManager;
 
-ConnectionDetailEditor::ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::ConnectionType \
type, const QString &vpnType, QWidget* parent, Qt::WindowFlags f): \
+ConnectionDetailEditor::ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::ConnectionType \
type, QWidget* parent, +                                               const QString \
&vpnType, const 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::ConnectionSettings::ConnectionType \
type, const QVariantList &args, QWidget *parent, 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)
 {
     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.count();
@@ -112,13 +117,13 @@ \
ConnectionDetailEditor::ConnectionDetailEditor(Settings::ConnectionSettings::Con  
 ConnectionDetailEditor::ConnectionDetailEditor(const \
NetworkManager::Settings::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->typeAsString(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_connection->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 = new ConnectionWidget(m_connection);
-    m_detailEditor->tabWidget->addTab(connectionWidget, i18n("General"));
+    m_ui->tabWidget->addTab(connectionWidget, i18n("General"));
+
+    // create/set UUID
+    QString uuid = m_connection->uuid();
+    if (QUuid(uuid).isNull()) {
+        uuid = NetworkManager::Settings::ConnectionSettings::createNewUuid();
+        m_connection->setUuid(uuid);
+    }
+    qDebug() << "Initting tabs, UUID:" << uuid;
 
     const NetworkManager::Settings::ConnectionSettings::ConnectionType type = \
m_connection->connectionType();  
     /*Adsl, Cdma, Gsm, Infiniband, Pppoe, Vpn, Wired, Wireless, Bluetooth, OlpcMesh, \
Vlan, Wimax, Bond, Bridge */  if (type == \
                NetworkManager::Settings::ConnectionSettings::Wired) {
         WiredConnectionWidget * wiredWidget = 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 = new \
WiredSecurity(m_connection->setting(NetworkManager::Settings::Setting::Security8021x).staticCast<NetworkManager::Settings::Security8021xSetting>(), \
                this);
-        m_detailEditor->tabWidget->addTab(wiredSecurity, i18n("802.1x Security"));
+        m_ui->tabWidget->addTab(wiredSecurity, i18n("802.1x Security"));
     } else if (type == NetworkManager::Settings::ConnectionSettings::Wireless) {
         WifiConnectionWidget * wifiWidget = new \
WifiConnectionWidget(m_connection->setting(NetworkManager::Settings::Setting::Wireless), \
                this);
-        m_detailEditor->tabWidget->addTab(wifiWidget, i18n("Wireless"));
+        m_ui->tabWidget->addTab(wifiWidget, i18n("Wireless"));
         WifiSecurity * wifiSecurity = new \
WifiSecurity(m_connection->setting(NetworkManager::Settings::Setting::WirelessSecurity),
  m_connection->setting(NetworkManager::Settings::Setting::Security8021x).staticCast<NetworkManager::Settings::Security8021xSetting>(),
  this);
-        m_detailEditor->tabWidget->addTab(wifiSecurity, i18n("Wi-Fi Security"));
+        m_ui->tabWidget->addTab(wifiSecurity, i18n("Wi-Fi Security"));
     } else if (type == NetworkManager::Settings::ConnectionSettings::Pppoe) { // DSL
         PppoeWidget * pppoeWidget = new \
                PppoeWidget(m_connection->setting(NetworkManager::Settings::Setting::Pppoe), \
                this);
-        m_detailEditor->tabWidget->addTab(pppoeWidget, i18n("DSL"));
+        m_ui->tabWidget->addTab(pppoeWidget, i18n("DSL"));
         WiredConnectionWidget * wiredWidget = 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 == NetworkManager::Settings::ConnectionSettings::Gsm) { // GSM
         GsmWidget * gsmWidget = new \
                GsmWidget(m_connection->setting(NetworkManager::Settings::Setting::Gsm), \
                this);
-        m_detailEditor->tabWidget->addTab(gsmWidget, i18n("Mobile Broadband (%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 == NetworkManager::Settings::ConnectionSettings::Cdma) { // CDMA
         CdmaWidget * cdmaWidget = new \
                CdmaWidget(m_connection->setting(NetworkManager::Settings::Setting::Cdma), \
                this);
-        m_detailEditor->tabWidget->addTab(cdmaWidget, i18n("Mobile Broadband (%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 == NetworkManager::Settings::ConnectionSettings::Bluetooth) {  \
                // Bluetooth
         BtWidget * btWidget = new \
                BtWidget(m_connection->setting(NetworkManager::Settings::Setting::Bluetooth), \
                this);
-        m_detailEditor->tabWidget->addTab(btWidget, i18n("Bluetooth"));
+        m_ui->tabWidget->addTab(btWidget, i18n("Bluetooth"));
         NetworkManager::Settings::BluetoothSetting::Ptr btSetting = \
m_connection->setting(NetworkManager::Settings::Setting::Bluetooth).staticCast<NetworkManager::Settings::BluetoothSetting>();
                
         if (btSetting->profileType() == \
                NetworkManager::Settings::BluetoothSetting::Dun) {
             GsmWidget * gsmWidget = 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 = 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 == NetworkManager::Settings::ConnectionSettings::Infiniband) { \
                // Infiniband
         InfinibandWidget * infinibandWidget = new \
InfinibandWidget(m_connection->setting(NetworkManager::Settings::Setting::Infiniband), \
                this);
-        m_detailEditor->tabWidget->addTab(infinibandWidget, i18n("Infiniband"));
+        m_ui->tabWidget->addTab(infinibandWidget, i18n("Infiniband"));
+    } else if (type == NetworkManager::Settings::ConnectionSettings::Bond) { // Bond
+        BondWidget * bondWidget = new BondWidget(uuid, \
m_connection->setting(NetworkManager::Settings::Setting::Bond), this); +        \
                m_ui->tabWidget->addTab(bondWidget, i18n("Bond"));
     } else if (type == NetworkManager::Settings::ConnectionSettings::Vpn) { // VPN
         QString error;
         VpnUiPlugin * vpnPlugin = 0;
@@ -266,30 +282,36 @@ void ConnectionDetailEditor::initTabs()
             if (vpnPlugin && error.isEmpty()) {
                 const QString shortName = serviceType.section('.', -1);
                 SettingWidget * vpnWidget = vpnPlugin->widget(vpnSetting, this);
-                m_detailEditor->tabWidget->addTab(vpnWidget, i18n("VPN (%1)", \
shortName)); +                m_ui->tabWidget->addTab(vpnWidget, i18n("VPN (%1)", \
shortName));  } else {
                 qDebug() << error << ", serviceType == " << serviceType;
             }
         }
     }
 
+    // PPP widget
     if (type == Settings::ConnectionSettings::Pppoe || type == \
                Settings::ConnectionSettings::Cdma || type == \
                Settings::ConnectionSettings::Gsm) {
         PPPWidget * pppWidget = new \
                PPPWidget(m_connection->setting(NetworkManager::Settings::Setting::Ppp), \
                this);
-        m_detailEditor->tabWidget->addTab(pppWidget, i18n("PPP"));
+        m_ui->tabWidget->addTab(pppWidget, i18n("PPP"));
     }
 
-    IPv4Widget * ipv4Widget = new \
                IPv4Widget(m_connection->setting(NetworkManager::Settings::Setting::Ipv4), \
                this);
-    m_detailEditor->tabWidget->addTab(ipv4Widget, i18n("IPv4"));
+    // IPv4 widget
+    if (!isSlave()) {
+        IPv4Widget * ipv4Widget = new \
IPv4Widget(m_connection->setting(NetworkManager::Settings::Setting::Ipv4), this); +   \
m_ui->tabWidget->addTab(ipv4Widget, i18n("IPv4")); +    }
 
-    if (type == Settings::ConnectionSettings::Wired || type == \
Settings::ConnectionSettings::Wireless || type == \
Settings::ConnectionSettings::Infiniband) { +    // IPv6 widget
+    if ((type == Settings::ConnectionSettings::Wired || type == \
Settings::ConnectionSettings::Wireless || +            type == \
Settings::ConnectionSettings::Infiniband || type == \
                Settings::ConnectionSettings::Bond) && !isSlave()) {
         IPv6Widget * ipv6Widget = new \
                IPv6Widget(m_connection->setting(NetworkManager::Settings::Setting::Ipv6), \
                this);
-        m_detailEditor->tabWidget->addTab(ipv6Widget, i18n("IPv6"));
+        m_ui->tabWidget->addTab(ipv6Widget, i18n("IPv6"));
     }
 }
 
 void ConnectionDetailEditor::saveSetting()
 {
-    ConnectionWidget * connectionWidget = \
static_cast<ConnectionWidget*>(m_detailEditor->tabWidget->widget(0)); +    \
ConnectionWidget * connectionWidget = \
static_cast<ConnectionWidget*>(m_ui->tabWidget->widget(0));  
     NMVariantMapMap settings = connectionWidget->setting();
 
@@ -299,8 +321,8 @@ void ConnectionDetailEditor::saveSetting()
     }
 
     qDebug() << "agent owned - " << agentOwned;
-    for (int i = 1; i < m_detailEditor->tabWidget->count(); ++i) {
-        SettingWidget * widget = \
static_cast<SettingWidget*>(m_detailEditor->tabWidget->widget(i)); +    for (int i = \
1; i < m_ui->tabWidget->count(); ++i) { +        SettingWidget * widget = \
static_cast<SettingWidget*>(m_ui->tabWidget->widget(i));  const QString type = \
                widget->type();
         if (type != \
NetworkManager::Settings::Setting::typeAsString(NetworkManager::Settings::Setting::Security8021x) \
                &&
             type != \
NetworkManager::Settings::Setting::typeAsString(NetworkManager::Settings::Setting::WirelessSecurity)) \
{ @@ -330,7 +352,7 @@ void ConnectionDetailEditor::saveSetting()
     NetworkManager::Settings::ConnectionSettings * connectionSettings = new \
NetworkManager::Settings::ConnectionSettings(m_connection->connectionType());  
     connectionSettings->fromMap(settings);
-    connectionSettings->setId(m_detailEditor->connectionName->text());
+    connectionSettings->setId(m_ui->connectionName->text());
 
     if (connectionSettings->connectionType() == \
Settings::ConnectionSettings::Wireless) {  \
NetworkManager::Settings::WirelessSecuritySetting::Ptr securitySetting = \
connectionSettings->setting(Settings::Setting::WirelessSecurity).staticCast<NetworkManager::Settings::WirelessSecuritySetting>();
 @@ -344,10 +366,12 @@ void ConnectionDetailEditor::saveSetting()
     }
 
     // set UUID
-    if (m_new) {
-        connectionSettings->setUuid(NetworkManager::Settings::ConnectionSettings::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, const \
                NMVariantMapMap& secrets, const QString& msg)
diff --git a/editor/connectiondetaileditor.h b/editor/connectiondetaileditor.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::ConnectionType \
                type,
-                           const QString &vpnType,
-                           QWidget* parent = 0, Qt::WindowFlags f = 0);
+                           QWidget* parent = 0,
+                           const QString &vpnType = QString(),
+                           const QString &masterUuid = QString(),
+                           const QString &slaveType = QString(),
+                           Qt::WindowFlags f = 0);
     ConnectionDetailEditor(const NetworkManager::Settings::ConnectionSettings::Ptr \
&setting,  QWidget* parent = 0, Qt::WindowFlags f = 0);
     ConnectionDetailEditor(NetworkManager::Settings::ConnectionSettings::ConnectionType \
type, @@ -45,17 +48,26 @@ public:
                            QWidget* parent = 0, Qt::WindowFlags f = 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 QString & \
msg);  void disconnectSignals();
     void gotSecrets(const QString & id, bool success, const NMVariantMapMap & \
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::WindowFlags \
flags):  
     action = 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 = 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 = new ConnectionDetailEditor(type, vpnType, \
this); +        ConnectionDetailEditor * editor = new ConnectionDetailEditor(type, \
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 @@
    <item row="2" column="0" colspan="2">
     <layout class="QGridLayout" name="gridLayout">
      <item row="0" column="0" rowspan="4">
-      <widget class="QListWidget" name="bonds"/>
+      <widget class="KListWidget" name="bonds">
+       <property name="editTriggers">
+        <set>QAbstractItemView::NoEditTriggers</set>
+       </property>
+       <property name="alternatingRowColors">
+        <bool>true</bool>
+       </property>
+       <property name="uniformItemSizes">
+        <bool>true</bool>
+       </property>
+      </widget>
      </item>
      <item row="0" column="1">
-      <widget class="QPushButton" name="pushButton">
+      <widget class="KPushButton" name="btnAdd">
        <property name="text">
         <string>&amp;Add...</string>
        </property>
+       <property name="icon">
+        <iconset theme="list-add">
+         <normaloff/>
+        </iconset>
+       </property>
       </widget>
      </item>
      <item row="1" column="1">
-      <widget class="QPushButton" name="pushButton_2">
+      <widget class="KPushButton" name="btnEdit">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
        <property name="text">
         <string>&amp;Edit...</string>
        </property>
+       <property name="icon">
+        <iconset theme="configure">
+         <normaloff/>
+        </iconset>
+       </property>
       </widget>
      </item>
      <item row="2" column="1">
-      <widget class="QPushButton" name="pushButton_3">
+      <widget class="KPushButton" name="btnDelete">
+       <property name="enabled">
+        <bool>false</bool>
+       </property>
        <property name="text">
         <string>&amp;Delete</string>
        </property>
+       <property name="icon">
+        <iconset theme="edit-delete">
+         <normaloff/>
+        </iconset>
+       </property>
       </widget>
      </item>
      <item row="3" column="1">
@@ -202,7 +233,7 @@
        <item row="0" column="0">
         <widget class="QLabel" name="label_8">
          <property name="text">
-          <string>ARP &amp; targets:</string>
+          <string>ARP &amp;targets:</string>
          </property>
          <property name="buddy">
           <cstring>arpTargets</cstring>
@@ -210,7 +241,11 @@
         </widget>
        </item>
        <item row="0" column="1">
-        <widget class="QLineEdit" name="arpTargets"/>
+        <widget class="QLineEdit" name="arpTargets">
+         <property name="toolTip">
+          <string>An IP address or comma-separated list of addresses.</string>
+         </property>
+        </widget>
        </item>
       </layout>
      </widget>
@@ -218,12 +253,24 @@
    </item>
   </layout>
  </widget>
+ <customwidgets>
+  <customwidget>
+   <class>KPushButton</class>
+   <extends>QPushButton</extends>
+   <header>kpushbutton.h</header>
+  </customwidget>
+  <customwidget>
+   <class>KListWidget</class>
+   <extends>QListWidget</extends>
+   <header>klistwidget.h</header>
+  </customwidget>
+ </customwidgets>
  <tabstops>
   <tabstop>ifaceName</tabstop>
   <tabstop>bonds</tabstop>
-  <tabstop>pushButton</tabstop>
-  <tabstop>pushButton_2</tabstop>
-  <tabstop>pushButton_3</tabstop>
+  <tabstop>btnAdd</tabstop>
+  <tabstop>btnEdit</tabstop>
+  <tabstop>btnDelete</tabstop>
   <tabstop>mode</tabstop>
   <tabstop>linkMonitoring</tabstop>
   <tabstop>monitorFreq</tabstop>
@@ -232,5 +279,22 @@
   <tabstop>arpTargets</tabstop>
  </tabstops>
  <resources/>
- <connections/>
+ <connections>
+  <connection>
+   <sender>linkMonitoring</sender>
+   <signal>currentIndexChanged(int)</signal>
+   <receiver>monitorStack</receiver>
+   <slot>setCurrentIndex(int)</slot>
+   <hints>
+    <hint type="sourcelabel">
+     <x>310</x>
+     <y>273</y>
+    </hint>
+    <hint type="destinationlabel">
+     <x>360</x>
+     <y>334</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
 </ui>
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 = currentText(); // FIXME validate
 
-    qDebug() << "Result:" << currentIndex() << result;
+    //qDebug() << "Result:" << currentIndex() << result;
 
     return result;
 }
@@ -68,7 +68,7 @@ void HwAddrComboBox::init(const NetworkManager::Device::Type \
&deviceType, const  {
     m_initialAddress = address;
 
-    qDebug() << "Initial address:" << m_initialAddress;
+    //qDebug() << "Initial address:" << m_initialAddress;
 
     foreach(const NetworkManager::Device::Ptr & device, \
NetworkManager::networkInterfaces()) {  const NetworkManager::Device::Type type = \
device->type(); @@ -90,7 +90,7 @@ void HwAddrComboBox::addAddressToCombo(const \
NetworkManager::Device::Ptr &device  {
     const NetworkManager::Device::Type type = device->type();
 
-    qDebug() << "Adding to combo, type:" << type;
+    //qDebug() << "Adding to combo, type:" << type;
 
     QVariant data;
     if (type == NetworkManager::Device::Ethernet) {
@@ -113,7 +113,7 @@ void HwAddrComboBox::addAddressToCombo(const \
NetworkManager::Device::Ptr &device  data = \
device->as<NetworkManager::VlanDevice>()->hwAddress();  }
 
-    qDebug() << "Data:" << data;
+    //qDebug() << "Data:" << data;
 
     QString name;
     if (device->state() == NetworkManager::Device::Activated)
@@ -121,7 +121,7 @@ void HwAddrComboBox::addAddressToCombo(const \
NetworkManager::Device::Ptr &device  else
         name = device->interfaceName();
 
-    qDebug() << "Name:" << name;
+    //qDebug() << "Name:" << name;
 
     if (!data.isNull()) {
         if (name == data.toString()) {


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic