This is a repost, as the first message was refused by the mailinglist.
Apparently I can't submit the screenshot, it's too large. So you can check
out the screenshot here :

http://eth1.mine.nu/editableGenericNetworkProperties.png

Patch attached

--
Christophe
Index: src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp
===================================================================
--- src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp	(revision 37206)
+++ src/VBox/Frontends/VirtualBox/src/selector/UIVMDesktop.cpp	(working copy)
@@ -715,6 +715,24 @@
     }
 }
 
+/**
+ * Return a text summary of the properties of a generic network adapter
+ */
+static QString getGenericProperties(const CNetworkAdapter &adapter) {
+  QVector<QString> names;
+  QVector<QString> props;
+  props = adapter.GetProperties(QString(), names); // all properties, please
+
+  QString result;
+  for (int i = 0; i < names.size(); i++) {
+    result += names[i] + "=" + props[i];
+    if (i != names.size() - 1)
+      result += ",";
+  }
+   
+  return result;
+}
+
 void UIDetailsPagePrivate::sltUpdateNetwork()
 {
     m_secBoxes.value(NetworkSec)->setTitleLinkEnabled(m_fChangeable);
@@ -747,8 +765,8 @@
                         attType = attType.arg(tr("Host-only adapter, '%1'",
                                                  "details report (network)").arg(adapter.GetHostOnlyInterface()));
                     else if (type == KNetworkAttachmentType_Generic)
-                        attType = attType.arg(tr("Generic, '%1'",
-                                                 "details report (network)").arg(adapter.GetGenericDriver()));
+                        attType = attType.arg(tr("Generic bambabies, '%1' { %2 }",
+                                                 "details report (network)").arg(adapter.GetGenericDriver(), getGenericProperties(adapter)));
                     else
                         attType = attType.arg(vboxGlobal().toString(type));
 
Index: src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h
===================================================================
--- src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h	(revision 37206)
+++ src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.h	(working copy)
@@ -43,6 +43,7 @@
         , m_strInternalNetworkName(QString())
         , m_strHostInterfaceName(QString())
         , m_strGenericDriver(QString())
+        , m_strGenericProperties(QString())
         , m_strMACAddress(QString())
         , m_fCableConnected(false)
         , m_redirects(UIPortForwardingDataList()) {}
@@ -58,6 +59,7 @@
                (m_strInternalNetworkName == other.m_strInternalNetworkName) &&
                (m_strHostInterfaceName == other.m_strHostInterfaceName) &&
                (m_strGenericDriver == other.m_strGenericDriver) &&
+               (m_strGenericProperties == other.m_strGenericProperties) &&
                (m_strMACAddress == other.m_strMACAddress) &&
                (m_fCableConnected == other.m_fCableConnected) &&
                (m_redirects == other.m_redirects);
@@ -75,6 +77,7 @@
     QString m_strInternalNetworkName;
     QString m_strHostInterfaceName;
     QString m_strGenericDriver;
+    QString m_strGenericProperties;
     QString m_strMACAddress;
     bool m_fCableConnected;
     UIPortForwardingDataList m_redirects;
@@ -128,6 +131,7 @@
     void sltUpdateAttachmentAlternative();
     void sltUpdateAlternativeName();
     void sltToggleAdvanced();
+    void sltToggleGenericProps();
     void sltGenerateMac();
     void sltOpenPortForwardingDlg();
 
@@ -143,6 +147,7 @@
     QString m_strIntName;
     QString m_strHoiName;
     QString m_strGenericDriver;
+    QString m_strGenericProperties;
 
     bool m_fPolished;
     UIPortForwardingDataList m_portForwardingRules;
Index: src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui
===================================================================
--- src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui	(revision 37391)
+++ src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.ui	(working copy)
@@ -252,7 +252,50 @@
         </property>
        </widget>
       </item>
-      <item row="8" column="0" colspan="4">
+      <item row="8" column="0">
+       <layout class="QHBoxLayout" name="m_pGenericButtonLayout">
+        <property name="margin">
+         <number>0</number>
+        </property>
+        <item>
+         <spacer name="m_pHorizontalSpacer3z">
+          <property name="orientation">
+           <enum>Qt::Horizontal</enum>
+          </property>
+          <property name="sizeHint" stdset="0">
+           <size>
+            <width>0</width>
+            <height>0</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QIArrowButtonSwitch" native="1" name="m_pGenericArrow">
+          <property name="text">
+           <string>Generic Properties</string>
+          </property>
+          <property name="whatsThis">
+           <string>Allows you to change generic properties for the network interface</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+      <item row="9" column="0">
+       <widget class="QLabel" name="m_pGenericPropertiesLabel">
+        <property name="text">
+         <string>Generic properties : </string>
+        </property>
+        <property name="alignment">
+         <set>Qt::AlignLeading|Qt::AlignLeft|Qt::AlignTop</set>
+        </property>
+       </widget>
+      </item>
+      <item row="9" column="1" colspan="3">
+       <widget class="QTextEdit" name="m_pGenericPropertiesTextEdit"/>
+      </item>
+      <item row="10" column="0" colspan="4">
        <spacer name="m_pVerticalSpacer">
         <property name="orientation">
          <enum>Qt::Vertical</enum>
Index: src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp
===================================================================
--- src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp	(revision 37206)
+++ src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsNetwork.cpp	(working copy)
@@ -53,6 +53,7 @@
 
     /* Setup connections: */
     connect(m_pAdvancedArrow, SIGNAL(clicked()), this, SLOT(sltToggleAdvanced()));
+    connect(m_pGenericArrow, SIGNAL(clicked()), this, SLOT(sltToggleGenericProps()));
     connect(m_pMACButton, SIGNAL(clicked()), this, SLOT(sltGenerateMac()));
     connect(m_pPortForwardingButton, SIGNAL(clicked()), this, SLOT(sltOpenPortForwardingDlg()));
 
@@ -73,6 +74,7 @@
                                     attachmentType() != KNetworkAttachmentType_Null &&
                                     attachmentType() != KNetworkAttachmentType_NAT);
     m_pAdvancedArrow->setEnabled(m_pParent->isMachineInValidMode());
