VirtualBox

Ignore:
Timestamp:
Jul 13, 2023 1:32:04 PM (20 months ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
158391
Message:

FE/Qt: bugref:9080. Reimplementing QSortFilterProxyModel::lessThan(...) to make sure up directory is listed always on top (in the host browser).

File:
1 edited

Legend:

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

    r100559 r100565  
    4444
    4545
    46 class SHARED_LIBRARY_STUFF UIHostBrowserProxyModel : public QSortFilterProxyModel
    47 {
    48 
    49     Q_OBJECT;
    50 
    51 public:
    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 
    64 protected:
    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 
    70 private:
    71 
    72     // bool m_fListDirectoriesOnTop;
    73     // bool m_fShowHiddenObjects;
    74 };
    75 
    7646
    7747/*********************************************************************************************************************************
     
    11585private:
    11686
     87};
     88
     89/*********************************************************************************************************************************
     90*   UIHostBrowserProxyModel definition.                                                                                   *
     91*********************************************************************************************************************************/
     92
     93class SHARED_LIBRARY_STUFF UIHostBrowserProxyModel : public QSortFilterProxyModel
     94{
     95
     96    Q_OBJECT;
     97
     98public:
     99
     100    UIHostBrowserProxyModel(QObject *pParent = 0)
     101        : QSortFilterProxyModel(pParent)
     102    {
     103    }
     104
     105protected:
     106
     107    virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const RT_OVERRIDE;
     108
     109private:
    117110};
    118111
     
    185178}
    186179
     180
     181/*********************************************************************************************************************************
     182*   UIHostBrowserProxyModel implementation.                                                                                      *
     183*********************************************************************************************************************************/
     184
     185bool UIHostBrowserProxyModel::lessThan(const QModelIndex &left, const QModelIndex &right) const
     186{
     187    UIVisoHostBrowserModel *pModel = qobject_cast<UIVisoHostBrowserModel*>(sourceModel());
     188    AssertReturn(pModel, true);
     189
     190    if (pModel->filePath(left).contains(".."))
     191        return (sortOrder() == Qt::AscendingOrder);
     192
     193    if (pModel->filePath(right).contains(".."))
     194        return (sortOrder() == Qt::DescendingOrder);
     195
     196    QFileInfo leftInfo(pModel->fileInfo(left));
     197    QFileInfo rightInfo(pModel->fileInfo(right));
     198
     199    if (leftInfo.isDir() && !rightInfo.isDir())
     200        return (sortOrder() == Qt::AscendingOrder);
     201
     202    if (!leftInfo.isDir() && rightInfo.isDir())
     203        return (sortOrder() == Qt::DescendingOrder);
     204
     205    return QSortFilterProxyModel::lessThan(left, right);
     206}
     207
     208
    187209/*********************************************************************************************************************************
    188210*   UIVisoHostBrowser implementation.                                                                                   *
     
    224246    AssertReturnVoid(m_pProxyModel);
    225247    m_pProxyModel->setSourceModel(m_pModel);
     248    m_pProxyModel->setDynamicSortFilter(true);
     249
    226250
    227251    m_pTableView = new QTableView;
     
    248272
    249273    m_pTableView->setModel(m_pProxyModel);
     274    m_pTableView->setSortingEnabled(true);
     275    m_pTableView->sortByColumn(0, Qt::AscendingOrder);
    250276
    251277    /* Hide the "type" column: */
     
    377403        return;
    378404    if (QString::compare(fileInfo.fileName(), "..") == 0)
    379         setTableRootIndex(m_pModel->parent(m_pTableView->rootIndex()));
     405        setTableRootIndex(m_pProxyModel->parent(m_pTableView->rootIndex()));
    380406    else
    381407        setTableRootIndex(index);
     
    442468void UIVisoHostBrowser::setTableRootIndex(QModelIndex index /* = QModelIndex */)
    443469{
    444     if (!m_pTableView || !m_pModel)
    445         return;
     470    AssertReturnVoid(m_pTableView);
     471    AssertReturnVoid(m_pModel);
     472    AssertReturnVoid(m_pProxyModel);
     473
    446474    m_pTableView->setRootIndex(index);
    447475    m_pTableView->clearSelection();
     
    450478    if (m_pGoUp)
    451479        m_pGoUp->setEnabled(!isRoot());
     480
     481    m_pTableView->sortByColumn(m_pProxyModel->sortColumn(), m_pProxyModel->sortOrder());
    452482}
    453483
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