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