From 6e708cc0c4d503f72d0419fe4e39f029aad8d514 Mon Sep 17 00:00:00 2001 From: Christian Muehlhaeuser Date: Mon, 14 Feb 2011 12:18:48 +0100 Subject: [PATCH] * Made QHeaderView behave, mostly. * Removed online / offline button again. --- src/libtomahawk/playlist/collectionview.cpp | 2 +- src/libtomahawk/playlist/playlistview.cpp | 9 ++- src/libtomahawk/playlist/trackheader.cpp | 87 ++++++--------------- src/libtomahawk/playlist/trackheader.h | 12 +-- src/libtomahawk/playlist/trackmodel.cpp | 2 +- src/libtomahawk/playlist/trackview.cpp | 10 ++- src/libtomahawk/playlist/trackview.h | 2 +- src/libtomahawk/tomahawksettings.cpp | 8 +- src/libtomahawk/tomahawksettings.h | 4 +- src/libtomahawk/utils/proxystyle.cpp | 9 ++- src/tomahawkwindow.cpp | 16 ++-- 11 files changed, 62 insertions(+), 99 deletions(-) diff --git a/src/libtomahawk/playlist/collectionview.cpp b/src/libtomahawk/playlist/collectionview.cpp index 0847849e8..2df2a594e 100644 --- a/src/libtomahawk/playlist/collectionview.cpp +++ b/src/libtomahawk/playlist/collectionview.cpp @@ -13,7 +13,6 @@ using namespace Tomahawk; CollectionView::CollectionView( QWidget* parent ) : TrackView( parent ) { - setGuid( "collectionview" ); setProxyModel( new CollectionProxyModel( this ) ); setSortingEnabled( true ); @@ -37,6 +36,7 @@ void CollectionView::setModel( TrackModel* model ) { TrackView::setModel( model ); + setGuid( "collectionview" ); connect( model, SIGNAL( trackCountChanged( unsigned int ) ), SLOT( onTrackCountChanged( unsigned int ) ) ); } diff --git a/src/libtomahawk/playlist/playlistview.cpp b/src/libtomahawk/playlist/playlistview.cpp index b11255f2e..9e45175ab 100644 --- a/src/libtomahawk/playlist/playlistview.cpp +++ b/src/libtomahawk/playlist/playlistview.cpp @@ -14,7 +14,6 @@ using namespace Tomahawk; PlaylistView::PlaylistView( QWidget* parent ) : TrackView( parent ) { - setGuid( "playlistview" ); setProxyModel( new PlaylistProxyModel( this ) ); setContextMenuPolicy( Qt::CustomContextMenu ); @@ -31,14 +30,16 @@ PlaylistView::~PlaylistView() void PlaylistView::setModel( PlaylistModel* model ) { - if ( !model->playlist().isNull() ) - setGuid( QString( "playlistview/%1" ).arg( model->playlist()->guid() ) ); - m_model = model; TrackView::setModel( model ); setColumnHidden( 5, true ); // Hide age column per default + if ( !model->playlist().isNull() ) + setGuid( QString( "playlistview/%1" ).arg( model->playlist()->guid() ) ); + else + setGuid( "playlistview" ); + connect( model, SIGNAL( trackCountChanged( unsigned int ) ), SLOT( onTrackCountChanged( unsigned int ) ) ); } diff --git a/src/libtomahawk/playlist/trackheader.cpp b/src/libtomahawk/playlist/trackheader.cpp index 7df6fb8ea..3069ca66b 100644 --- a/src/libtomahawk/playlist/trackheader.cpp +++ b/src/libtomahawk/playlist/trackheader.cpp @@ -14,28 +14,27 @@ TrackHeader::TrackHeader( TrackView* parent ) , m_parent( parent ) , m_menu( new QMenu( this ) ) , m_sigmap( new QSignalMapper( this ) ) - , m_hiddenWidth( 0 ) - , m_hiddenPct( 0.0 ) , m_init( false ) { - setStretchLastSection( true ); setResizeMode( QHeaderView::Interactive ); setMinimumSectionSize( 60 ); setDefaultAlignment( Qt::AlignLeft ); setMovable( true ); + setStretchLastSection( true ); // setCascadingSectionResizes( true ); // m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) ); // m_menu->addSeparator(); - connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionResized( int, int, int ) ) ); +// connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionResized( int ) ) ); connect( m_sigmap, SIGNAL( mapped( int ) ), SLOT( toggleVisibility( int ) ) ); } TrackHeader::~TrackHeader() { - saveColumnsState(); + qDebug() << "Storing for:" << m_parent->guid(); + TomahawkSettings::instance()->setPlaylistColumnSizes( m_parent->guid(), saveState() ); } @@ -47,75 +46,35 @@ TrackHeader::visibleSectionCount() const void -TrackHeader::onSectionResized( int logicalidx, int oldSize, int newSize ) +TrackHeader::checkState() { - if ( !m_init ) + if ( !count() || m_init ) return; - int width = m_parent->viewport()->width(); - for ( int x = 0; x < m_columnWeights.count(); x++ ) - { - if ( sectionSize( x ) ) - { - // not hidden - m_columnWeights[x] = (double)sectionSize( x ) / (double)width; - } - } -} - - -void -TrackHeader::onResized() -{ - if ( !m_init && count() ) - restoreColumnsState(); - - m_init = false; - - int width = m_parent->viewport()->width(); - for ( int x = 0; x < m_columnWeights.count(); x++ ) - { - if ( sectionSize( x ) ) - { - // not hidden - double nw = (double)width * m_columnWeights[x]; - resizeSection( x, qMax( minimumSectionSize(), int( nw ) ) ); - } - } - + qDebug() << "Restoring for:" << m_parent->guid(); m_init = true; -} + QByteArray state = TomahawkSettings::instance()->playlistColumnSizes( m_parent->guid() ); - -void -TrackHeader::restoreColumnsState() -{ - QList list = TomahawkSettings::instance()->playlistColumnSizes( m_parent->guid() ); - - if ( list.count() != count() ) // FIXME: const - { - m_columnWeights << 0.21 << 0.22 << 0.20 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05 << 0.12; - } + if ( !state.isEmpty() ) + restoreState( state ); else { - foreach( const QVariant& v, list ) - m_columnWeights << v.toDouble(); + QList< double > m_columnWeights; + m_columnWeights << 0.21 << 0.22 << 0.20 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05; // << 0.12; + + for ( int i = 0; i < count(); i++ ) + { + if ( isSectionHidden( i ) ) + continue; + + double nw = (double)m_parent->width() * m_columnWeights.at( i ); + qDebug() << "Setting default size:" << i << nw; + resizeSection( i, qMax( minimumSectionSize(), int( nw - 0.5 ) ) ); + } } } -void -TrackHeader::saveColumnsState() -{ - QList wlist; - - foreach( double w, m_columnWeights ) - wlist << QVariant( w ); - - TomahawkSettings::instance()->setPlaylistColumnSizes( m_parent->guid(), wlist ); -} - - void TrackHeader::addColumnToMenu( int index ) { @@ -158,6 +117,4 @@ TrackHeader::toggleVisibility( int index ) showSection( index ); else hideSection( index ); - - onResized(); } diff --git a/src/libtomahawk/playlist/trackheader.h b/src/libtomahawk/playlist/trackheader.h index 75db27b0d..f541e092d 100644 --- a/src/libtomahawk/playlist/trackheader.h +++ b/src/libtomahawk/playlist/trackheader.h @@ -19,32 +19,24 @@ public: int visibleSectionCount() const; public slots: - void onResized(); void toggleVisibility( int index ); + void checkState(); protected: void contextMenuEvent( QContextMenuEvent* e ); private slots: - void onSectionResized( int logicalIndex, int oldSize, int newSize ); - +// void onSectionResized( int index ); void onToggleResizeColumns(); private: void addColumnToMenu( int index ); - void restoreColumnsState(); - void saveColumnsState(); - TrackView* m_parent; QMenu* m_menu; QSignalMapper* m_sigmap; QList m_visActions; - - QList m_columnWeights; - int m_hiddenWidth; - double m_hiddenPct; bool m_init; }; diff --git a/src/libtomahawk/playlist/trackmodel.cpp b/src/libtomahawk/playlist/trackmodel.cpp index 7cb73631b..a39eecc76 100644 --- a/src/libtomahawk/playlist/trackmodel.cpp +++ b/src/libtomahawk/playlist/trackmodel.cpp @@ -190,7 +190,7 @@ TrackModel::headerData( int section, Qt::Orientation orientation, int role ) con { QStringList headers; headers << tr( "Artist" ) << tr( "Track" ) << tr( "Album" ) << tr( "Duration" ) << tr( "Bitrate" ) << tr( "Age" ) << tr( "Year" ) << tr( "Size" ) << tr( "Origin" ); - if ( orientation == Qt::Horizontal && role == Qt::DisplayRole && section >= 0 ) + if ( role == Qt::DisplayRole && section >= 0 ) { return headers.at( section ); } diff --git a/src/libtomahawk/playlist/trackview.cpp b/src/libtomahawk/playlist/trackview.cpp index 3317bd21b..3aefc9982 100644 --- a/src/libtomahawk/playlist/trackview.cpp +++ b/src/libtomahawk/playlist/trackview.cpp @@ -40,6 +40,7 @@ TrackView::TrackView( QWidget* parent ) setRootIsDecorated( false ); setUniformRowHeights( true ); setMinimumWidth( 300 ); + setVerticalScrollBarPolicy( Qt::ScrollBarAlwaysOn ); setHeader( m_header ); @@ -61,6 +62,13 @@ TrackView::~TrackView() } +void +TrackView::setGuid( const QString& guid ) +{ + m_guid = guid; +} + + void TrackView::setProxyModel( TrackProxyModel* model ) { @@ -156,7 +164,7 @@ TrackView::addItemsToQueue() void TrackView::resizeEvent( QResizeEvent* event ) { - m_header->onResized(); + m_header->checkState(); } diff --git a/src/libtomahawk/playlist/trackview.h b/src/libtomahawk/playlist/trackview.h index 51207506a..337d004a5 100644 --- a/src/libtomahawk/playlist/trackview.h +++ b/src/libtomahawk/playlist/trackview.h @@ -23,7 +23,7 @@ public: ~TrackView(); virtual QString guid() const { return m_guid; } - virtual void setGuid( const QString& guid ) { m_guid = guid; } + virtual void setGuid( const QString& guid ); virtual void setModel( TrackModel* model ); void setProxyModel( TrackProxyModel* model ); diff --git a/src/libtomahawk/tomahawksettings.cpp b/src/libtomahawk/tomahawksettings.cpp index cc6f4278c..b221c1b43 100644 --- a/src/libtomahawk/tomahawksettings.cpp +++ b/src/libtomahawk/tomahawksettings.cpp @@ -184,17 +184,17 @@ TomahawkSettings::setMainWindowState( const QByteArray& state ) } -QList +QByteArray TomahawkSettings::playlistColumnSizes( const QString& playlistid ) const { - return value( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ) ).toList(); + return value( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ) ).toByteArray(); } void -TomahawkSettings::setPlaylistColumnSizes( const QString& playlistid, const QList& cols ) +TomahawkSettings::setPlaylistColumnSizes( const QString& playlistid, const QByteArray& state ) { - setValue( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ), cols ); + setValue( QString( "ui/playlist/%1/columnSizes" ).arg( playlistid ), state ); } diff --git a/src/libtomahawk/tomahawksettings.h b/src/libtomahawk/tomahawksettings.h index 3959ec6e9..42e4cf0c9 100644 --- a/src/libtomahawk/tomahawksettings.h +++ b/src/libtomahawk/tomahawksettings.h @@ -32,8 +32,8 @@ public: void setMainWindowState( const QByteArray& state ); /// Playlist stuff - QList playlistColumnSizes( const QString& playlistid ) const; - void setPlaylistColumnSizes( const QString& playlistid, const QList& cols ); + QByteArray playlistColumnSizes( const QString& playlistid ) const; + void setPlaylistColumnSizes( const QString& playlistid, const QByteArray& state ); QList recentlyPlayedPlaylists() const; void appendRecentlyPlayedPlaylist( const Tomahawk::playlist_ptr& playlist ); diff --git a/src/libtomahawk/utils/proxystyle.cpp b/src/libtomahawk/utils/proxystyle.cpp index 2778e47ee..34feb8f93 100644 --- a/src/libtomahawk/utils/proxystyle.cpp +++ b/src/libtomahawk/utils/proxystyle.cpp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -19,8 +20,12 @@ ProxyStyle::drawControl( ControlElement ce, const QStyleOption* opt, QPainter* p { if ( ce == CE_Splitter ) { - p->setPen( QColor( 0x8c, 0x8c, 0x8c ) ); - p->drawLine( opt->rect.topLeft(), opt->rect.bottomRight() ); + const QSplitter* splitter = qobject_cast< const QSplitter* >( w ); + if ( !splitter->sizes().contains( 0 ) ) + { + p->setPen( QColor( 0x8c, 0x8c, 0x8c ) ); + p->drawLine( opt->rect.topLeft(), opt->rect.bottomRight() ); + } } else QProxyStyle::drawControl( ce, opt, p, w ); diff --git a/src/tomahawkwindow.cpp b/src/tomahawkwindow.cpp index 7ec798e29..36e71f8e4 100644 --- a/src/tomahawkwindow.cpp +++ b/src/tomahawkwindow.cpp @@ -87,22 +87,22 @@ TomahawkWindow::TomahawkWindow( QWidget* parent ) sidebar->addWidget( transferView ); sidebar->hide( 1, false ); - QWidget* buttonWidget = new QWidget(); +/* QWidget* buttonWidget = new QWidget(); buttonWidget->setLayout( new QVBoxLayout() ); m_statusButton = new QPushButton(); - buttonWidget->layout()->addWidget( m_statusButton ); + buttonWidget->layout()->addWidget( m_statusButton );*/ sidebarWidget->layout()->addWidget( sidebar ); - sidebarWidget->layout()->addWidget( buttonWidget ); +// sidebarWidget->layout()->addWidget( buttonWidget ); sidebarWidget->setContentsMargins( 0, 0, 0, 0 ); sidebarWidget->layout()->setContentsMargins( 0, 0, 0, 0 ); sidebarWidget->layout()->setMargin( 0 ); sidebarWidget->layout()->setSpacing( 0 ); - buttonWidget->setContentsMargins( 0, 0, 0, 0 ); +/* buttonWidget->setContentsMargins( 0, 0, 0, 0 ); buttonWidget->layout()->setContentsMargins( 0, 0, 0, 0 ); buttonWidget->layout()->setMargin( 0 ); - buttonWidget->layout()->setSpacing( 0 ); + buttonWidget->layout()->setSpacing( 0 );*/ ui->splitter->addWidget( sidebarWidget ); ui->splitter->addWidget( PlaylistManager::instance()->widget() ); @@ -181,7 +181,7 @@ TomahawkWindow::setupSignals() connect( ui->actionCreate_New_Station, SIGNAL( triggered() ), SLOT( createStation() )); connect( ui->actionAboutTomahawk, SIGNAL( triggered() ), SLOT( showAboutTomahawk() ) ); connect( ui->actionExit, SIGNAL( triggered() ), APP, SLOT( quit() ) ); - connect( m_statusButton, SIGNAL( clicked() ), APP->sipHandler(), SLOT( toggleConnect() ) ); +// connect( m_statusButton, SIGNAL( clicked() ), APP->sipHandler(), SLOT( toggleConnect() ) ); // connect( APP->sipHandler(), SIGNAL( connected() ), SLOT( onSipConnected() ) ); @@ -392,14 +392,14 @@ TomahawkWindow::onPlaybackLoading( const Tomahawk::result_ptr& result ) void TomahawkWindow::onSipConnected() { - m_statusButton->setText( tr( "Online" ) ); +// m_statusButton->setText( tr( "Online" ) ); } void TomahawkWindow::onSipDisconnected() { - m_statusButton->setText( tr( "Offline" ) ); +// m_statusButton->setText( tr( "Offline" ) ); }