Changeset 105007 in vbox
- Timestamp:
- Jun 24, 2024 5:48:11 PM (9 months ago)
- svn:sync-xref-src-repo-rev:
- 163625
- Location:
- trunk/src/VBox/Frontends/VirtualBox/src/widgets
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.cpp
r105005 r105007 498 498 public: 499 499 500 /** Constructs Port Forwarding table-view passing @a pParent to the base-class. */ 501 UIPortForwardingView(QWidget *pParent = 0) : QITableView(pParent) {} 500 /** Constructs Port Forwarding table-view passing @a pParent to the base-class. 501 * @param fIPv6 Brings whether this table contains IPv6 rules, not IPv4. */ 502 UIPortForwardingView(bool fIPv6, QWidget *pParent = 0); 503 /** Destructs Port Forwarding table-view. */ 504 virtual ~UIPortForwardingView(); 505 506 private: 507 508 /** Prepares everything. */ 509 void prepare(); 510 /** Cleanups everything. */ 511 void cleanup(); 512 513 /** Holds whether this view contains IPv6 rules, not IPv4. */ 514 bool m_fIPv6; 515 516 /** Holds the item editor factory instance. */ 517 QItemEditorFactory *m_pItemEditorFactory; 502 518 }; 503 519 … … 764 780 765 781 /********************************************************************************************************************************* 782 * Class UIPortForwardingView implementation. * 783 *********************************************************************************************************************************/ 784 785 UIPortForwardingView::UIPortForwardingView(bool fIPv6, QWidget *pParent /* = 0 */) 786 : QITableView(pParent) 787 , m_fIPv6(fIPv6) 788 , m_pItemEditorFactory(0) 789 { 790 prepare(); 791 } 792 793 UIPortForwardingView::~UIPortForwardingView() 794 { 795 cleanup(); 796 } 797 798 void UIPortForwardingView::prepare() 799 { 800 // WORAKROUND: Do we still need this? 801 setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored); 802 803 /* Disable TAB-key navigation: */ 804 setTabKeyNavigation(false); 805 /* Adjust selection mode: */ 806 setSelectionMode(QAbstractItemView::SingleSelection); 807 /* Configure context-menu policy: */ 808 setContextMenuPolicy(Qt::CustomContextMenu); 809 810 /* Adjust header policy: */ 811 verticalHeader()->hide(); 812 verticalHeader()->setDefaultSectionSize((int)(verticalHeader()->minimumSectionSize() * 1.33)); 813 814 /* We certainly have abstract item delegate: */ 815 QAbstractItemDelegate *pAbstractItemDelegate = itemDelegate(); 816 if (pAbstractItemDelegate) 817 { 818 /* But is this also styled item delegate? */ 819 QStyledItemDelegate *pStyledItemDelegate = qobject_cast<QStyledItemDelegate*>(pAbstractItemDelegate); 820 if (pStyledItemDelegate) 821 { 822 /* Create new item editor factory: */ 823 m_pItemEditorFactory = new QItemEditorFactory; 824 if (m_pItemEditorFactory) 825 { 826 /* Register NameEditor as the NameData editor: */ 827 int iNameId = qRegisterMetaType<NameData>(); 828 QStandardItemEditorCreator<NameEditor> *pNameEditorItemCreator = new QStandardItemEditorCreator<NameEditor>(); 829 m_pItemEditorFactory->registerEditor(iNameId, pNameEditorItemCreator); 830 831 /* Register ProtocolEditor as the KNATProtocol editor: */ 832 int iProtocolId = qRegisterMetaType<KNATProtocol>(); 833 QStandardItemEditorCreator<ProtocolEditor> *pProtocolEditorItemCreator = new QStandardItemEditorCreator<ProtocolEditor>(); 834 m_pItemEditorFactory->registerEditor(iProtocolId, pProtocolEditorItemCreator); 835 836 /* Register IPv4Editor/IPv6Editor as the IpData editor: */ 837 int iIpId = qRegisterMetaType<IpData>(); 838 if (!m_fIPv6) 839 { 840 QStandardItemEditorCreator<IPv4Editor> *pIPv4EditorItemCreator = new QStandardItemEditorCreator<IPv4Editor>(); 841 m_pItemEditorFactory->registerEditor(iIpId, pIPv4EditorItemCreator); 842 } 843 else 844 { 845 QStandardItemEditorCreator<IPv6Editor> *pIPv6EditorItemCreator = new QStandardItemEditorCreator<IPv6Editor>(); 846 m_pItemEditorFactory->registerEditor(iIpId, pIPv6EditorItemCreator); 847 } 848 849 /* Register PortEditor as the PortData editor: */ 850 int iPortId = qRegisterMetaType<PortData>(); 851 QStandardItemEditorCreator<PortEditor> *pPortEditorItemCreator = new QStandardItemEditorCreator<PortEditor>(); 852 m_pItemEditorFactory->registerEditor(iPortId, pPortEditorItemCreator); 853 854 /* Set newly created item editor factory for table delegate: */ 855 pStyledItemDelegate->setItemEditorFactory(m_pItemEditorFactory); 856 } 857 } 858 } 859 } 860 861 void UIPortForwardingView::cleanup() 862 { 863 /* Cleanup editor factory delegate: */ 864 delete m_pItemEditorFactory; 865 m_pItemEditorFactory = 0; 866 } 867 868 /********************************************************************************************************************************* 766 869 * Class UIPortForwardingTable implementation. * 767 870 *********************************************************************************************************************************/ … … 775 878 , m_pTableView(0) 776 879 , m_pToolBar(0) 777 , m_pItemEditorFactory(0)778 880 , m_pTableModel(0) 779 881 , m_pActionAdd(0) … … 782 884 { 783 885 prepare(); 784 }785 786 UIPortForwardingTable::~UIPortForwardingTable()787 {788 cleanup();789 886 } 790 887 … … 1067 1164 { 1068 1165 /* Create table-view: */ 1069 m_pTableView = new UIPortForwardingView( this);1166 m_pTableView = new UIPortForwardingView(m_fIPv6, this); 1070 1167 if (m_pTableView) 1071 1168 { 1072 1169 /* Configure table-view: */ 1073 m_pTableView->setSizePolicy(QSizePolicy::Ignored, QSizePolicy::Ignored);1074 m_pTableView->setTabKeyNavigation(false);1075 m_pTableView->verticalHeader()->hide();1076 m_pTableView->verticalHeader()->setDefaultSectionSize((int)(m_pTableView->verticalHeader()->minimumSectionSize() * 1.33));1077 m_pTableView->setSelectionMode(QAbstractItemView::SingleSelection);1078 m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);1079 1170 m_pTableView->installEventFilter(this); 1080 1171 … … 1087 1178 connect(m_pTableView, &UIPortForwardingView::customContextMenuRequested, 1088 1179 this, &UIPortForwardingTable::sltShowTableContexMenu); 1089 1090 /* Prepare delegates: */1091 prepareTableDelegates();1092 1180 1093 1181 /* Add into layout: */ … … 1110 1198 connect(m_pTableModel, &UIPortForwardingModel::rowsRemoved, 1111 1199 this, &UIPortForwardingTable::sltTableDataChanged); 1112 }1113 }1114 1115 void UIPortForwardingTable::prepareTableDelegates()1116 {1117 /* We certainly have abstract item delegate: */1118 QAbstractItemDelegate *pAbstractItemDelegate = m_pTableView->itemDelegate();1119 if (pAbstractItemDelegate)1120 {1121 /* But is this also styled item delegate? */1122 QStyledItemDelegate *pStyledItemDelegate = qobject_cast<QStyledItemDelegate*>(pAbstractItemDelegate);1123 if (pStyledItemDelegate)1124 {1125 /* Create new item editor factory: */1126 m_pItemEditorFactory = new QItemEditorFactory;1127 if (m_pItemEditorFactory)1128 {1129 /* Register NameEditor as the NameData editor: */1130 int iNameId = qRegisterMetaType<NameData>();1131 QStandardItemEditorCreator<NameEditor> *pNameEditorItemCreator = new QStandardItemEditorCreator<NameEditor>();1132 m_pItemEditorFactory->registerEditor(iNameId, pNameEditorItemCreator);1133 1134 /* Register ProtocolEditor as the KNATProtocol editor: */1135 int iProtocolId = qRegisterMetaType<KNATProtocol>();1136 QStandardItemEditorCreator<ProtocolEditor> *pProtocolEditorItemCreator = new QStandardItemEditorCreator<ProtocolEditor>();1137 m_pItemEditorFactory->registerEditor(iProtocolId, pProtocolEditorItemCreator);1138 1139 /* Register IPv4Editor/IPv6Editor as the IpData editor: */1140 int iIpId = qRegisterMetaType<IpData>();1141 if (!m_fIPv6)1142 {1143 QStandardItemEditorCreator<IPv4Editor> *pIPv4EditorItemCreator = new QStandardItemEditorCreator<IPv4Editor>();1144 m_pItemEditorFactory->registerEditor(iIpId, pIPv4EditorItemCreator);1145 }1146 else1147 {1148 QStandardItemEditorCreator<IPv6Editor> *pIPv6EditorItemCreator = new QStandardItemEditorCreator<IPv6Editor>();1149 m_pItemEditorFactory->registerEditor(iIpId, pIPv6EditorItemCreator);1150 }1151 1152 /* Register PortEditor as the PortData editor: */1153 int iPortId = qRegisterMetaType<PortData>();1154 QStandardItemEditorCreator<PortEditor> *pPortEditorItemCreator = new QStandardItemEditorCreator<PortEditor>();1155 m_pItemEditorFactory->registerEditor(iPortId, pPortEditorItemCreator);1156 1157 /* Set newly created item editor factory for table delegate: */1158 pStyledItemDelegate->setItemEditorFactory(m_pItemEditorFactory);1159 }1160 }1161 1200 } 1162 1201 } … … 1212 1251 } 1213 1252 1214 void UIPortForwardingTable::cleanup()1215 {1216 delete m_pItemEditorFactory;1217 m_pItemEditorFactory = 0;1218 }1219 1220 1253 1221 1254 #include "UIPortForwardingTable.moc" -
trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h
r105004 r105007 45 45 class QAction; 46 46 class QHBoxLayout; 47 class QItemEditorFactory;48 47 class QIDialogButtonBox; 49 48 class QITableView; … … 220 219 * @param fAllowEmptyGuestIPs Brings whether this table allows empty guest IPs. */ 221 220 UIPortForwardingTable(const UIPortForwardingDataList &rules, bool fIPv6, bool fAllowEmptyGuestIPs); 222 /** Destructs Port Forwarding table. */223 virtual ~UIPortForwardingTable() RT_OVERRIDE;224 221 225 222 /** Returns table-view reference. */ … … 282 279 /** Prepares table-model. */ 283 280 void prepareTableModel(); 284 /** Prepares table-delegates. */285 void prepareTableDelegates();286 281 /** Prepares toolbar. */ 287 282 void prepareToolbar(); 288 /** Cleanups all. */289 void cleanup();290 283 291 284 /** Holds the list of port forwarding rules. */ … … 308 301 /** Holds the tool-bar instance. */ 309 302 QIToolBar *m_pToolBar; 310 /** Holds the item editor factory instance. */311 QItemEditorFactory *m_pItemEditorFactory;312 303 313 304 /** Holds the table-model instance. */
Note:
See TracChangeset
for help on using the changeset viewer.