Changeset 11063


Ignore:
Timestamp:
Jul 28, 2010, 6:53:25 PM (12 years ago)
Author:
charles
Message:

(trunk qt) "Qt client's Files list should be sortable" -- fixed

Location:
trunk/qt
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/qt/file-tree.cc

    r10933 r11063  
    1818#include <QPainter>
    1919#include <QResizeEvent>
     20#include <QSortFilterProxyModel>
    2021#include <QStringList>
    2122
     
    506507****/
    507508
     509QSize
     510FileTreeDelegate :: sizeHint( const QStyleOptionViewItem& item, const QModelIndex& index ) const
     511{
     512    QSize size;
     513
     514    switch( index.column( ) )
     515    {
     516        case COL_NAME: {
     517            const QFontMetrics fm( item.font );
     518            const QString text = index.model()->data(index).toString();
     519            const int iconSize = QApplication::style()->pixelMetric( QStyle::PM_SmallIconSize );
     520            size.rwidth() = HIG::PAD_SMALL + iconSize;
     521            size.rheight() = std::max( iconSize, fm.height( ) );
     522            break;
     523        }
     524
     525        case COL_PROGRESS:
     526        case COL_WANTED:
     527            size = QSize( 20, 1 );
     528            break;
     529
     530        default: {
     531            const QFontMetrics fm( item.font );
     532            const QString text = index.model()->data(index).toString();
     533            size = fm.size( 0, text );
     534            break;
     535        }
     536    }
     537
     538    size.rheight() += 8; // make the spacing a little nicer
     539    return size;
     540}
     541
    508542void
    509543FileTreeDelegate :: paint( QPainter                    * painter,
     
    512546{
    513547    const int column( index.column( ) );
    514 
    515548
    516549    if( ( column != COL_PROGRESS ) && ( column != COL_WANTED ) && ( column != COL_NAME ) )
     
    595628    QTreeView( parent ),
    596629    myModel( this ),
     630    myProxy( new QSortFilterProxyModel( ) ),
    597631    myDelegate( this )
    598632{
     633    setSortingEnabled( true );
    599634    setAlternatingRowColors( true );
    600635    setSelectionBehavior( QAbstractItemView::SelectRows );
    601636    setSelectionMode( QAbstractItemView::ExtendedSelection );
    602     setModel( &myModel );
     637    myProxy->setSourceModel( &myModel );
     638    setModel( myProxy );
    603639    setItemDelegate( &myDelegate );
    604640    setHorizontalScrollBarPolicy( Qt::ScrollBarAlwaysOff );
     641    sortByColumn( COL_NAME, Qt::AscendingOrder );
    605642    installEventFilter( this );
    606643
     
    608645        header()->setResizeMode( i, QHeaderView::Fixed );
    609646
    610     connect( this,     SIGNAL(clicked(const QModelIndex&)),
    611              &myModel,   SLOT(clicked(const QModelIndex&)));
     647    connect( this, SIGNAL(clicked(const QModelIndex&)),
     648             this, SLOT(onClicked(const QModelIndex&)) );
    612649
    613650    connect( &myModel, SIGNAL(priorityChanged(const QSet<int>&, int)),
     
    616653    connect( &myModel, SIGNAL(wantedChanged(const QSet<int>&, bool)),
    617654             this,     SIGNAL(wantedChanged(const QSet<int>&, bool)));
     655}
     656
     657void
     658FileTreeView :: onClicked( const QModelIndex& proxyIndex )
     659{
     660    const QModelIndex modelIndex = myProxy->mapToSource( proxyIndex );
     661    myModel.clicked( modelIndex );
    618662}
    619663
     
    663707        myModel.addFile( file.index, file.filename, file.wanted, file.priority, file.size, file.have, added, torrentChanged );
    664708        foreach( QModelIndex i, added )
    665             expand( i );
     709            expand( myProxy->mapFromSource( i ) );
    666710    }
    667711}
  • trunk/qt/file-tree.h

    r10627 r11063  
    1616#include <QAbstractItemModel>
    1717#include <QObject>
     18#include <QItemDelegate>
    1819#include <QList>
     20#include <QSet>
     21#include <QSize>
    1922#include <QString>
    20 #include <QSet>
    2123#include <QTreeView>
    2224#include <QVariant>
    23 #include <QItemDelegate>
     25
     26class QSortFilterProxyModel;
     27class QStyle;
    2428
    2529#include "torrent.h" // FileList
     
    124128
    125129    public:
    126 
    127130        FileTreeDelegate( QObject * parent=0 ): QItemDelegate( parent ) { }
    128131        virtual ~FileTreeDelegate( ) { }
    129132
    130         void paint( QPainter                   * painter,
    131                     const QStyleOptionViewItem & option,
    132                     const QModelIndex          & index ) const;
     133    public:
     134        virtual QSize sizeHint(const QStyleOptionViewItem&, const QModelIndex&) const;
     135        virtual void paint(QPainter*, const QStyleOptionViewItem&, const QModelIndex&) const;
    133136};
    134137
     
    153156    private:
    154157        FileTreeModel myModel;
     158        QSortFilterProxyModel * myProxy;
    155159        FileTreeDelegate myDelegate;
     160
     161    public slots:
     162        void onClicked ( const QModelIndex & index );
    156163};
    157164
Note: See TracChangeset for help on using the changeset viewer.