VirtualBox

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


Ignore:
Timestamp:
Aug 10, 2010 2:46:54 PM (14 years ago)
Author:
vboxsync
Message:

FE/Qt: 1900: Create GUI support for NAT forwarding: Added value restriction for port's spin-box editor (0-65535); Added validation warning for zero port value.

Location:
trunk/src/VBox/Frontends/VirtualBox/src
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.cpp

    r31494 r31535  
    23472347}
    23482348
     2349void VBoxProblemReporter::warnAboutIncorrectPort(QWidget *pParent) const
     2350{
     2351    message(pParent, Error,
     2352            tr("The current port forwarding rules are not valid. "
     2353               "None of the host or guest port values may be set to zero."));
     2354}
     2355
    23492356void VBoxProblemReporter::showRuntimeError (const CConsole &aConsole, bool fatal,
    23502357                                            const QString &errorID,
  • trunk/src/VBox/Frontends/VirtualBox/src/globals/VBoxProblemReporter.h

    r31385 r31535  
    369369    void cannotExportAppliance (const CProgress &aProgress, CAppliance *aAppliance, QWidget *aParent = NULL) const;
    370370
     371    void warnAboutIncorrectPort(QWidget *pParent) const;
     372
    371373    void showRuntimeError (const CConsole &console, bool fatal,
    372374                           const QString &errorID,
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsNetwork.cpp

    r31533 r31535  
    189189        UIPortForwardingData redirectData = mPortForwardingRules[i];
    190190        mAdapter.GetNatDriver().AddRedirect(redirectData.name, redirectData.protocol,
    191                                             redirectData.hostIp, redirectData.hostPort,
    192                                             redirectData.guestIp, redirectData.guestPort);
     191                                            redirectData.hostIp, redirectData.hostPort.value(),
     192                                            redirectData.guestIp, redirectData.guestPort.value());
    193193    }
    194194}
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsPortForwardingDlg.cpp

    r31533 r31535  
    2626#include <QComboBox>
    2727#include <QLineEdit>
     28#include <QSpinBox>
    2829#include <QTimer>
    2930
     
    3132#include "VBoxVMSettingsPortForwardingDlg.h"
    3233#include "VBoxGlobal.h"
     34#include "VBoxProblemReporter.h"
    3335#include "VBoxToolBar.h"
    3436#include "QITableView.h"
     
    3638#include "UIIconPool.h"
    3739#include <iprt/cidr.h>
     40#include <math.h>
    3841
    3942/* IP validator: */
     
    149152    {
    150153        return text();
     154    }
     155};
     156
     157/* Port editor: */
     158class PortEditor : public QSpinBox
     159{
     160    Q_OBJECT;
     161    Q_PROPERTY(PortData port READ port WRITE setPort USER true);
     162
     163public:
     164
     165    PortEditor(QWidget *pParent = 0) : QSpinBox(pParent)
     166    {
     167        setFrame(false);
     168        setRange(0, pow(2, 8 * sizeof(ushort)) - 1);
     169    }
     170
     171private:
     172
     173    void setPort(PortData port)
     174    {
     175        setValue(port.value());
     176    }
     177
     178    PortData port() const
     179    {
     180        return value();
    151181    }
    152182};
     
    247277                    case UIPortForwardingDataType_Protocol: return vboxGlobal().toString(m_dataList[index.row()].protocol);
    248278                    case UIPortForwardingDataType_HostIp: return m_dataList[index.row()].hostIp;
    249                     case UIPortForwardingDataType_HostPort: return m_dataList[index.row()].hostPort;
     279                    case UIPortForwardingDataType_HostPort: return m_dataList[index.row()].hostPort.value();
    250280                    case UIPortForwardingDataType_GuestIp: return m_dataList[index.row()].guestIp;
    251                     case UIPortForwardingDataType_GuestPort: return m_dataList[index.row()].guestPort;
     281                    case UIPortForwardingDataType_GuestPort: return m_dataList[index.row()].guestPort.value();
    252282                    default: return QVariant();
    253283                }
     
    262292                    case UIPortForwardingDataType_Protocol: return QVariant::fromValue(m_dataList[index.row()].protocol);
    263293                    case UIPortForwardingDataType_HostIp: return QVariant::fromValue(m_dataList[index.row()].hostIp);
    264                     case UIPortForwardingDataType_HostPort: return m_dataList[index.row()].hostPort;
     294                    case UIPortForwardingDataType_HostPort: return QVariant::fromValue(m_dataList[index.row()].hostPort);
    265295                    case UIPortForwardingDataType_GuestIp: return QVariant::fromValue(m_dataList[index.row()].guestIp);
    266                     case UIPortForwardingDataType_GuestPort: return m_dataList[index.row()].guestPort;
     296                    case UIPortForwardingDataType_GuestPort: return QVariant::fromValue(m_dataList[index.row()].guestPort);
    267297                    default: return QVariant();
    268298                }
     
    324354                return true;
    325355            case UIPortForwardingDataType_HostPort:
    326                 m_dataList[index.row()].hostPort = value.toUInt();
     356                m_dataList[index.row()].hostPort = value.value<PortData>();
    327357                emit dataChanged(index, index);
    328358                return true;
     
    332362                return true;
    333363            case UIPortForwardingDataType_GuestPort:
    334                 m_dataList[index.row()].guestPort = value.toUInt();
     364                m_dataList[index.row()].guestPort = value.value<PortData>();
    335365                emit dataChanged(index, index);
    336366                return true;
     
    476506            pNewItemEditorFactory->registerEditor((QVariant::Type)iIpId, pIpEditorItemCreator);
    477507
     508            /* Register port type: */
     509            int iPortId = qRegisterMetaType<PortData>();
     510            /* Register port editor: */
     511            QStandardItemEditorCreator<PortEditor> *pPortEditorItemCreator = new QStandardItemEditorCreator<PortEditor>();
     512            /* Link port type & editor: */
     513            pNewItemEditorFactory->registerEditor((QVariant::Type)iPortId, pPortEditorItemCreator);
     514
    478515            /* Set newly created item editor factory for table delegate: */
    479516            pStyledItemDelegate->setItemEditorFactory(pNewItemEditorFactory);
     
    579616    }
    580617    m_pTableView->horizontalHeader()->setStretchLastSection(true);
     618}
     619
     620void VBoxVMSettingsPortForwardingDlg::accept()
     621{
     622    /* Validate table: */
     623    for (int i = 0; i < m_pModel->rowCount(); ++i)
     624    {
     625        if (m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_HostPort), Qt::EditRole).value<PortData>().value() == 0 ||
     626            m_pModel->data(m_pModel->index(i, UIPortForwardingModel::UIPortForwardingDataType_GuestPort), Qt::EditRole).value<PortData>().value() == 0)
     627        {
     628            vboxProblem().warnAboutIncorrectPort(this);
     629            return;
     630        }
     631    }
     632    /* Base class accept() slot: */
     633    QIWithRetranslateUI<QIDialog>::accept();
    581634}
    582635
  • trunk/src/VBox/Frontends/VirtualBox/src/settings/vm/VBoxVMSettingsPortForwardingDlg.h

    r31533 r31535  
    5151Q_DECLARE_METATYPE(IpData);
    5252
     53/* Port data: */
     54class PortData
     55{
     56public:
     57
     58    PortData() : m_uValue(0) {}
     59    PortData(ushort uValue) : m_uValue(uValue) {}
     60    PortData(const PortData &other) : m_uValue(other.value()) {}
     61    ushort value() const { return m_uValue; }
     62
     63private:
     64
     65    ushort m_uValue;
     66};
     67Q_DECLARE_METATYPE(PortData);
     68
    5369/* Port forwarding data: */
    5470struct UIPortForwardingData
    5571{
    5672    UIPortForwardingData(const NameData &strName, KNATProtocol eProtocol,
    57                          const IpData &strHostIp, uint uHostPort,
    58                          const IpData &strGuestIp, uint uGuestPort)
     73                         const IpData &strHostIp, PortData uHostPort,
     74                         const IpData &strGuestIp, PortData uGuestPort)
    5975        : name(strName), protocol(eProtocol)
    6076        , hostIp(strHostIp), hostPort(uHostPort)
     
    6379    KNATProtocol protocol;
    6480    IpData hostIp;
    65     uint hostPort;
     81    PortData hostPort;
    6682    IpData guestIp;
    67     uint guestPort;
     83    PortData guestPort;
    6884};
    6985
     
    99115    void sltAdjustTable();
    100116
     117    /* Dialog slots: */
     118    void accept();
     119
    101120private:
    102121
Note: See TracChangeset for help on using the changeset viewer.

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