Changeset 48548 in vbox for trunk/src/VBox/Frontends
- Timestamp:
- Sep 19, 2013 4:31:07 PM (11 years ago)
- Location:
- trunk/src/VBox/Frontends/VirtualBox
- Files:
-
- 8 edited
- 2 copied
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/Makefile.kmk
r48533 r48548 357 357 src/settings/global/UIGlobalSettingsNetworkDetailsNAT.h \ 358 358 src/settings/global/UIGlobalSettingsNetworkDetailsHost.h \ 359 src/settings/global/UIGlobalSettingsPortForwardingDlg.h \ 359 360 src/settings/global/UIGlobalSettingsProxy.h \ 360 361 src/settings/global/UIGlobalSettingsUpdate.h \ … … 612 613 src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp \ 613 614 src/settings/global/UIGlobalSettingsNetworkDetailsHost.cpp \ 615 src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp \ 614 616 src/settings/global/UIGlobalSettingsProxy.cpp \ 615 617 src/settings/global/UIGlobalSettingsUpdate.cpp \ -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.cpp
r48524 r48548 923 923 data.m_fAdvertiseDefaultIPv6Route = network.GetAdvertiseDefaultIPv6RouteEnabled(); 924 924 925 /* Load redirect options: */ 926 QVector<QString> redirects = network.GetPortForwardRules4(); 927 foreach (const QString &strRedirect, redirects) 928 { 929 QStringList redirectData = strRedirect.split(':'); 930 Assert(redirectData.size() == 6); 931 if (redirectData.size() != 6) 925 /* Load IPv4 rules: */ 926 QVector<QString> ipv4rules = network.GetPortForwardRules4(); 927 foreach (QString strIPv4Rule, ipv4rules) 928 { 929 /* Replace all ':' with ',' first: */ 930 strIPv4Rule.replace(':', ','); 931 /* Parse rules: */ 932 QStringList rules = strIPv4Rule.split(','); 933 Assert(rules.size() == 6); 934 if (rules.size() != 6) 932 935 continue; 933 data.m_redirects << UIPortForwardingData(redirectData[0], 934 gpConverter->fromInternalString<KNATProtocol>(redirectData[1]), 935 QString(redirectData[2]).remove('[').remove(']'), 936 redirectData[3].toUInt(), 937 QString(redirectData[4]).remove('[').remove(']'), 938 redirectData[5].toUInt()); 936 data.m_ipv4rules << UIPortForwardingData(rules[0], 937 gpConverter->fromInternalString<KNATProtocol>(rules[1]), 938 QString(rules[2]).remove('[').remove(']'), 939 rules[3].toUInt(), 940 QString(rules[4]).remove('[').remove(']'), 941 rules[5].toUInt()); 942 } 943 944 /* Load IPv6 rules: */ 945 QVector<QString> ipv6rules = network.GetPortForwardRules6(); 946 foreach (QString strIPv6Rule, ipv6rules) 947 { 948 /* Replace all ':' with ',' first: */ 949 strIPv6Rule.replace(':', ','); 950 /* But replace ',' back with ':' for addresses: */ 951 QRegExp re("\\[[^:]+\\]"); 952 re.setMinimal(true); 953 while (re.indexIn(strIPv6Rule) != -1) 954 { 955 QString strCapOld = re.cap(0); 956 QString strCapNew = strCapOld; 957 strCapNew.replace(',', ':'); 958 strIPv6Rule.replace(strCapOld, strCapNew); 959 } 960 /* Parse rules: */ 961 QStringList rules = strIPv6Rule.split(','); 962 Assert(rules.size() == 6); 963 if (rules.size() != 6) 964 { 965 printf("strIPv6Rule = {%s}\n", strIPv6Rule.toAscii().constData()); 966 continue; 967 } 968 data.m_ipv6rules << UIPortForwardingData(rules[0], 969 gpConverter->fromInternalString<KNATProtocol>(rules[1]), 970 QString(rules[2]).remove('[').remove(']'), 971 rules[3].toUInt(), 972 QString(rules[4]).remove('[').remove(']'), 973 rules[5].toUInt()); 939 974 } 940 975 … … 958 993 network.SetAdvertiseDefaultIPv6RouteEnabled(data.m_fAdvertiseDefaultIPv6Route); 959 994 960 /* Rewrite redirect options: */961 QVector<QString> old Redirects = network.GetPortForwardRules4();962 foreach (const QString &strR edirect, oldRedirects)963 network.RemovePortForwardRule(false, strR edirect.section(':', 0, 0));964 foreach (const UIPortForwardingData &newR edirect, data.m_redirects)995 /* Rewrite IPv4 rules: */ 996 QVector<QString> oldIPv4Rules = network.GetPortForwardRules4(); 997 foreach (const QString &strRule, oldIPv4Rules) 998 network.RemovePortForwardRule(false, strRule.section(':', 0, 0)); 999 foreach (const UIPortForwardingData &newRule, data.m_ipv4rules) 965 1000 network.AddPortForwardRule(false, 966 newRedirect.name, newRedirect.protocol, 967 newRedirect.hostIp, newRedirect.hostPort.value(), 968 newRedirect.guestIp, newRedirect.guestPort.value()); 1001 newRule.name, newRule.protocol, 1002 newRule.hostIp, newRule.hostPort.value(), 1003 newRule.guestIp, newRule.guestPort.value()); 1004 1005 /* Rewrite IPv6 rules: */ 1006 QVector<QString> oldIPv6Rules = network.GetPortForwardRules6(); 1007 foreach (const QString &strRule, oldIPv6Rules) 1008 network.RemovePortForwardRule(true, strRule.section(':', 0, 0)); 1009 foreach (const UIPortForwardingData &newRule, data.m_ipv6rules) 1010 network.AddPortForwardRule(true, 1011 newRule.name, newRule.protocol, 1012 newRule.hostIp, newRule.hostPort.value(), 1013 newRule.guestIp, newRule.guestPort.value()); 969 1014 } 970 1015 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetwork.h
r48524 r48548 23 23 #include "UISettingsPage.h" 24 24 #include "UIGlobalSettingsNetwork.gen.h" 25 #include "UI MachineSettingsPortForwardingDlg.h"25 #include "UIPortForwardingTable.h" 26 26 27 27 /* Forward declarations: */ … … 41 41 bool m_fSupportsIPv6; 42 42 bool m_fAdvertiseDefaultIPv6Route; 43 UIPortForwardingDataList m_redirects; 43 UIPortForwardingDataList m_ipv4rules; 44 UIPortForwardingDataList m_ipv6rules; 44 45 bool operator==(const UIDataNetworkNAT &other) const 45 46 { … … 51 52 m_fSupportsIPv6 == other.m_fSupportsIPv6 && 52 53 m_fAdvertiseDefaultIPv6Route == other.m_fAdvertiseDefaultIPv6Route && 53 m_redirects == other.m_redirects; 54 m_ipv4rules == other.m_ipv4rules && 55 m_ipv6rules == other.m_ipv6rules; 54 56 } 55 57 }; -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsNetworkDetailsNAT.cpp
r48524 r48548 24 24 #include "UIGlobalSettingsNetwork.h" 25 25 #include "UIGlobalSettingsNetworkDetailsNAT.h" 26 #include "UIGlobalSettingsPortForwardingDlg.h" 26 27 27 28 UIGlobalSettingsNetworkDetailsNAT::UIGlobalSettingsNetworkDetailsNAT(QWidget *pParent, UIDataNetworkNAT &data) … … 72 73 { 73 74 /* Open dialog to edit port-forwarding rules: */ 74 UI MachineSettingsPortForwardingDlg dlg(this, m_data.m_redirects);75 UIGlobalSettingsPortForwardingDlg dlg(this, m_data.m_ipv4rules, m_data.m_ipv6rules); 75 76 if (dlg.exec() == QDialog::Accepted) 76 m_data.m_redirects = dlg.rules(); 77 { 78 m_data.m_ipv4rules = dlg.ipv4rules(); 79 m_data.m_ipv6rules = dlg.ipv6rules(); 80 } 77 81 } 78 82 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.cpp
r48533 r48548 3 3 * 4 4 * VBox frontends: Qt4 GUI ("VirtualBox"): 5 * UI MachineSettingsPortForwardingDlg class implementation5 * UIGlobalSettingsPortForwardingDlg class implementation 6 6 */ 7 7 … … 21 21 #include <QVBoxLayout> 22 22 #include <QPushButton> 23 #include <QTabWidget> 23 24 24 25 /* GUI includes: */ 25 #include "UI MachineSettingsPortForwardingDlg.h"26 #include "UIGlobalSettingsPortForwardingDlg.h" 26 27 #include "UIIconPool.h" 27 28 #include "QIDialogButtonBox.h" 28 29 29 UIMachineSettingsPortForwardingDlg::UIMachineSettingsPortForwardingDlg(QWidget *pParent, 30 const UIPortForwardingDataList &rules) 30 UIGlobalSettingsPortForwardingDlg::UIGlobalSettingsPortForwardingDlg(QWidget *pParent, 31 const UIPortForwardingDataList &ipv4rules, 32 const UIPortForwardingDataList &ipv6rules) 31 33 : QIWithRetranslateUI<QIDialog>(pParent) 32 , m_pTable(0) 34 , m_pIPv4Table(0) 35 , m_pIPv6Table(0) 33 36 , m_pButtonBox(0) 34 37 { … … 39 42 QVBoxLayout *pMainLayout = new QVBoxLayout(this); 40 43 { 41 /* Create table: */ 42 m_pTable = new UIPortForwardingTable(rules); 44 /* Create tab-widget: */ 45 m_pTabWidget = new QTabWidget; 46 { 47 /* Create table tabs: */ 48 m_pIPv4Table = new UIPortForwardingTable(ipv4rules, false); 49 m_pIPv6Table = new UIPortForwardingTable(ipv6rules, true); 50 /* Add widgets into tab-widget: */ 51 m_pTabWidget->addTab(m_pIPv4Table, QString()); 52 m_pTabWidget->addTab(m_pIPv6Table, QString()); 53 } 43 54 /* Create button-box: */ 44 55 m_pButtonBox = new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); … … 49 60 } 50 61 /* Add widgets into layout: */ 51 pMainLayout->addWidget(m_pTab le);62 pMainLayout->addWidget(m_pTabWidget); 52 63 pMainLayout->addWidget(m_pButtonBox); 53 64 } … … 57 68 } 58 69 59 const UIPortForwardingDataList& UI MachineSettingsPortForwardingDlg::rules() const70 const UIPortForwardingDataList& UIGlobalSettingsPortForwardingDlg::ipv4rules() const 60 71 { 61 return m_p Table->rules();72 return m_pIPv4Table->rules(); 62 73 } 63 74 64 void UIMachineSettingsPortForwardingDlg::accept() 75 const UIPortForwardingDataList& UIGlobalSettingsPortForwardingDlg::ipv6rules() const 76 { 77 return m_pIPv6Table->rules(); 78 } 79 80 void UIGlobalSettingsPortForwardingDlg::accept() 65 81 { 66 82 /* Validate table: */ 67 bool fPassed = m_p Table->validate();83 bool fPassed = m_pIPv4Table->validate() && m_pIPv6Table->validate(); 68 84 if (!fPassed) 69 85 return; … … 72 88 } 73 89 74 void UI MachineSettingsPortForwardingDlg::reject()90 void UIGlobalSettingsPortForwardingDlg::reject() 75 91 { 76 92 /* Discard table: */ 77 bool fPassed = m_p Table->discard();93 bool fPassed = m_pIPv4Table->discard() && m_pIPv6Table->discard(); 78 94 if (!fPassed) 79 95 return; … … 82 98 } 83 99 84 void UI MachineSettingsPortForwardingDlg::retranslateUi()100 void UIGlobalSettingsPortForwardingDlg::retranslateUi() 85 101 { 86 102 /* Set window title: */ 87 103 setWindowTitle(tr("Port Forwarding Rules")); 104 /* Set tab-widget tab names: */ 105 m_pTabWidget->setTabText(0, tr("IPv4")); 106 m_pTabWidget->setTabText(1, tr("IPv6")); 88 107 } 89 108 -
trunk/src/VBox/Frontends/VirtualBox/src/settings/global/UIGlobalSettingsPortForwardingDlg.h
r48533 r48548 17 17 */ 18 18 19 #ifndef __UI MachineSettingsPortForwardingDlg_h__20 #define __UI MachineSettingsPortForwardingDlg_h__19 #ifndef __UIGlobalSettingsPortForwardingDlg_h__ 20 #define __UIGlobalSettingsPortForwardingDlg_h__ 21 21 22 22 /* GUI includes: */ … … 26 26 27 27 /* Forward declarations: */ 28 class QTabWidget; 28 29 class QIDialogButtonBox; 29 30 30 /* Machine settings / Network page / NAT attachment/ Port forwarding dialog: */31 class UI MachineSettingsPortForwardingDlg : public QIWithRetranslateUI<QIDialog>31 /* Global settings / Network page / NAT network tab / Port forwarding dialog: */ 32 class UIGlobalSettingsPortForwardingDlg : public QIWithRetranslateUI<QIDialog> 32 33 { 33 34 Q_OBJECT; … … 36 37 37 38 /* Constructor/destructor: */ 38 UIMachineSettingsPortForwardingDlg(QWidget *pParent, 39 const UIPortForwardingDataList &rules = UIPortForwardingDataList()); 39 UIGlobalSettingsPortForwardingDlg(QWidget *pParent, 40 const UIPortForwardingDataList &ipv4rules, 41 const UIPortForwardingDataList &ipv6rules); 40 42 41 43 /* API: Rules stuff: */ 42 const UIPortForwardingDataList& rules() const; 44 const UIPortForwardingDataList& ipv4rules() const; 45 const UIPortForwardingDataList& ipv6rules() const; 43 46 44 47 private slots: … … 54 57 55 58 /* Widgets: */ 56 UIPortForwardingTable *m_pTable; 59 QTabWidget *m_pTabWidget; 60 UIPortForwardingTable *m_pIPv4Table; 61 UIPortForwardingTable *m_pIPv6Table; 57 62 QIDialogButtonBox *m_pButtonBox; 58 63 }; 59 64 60 #endif // __UI MachineSettingsPortForwardingDlg_h__65 #endif // __UIGlobalSettingsPortForwardingDlg_h__ -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.cpp
r48533 r48548 40 40 { 41 41 /* Create table: */ 42 m_pTable = new UIPortForwardingTable(rules );42 m_pTable = new UIPortForwardingTable(rules, false); 43 43 /* Create button-box: */ 44 44 m_pButtonBox = new QIDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal); -
trunk/src/VBox/Frontends/VirtualBox/src/settings/machine/UIMachineSettingsPortForwardingDlg.h
r48533 r48548 36 36 37 37 /* Constructor/destructor: */ 38 UIMachineSettingsPortForwardingDlg(QWidget *pParent, 39 const UIPortForwardingDataList &rules = UIPortForwardingDataList()); 38 UIMachineSettingsPortForwardingDlg(QWidget *pParent, const UIPortForwardingDataList &rules); 40 39 41 40 /* API: Rules stuff: */ -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
r48533 r48548 43 43 #include <math.h> 44 44 45 /* IP validator: */46 class IP Validator : public QValidator45 /* IPv4 validator: */ 46 class IPv4Validator : public QValidator 47 47 { 48 48 Q_OBJECT; … … 51 51 52 52 /* Constructor/destructor: */ 53 IP Validator(QObject *pParent) : QValidator(pParent) {}54 ~IP Validator() {}53 IPv4Validator(QObject *pParent) : QValidator(pParent) {} 54 ~IPv4Validator() {} 55 55 56 56 /* Handler: Validation stuff: */ … … 72 72 }; 73 73 74 /* IPv6 validator: */ 75 class IPv6Validator : public QValidator 76 { 77 Q_OBJECT; 78 79 public: 80 81 /* Constructor/destructor: */ 82 IPv6Validator(QObject *pParent) : QValidator(pParent) {} 83 ~IPv6Validator() {} 84 85 /* Handler: Validation stuff: */ 86 QValidator::State validate(QString &strInput, int& /*iPos*/) const 87 { 88 QString strStringToValidate(strInput); 89 strStringToValidate.remove(' '); 90 QString strDigits("([0-9a-fA-F]{0,4})"); 91 QRegExp intRegExp(QString("^%1(:%1(:%1(:%1(:%1(:%1(:%1(:%1)?)?)?)?)?)?)?$").arg(strDigits)); 92 if (intRegExp.indexIn(strStringToValidate) != -1) 93 return QValidator::Acceptable; 94 else 95 return QValidator::Invalid; 96 } 97 }; 98 74 99 /* Name editor: */ 75 100 class NameEditor : public QLineEdit … … 140 165 }; 141 166 142 /* IP editor: */143 class IP Editor : public QLineEdit167 /* IPv4 editor: */ 168 class IPv4Editor : public QLineEdit 144 169 { 145 170 Q_OBJECT; … … 149 174 150 175 /* Constructor: */ 151 IP Editor(QWidget *pParent = 0) : QLineEdit(pParent)176 IPv4Editor(QWidget *pParent = 0) : QLineEdit(pParent) 152 177 { 153 178 setFrame(false); 154 179 setAlignment(Qt::AlignCenter); 155 setValidator(new IP Validator(this));180 setValidator(new IPv4Validator(this)); 156 181 setInputMask("000.000.000.000"); 182 } 183 184 private: 185 186 /* API: IP stuff: */ 187 void setIp(IpData ip) 188 { 189 setText(ip); 190 } 191 192 /* API: IP stuff: */ 193 IpData ip() const 194 { 195 return text() == "..." ? QString() : text(); 196 } 197 }; 198 199 /* IPv6 editor: */ 200 class IPv6Editor : public QLineEdit 201 { 202 Q_OBJECT; 203 Q_PROPERTY(IpData ip READ ip WRITE setIp USER true); 204 205 public: 206 207 /* Constructor: */ 208 IPv6Editor(QWidget *pParent = 0) : QLineEdit(pParent) 209 { 210 setFrame(false); 211 setAlignment(Qt::AlignCenter); 212 setValidator(new IPv6Validator(this)); 213 // setInputMask("000.000.000.000"); // No mask for now... 157 214 } 158 215 … … 435 492 436 493 437 UIPortForwardingTable::UIPortForwardingTable(const UIPortForwardingDataList &rules )494 UIPortForwardingTable::UIPortForwardingTable(const UIPortForwardingDataList &rules, bool fIPv6) 438 495 : m_fIsTableDataChanged(false) 439 496 , m_pTableView(0) … … 534 591 int iIpId = qRegisterMetaType<IpData>(); 535 592 /* Register ip editor: */ 536 QStandardItemEditorCreator<IPEditor> *pIpEditorItemCreator = new QStandardItemEditorCreator<IPEditor>(); 537 /* Link ip type & editor: */ 538 pNewItemEditorFactory->registerEditor((QVariant::Type)iIpId, pIpEditorItemCreator); 593 if (!fIPv6) 594 { 595 QStandardItemEditorCreator<IPv4Editor> *pIPv4EditorItemCreator = new QStandardItemEditorCreator<IPv4Editor>(); 596 /* Link ip type & editor: */ 597 pNewItemEditorFactory->registerEditor((QVariant::Type)iIpId, pIPv4EditorItemCreator); 598 } 599 else 600 { 601 QStandardItemEditorCreator<IPv6Editor> *pIPv6EditorItemCreator = new QStandardItemEditorCreator<IPv6Editor>(); 602 /* Link ip type & editor: */ 603 pNewItemEditorFactory->registerEditor((QVariant::Type)iIpId, pIPv6EditorItemCreator); 604 } 539 605 540 606 /* Register port type: */ -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h
r48533 r48548 109 109 110 110 /* Constructor: */ 111 UIPortForwardingTable(const UIPortForwardingDataList &rules = UIPortForwardingDataList());111 UIPortForwardingTable(const UIPortForwardingDataList &rules, bool fIPv6); 112 112 113 113 /* API: Rules stuff: */
Note:
See TracChangeset
for help on using the changeset viewer.