Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/desktop.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJocelyn Turcotte <jturcotte@woboq.com>2016-01-13 13:42:49 +0300
committerJocelyn Turcotte <jturcotte@woboq.com>2016-01-13 13:44:36 +0300
commit31da3e98c91facc27bf240b52d2fd26883df6a27 (patch)
treed9666ee0570af41969ed2d6ab6784eb232301ac0 /src/gui/folderstatusdelegate.cpp
parent272755e1ec4856f3baa32bb6269c73feef6cbbd5 (diff)
Fix the folder option button click
The height adjustment done to place the button in the middle of the non-error area was only done for rendering. Make sure that we do the same adjustment when mapping click events as well. Also replace some wrong occurences of aliasMargin*2 for margin.
Diffstat (limited to 'src/gui/folderstatusdelegate.cpp')
-rw-r--r--src/gui/folderstatusdelegate.cpp57
1 files changed, 35 insertions, 22 deletions
diff --git a/src/gui/folderstatusdelegate.cpp b/src/gui/folderstatusdelegate.cpp
index 28e6b6080..45fec4a6d 100644
--- a/src/gui/folderstatusdelegate.cpp
+++ b/src/gui/folderstatusdelegate.cpp
@@ -26,6 +26,14 @@
#include <QPainter>
#include <QApplication>
+inline static QFont makeAliasFont(const QFont &normalFont)
+{
+ QFont aliasFont = normalFont;
+ aliasFont.setBold(true);
+ aliasFont.setPointSize(normalFont.pointSize()+2);
+ return aliasFont;
+}
+
namespace OCC {
FolderStatusDelegate::FolderStatusDelegate() : QStyledItemDelegate() {
@@ -41,14 +49,12 @@ QString FolderStatusDelegate::addFolderText()
QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem & option ,
const QModelIndex & index) const
{
- QFont aliasFont = option.font;
+ QFont aliasFont = makeAliasFont(option.font);
QFont font = option.font;
- aliasFont.setPointSize( font.pointSize() +2 );
QFontMetrics fm(font);
QFontMetrics aliasFm(aliasFont);
- int aliasMargin = aliasFm.height()/2;
int margin = fm.height()/4;
auto classif = static_cast<const FolderStatusModel *>(index.model())->classify(index);
@@ -60,7 +66,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem & option ,
return QApplication::style()->sizeFromContents(
QStyle::CT_PushButton, &opt, fm.size(Qt::TextSingleLine, opt.text)).
expandedTo(QApplication::globalStrut())
- + QSize(0, 2*aliasMargin);
+ + QSize(0, margin);
}
if (classif != FolderStatusModel::RootFolder) {
@@ -68,6 +74,21 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem & option ,
}
// calc height
+ int h = rootFolderHeightWithoutErrors(fm, aliasFm);
+
+ // add some space to show an error condition.
+ if( ! qvariant_cast<QStringList>(index.data(FolderErrorMsg)).isEmpty() ) {
+ QStringList errMsgs = qvariant_cast<QStringList>(index.data(FolderErrorMsg));
+ h += margin + errMsgs.count()*fm.height();
+ }
+
+ return QSize( 0, h);
+}
+
+int FolderStatusDelegate::rootFolderHeightWithoutErrors(const QFontMetrics &fm, const QFontMetrics &aliasFm)
+{
+ const int aliasMargin = aliasFm.height()/2;
+ const int margin = fm.height()/4;
int h = aliasMargin; // margin to top
h += aliasFm.height(); // alias
@@ -76,14 +97,7 @@ QSize FolderStatusDelegate::sizeHint(const QStyleOptionViewItem & option ,
h += margin; // between local and remote path
h += fm.height(); // remote path
h += aliasMargin; // bottom margin
-
- // add some space to show an error condition.
- if( ! qvariant_cast<QStringList>(index.data(FolderErrorMsg)).isEmpty() ) {
- QStringList errMsgs = qvariant_cast<QStringList>(index.data(FolderErrorMsg));
- h += aliasMargin*2 + errMsgs.count()*fm.height();
- }
-
- return QSize( 0, h);
+ return h;
}
void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option,
@@ -93,15 +107,12 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
auto textAlign = Qt::AlignLeft;
- QFont aliasFont = option.font;
+ QFont aliasFont = makeAliasFont(option.font);
QFont subFont = option.font;
QFont errorFont = subFont;
QFont progressFont = subFont;
progressFont.setPointSize( subFont.pointSize()-2);
- //font.setPixelSize(font.weight()+);
- aliasFont.setBold(true);
- aliasFont.setPointSize( subFont.pointSize()+2 );
QFontMetrics subFm( subFont );
QFontMetrics aliasFm( aliasFont );
@@ -332,9 +343,6 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
painter->restore();
{
- QRect rectWithoutErrors = option.rect;
- rectWithoutErrors.setTop(iconRect.top());
- rectWithoutErrors.setBottom(iconRect.bottom());
QStyleOptionToolButton btnOpt;
//btnOpt.text = QLatin1String("...");
btnOpt.state = option.state;
@@ -342,7 +350,7 @@ void FolderStatusDelegate::paint(QPainter *painter, const QStyleOptionViewItem &
btnOpt.state |= QStyle::State_Raised;
btnOpt.arrowType = Qt::NoArrow;
btnOpt.subControls = QStyle::SC_ToolButton;
- btnOpt.rect = optionsButtonRect(rectWithoutErrors, btnOpt.direction);
+ btnOpt.rect = optionsButtonRect(option.rect, btnOpt.direction);
btnOpt.icon = m_moreIcon;
btnOpt.iconSize = btnOpt.rect.size();
QApplication::style()->drawComplexControl( QStyle::CC_ToolButton, &btnOpt, painter );
@@ -355,11 +363,16 @@ bool FolderStatusDelegate::editorEvent ( QEvent * event, QAbstractItemModel * mo
return QStyledItemDelegate::editorEvent(event, model, option, index);
}
-QRect FolderStatusDelegate::optionsButtonRect(const QRect &within, Qt::LayoutDirection direction)
+QRect FolderStatusDelegate::optionsButtonRect(QRect within, Qt::LayoutDirection direction)
{
+ QFont font = QFont();
+ QFont aliasFont = makeAliasFont(font);
+ QFontMetrics fm(font);
+ QFontMetrics aliasFm(aliasFont);
+ within.setHeight(FolderStatusDelegate::rootFolderHeightWithoutErrors(fm, aliasFm));
+
QStyleOptionToolButton opt;
opt.text = QLatin1String("...");
- QFontMetrics fm = QFontMetrics(QFont());
QSize textSize = fm.size(Qt::TextShowMnemonic, opt.text);
opt.rect.setSize(textSize);
QSize size = QApplication::style()->sizeFromContents(QStyle::CT_ToolButton, &opt, textSize).