File indexing completed on 2024-04-28 17:05:55

0001 /*
0002     SPDX-FileCopyrightText: 2006 Csaba Karai <krusader@users.sourceforge.net>
0003     SPDX-FileCopyrightText: 2006-2022 Krusader Krew <https://krusader.org>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #include "percentalsplitter.h"
0009 
0010 // QtCore
0011 #include <QList>
0012 // QtGui
0013 #include <QCursor>
0014 #include <QPainter>
0015 // QtWidgets
0016 #include <QApplication>
0017 #include <QFrame>
0018 #include <QLabel>
0019 #include <QToolTip>
0020 
0021 PercentalSplitter::PercentalSplitter(QWidget *parent)
0022     : QSplitter(parent)
0023     , label(nullptr)
0024     , opaqueOldPos(-1)
0025 {
0026     connect(this, &PercentalSplitter::splitterMoved, this, &PercentalSplitter::slotSplitterMoved);
0027 }
0028 
0029 PercentalSplitter::~PercentalSplitter() = default;
0030 
0031 QString PercentalSplitter::toolTipString(int p)
0032 {
0033     QList<int> values = sizes();
0034     if (values.count() != 0) {
0035         int sum = 0;
0036 
0037         QListIterator<int> it(values);
0038         while (it.hasNext())
0039             sum += it.next();
0040 
0041         if (sum == 0)
0042             sum++;
0043 
0044         auto percent = (int)(((double)p / (double)(sum)) * 10000. + 0.5);
0045         return QString("%1.%2%3").arg(percent / 100).arg((percent / 10) % 10).arg(percent % 10) + '%';
0046     }
0047     return QString();
0048 }
0049 
0050 void PercentalSplitter::slotSplitterMoved(int p, int index)
0051 {
0052     handle(index)->setToolTip(toolTipString(p));
0053 
0054     QToolTip::showText(QCursor::pos(), toolTipString(p), this);
0055 }
0056 
0057 void PercentalSplitter::showEvent(QShowEvent *event)
0058 {
0059     QList<int> values = sizes();
0060 
0061     for (int i = 0; i != count(); i++) {
0062         int p = 0;
0063         for (int j = 0; j < i; j++)
0064             p += values[j];
0065 
0066         handle(i)->setToolTip(toolTipString(p));
0067     }
0068 
0069     QSplitter::showEvent(event);
0070 }