VirtualBox

Ignore:
Timestamp:
Apr 27, 2017 3:11:43 PM (8 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
115089
Message:

FE/Qt: bugref:8847: Host Network Manager: One more information field (DHCP server) for the network tree, allows to toggle DHCP server right inside the tree.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.cpp

    r66695 r66696  
    5555    Column_IPv4,
    5656    Column_IPv6,
     57    Column_DHCP,
    5758    Column_Max,
    5859};
     
    8889    setText(Column_IPv6, !m_interface.m_fIpv6Supported ? QString() :
    8990                         QString("%1/%2").arg(m_interface.m_strInterfaceAddress6).arg(maskToCidr(m_interface.m_strInterfaceMaskLength6)));
     91    setText(Column_DHCP, UIHostNetworkManager::tr("Enable", "DHCP Server"));
     92    setCheckState(Column_DHCP, m_dhcpserver.m_fDhcpServerEnabled ? Qt::Checked : Qt::Unchecked);
    9093
    9194    /* Compose item tool-tip: */
     
    269272    const QStringList fields = QStringList()
    270273                               << tr("Name")
    271                                << tr("IPv4 address/mask")
    272                                << tr("IPv6 address/mask");
     274                               << tr("IPv4 Address/Mask")
     275                               << tr("IPv6 Address/Mask")
     276                               << tr("DHCP Server");
    273277    m_pTreeWidget->setHeaderLabels(fields);
    274278}
     
    533537    const int iMinWidth1 = qMax(pItemView->sizeHintForColumn(Column_IPv4), pItemHeader->sectionSizeHint(Column_IPv4));
    534538    const int iMinWidth2 = qMax(pItemView->sizeHintForColumn(Column_IPv6), pItemHeader->sectionSizeHint(Column_IPv6));
     539    const int iMinWidth3 = qMax(pItemView->sizeHintForColumn(Column_DHCP), pItemHeader->sectionSizeHint(Column_DHCP));
    535540    /* Propose suitable width hints for non-important columns: */
    536541    const int iWidth1 = iMinWidth1 < iTotal / Column_Max ? iMinWidth1 : iTotal / Column_Max;
    537542    const int iWidth2 = iMinWidth2 < iTotal / Column_Max ? iMinWidth2 : iTotal / Column_Max;
     543    const int iWidth3 = iMinWidth3 < iTotal / Column_Max ? iMinWidth3 : iTotal / Column_Max;
    538544    /* Apply the proposal: */
    539545    m_pTreeWidget->setColumnWidth(Column_IPv4, iWidth1);
    540546    m_pTreeWidget->setColumnWidth(Column_IPv6, iWidth2);
    541     m_pTreeWidget->setColumnWidth(Column_Name, iTotal - iWidth1 - iWidth2);
     547    m_pTreeWidget->setColumnWidth(Column_DHCP, iWidth3);
     548    m_pTreeWidget->setColumnWidth(Column_Name, iTotal - iWidth1 - iWidth2 - iWidth3);
     549}
     550
     551void UIHostNetworkManager::sltHandleItemChange(QTreeWidgetItem *pItem)
     552{
     553    /* Get network item: */
     554    UIItemHostNetwork *pChangedItem = static_cast<UIItemHostNetwork*>(pItem);
     555    AssertMsgReturnVoid(pChangedItem, ("Changed item must not be null!\n"));
     556
     557    /* Get item data: */
     558    UIDataHostNetwork data = *pChangedItem;
     559
     560    /* Make sure dhcp server status changed: */
     561    if (   (   data.m_dhcpserver.m_fDhcpServerEnabled
     562            && pChangedItem->checkState(Column_DHCP) == Qt::Checked)
     563        || (   !data.m_dhcpserver.m_fDhcpServerEnabled
     564            && pChangedItem->checkState(Column_DHCP) == Qt::Unchecked))
     565        return;
     566
     567    /* Get VBox for further activities: */
     568    CVirtualBox comVBox = vboxGlobal().virtualBox();
     569
     570    /* Find corresponding DHCP server (create if necessary): */
     571    CDHCPServer comServer = comVBox.FindDHCPServerByNetworkName(data.m_interface.m_strName);
     572    if (!comVBox.isOk() || comServer.isNull())
     573        comServer = comVBox.CreateDHCPServer(data.m_interface.m_strName);
     574
     575    /* Show error message if necessary: */
     576    if (!comVBox.isOk() || comServer.isNull())
     577        msgCenter().cannotCreateDHCPServer(comVBox, data.m_interface.m_strName, this);
     578    else
     579    {
     580        /* Save whether DHCP server is enabled: */
     581        if (comServer.isOk())
     582            comServer.SetEnabled(!data.m_dhcpserver.m_fDhcpServerEnabled);
     583
     584        /* Show error message if necessary: */
     585        if (!comServer.isOk())
     586            msgCenter().cannotSaveDHCPServerParameter(comServer, this);
     587        {
     588            /* Manually toggle the DHCP server status: */
     589            data.m_dhcpserver.m_fDhcpServerEnabled = !data.m_dhcpserver.m_fDhcpServerEnabled;
     590
     591            /* Update interface in the tree: */
     592            updateItemForNetworkHost(data, true, pChangedItem);
     593
     594            /* Adjust tree-widget: */
     595            sltAdjustTreeWidget();
     596        }
     597    }
    542598}
    543599
     
    747803        connect(m_pTreeWidget, SIGNAL(customContextMenuRequested(const QPoint &)),
    748804                this, SLOT(sltHandleContextMenuRequest(const QPoint &)));
     805        connect(m_pTreeWidget, SIGNAL(itemChanged(QTreeWidgetItem *, int)),
     806                this, SLOT(sltHandleItemChange(QTreeWidgetItem *)));
    749807        /* Add tree-widget into layout: */
    750808        QVBoxLayout *pMainLayout = qobject_cast<QVBoxLayout*>(centralWidget()->layout());
  • trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h

    r66695 r66696  
    2727/* Forward declarations: */
    2828class CHostNetworkInterface;
     29class QTreeWidgetItem;
    2930class QIDialogButtonBox;
    3031class QITreeWidget;
     
    8384        void sltAdjustTreeWidget();
    8485
     86        /** Handles tree-widget @a pItem change. */
     87        void sltHandleItemChange(QTreeWidgetItem *pItem);
    8588        /** Handles tree-widget current item change. */
    8689        void sltHandleCurrentItemChange();
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette