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
13KCalcStatusBar::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
24QLabel *KCalcStatusBar::addIndicator(const QList<QString> &indicatorTexts)
25{
26 auto l = new QLabel(indicatorTexts.at(0), this);
27
28 // find the 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
44void KCalcStatusBar::setBaseIndicatorVisible(bool visible)
45{
46 base_indicator_->setVisible(visible);
47}
48
49void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible)
50{
51 angle_mode_indicator_->setVisible(visible);
52}
53
54void 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
59void 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
81void 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
99void KCalcStatusBar::setMemoryIndicator(bool memory)
100{
101 memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") : QString());
102}
103
104#include "moc_kcalc_statusbar.cpp"
105

source code of kcalc/kcalc_statusbar.cpp