VirtualBox

Ignore:
Timestamp:
Jul 13, 2023 9:11:17 AM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158385
Message:

FE/Qt: bugref:9080. Using a sort-filter proxy model in host browser.

Location:
trunk/src/VBox/Frontends/VirtualBox/src/medium/viso
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.cpp

    r100478 r100559  
    3131#include <QItemDelegate>
    3232#include <QMimeData>
     33#include <QSortFilterProxyModel>
    3334#include <QTextEdit>
    3435#include <QTableView>
     
    4142/* Other VBox includes: */
    4243#include <iprt/assert.h>
     44
     45
     46class SHARED_LIBRARY_STUFF UIHostBrowserProxyModel : public QSortFilterProxyModel
     47{
     48
     49    Q_OBJECT;
     50
     51public:
     52
     53    UIHostBrowserProxyModel(QObject *pParent = 0)
     54        : QSortFilterProxyModel(pParent)
     55    {
     56    }
     57
     58    // void setListDirectoriesOnTop(bool fListDirectoriesOnTop);
     59    // bool listDirectoriesOnTop() const;
     60
     61    // void setShowHiddenObjects(bool fShowHiddenObjects);
     62    // bool showHiddenObjects() const;
     63
     64protected:
     65
     66    // virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const RT_OVERRIDE;
     67    // /** Currently filters out hidden objects if options is set to "not showing them". */
     68    // virtual bool filterAcceptsRow(int iSourceRow, const QModelIndex &sourceParent) const RT_OVERRIDE;
     69
     70private:
     71
     72    // bool m_fListDirectoriesOnTop;
     73    // bool m_fShowHiddenObjects;
     74};
    4375
    4476
     
    161193    , m_pModel(0)
    162194    , m_pTableView(0)
     195    , m_pProxyModel(0)
    163196{
    164197    prepareObjects();
     
    183216
    184217    m_pModel = new UIVisoHostBrowserModel(this);
     218    AssertReturnVoid(m_pModel);
    185219    m_pModel->setRootPath(QDir::rootPath());
    186220    m_pModel->setReadOnly(true);
    187221    m_pModel->setFilter(QDir::AllEntries | QDir::NoDot | QDir::Hidden | QDir::System);
    188222
     223    m_pProxyModel = new UIHostBrowserProxyModel(this);
     224    AssertReturnVoid(m_pProxyModel);
     225    m_pProxyModel->setSourceModel(m_pModel);
     226
    189227    m_pTableView = new QTableView;
    190     if (m_pTableView)
    191     {
    192         m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
    193         m_pMainLayout->addWidget(m_pTableView, 2, 0, 8, 4);
    194         m_pTableView->setShowGrid(false);
    195         m_pTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
    196         m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
    197         m_pTableView->setAlternatingRowColors(true);
    198         m_pTableView->setTabKeyNavigation(false);
    199         m_pTableView->setItemDelegate(new UIHostBrowserDelegate(this));
    200         QHeaderView *pVerticalHeader = m_pTableView->verticalHeader();
    201         if (pVerticalHeader)
    202         {
    203             m_pTableView->verticalHeader()->setVisible(false);
    204             /* Minimize the row height: */
    205             m_pTableView->verticalHeader()->setDefaultSectionSize(m_pTableView->verticalHeader()->minimumSectionSize());
    206         }
    207         QHeaderView *pHorizontalHeader = m_pTableView->horizontalHeader();
    208         if (pHorizontalHeader)
    209         {
    210             pHorizontalHeader->setHighlightSections(false);
    211             pHorizontalHeader->setSectionResizeMode(QHeaderView::Stretch);
    212         }
    213 
    214         m_pTableView->setModel(m_pModel);
    215 
    216         /* Hide the "type" column: */
    217         m_pTableView->hideColumn(2);
    218 
    219         m_pTableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
    220         m_pTableView->setDragDropMode(QAbstractItemView::DragOnly);
    221     }
     228    AssertReturnVoid(m_pTableView);
     229    m_pTableView->setContextMenuPolicy(Qt::CustomContextMenu);
     230    m_pMainLayout->addWidget(m_pTableView, 2, 0, 8, 4);
     231    m_pTableView->setShowGrid(false);
     232    m_pTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
     233    m_pTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
     234    m_pTableView->setAlternatingRowColors(true);
     235    m_pTableView->setTabKeyNavigation(false);
     236    m_pTableView->setItemDelegate(new UIHostBrowserDelegate(this));
     237
     238    QHeaderView *pVerticalHeader = m_pTableView->verticalHeader();
     239    QHeaderView *pHorizontalHeader = m_pTableView->horizontalHeader();
     240    AssertReturnVoid(pVerticalHeader);
     241    AssertReturnVoid(pHorizontalHeader);
     242
     243    m_pTableView->verticalHeader()->setVisible(false);
     244    /* Minimize the row height: */
     245    m_pTableView->verticalHeader()->setDefaultSectionSize(m_pTableView->verticalHeader()->minimumSectionSize());
     246    pHorizontalHeader->setHighlightSections(false);
     247    pHorizontalHeader->setSectionResizeMode(QHeaderView::Stretch);
     248
     249    m_pTableView->setModel(m_pProxyModel);
     250
     251    /* Hide the "type" column: */
     252    m_pTableView->hideColumn(2);
     253
     254    m_pTableView->setSelectionMode(QAbstractItemView::ExtendedSelection);
     255    m_pTableView->setDragDropMode(QAbstractItemView::DragOnly);
    222256
    223257    retranslateUi();
     
    318352{
    319353    AssertReturnVoid(m_pModel);
    320     QModelIndex homeIndex = m_pModel->index(QDir::homePath());
     354    AssertReturnVoid(m_pProxyModel);
     355    QModelIndex homeIndex = m_pProxyModel->mapFromSource(m_pModel->index(QDir::homePath()));
    321356    if (homeIndex.isValid())
    322357        setTableRootIndex(homeIndex);
     
    328363    QDir currentDir = QDir(currentPath());
    329364    currentDir.cdUp();
    330     QModelIndex upIndex = m_pModel->index(currentDir.absolutePath());
     365    QModelIndex upIndex = m_pProxyModel->mapFromSource(m_pModel->index(currentDir.absolutePath()));
    331366    if (upIndex.isValid())
    332367        setTableRootIndex(upIndex);
     
    338373        return;
    339374    /* QFileInfo::isDir() returns true if QFileInfo is a folder or a symlink to folder: */
    340     QFileInfo fileInfo = m_pModel->fileInfo(index);
     375    QFileInfo fileInfo = m_pModel->fileInfo(m_pProxyModel->mapToSource(index));
    341376    if (!fileInfo.isDir())
    342377        return;
     
    360395        return QString();
    361396    QModelIndex currentTableIndex = m_pTableView->rootIndex();
    362     return QDir::fromNativeSeparators(m_pModel->filePath(currentTableIndex));
     397    return QDir::fromNativeSeparators(m_pModel->filePath(m_pProxyModel->mapToSource(currentTableIndex)));
    363398}
    364399
     
    367402    if (strPath.isEmpty() || !m_pModel)
    368403        return;
    369     QModelIndex index = m_pModel->index(strPath);
     404    QModelIndex index = m_pProxyModel->mapFromSource(m_pModel->index(strPath));
    370405    setTableRootIndex(index);
    371406}
     
    397432    for (int i = 0; i < selectedIndices.size(); ++i)
    398433    {
    399         QString strPath = m_pModel->filePath(selectedIndices[i]);
     434        QString strPath = m_pModel->filePath(m_pProxyModel->mapToSource(selectedIndices[i]));
    400435        if (strPath.contains(".."))
    401436            continue;
     
    411446    m_pTableView->setRootIndex(index);
    412447    m_pTableView->clearSelection();
    413     updateNavigationWidgetPath(m_pModel->filePath(index));
     448    QString strPath = m_pModel->filePath(m_pProxyModel->mapToSource(index));
     449    updateNavigationWidgetPath(strPath);
    414450    if (m_pGoUp)
    415451        m_pGoUp->setEnabled(!isRoot());
     
    420456    if (!m_pModel)
    421457        return;
    422     QModelIndex index = m_pModel->index(strPath);
     458    QModelIndex index = m_pProxyModel->mapFromSource(m_pModel->index(strPath));
    423459    if (!index.isValid())
    424460        return;
  • trunk/src/VBox/Frontends/VirtualBox/src/medium/viso/UIVisoHostBrowser.h

    r100478 r100559  
    3939class QTableView;
    4040class UIVisoHostBrowserModel;
     41class UIHostBrowserProxyModel;
    4142
    4243/** A UIVisoBrowserBase extension to view host file system. Uses QFileSystemModel. */
     
    8889    QModelIndex currentRootIndex() const;
    8990    /** We have two file system models (one for each item view) since we set different filters on each of these models. */
    90     UIVisoHostBrowserModel *m_pModel;
    91     QTableView             *m_pTableView;
     91    UIVisoHostBrowserModel  *m_pModel;
     92    QTableView              *m_pTableView;
     93    UIHostBrowserProxyModel *m_pProxyModel;
    9294};
    9395
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