+    m_pGenericArrow->setEnabled(m_pParent->isMachineInValidMode());
 
     /* Advanced attributes: */
     m_pAdapterTypeLabel->setEnabled(m_pParent->isMachineOffline());
@@ -94,6 +96,7 @@
     if ((m_pParent->isMachineSaved() || m_pParent->isMachineOnline()) && !m_pAdvancedArrow->isExpanded())
         m_pAdvancedArrow->animateClick();
     sltToggleAdvanced();
+    sltToggleGenericProps();
 }
 
 void UIMachineSettingsNetwork::fetchAdapterCache(const UICacheSettingsMachineNetworkAdapter &adapterCache)
@@ -128,6 +131,10 @@
     if (m_strGenericDriver.isEmpty())
         m_strGenericDriver = QString();
 
+    m_strGenericProperties = adapterData.m_strGenericProperties;
+    if (m_strGenericProperties.isEmpty())
+        m_strGenericProperties = QString();
+
     sltUpdateAttachmentAlternative();
 
     /* Load adapter type: */
@@ -144,6 +151,9 @@
 
     /* Load port forwarding rules: */
     m_portForwardingRules = adapterData.m_redirects;
+
+    /* Generic properties */
+    m_pGenericPropertiesTextEdit->setText(adapterData.m_strGenericProperties);
 }
 
 void UIMachineSettingsNetwork::uploadAdapterCache(UICacheSettingsMachineNetworkAdapter &adapterCache)
@@ -173,6 +183,7 @@
             break;
         case KNetworkAttachmentType_Generic:
             adapterData.m_strGenericDriver = alternativeName();
+            adapterData.m_strGenericProperties = m_pGenericPropertiesTextEdit->toPlainText();
             break;
         default:
             break;
