Remove status colun, and draw status icon in first column.

This commit is contained in:
craig.p.drummond
2014-01-29 19:25:30 +00:00
committed by craig.p.drummond
parent ff78b7fcd6
commit 6c94add93c
4 changed files with 86 additions and 36 deletions

View File

@@ -32,6 +32,7 @@
#include "spinner.h"
#include "messageoverlay.h"
#include "stretchheaderview.h"
#include "basicitemdelegate.h"
#include <QHeaderView>
#include <QMenu>
#include <QAction>
@@ -43,6 +44,68 @@
// Exported by QtGui
void qt_blurImage(QPainter *p, QImage &blurImage, qreal radius, bool quality, bool alphaOnly, int transposed = 0);
class PlayQueueTreeViewItemDelegate : public QStyledItemDelegate
{
public:
PlayQueueTreeViewItemDelegate(QObject *p) : QStyledItemDelegate(p) { }
virtual ~PlayQueueTreeViewItemDelegate() { }
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
{
if (!index.isValid()) {
return;
}
bool selected=option.state&QStyle::State_Selected;
bool active=option.state&QStyle::State_Active;
QColor col(option.palette.color(active ? QPalette::Active : QPalette::Inactive,
selected ? QPalette::HighlightedText : QPalette::Text));
if (4==option.version) {
const QStyleOptionViewItemV4 &v4=(QStyleOptionViewItemV4 &)option;
QIcon icon;
if (QStyleOptionViewItemV4::Beginning==v4.viewItemPosition) {
icon=index.data(PlayQueueView::Role_Decoration).value<QIcon>();
}
QSize decorSize;
if (!icon.isNull()) {
decorSize = icon.actualSize(option.decorationSize);
}
if (decorSize.isEmpty()) {
QStyledItemDelegate::paint(painter, option, index);
} else {
QStyleOptionViewItemV4 opt=v4;
int width=decorSize.width()+(Utils::isHighDpi() ? 8 : 4);
opt.rect.adjust(width, 0, 0, 0);
QStyledItemDelegate::paint(painter, opt, index);
QPixmap pix=icon.pixmap(decorSize);
painter->drawPixmap(option.rect.x()+((width-pix.width())/2), option.rect.y()+((option.rect.height()-pix.height())/2), pix);
}
switch (v4.viewItemPosition) {
case QStyleOptionViewItemV4::Beginning:
BasicItemDelegate::drawLine(painter, option.rect, col, true, false);
break;
case QStyleOptionViewItemV4::Middle:
BasicItemDelegate::drawLine(painter, option.rect, col, false, false);
break;
case QStyleOptionViewItemV4::End:
BasicItemDelegate::drawLine(painter, option.rect, col, false, true);
break;
case QStyleOptionViewItemV4::Invalid:
case QStyleOptionViewItemV4::OnlyOne:
BasicItemDelegate::drawLine(painter, option.rect, col, true, true);
}
} else {
QStyledItemDelegate::paint(painter, option, index);
BasicItemDelegate::drawLine(painter, option.rect, col, false, false);
}
}
};
PlayQueueTreeView::PlayQueueTreeView(PlayQueueView *parent)
: TreeView(parent, true)
, view(parent)
@@ -59,10 +122,8 @@ PlayQueueTreeView::PlayQueueTreeView(PlayQueueView *parent)
setDropIndicatorShown(true);
setRootIsDecorated(false);
setUniformRowHeights(true);
setUseSimpleDelegate();
StretchHeaderView *hdr=new StretchHeaderView(Qt::Horizontal, this);
hdr->setMinimumSectionSize(fontMetrics().width("999"));
setHeader(hdr);
setItemDelegate(new PlayQueueTreeViewItemDelegate(this));
setHeader(new StretchHeaderView(Qt::Horizontal, this));
}
PlayQueueTreeView::~PlayQueueTreeView()
@@ -101,12 +162,11 @@ void PlayQueueTreeView::initHeader()
if (!menu) {
hdr->SetStretchEnabled(true);
hdr->setContextMenuPolicy(Qt::CustomContextMenu);
hdr->SetColumnWidth(PlayQueueModel::COL_STATUS, 0.025);
hdr->SetColumnWidth(PlayQueueModel::COL_TRACK, 0.025);
hdr->SetColumnWidth(PlayQueueModel::COL_TRACK, 0.075);
hdr->SetColumnWidth(PlayQueueModel::COL_DISC, 0.03);
hdr->SetColumnWidth(PlayQueueModel::COL_TITLE, 0.305);
hdr->SetColumnWidth(PlayQueueModel::COL_ARTIST, 0.2);
hdr->SetColumnWidth(PlayQueueModel::COL_ALBUM, 0.2);
hdr->SetColumnWidth(PlayQueueModel::COL_TITLE, 0.3);
hdr->SetColumnWidth(PlayQueueModel::COL_ARTIST, 0.27);
hdr->SetColumnWidth(PlayQueueModel::COL_ALBUM, 0.27);
hdr->SetColumnWidth(PlayQueueModel::COL_LENGTH, 0.05);
hdr->SetColumnWidth(PlayQueueModel::COL_YEAR, 0.05);
hdr->SetColumnWidth(PlayQueueModel::COL_GENRE, 0.1);
@@ -138,10 +198,7 @@ void PlayQueueTreeView::initHeader()
<< PlayQueueModel::COL_DISC << PlayQueueModel::COL_YEAR << PlayQueueModel::COL_GENRE
<< PlayQueueModel::COL_PRIO;
foreach (int col, hideAble) {
QString text=PlayQueueModel::COL_TRACK==col
? i18n("Track")
: PlayQueueModel::headerText(col);
QAction *act=new QAction(text, menu);
QAction *act=new QAction(PlayQueueModel::headerText(col), menu);
act->setCheckable(true);
act->setChecked(!hdr->isSectionHidden(col));
menu->addAction(act);