From 5c6f9e625b235765ffedaa8c473d78a973ae5a44 Mon Sep 17 00:00:00 2001 From: Tyler Rhodes Date: Wed, 6 Jul 2011 13:22:42 +0000 Subject: [PATCH] Allow shorter playlist column names if header size is too small. Fixes issue 201. --- src/playlist/playlist.cpp | 14 ++++++++++++++ src/playlist/playlist.h | 2 ++ src/playlist/playlistview.cpp | 16 ++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/src/playlist/playlist.cpp b/src/playlist/playlist.cpp index b84fe65ef..f22589f2c 100644 --- a/src/playlist/playlist.cpp +++ b/src/playlist/playlist.cpp @@ -1108,6 +1108,20 @@ QString Playlist::column_name(Column column) { return ""; } +QString Playlist::abbreviated_column_name(Column column) { + const QString& column_name = Playlist::column_name(column); + switch (column) { + case Column_Disc: + case Column_PlayCount: + case Column_SkipCount: + case Column_Track: + return QString("%1#").arg(column_name[0]); + default: + return column_name; + } + return ""; +} + void Playlist::sort(int column, Qt::SortOrder order) { if (ignore_sorting_) return; diff --git a/src/playlist/playlist.h b/src/playlist/playlist.h index 6081b25f1..74d4cb1c1 100644 --- a/src/playlist/playlist.h +++ b/src/playlist/playlist.h @@ -147,6 +147,8 @@ class Playlist : public QAbstractListModel { PlaylistItemPtr a, PlaylistItemPtr b); static QString column_name(Column column); + static QString abbreviated_column_name(Column column); + static bool column_is_editable(Playlist::Column column); static bool set_column_value(Song& song, Column column, const QVariant& value); diff --git a/src/playlist/playlistview.cpp b/src/playlist/playlistview.cpp index 93cbb1d22..c525dce22 100644 --- a/src/playlist/playlistview.cpp +++ b/src/playlist/playlistview.cpp @@ -49,6 +49,22 @@ PlaylistProxyStyle::PlaylistProxyStyle(QStyle* base) void PlaylistProxyStyle::drawControl( ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget) const { + if (element == CE_Header) { + const QStyleOptionHeader* header_option = qstyleoption_cast(option); + const QRect& rect = header_option->rect; + const QString& text = header_option->text; + const QFontMetrics& font_metrics = header_option->fontMetrics; + + // spaces added to make transition less abrupt + if (rect.width() < font_metrics.width(text + " ")) { + const Playlist::Column column = static_cast(header_option->section); + QStyleOptionHeader new_option(*header_option); + new_option.text = Playlist::abbreviated_column_name(column); + QProxyStyle::drawControl(element, &new_option, painter, widget); + return; + } + } + if (element == CE_ItemViewItem) cleanlooks_->drawControl(element, option, painter, widget); else