File indexing completed on 2024-04-21 05:50:07

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>() << i18nc("Decimal indicator in status bar", "DEC") << i18nc("Binary indicator in status bar", "BIN")
0018                                                     << i18nc("Octal indicator in status bar", "OCT") << i18nc("Hexadecimal indicator in status bar", "HEX")))
0019     , angle_mode_indicator_(addIndicator(QList<QString>() << i18nc("Degree indicator in status bar", "DEG") << i18nc("Radian indicator in status bar", "RAD")
0020                                                           << i18nc("Grad indicator in status bar", "GRA")))
0021     , memory_indicator_(addIndicator(QList<QString>() << QString() << i18nc("Memory indicator in status bar", "M")))
0022 {
0023     setSizeGripEnabled(false);
0024 }
0025 
0026 QLabel *KCalcStatusBar::addIndicator(const QList<QString> &indicatorTexts)
0027 {
0028     auto l = new QLabel(indicatorTexts.at(0), this);
0029 
0030     // find the widest indicator text
0031     QFontMetrics fm(l->font());
0032     int maxWidth = 0;
0033     for (const QString &text : indicatorTexts) {
0034         maxWidth = qMax(maxWidth, fm.boundingRect(text).width());
0035     }
0036     // add some padding
0037     maxWidth += fm.height();
0038 
0039     l->setFixedSize(maxWidth, fm.height());
0040     l->setAlignment(Qt::AlignCenter);
0041 
0042     addPermanentWidget(l);
0043     return l;
0044 }
0045 
0046 void KCalcStatusBar::setBaseIndicatorVisible(bool visible)
0047 {
0048     base_indicator_->setVisible(visible);
0049 }
0050 
0051 void KCalcStatusBar::setAngleModeIndicatorVisible(bool visible)
0052 {
0053     angle_mode_indicator_->setVisible(visible);
0054 }
0055 
0056 void KCalcStatusBar::setShiftIndicator(bool shift)
0057 {
0058     shift_indicator_->setText(shift ? i18nc("Second button functions are active", "SHIFT") : i18nc("Normal button functions are active", "NORM"));
0059 }
0060 
0061 void KCalcStatusBar::setBase(int base)
0062 {
0063     QString text;
0064 
0065     switch (base) {
0066     case 2:
0067         text = i18n("BIN");
0068         break;
0069     case 8:
0070         text = i18n("OCT");
0071         break;
0072     case 10:
0073     default:
0074         text = i18n("DEC");
0075         break;
0076     case 16:
0077         text = i18n("HEX");
0078         break;
0079     }
0080     base_indicator_->setText(text);
0081 }
0082 
0083 void KCalcStatusBar::setAngleMode(AngleMode mode)
0084 {
0085     QString text;
0086 
0087     switch (mode) {
0088     case DegMode:
0089         text = i18n("DEG");
0090         break;
0091     case RadMode:
0092         text = i18n("RAD");
0093         break;
0094     case GradMode:
0095         text = i18n("GRA");
0096         break;
0097     }
0098     angle_mode_indicator_->setText(text);
0099 }
0100 
0101 void KCalcStatusBar::setMemoryIndicator(bool memory)
0102 {
0103     memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") : QString());
0104 }
0105 
0106 #include "moc_kcalc_statusbar.cpp"