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"