VirtualBox

Changeset 66695 in vbox for trunk/src/VBox/Frontends


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

FE/Qt: bugref:8847: Host Network Manager: Few more information fields (IPv4, IPv6) for the network tree; User oriented manual sorting.

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

Legend:

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

    r66681 r66695  
    4949
    5050
     51/** Tree-widget column tags. */
     52enum
     53{
     54    Column_Name,
     55    Column_IPv4,
     56    Column_IPv6,
     57    Column_Max,
     58};
     59
     60
    5161/** Host Network Manager: Tree-widget item. */
    5262class UIItemHostNetwork : public QITreeWidgetItem, public UIDataHostNetwork
     
    5969    /** Returns item name. */
    6070    QString name() const { return m_interface.m_strName; }
     71
     72private:
     73
     74    /** Returns CIDR for a passed @a strMask. */
     75    static int maskToCidr(const QString &strMask);
    6176};
    6277
     
    6883void UIItemHostNetwork::updateFields()
    6984{
    70     /* Compose item name/tool-tip: */
    71     setText(0, m_interface.m_strName);
     85    /* Compose item fields: */
     86    setText(Column_Name, m_interface.m_strName);
     87    setText(Column_IPv4, QString("%1/%2").arg(m_interface.m_strInterfaceAddress).arg(maskToCidr(m_interface.m_strInterfaceMask)));
     88    setText(Column_IPv6, !m_interface.m_fIpv6Supported ? QString() :
     89                         QString("%1/%2").arg(m_interface.m_strInterfaceAddress6).arg(maskToCidr(m_interface.m_strInterfaceMaskLength6)));
     90
     91    /* Compose item tool-tip: */
    7292    const QString strTable("<table cellspacing=5>%1</table>");
    7393    const QString strHeader("<tr><td><nobr>%1:&nbsp;</nobr></td><td><nobr>%2</nobr></td></tr>");
     
    124144
    125145    /* Assign tool-tip finally: */
    126     setToolTip(0, strTable.arg(strToolTip));
     146    setToolTip(Column_Name, strTable.arg(strToolTip));
     147}
     148
     149/* static */
     150int UIItemHostNetwork::maskToCidr(const QString &strMask)
     151{
     152    /* Parse passed mask: */
     153    QList<int> address;
     154    foreach (const QString &strValue, strMask.split('.'))
     155        address << strValue.toInt();
     156
     157    /* Calculate CIDR: */
     158    int iCidr = 0;
     159    for (int i = 0; i < 4 || i < address.size(); ++i)
     160    {
     161        switch(address.at(i))
     162        {
     163            case 0x80: iCidr += 1; break;
     164            case 0xC0: iCidr += 2; break;
     165            case 0xE0: iCidr += 3; break;
     166            case 0xF0: iCidr += 4; break;
     167            case 0xF8: iCidr += 5; break;
     168            case 0xFC: iCidr += 6; break;
     169            case 0xFE: iCidr += 7; break;
     170            case 0xFF: iCidr += 8; break;
     171            /* Return CIDR prematurelly: */
     172            default: return iCidr;
     173        }
     174    }
     175
     176    /* Return CIDR: */
     177    return iCidr;
    127178}
    128179
     
    214265        m_pToolBar->updateLayout();
    215266#endif
     267
     268    /* Translate tree-widget: */
     269    const QStringList fields = QStringList()
     270                               << tr("Name")
     271                               << tr("IPv4 address/mask")
     272                               << tr("IPv6 address/mask");
     273    m_pTreeWidget->setHeaderLabels(fields);
     274}
     275
     276void UIHostNetworkManager::resizeEvent(QResizeEvent *pEvent)
     277{
     278    /* Call to base-class: */
     279    QIWithRetranslateUI<QMainWindow>::resizeEvent(pEvent);
     280
     281    /* Adjust tree-widget: */
     282    sltAdjustTreeWidget();
     283}
     284
     285void UIHostNetworkManager::showEvent(QShowEvent *pEvent)
     286{
     287    /* Call to base-class: */
     288    QIWithRetranslateUI<QMainWindow>::showEvent(pEvent);
     289
     290    /* Adjust tree-widget: */
     291    sltAdjustTreeWidget();
    216292}
    217293
     
    264340            createItemForNetworkHost(data, true);
    265341
    266             /* Sort list by the 1st column: */
    267             m_pTreeWidget->sortByColumn(0, Qt::AscendingOrder);
     342            /* Adjust tree-widget: */
     343            sltAdjustTreeWidget();
    268344        }
    269345    }
     
    359435        loadHostNetwork(comInterface, data);
    360436        updateItemForNetworkHost(data, true, pItem);
     437
     438        /* Adjust tree-widget: */
     439        sltAdjustTreeWidget();
    361440    }
    362441}
     
    433512                    /* Remove interface from the tree: */
    434513                    delete pItem;
     514
     515                    /* Adjust tree-widget: */
     516                    sltAdjustTreeWidget();
    435517                }
    436518            }
    437519        }
    438520    }
     521}
     522
     523void UIHostNetworkManager::sltAdjustTreeWidget()
     524{
     525    /* Get the tree-widget abstract interface: */
     526    QAbstractItemView *pItemView = m_pTreeWidget;
     527    /* Get the tree-widget header-view: */
     528    QHeaderView *pItemHeader = m_pTreeWidget->header();
     529
     530    /* Calculate the total tree-widget width: */
     531    const int iTotal = m_pTreeWidget->viewport()->width();
     532    /* Look for a minimum width hints for non-important columns: */
     533    const int iMinWidth1 = qMax(pItemView->sizeHintForColumn(Column_IPv4), pItemHeader->sectionSizeHint(Column_IPv4));
     534    const int iMinWidth2 = qMax(pItemView->sizeHintForColumn(Column_IPv6), pItemHeader->sectionSizeHint(Column_IPv6));
     535    /* Propose suitable width hints for non-important columns: */
     536    const int iWidth1 = iMinWidth1 < iTotal / Column_Max ? iMinWidth1 : iTotal / Column_Max;
     537    const int iWidth2 = iMinWidth2 < iTotal / Column_Max ? iMinWidth2 : iTotal / Column_Max;
     538    /* Apply the proposal: */
     539    m_pTreeWidget->setColumnWidth(Column_IPv4, iWidth1);
     540    m_pTreeWidget->setColumnWidth(Column_IPv6, iWidth2);
     541    m_pTreeWidget->setColumnWidth(Column_Name, iTotal - iWidth1 - iWidth2);
    439542}
    440543
     
    631734    {
    632735        /* Configure tree-widget: */
    633         m_pTreeWidget->header()->hide();
    634736        m_pTreeWidget->setRootIsDecorated(false);
    635737        m_pTreeWidget->setAlternatingRowColors(true);
    636738        m_pTreeWidget->setContextMenuPolicy(Qt::CustomContextMenu);
    637739        m_pTreeWidget->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    638         m_pTreeWidget->sortItems(0, Qt::AscendingOrder);
     740        m_pTreeWidget->setColumnCount(Column_Max);
     741        m_pTreeWidget->setSortingEnabled(true);
     742        m_pTreeWidget->sortByColumn(Column_Name, Qt::AscendingOrder);
    639743        connect(m_pTreeWidget, SIGNAL(currentItemChanged(QTreeWidgetItem *, QTreeWidgetItem *)),
    640744                this, SLOT(sltHandleCurrentItemChange()));
     
    707811            }
    708812
    709         /* Sort list by the 1st column: */
    710         m_pTreeWidget->sortByColumn(0, Qt::AscendingOrder);
    711813        /* Choose the 1st item as current initially: */
    712814        m_pTreeWidget->setCurrentItem(m_pTreeWidget->topLevelItem(0));
    713815        sltHandleCurrentItemChange();
     816
     817        /* Adjust tree-widget: */
     818        sltAdjustTreeWidget();
    714819    }
    715820}
  • trunk/src/VBox/Frontends/VirtualBox/src/hostnetwork/UIHostNetworkManager.h

    r66681 r66695  
    5454protected:
    5555
    56     /** Handles translation event. */
    57     virtual void retranslateUi() /* override */;
     56    /** @name Event-handling stuff.
     57     * @{ */
     58        /** Handles translation event. */
     59        virtual void retranslateUi() /* override */;
     60
     61        /** Handles resize @a pEvent. */
     62        virtual void resizeEvent(QResizeEvent *pEvent) /* override */;
     63
     64        /** Handles show @a pEvent. */
     65        virtual void showEvent(QShowEvent *pEvent) /* override */;
     66    /** @} */
    5867
    5968private slots:
     
    7180    /** @name Tree-widget stuff.
    7281     * @{ */
    73         /** Handles host network tree current item change. */
     82        /** Handles command to adjust tree-widget. */
     83        void sltAdjustTreeWidget();
     84
     85        /** Handles tree-widget current item change. */
    7486        void sltHandleCurrentItemChange();
    75         /** Handles context menu request for @a position of host network tree. */
     87        /** Handles context menu request for tree-widget @a position. */
    7688        void sltHandleContextMenuRequest(const QPoint &position);
    7789    /** @} */
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