VirtualBox

Changeset 105007 in vbox


Ignore:
Timestamp:
Jun 24, 2024 5:48:11 PM (9 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
163625
Message:

FE/Qt: bugref:10681: UIPortForwardingTable: Reworking prepare/cleanup cascade for QITableView sub-class here.

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  
    498498public:
    499499
    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
     506private:
     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;
    502518};
    503519
     
    764780
    765781/*********************************************************************************************************************************
     782*   Class UIPortForwardingView implementation.                                                                                   *
     783*********************************************************************************************************************************/
     784
     785UIPortForwardingView::UIPortForwardingView(bool fIPv6, QWidget *pParent /* = 0 */)
     786    : QITableView(pParent)
     787    , m_fIPv6(fIPv6)
     788    , m_pItemEditorFactory(0)
     789{
     790    prepare();
     791}
     792
     793UIPortForwardingView::~UIPortForwardingView()
     794{
     795    cleanup();
     796}
     797
     798void 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
     861void UIPortForwardingView::cleanup()
     862{
     863    /* Cleanup editor factory delegate: */
     864    delete m_pItemEditorFactory;
     865    m_pItemEditorFactory = 0;
     866}
     867
     868/*********************************************************************************************************************************
    766869*   Class UIPortForwardingTable implementation.                                                                                  *
    767870*********************************************************************************************************************************/
     
    775878    , m_pTableView(0)
    776879    , m_pToolBar(0)
    777     , m_pItemEditorFactory(0)
    778880    , m_pTableModel(0)
    779881    , m_pActionAdd(0)
     
    782884{
    783885    prepare();
    784 }
    785 
    786 UIPortForwardingTable::~UIPortForwardingTable()
    787 {
    788     cleanup();
    789886}
    790887
     
    10671164{
    10681165    /* Create table-view: */
    1069     m_pTableView = new UIPortForwardingView(this);
     1166    m_pTableView = new UIPortForwardingView(m_fIPv6, this);
    10701167    if (m_pTableView)
    10711168    {
    10721169        /* 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);
    10791170        m_pTableView->installEventFilter(this);
    10801171
     
    10871178        connect(m_pTableView, &UIPortForwardingView::customContextMenuRequested,
    10881179                this, &UIPortForwardingTable::sltShowTableContexMenu);
    1089 
    1090         /* Prepare delegates: */
    1091         prepareTableDelegates();
    10921180
    10931181        /* Add into layout: */
     
    11101198        connect(m_pTableModel, &UIPortForwardingModel::rowsRemoved,
    11111199                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                 else
    1147                 {
    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         }
    11611200    }
    11621201}
     
    12121251}
    12131252
    1214 void UIPortForwardingTable::cleanup()
    1215 {
    1216     delete m_pItemEditorFactory;
    1217     m_pItemEditorFactory = 0;
    1218 }
    1219 
    12201253
    12211254#include "UIPortForwardingTable.moc"
  • trunk/src/VBox/Frontends/VirtualBox/src/widgets/UIPortForwardingTable.h

    r105004 r105007  
    4545class QAction;
    4646class QHBoxLayout;
    47 class QItemEditorFactory;
    4847class QIDialogButtonBox;
    4948class QITableView;
     
    220219      * @param  fAllowEmptyGuestIPs  Brings whether this table allows empty guest IPs. */
    221220    UIPortForwardingTable(const UIPortForwardingDataList &rules, bool fIPv6, bool fAllowEmptyGuestIPs);
    222     /** Destructs Port Forwarding table. */
    223     virtual ~UIPortForwardingTable() RT_OVERRIDE;
    224221
    225222    /** Returns table-view reference. */
     
    282279    /** Prepares table-model. */
    283280    void prepareTableModel();
    284     /** Prepares table-delegates. */
    285     void prepareTableDelegates();
    286281    /** Prepares toolbar. */
    287282    void prepareToolbar();
    288     /** Cleanups all. */
    289     void cleanup();
    290283
    291284    /** Holds the list of port forwarding rules. */
     
    308301    /** Holds the tool-bar instance. */
    309302    QIToolBar   *m_pToolBar;
    310     /** Holds the item editor factory instance. */
    311     QItemEditorFactory *m_pItemEditorFactory;
    312303
    313304    /** Holds the table-model instance. */
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