From 0ffb2bc6bc4527975ccb827a2d953d80761d7566 Mon Sep 17 00:00:00 2001 From: Stanislav Bas Date: Tue, 16 Jun 2015 14:18:47 +0300 Subject: [PATCH] Proper size hint for EnumDelegate --- apps/opencs/view/world/enumdelegate.cpp | 31 +++++++++++++++++++++++++ apps/opencs/view/world/enumdelegate.hpp | 2 ++ 2 files changed, 33 insertions(+) diff --git a/apps/opencs/view/world/enumdelegate.cpp b/apps/opencs/view/world/enumdelegate.cpp index 4b76bf9d65..b9eca670a0 100644 --- a/apps/opencs/view/world/enumdelegate.cpp +++ b/apps/opencs/view/world/enumdelegate.cpp @@ -115,6 +115,37 @@ void CSVWorld::EnumDelegate::paint (QPainter *painter, const QStyleOptionViewIte } } +QSize CSVWorld::EnumDelegate::sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const +{ + if (index.data().isValid()) + { + int value = index.data().toInt(); + + // Calculate the size hint as for a combobox. + // So, the whole text is visible (isn't elided) when the editor is created + QStyleOptionComboBox itemOption; + itemOption.fontMetrics = option.fontMetrics; + itemOption.palette = option.palette; + itemOption.rect = option.rect; + itemOption.state = option.state; + + std::vector >::const_iterator current = mValues.begin(); + std::vector >::const_iterator end = mValues.end(); + for (; current != end; ++current) + { + if (current->first == value) + { + QSize valueSize = QSize(itemOption.fontMetrics.width(current->second), + itemOption.fontMetrics.height()); + itemOption.currentText = current->second; + return QApplication::style()->sizeFromContents(QStyle::CT_ComboBox, + &itemOption, + valueSize); + } + } + } + return option.rect.size(); +} CSVWorld::EnumDelegateFactory::EnumDelegateFactory() {} diff --git a/apps/opencs/view/world/enumdelegate.hpp b/apps/opencs/view/world/enumdelegate.hpp index 82890c791c..757dbf0b44 100644 --- a/apps/opencs/view/world/enumdelegate.hpp +++ b/apps/opencs/view/world/enumdelegate.hpp @@ -46,6 +46,8 @@ namespace CSVWorld virtual void paint (QPainter *painter, const QStyleOptionViewItem& option, const QModelIndex& index) const; + virtual QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const; + }; class EnumDelegateFactory : public CommandDelegateFactory