File: kcalc_statusbar.cpp

package info (click to toggle)
kcalc 4%3A25.04.0-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 6,740 kB
  • sloc: cpp: 13,605; xml: 699; python: 49; makefile: 6; sh: 4
file content (106 lines) | stat: -rw-r--r-- 3,011 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
/*
    SPDX-FileCopyrightText: 2014 Christoph Feck <christoph@maxiom.de>

    SPDX-License-Identifier: GPL-2.0-or-later
*/

#include "kcalc_statusbar.h"

#include <QLabel>

#include <KLocalizedString>

KCalcStatusBar::KCalcStatusBar(QWidget *parent)
    : QStatusBar(parent)
    , shift_indicator_(
          addIndicator(QList<QString>() << i18nc("Normal button functions are active", "NORM") << i18nc("Second button functions are active", "SHIFT")))
    , base_indicator_(addIndicator(QList<QString>() << i18nc("Decimal indicator in status bar", "DEC") << i18nc("Binary indicator in status bar", "BIN")
                                                    << i18nc("Octal indicator in status bar", "OCT") << i18nc("Hexadecimal indicator in status bar", "HEX")))
    , angle_mode_indicator_(addIndicator(QList<QString>() << i18nc("Degree indicator in status bar", "DEG") << i18nc("Radian indicator in status bar", "RAD")
                                                          << i18nc("Grad indicator in status bar", "GRA")))
    , memory_indicator_(addIndicator(QList<QString>() << QString() << i18nc("Memory indicator in status bar", "M")))
{
    setSizeGripEnabled(false);
}

QLabel *KCalcStatusBar::addIndicator(const QList<QString> &indicatorTexts)
{
    auto l = new QLabel(indicatorTexts.at(0), this);

    // find the widest indicator text
    QFontMetrics fm(l->font());
    int maxWidth = 0;
    for (const QString &text : indicatorTexts) {
        maxWidth = qMax(maxWidth, fm.boundingRect(text).width());
    }
    // add some padding
    maxWidth += fm.height();

    l->setFixedSize(maxWidth, fm.height());
    l->setAlignment(Qt::AlignCenter);

    addPermanentWidget(l);
    return l;
}

void KCalcStatusBar::setBaseIndicatorVisible(bool visible)
{
    base_indicator_->setVisible(visible);
}

void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible)
{
    angle_mode_indicator_->setVisible(visible);
}

void KCalcStatusBar::setShiftIndicator(bool shift)
{
    shift_indicator_->setText(shift ? i18nc("Second button functions are active", "SHIFT") : i18nc("Normal button functions are active", "NORM"));
}

void KCalcStatusBar::setBase(int base)
{
    QString text;

    switch (base) {
    case 2:
        text = i18n("BIN");
        break;
    case 8:
        text = i18n("OCT");
        break;
    case 10:
    default:
        text = i18n("DEC");
        break;
    case 16:
        text = i18n("HEX");
        break;
    }
    base_indicator_->setText(text);
}

void KCalcStatusBar::setAngleMode(AngleMode mode)
{
    QString text;

    switch (mode) {
    case DegMode:
        text = i18n("DEG");
        break;
    case RadMode:
        text = i18n("RAD");
        break;
    case GradMode:
        text = i18n("GRA");
        break;
    }
    angle_mode_indicator_->setText(text);
}

void KCalcStatusBar::setMemoryIndicator(bool memory)
{
    memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") : QString());
}

#include "moc_kcalc_statusbar.cpp"