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 | |
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 | |
24 | QLabel *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 | |
44 | void KCalcStatusBar::setBaseIndicatorVisible(bool visible) |
45 | { |
46 | base_indicator_->setVisible(visible); |
47 | } |
48 | |
49 | void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible) |
50 | { |
51 | angle_mode_indicator_->setVisible(visible); |
52 | } |
53 | |
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 | |
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 | |
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 | |
99 | void 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 | |