@@ -364,6 +375,12 @@
             break;
     }
 
+    /* Show or hide "generic" properties editor */
+    m_pGenericArrow->setVisible(attachmentType() == KNetworkAttachmentType_Generic);
+    m_pGenericPropertiesLabel->setVisible(attachmentType() == KNetworkAttachmentType_Generic);
+    m_pGenericPropertiesTextEdit->setVisible(attachmentType() == KNetworkAttachmentType_Generic);
+    sltToggleGenericProps();
+
     /* Prepend 'empty' or 'default' item: */
     if (m_pAdapterNameCombo->count() == 0)
     {
@@ -495,6 +512,12 @@
     m_pPortForwardingButton->setVisible(m_pAdvancedArrow->isExpanded());
 }
 
+void UIMachineSettingsNetwork::sltToggleGenericProps() 
+{
+    m_pGenericPropertiesLabel->setVisible(m_pGenericArrow->isExpanded());
+    m_pGenericPropertiesTextEdit->setVisible(m_pGenericArrow->isExpanded());
+}
+
 void UIMachineSettingsNetwork::sltGenerateMac()
 {
     m_pMACEditor->setText(vboxGlobal().virtualBox().GetHost().GenerateMACAddress());
@@ -723,6 +746,59 @@
     return m_hoiList;
 }
 
+/**
+ * Fill in the list of generic properties
+ */
+QString summarizeGenericProperties(const CNetworkAdapter &adapter) {
+  QVector<QString> names;
+  QVector<QString> props;
+  props = adapter.GetProperties(QString(), names); // all properties, please
+
+  QString result;
+  for (int i = 0; i < names.size(); i++) {
+    result += names[i] + "=" + props[i];
+    if (i != names.size() - 1)
+      result += "\n";
+  }
+
+  return result;
+}
+
+/**
+ * Fill in the list of generic properties
+ */
+void updateGenericProperties(CNetworkAdapter &adapter, const QString & propText) {
+  QStringList newProps = propText.split("\n");
+  QHash<QString, QString> hash;
+
+  for (int i = 0; i < newProps.size(); i++) {
+    QString line = newProps[i];
+    int splitpos = line.indexOf("=");
+    if (splitpos) {
+      QString key = line.left(splitpos);
+      QString val = line.mid(splitpos+1);
+
+      adapter.SetProperty(key, val);
+      hash[key] = val;
+    }
+  }
+
+  // we still need to go over the list of properties to determine which ones 
+  // are to be deleted
+  QVector<QString> names;
+  QVector<QString> props;
+  props = adapter.GetProperties(QString(), names); // all properties, please
+
+  for (int i = 0; i < names.size(); i++) {
+    QString name = names[i];
+    QString value = props[i];
+
+    if (value != hash[name]) {
+      adapter.SetProperty(name, hash[name]);
+    }
+  }
+}
+
 /* Load data to cashe from corresponding external object(s),
  * this task COULD be performed in other than GUI thread: */
 void UIMachineSettingsNetworkPage::loadToCacheFrom(QVariant &data)
@@ -769,6 +845,8 @@
             if (adapterData.m_strGenericDriver.isEmpty())
                 adapterData.m_strGenericDriver = QString();
 
+            adapterData.m_strGenericProperties = summarizeGenericProperties(adapter);
+
             /* Gather advanced options: */
             adapterData.m_adapterType = adapter.GetAdapterType();
             adapterData.m_promiscuousMode = adapter.GetPromiscModePolicy();
@@ -897,6 +975,7 @@
                                 break;
                             case KNetworkAttachmentType_Generic:
                                 adapter.SetGenericDriver(adapterData.m_strGenericDriver);
+                                updateGenericProperties(adapter, adapterData.m_strGenericProperties);
                                 break;
                             default:
                                 break;
_______________________________________________
vbox-dev mailing list
[email protected]
http://vbox.innotek.de/mailman/listinfo/vbox-dev

Reply via email to