1 /*
2     SPDX-FileCopyrightText: 2014 Christoph Feck <christoph@maxiom.de>
3 
4     SPDX-License-Identifier: GPL-2.0-or-later
5 */
6 
7 #include "kcalc_statusbar.h"
8 
9 #include <QLabel>
10 
11 #include <KLocalizedString>
12 
KCalcStatusBar(QWidget * parent)13 KCalcStatusBar::KCalcStatusBar(QWidget *parent)
14     : QStatusBar(parent)
15     , shift_indicator_(
16           addIndicator(QList<QString>() << i18nc("Normal button functions are active", "NORM") << i18nc("Second button functions are active", "SHIFT")))
17     , base_indicator_(addIndicator(QList<QString>() << QStringLiteral("DEC") << QStringLiteral("BIN") << QStringLiteral("OCT") << QStringLiteral("HEX")))
18     , angle_mode_indicator_(addIndicator(QList<QString>() << QStringLiteral("DEG") << QStringLiteral("RAD") << QStringLiteral("GRA")))
19     , memory_indicator_(addIndicator(QList<QString>() << QString() << i18nc("Memory indicator in status bar", "M")))
20 {
21     setSizeGripEnabled(false);
22 }
23 
addIndicator(const QList<QString> & indicatorTexts)24 QLabel *KCalcStatusBar::addIndicator(const QList<QString> &indicatorTexts)
25 {
26     auto l = new QLabel(indicatorTexts.at(0), this);
27 
28     // find widest indicator text
29     QFontMetrics fm(l->font());
30     int maxWidth = 0;
31     for (const QString &text : indicatorTexts) {
32         maxWidth = qMax(maxWidth, fm.boundingRect(text).width());
33     }
34     // add some padding
35     maxWidth += fm.height();
36 
37     l->setFixedSize(maxWidth, fm.height());
38     l->setAlignment(Qt::AlignCenter);
39 
40     addPermanentWidget(l);
41     return l;
42 }
43 
setBaseIndicatorVisible(bool visible)44 void KCalcStatusBar::setBaseIndicatorVisible(bool visible)
45 {
46     base_indicator_->setVisible(visible);
47 }
48 
setAngleModeIndicatorVisible(bool visible)49 void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible)
50 {
51     angle_mode_indicator_->setVisible(visible);
52 }
53 
setShiftIndicator(bool shift)54 void KCalcStatusBar::setShiftIndicator(bool shift)
55 {
56     shift_indicator_->setText(shift ? i18nc("Second button functions are active", "SHIFT") : i18nc("Normal button functions are active", "NORM"));
57 }
58 
setBase(int base)59 void KCalcStatusBar::setBase(int base)
60 {
61     QString text;
62 
63     switch (base) {
64     case 2:
65         text = QStringLiteral("BIN");
66         break;
67     case 8:
68         text = QStringLiteral("OCT");
69         break;
70     case 10:
71     default:
72         text = QStringLiteral("DEC");
73         break;
74     case 16:
75         text = QStringLiteral("HEX");
76         break;
77     }
78     base_indicator_->setText(text);
79 }
80 
setAngleMode(AngleMode mode)81 void KCalcStatusBar::setAngleMode(AngleMode mode)
82 {
83     QString text;
84 
85     switch (mode) {
86     case DegMode:
87         text = QStringLiteral("DEG");
88         break;
89     case RadMode:
90         text = QStringLiteral("RAD");
91         break;
92     case GradMode:
93         text = QStringLiteral("GRA");
94         break;
95     }
96     angle_mode_indicator_->setText(text);
97 }
98 
setMemoryIndicator(bool memory)99 void KCalcStatusBar::setMemoryIndicator(bool memory)
100 {
101     memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") : QString());
102 }
103