mirror of
https://github.com/tomahawk-player/tomahawk.git
synced 2025-08-06 06:07:37 +02:00
* Fixed TWK-278: Store columns after reordering and introduce ViewHeader as a base-class for self-restoring QHeaderViews.
This commit is contained in:
@@ -129,6 +129,7 @@ set( libSources
|
|||||||
playlist/albumview.cpp
|
playlist/albumview.cpp
|
||||||
playlist/artistview.cpp
|
playlist/artistview.cpp
|
||||||
playlist/customplaylistview.cpp
|
playlist/customplaylistview.cpp
|
||||||
|
playlist/ViewHeader.cpp
|
||||||
|
|
||||||
playlist/topbar/topbar.cpp
|
playlist/topbar/topbar.cpp
|
||||||
playlist/topbar/clearbutton.cpp
|
playlist/topbar/clearbutton.cpp
|
||||||
@@ -339,6 +340,7 @@ set( libHeaders
|
|||||||
playlist/albumview.h
|
playlist/albumview.h
|
||||||
playlist/artistview.h
|
playlist/artistview.h
|
||||||
playlist/customplaylistview.h
|
playlist/customplaylistview.h
|
||||||
|
playlist/ViewHeader.h
|
||||||
|
|
||||||
playlist/topbar/topbar.h
|
playlist/topbar/topbar.h
|
||||||
playlist/topbar/clearbutton.h
|
playlist/topbar/clearbutton.h
|
||||||
|
143
src/libtomahawk/playlist/ViewHeader.cpp
Normal file
143
src/libtomahawk/playlist/ViewHeader.cpp
Normal file
@@ -0,0 +1,143 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||||
|
*
|
||||||
|
* Tomahawk is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "ViewHeader.h"
|
||||||
|
|
||||||
|
#include <QContextMenuEvent>
|
||||||
|
#include <QMenu>
|
||||||
|
|
||||||
|
#include "tomahawksettings.h"
|
||||||
|
#include "utils/logger.h"
|
||||||
|
|
||||||
|
|
||||||
|
ViewHeader::ViewHeader( QAbstractItemView* parent )
|
||||||
|
: QHeaderView( Qt::Horizontal, parent )
|
||||||
|
, m_parent( parent )
|
||||||
|
, m_menu( new QMenu( this ) )
|
||||||
|
, m_sigmap( new QSignalMapper( this ) )
|
||||||
|
, m_init( false )
|
||||||
|
{
|
||||||
|
setResizeMode( QHeaderView::Interactive );
|
||||||
|
setMinimumSectionSize( 60 );
|
||||||
|
setDefaultAlignment( Qt::AlignLeft );
|
||||||
|
setMovable( true );
|
||||||
|
setStretchLastSection( true );
|
||||||
|
|
||||||
|
// m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) );
|
||||||
|
// m_menu->addSeparator();
|
||||||
|
|
||||||
|
connect( m_sigmap, SIGNAL( mapped( int ) ), SLOT( toggleVisibility( int ) ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ViewHeader::~ViewHeader()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
int
|
||||||
|
ViewHeader::visibleSectionCount() const
|
||||||
|
{
|
||||||
|
return count() - hiddenSectionCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ViewHeader::onSectionsChanged()
|
||||||
|
{
|
||||||
|
TomahawkSettings::instance()->setPlaylistColumnSizes( m_guid, saveState() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
bool
|
||||||
|
ViewHeader::checkState()
|
||||||
|
{
|
||||||
|
if ( !count() || m_init )
|
||||||
|
return false;
|
||||||
|
|
||||||
|
QByteArray state = TomahawkSettings::instance()->playlistColumnSizes( m_guid );
|
||||||
|
if ( !state.isEmpty() )
|
||||||
|
{
|
||||||
|
restoreState( state );
|
||||||
|
|
||||||
|
if ( m_guid.startsWith( "playlistview" ) ) // HACK
|
||||||
|
setSortIndicator( -1, Qt::AscendingOrder );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for ( int i = 0; i < count() - 1; i++ )
|
||||||
|
{
|
||||||
|
if ( isSectionHidden( i ) )
|
||||||
|
continue;
|
||||||
|
|
||||||
|
double nw = (double)m_parent->width() * m_columnWeights.at( i );
|
||||||
|
resizeSection( i, qMax( minimumSectionSize(), int( nw - 0.5 ) ) );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
m_init = true;
|
||||||
|
connect( this, SIGNAL( sectionMoved( int, int, int ) ), SLOT( onSectionsChanged() ) );
|
||||||
|
connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionsChanged() ) );
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ViewHeader::addColumnToMenu( int index )
|
||||||
|
{
|
||||||
|
QString title = m_parent->model()->headerData( index, Qt::Horizontal, Qt::DisplayRole ).toString();
|
||||||
|
|
||||||
|
QAction* action = m_menu->addAction( title, m_sigmap, SLOT( map() ) );
|
||||||
|
action->setCheckable( true );
|
||||||
|
action->setChecked( !isSectionHidden( index ) );
|
||||||
|
m_visActions << action;
|
||||||
|
|
||||||
|
m_sigmap->setMapping( action, index );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ViewHeader::contextMenuEvent( QContextMenuEvent* e )
|
||||||
|
{
|
||||||
|
qDeleteAll( m_visActions );
|
||||||
|
m_visActions.clear();
|
||||||
|
|
||||||
|
for ( int i = 0; i < count(); i++ )
|
||||||
|
addColumnToMenu( i );
|
||||||
|
|
||||||
|
m_menu->popup( e->globalPos() );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ViewHeader::onToggleResizeColumns()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
ViewHeader::toggleVisibility( int index )
|
||||||
|
{
|
||||||
|
qDebug() << Q_FUNC_INFO << index;
|
||||||
|
|
||||||
|
if ( isSectionHidden( index ) )
|
||||||
|
showSection( index );
|
||||||
|
else
|
||||||
|
hideSection( index );
|
||||||
|
}
|
65
src/libtomahawk/playlist/ViewHeader.h
Normal file
65
src/libtomahawk/playlist/ViewHeader.h
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
/* === This file is part of Tomahawk Player - <http://tomahawk-player.org> ===
|
||||||
|
*
|
||||||
|
* Copyright 2010-2011, Christian Muehlhaeuser <muesli@tomahawk-player.org>
|
||||||
|
*
|
||||||
|
* Tomahawk is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* Tomahawk is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with Tomahawk. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef VIEWHEADER_H
|
||||||
|
#define VIEWHEADER_H
|
||||||
|
|
||||||
|
#include <QHeaderView>
|
||||||
|
#include <QSignalMapper>
|
||||||
|
|
||||||
|
#include "dllmacro.h"
|
||||||
|
|
||||||
|
class DLLEXPORT ViewHeader : public QHeaderView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit ViewHeader( QAbstractItemView* parent = 0 );
|
||||||
|
~ViewHeader();
|
||||||
|
|
||||||
|
int visibleSectionCount() const;
|
||||||
|
|
||||||
|
void setDefaultColumnWeights( QList<double> weights ) { m_columnWeights = weights; }
|
||||||
|
|
||||||
|
QString guid() const { return m_guid; }
|
||||||
|
void setGuid( const QString& guid ) { m_guid = guid; }
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void toggleVisibility( int index );
|
||||||
|
bool checkState();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
void contextMenuEvent( QContextMenuEvent* e );
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
virtual void onSectionsChanged();
|
||||||
|
void onToggleResizeColumns();
|
||||||
|
|
||||||
|
private:
|
||||||
|
void addColumnToMenu( int index );
|
||||||
|
|
||||||
|
QAbstractItemView* m_parent;
|
||||||
|
QString m_guid;
|
||||||
|
QList<double> m_columnWeights;
|
||||||
|
QMenu* m_menu;
|
||||||
|
QSignalMapper* m_sigmap;
|
||||||
|
QList<QAction*> m_visActions;
|
||||||
|
bool m_init;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif
|
@@ -128,6 +128,7 @@ ArtistView::setTreeModel( TreeModel* model )
|
|||||||
connect( m_proxyModel, SIGNAL( filterChanged( QString ) ), SLOT( onFilterChanged( QString ) ) );
|
connect( m_proxyModel, SIGNAL( filterChanged( QString ) ), SLOT( onFilterChanged( QString ) ) );
|
||||||
connect( m_proxyModel, SIGNAL( rowsInserted( QModelIndex, int, int ) ), SLOT( onViewChanged() ) );
|
connect( m_proxyModel, SIGNAL( rowsInserted( QModelIndex, int, int ) ), SLOT( onViewChanged() ) );
|
||||||
|
|
||||||
|
guid(); // this will set the guid on the header
|
||||||
setAcceptDrops( false );
|
setAcceptDrops( false );
|
||||||
|
|
||||||
if ( model->columnStyle() == TreeModel::TrackOnly )
|
if ( model->columnStyle() == TreeModel::TrackOnly )
|
||||||
@@ -350,7 +351,10 @@ QString
|
|||||||
ArtistView::guid() const
|
ArtistView::guid() const
|
||||||
{
|
{
|
||||||
if ( m_guid.isEmpty() )
|
if ( m_guid.isEmpty() )
|
||||||
|
{
|
||||||
m_guid = QString( "artistview/%1" ).arg( m_model->columnCount( QModelIndex() ) );
|
m_guid = QString( "artistview/%1" ).arg( m_model->columnCount( QModelIndex() ) );
|
||||||
|
m_header->setGuid( m_guid );
|
||||||
|
}
|
||||||
|
|
||||||
return m_guid;
|
return m_guid;
|
||||||
}
|
}
|
||||||
|
@@ -18,134 +18,21 @@
|
|||||||
|
|
||||||
#include "trackheader.h"
|
#include "trackheader.h"
|
||||||
|
|
||||||
#include <QContextMenuEvent>
|
|
||||||
#include <QMenu>
|
|
||||||
|
|
||||||
#include "tomahawksettings.h"
|
|
||||||
#include "playlist/trackmodel.h"
|
|
||||||
#include "playlist/trackview.h"
|
#include "playlist/trackview.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
|
||||||
|
|
||||||
TrackHeader::TrackHeader( TrackView* parent )
|
TrackHeader::TrackHeader( TrackView* parent )
|
||||||
: QHeaderView( Qt::Horizontal, parent )
|
: ViewHeader( parent )
|
||||||
, m_parent( parent )
|
, m_parent( parent )
|
||||||
, m_menu( new QMenu( this ) )
|
|
||||||
, m_sigmap( new QSignalMapper( this ) )
|
|
||||||
, m_init( false )
|
|
||||||
{
|
{
|
||||||
setResizeMode( QHeaderView::Interactive );
|
QList< double > columnWeights;
|
||||||
setMinimumSectionSize( 60 );
|
columnWeights << 0.18 << 0.18 << 0.17 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05 << 0.10; // << 0.05;
|
||||||
setDefaultAlignment( Qt::AlignLeft );
|
|
||||||
setMovable( true );
|
|
||||||
setStretchLastSection( true );
|
|
||||||
// setCascadingSectionResizes( true );
|
|
||||||
|
|
||||||
// m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) );
|
setDefaultColumnWeights( columnWeights );
|
||||||
// m_menu->addSeparator();
|
|
||||||
|
|
||||||
connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionResized() ) );
|
|
||||||
connect( m_sigmap, SIGNAL( mapped( int ) ), SLOT( toggleVisibility( int ) ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TrackHeader::~TrackHeader()
|
TrackHeader::~TrackHeader()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TrackHeader::onSectionResized()
|
|
||||||
{
|
|
||||||
if ( !m_init )
|
|
||||||
return;
|
|
||||||
|
|
||||||
TomahawkSettings::instance()->setPlaylistColumnSizes( m_parent->guid(), saveState() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
TrackHeader::visibleSectionCount() const
|
|
||||||
{
|
|
||||||
return count() - hiddenSectionCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
bool
|
|
||||||
TrackHeader::checkState()
|
|
||||||
{
|
|
||||||
if ( !count() || m_init )
|
|
||||||
return false;
|
|
||||||
|
|
||||||
QByteArray state = TomahawkSettings::instance()->playlistColumnSizes( m_parent->guid() );
|
|
||||||
if ( !state.isEmpty() )
|
|
||||||
{
|
|
||||||
restoreState( state );
|
|
||||||
|
|
||||||
if ( m_parent->guid().startsWith( "playlistview" ) ) // HACK
|
|
||||||
setSortIndicator( -1, Qt::AscendingOrder );
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QList< double > m_columnWeights;
|
|
||||||
m_columnWeights << 0.18 << 0.18 << 0.17 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05 << 0.05 << 0.10; // << 0.05;
|
|
||||||
|
|
||||||
for ( int i = 0; i < count() - 1; 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 ) ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_init = true;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TrackHeader::addColumnToMenu( int index )
|
|
||||||
{
|
|
||||||
QString title = m_parent->model()->headerData( index, Qt::Horizontal, Qt::DisplayRole ).toString();
|
|
||||||
|
|
||||||
QAction* action = m_menu->addAction( title, m_sigmap, SLOT( map() ) );
|
|
||||||
action->setCheckable( true );
|
|
||||||
action->setChecked( !isSectionHidden( index ) );
|
|
||||||
m_visActions << action;
|
|
||||||
|
|
||||||
m_sigmap->setMapping( action, index );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TrackHeader::contextMenuEvent( QContextMenuEvent* e )
|
|
||||||
{
|
|
||||||
qDeleteAll( m_visActions );
|
|
||||||
m_visActions.clear();
|
|
||||||
|
|
||||||
for ( int i = 0; i < count(); i++ )
|
|
||||||
addColumnToMenu( i );
|
|
||||||
|
|
||||||
m_menu->popup( e->globalPos() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TrackHeader::onToggleResizeColumns()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TrackHeader::toggleVisibility( int index )
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << index;
|
|
||||||
|
|
||||||
if ( isSectionHidden( index ) )
|
|
||||||
showSection( index );
|
|
||||||
else
|
|
||||||
hideSection( index );
|
|
||||||
}
|
|
||||||
|
@@ -19,16 +19,12 @@
|
|||||||
#ifndef TRACKHEADER_H
|
#ifndef TRACKHEADER_H
|
||||||
#define TRACKHEADER_H
|
#define TRACKHEADER_H
|
||||||
|
|
||||||
#include <QHeaderView>
|
#include "ViewHeader.h"
|
||||||
#include <QSignalMapper>
|
|
||||||
|
|
||||||
#include "source.h"
|
|
||||||
|
|
||||||
#include "dllmacro.h"
|
#include "dllmacro.h"
|
||||||
|
|
||||||
class TrackView;
|
class TrackView;
|
||||||
|
|
||||||
class DLLEXPORT TrackHeader : public QHeaderView
|
class DLLEXPORT TrackHeader : public ViewHeader
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -36,28 +32,8 @@ public:
|
|||||||
explicit TrackHeader( TrackView* parent = 0 );
|
explicit TrackHeader( TrackView* parent = 0 );
|
||||||
~TrackHeader();
|
~TrackHeader();
|
||||||
|
|
||||||
int visibleSectionCount() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void toggleVisibility( int index );
|
|
||||||
bool checkState();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void contextMenuEvent( QContextMenuEvent* e );
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onSectionResized();
|
|
||||||
void onToggleResizeColumns();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void addColumnToMenu( int index );
|
|
||||||
|
|
||||||
TrackView* m_parent;
|
TrackView* m_parent;
|
||||||
|
|
||||||
QMenu* m_menu;
|
|
||||||
QSignalMapper* m_sigmap;
|
|
||||||
QList<QAction*> m_visActions;
|
|
||||||
bool m_init;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -98,6 +98,7 @@ void
|
|||||||
TrackView::setGuid( const QString& guid )
|
TrackView::setGuid( const QString& guid )
|
||||||
{
|
{
|
||||||
m_guid = guid;
|
m_guid = guid;
|
||||||
|
m_header->setGuid( guid );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@@ -18,128 +18,21 @@
|
|||||||
|
|
||||||
#include "treeheader.h"
|
#include "treeheader.h"
|
||||||
|
|
||||||
#include <QContextMenuEvent>
|
|
||||||
#include <QMenu>
|
|
||||||
|
|
||||||
#include "tomahawksettings.h"
|
|
||||||
#include "playlist/treemodel.h"
|
|
||||||
#include "playlist/artistview.h"
|
#include "playlist/artistview.h"
|
||||||
#include "utils/logger.h"
|
#include "utils/logger.h"
|
||||||
|
|
||||||
|
|
||||||
TreeHeader::TreeHeader( ArtistView* parent )
|
TreeHeader::TreeHeader( ArtistView* parent )
|
||||||
: QHeaderView( Qt::Horizontal, parent )
|
: ViewHeader( parent )
|
||||||
, m_parent( parent )
|
, m_parent( parent )
|
||||||
, m_menu( new QMenu( this ) )
|
|
||||||
, m_sigmap( new QSignalMapper( this ) )
|
|
||||||
, m_init( false )
|
|
||||||
{
|
{
|
||||||
setResizeMode( QHeaderView::Interactive );
|
QList< double > columnWeights;
|
||||||
setMinimumSectionSize( 60 );
|
columnWeights << 0.50 << 0.07 << 0.07 << 0.07 << 0.07 << 0.07; // << 0.12;
|
||||||
setDefaultAlignment( Qt::AlignLeft );
|
|
||||||
setMovable( true );
|
|
||||||
setStretchLastSection( true );
|
|
||||||
// setCascadingSectionResizes( true );
|
|
||||||
|
|
||||||
// m_menu->addAction( tr( "Resize columns to fit window" ), this, SLOT( onToggleResizeColumns() ) );
|
setDefaultColumnWeights( columnWeights );
|
||||||
// m_menu->addSeparator();
|
|
||||||
|
|
||||||
connect( this, SIGNAL( sectionResized( int, int, int ) ), SLOT( onSectionResized() ) );
|
|
||||||
connect( m_sigmap, SIGNAL( mapped( int ) ), SLOT( toggleVisibility( int ) ) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
TreeHeader::~TreeHeader()
|
TreeHeader::~TreeHeader()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::onSectionResized()
|
|
||||||
{
|
|
||||||
if ( !m_init )
|
|
||||||
return;
|
|
||||||
|
|
||||||
TomahawkSettings::instance()->setPlaylistColumnSizes( m_parent->guid(), saveState() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
int
|
|
||||||
TreeHeader::visibleSectionCount() const
|
|
||||||
{
|
|
||||||
return count() - hiddenSectionCount();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::checkState()
|
|
||||||
{
|
|
||||||
if ( !count() || m_init )
|
|
||||||
return;
|
|
||||||
|
|
||||||
QByteArray state = TomahawkSettings::instance()->playlistColumnSizes( m_parent->guid() );
|
|
||||||
if ( !state.isEmpty() )
|
|
||||||
restoreState( state );
|
|
||||||
else
|
|
||||||
{
|
|
||||||
QList< double > m_columnWeights;
|
|
||||||
m_columnWeights << 0.50 << 0.07 << 0.07 << 0.07 << 0.07 << 0.07; // << 0.12;
|
|
||||||
|
|
||||||
for ( int i = 0; i < count() - 1; 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 ) ) );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
m_init = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::addColumnToMenu( int index )
|
|
||||||
{
|
|
||||||
QString title = m_parent->model()->headerData( index, Qt::Horizontal, Qt::DisplayRole ).toString();
|
|
||||||
|
|
||||||
QAction* action = m_menu->addAction( title, m_sigmap, SLOT( map() ) );
|
|
||||||
action->setCheckable( true );
|
|
||||||
action->setChecked( !isSectionHidden( index ) );
|
|
||||||
m_visActions << action;
|
|
||||||
|
|
||||||
m_sigmap->setMapping( action, index );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::contextMenuEvent( QContextMenuEvent* e )
|
|
||||||
{
|
|
||||||
qDeleteAll( m_visActions );
|
|
||||||
m_visActions.clear();
|
|
||||||
|
|
||||||
for ( int i = 0; i < count(); i++ )
|
|
||||||
addColumnToMenu( i );
|
|
||||||
|
|
||||||
m_menu->popup( e->globalPos() );
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::onToggleResizeColumns()
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
TreeHeader::toggleVisibility( int index )
|
|
||||||
{
|
|
||||||
qDebug() << Q_FUNC_INFO << index;
|
|
||||||
|
|
||||||
if ( isSectionHidden( index ) )
|
|
||||||
showSection( index );
|
|
||||||
else
|
|
||||||
hideSection( index );
|
|
||||||
}
|
|
||||||
|
@@ -19,14 +19,12 @@
|
|||||||
#ifndef TREEHEADER_H
|
#ifndef TREEHEADER_H
|
||||||
#define TREEHEADER_H
|
#define TREEHEADER_H
|
||||||
|
|
||||||
#include <QHeaderView>
|
#include "ViewHeader.h"
|
||||||
#include <QSignalMapper>
|
|
||||||
|
|
||||||
#include "dllmacro.h"
|
#include "dllmacro.h"
|
||||||
|
|
||||||
class ArtistView;
|
class ArtistView;
|
||||||
|
|
||||||
class DLLEXPORT TreeHeader : public QHeaderView
|
class DLLEXPORT TreeHeader : public ViewHeader
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
@@ -34,28 +32,8 @@ public:
|
|||||||
explicit TreeHeader( ArtistView* parent = 0 );
|
explicit TreeHeader( ArtistView* parent = 0 );
|
||||||
~TreeHeader();
|
~TreeHeader();
|
||||||
|
|
||||||
int visibleSectionCount() const;
|
|
||||||
|
|
||||||
public slots:
|
|
||||||
void toggleVisibility( int index );
|
|
||||||
void checkState();
|
|
||||||
|
|
||||||
protected:
|
|
||||||
void contextMenuEvent( QContextMenuEvent* e );
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void onSectionResized();
|
|
||||||
void onToggleResizeColumns();
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void addColumnToMenu( int index );
|
|
||||||
|
|
||||||
ArtistView* m_parent;
|
ArtistView* m_parent;
|
||||||
|
|
||||||
QMenu* m_menu;
|
|
||||||
QSignalMapper* m_sigmap;
|
|
||||||
QList<QAction*> m_visActions;
|
|
||||||
bool m_init;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@@ -71,9 +71,7 @@ WelcomeWidget::WelcomeWidget( QWidget* parent )
|
|||||||
ui->playlistWidget->setItemDelegate( new PlaylistDelegate() );
|
ui->playlistWidget->setItemDelegate( new PlaylistDelegate() );
|
||||||
ui->playlistWidget->setModel( model );
|
ui->playlistWidget->setModel( model );
|
||||||
ui->playlistWidget->overlay()->resize( 380, 86 );
|
ui->playlistWidget->overlay()->resize( 380, 86 );
|
||||||
#ifdef Q_OS_MAC
|
|
||||||
ui->playlistWidget->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
|
ui->playlistWidget->setVerticalScrollMode( QAbstractItemView::ScrollPerPixel );
|
||||||
#endif
|
|
||||||
|
|
||||||
connect( model, SIGNAL( emptinessChanged( bool) ), this, SLOT( updatePlaylists() ) );
|
connect( model, SIGNAL( emptinessChanged( bool) ), this, SLOT( updatePlaylists() ) );
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user