File indexing completed on 2024-04-28 09:45:27

0001 /*
0002     SPDX-FileCopyrightText: 2014 Christoph Feck <christoph@maxiom.de>
0003 
0004     SPDX-License-Identifier: GPL-2.0-or-later
0005 */
0006 
0007 #include "kcalc_statusbar.h"
0008 
0009 #include <QLabel>
0010 
0011 #include <KLocalizedString>
0012 
0013 KCalcStatusBar::KCalcStatusBar(QWidget *parent)
0014     : QStatusBar(parent)
0015     , shift_indicator_(
0016           addIndicator(QList<QString>() << i18nc("Normal button functions are active", "NORM") << i18nc("Second button functions are active", "SHIFT")))
0017     , base_indicator_(addIndicator(QList<QString>() << QStringLiteral("DEC") << QStringLiteral("BIN") << QStringLiteral("OCT") << QStringLiteral("HEX")))
0018     , angle_mode_indicator_(addIndicator(QList<QString>() << QStringLiteral("DEG") << QStringLiteral("RAD") << QStringLiteral("GRA")))
0019     , memory_indicator_(addIndicator(QList<QString>() << QString() << i18nc("Memory indicator in status bar", "M")))
0020 {
0021     setSizeGripEnabled(false);
0022 }
0023 
0024 QLabel *KCalcStatusBar::addIndicator(const QList<QString> &indicatorTexts)
0025 {
0026     auto l = new QLabel(indicatorTexts.at(0), this);
0027 
0028     // find the widest indicator text
0029     QFontMetrics fm(l->font());
0030     int maxWidth = 0;
0031     for (const QString &text : indicatorTexts) {
0032         maxWidth = qMax(maxWidth, fm.boundingRect(text).width());
0033     }
0034     // add some padding
0035     maxWidth += fm.height();
0036 
0037     l->setFixedSize(maxWidth, fm.height());
0038     l->setAlignment(Qt::AlignCenter);
0039 
0040     addPermanentWidget(l);
0041     return l;
0042 }
0043 
0044 void KCalcStatusBar::setBaseIndicatorVisible(bool visible)
0045 {
0046     base_indicator_->setVisible(visible);
0047 }
0048 
0049 void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible)
0050 {
0051     angle_mode_indicator_->setVisible(visible);
0052 }
0053 
0054 void KCalcStatusBar::setShiftIndicator(bool shift)
0055 {
0056     shift_indicator_->setText(shift ? i18nc("Second button functions are active", "SHIFT") : i18nc("Normal button functions are active", "NORM"));
0057 }
0058 
0059 void KCalcStatusBar::setBase(int base)
0060 {
0061     QString text;
0062 
0063     switch (base) {
0064     case 2:
0065         text = QStringLiteral("BIN");
0066         break;
0067     case 8:
0068         text = QStringLiteral("OCT");
0069         break;
0070     case 10:
0071     default:
0072         text = QStringLiteral("DEC");
0073         break;
0074     case 16:
0075         text = QStringLiteral("HEX");
0076         break;
0077     }
0078     base_indicator_->setText(text);
0079 }
0080 
0081 void KCalcStatusBar::setAngleMode(AngleMode mode)
0082 {
0083     QString text;
0084 
0085     switch (mode) {
0086     case DegMode:
0087         text = QStringLiteral("DEG");
0088         break;
0089     case RadMode:
0090         text = QStringLiteral("RAD");
0091         break;
0092     case GradMode:
0093         text = QStringLiteral("GRA");
0094         break;
0095     }
0096     angle_mode_indicator_->setText(text);
0097 }
0098 
0099 void KCalcStatusBar::setMemoryIndicator(bool memory)
0100 {
0101     memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") : QString());
0102 }
0103 
0104 #include "moc_kcalc_statusbar.cpp"