[prev in list] [next in list] [prev in thread] [next in thread]
List: kde-commits
Subject: [kcalc/frameworks] /: KF5 port: KStatusBar -> KCalcStatusBar
From: Christoph Feck <christoph () maxiom ! de>
Date: 2014-09-30 22:05:35
Message-ID: E1XZ5Y7-0003kV-6j () scm ! kde ! org
[Download RAW message or body]
Git commit 9878605355966cec70ec98e20de1fe3ac2423ffd by Christoph Feck.
Committed on 24/09/2014 at 18:50.
Pushed by cfeck into branch 'frameworks'.
KF5 port: KStatusBar -> KCalcStatusBar
REVIEW: 120356
M +1 -0 CMakeLists.txt
M +15 -44 kcalc.cpp
M +2 -3 kcalc.h
A +121 -0 kcalc_statusbar.cpp [License: GPL (v2+)]
A +60 -0 kcalc_statusbar.h [License: GPL (v2+)]
http://commits.kde.org/kcalc/9878605355966cec70ec98e20de1fe3ac2423ffd
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 471b144..719a815 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -71,6 +71,7 @@ set(kcalc_KDEINIT_SRCS ${libknumber_la_SRCS}
kcalc_const_menu.cpp
kcalc_core.cpp
kcalcdisplay.cpp
+ kcalc_statusbar.cpp
stats.cpp )
ki18n_wrap_ui(kcalc_KDEINIT_SRCS
diff --git a/kcalc.cpp b/kcalc.cpp
index 85b6bc6..873d899 100644
--- a/kcalc.cpp
+++ b/kcalc.cpp
@@ -49,7 +49,6 @@ along with this program. If not, see \
<http://www.gnu.org/licenses/>. #include <kmenubar.h>
#include <knumvalidator.h>
#include <kstandardaction.h>
-#include <kstatusbar.h>
#include <ktoggleaction.h>
#include <ktoolbar.h>
#include <kxmlguifactory.h>
@@ -57,6 +56,7 @@ along with this program. If not, see \
<http://www.gnu.org/licenses/>. #include "kcalc_bitset.h"
#include "kcalc_const_menu.h"
#include "kcalc_settings.h"
+#include "kcalc_statusbar.h"
#include "kcalcdisplay.h"
#include "version.h"
@@ -92,7 +92,7 @@ KCalculator::KCalculator(QWidget *parent) :
// setup interface (order is critical)
setupUi(central);
setupMainActions();
- setupStatusbar();
+ setStatusBar(new KCalcStatusBar(this));
createGUI();
setupKeys();
@@ -242,31 +242,11 @@ KCalcConstMenu *KCalculator::createConstantsMenu() {
//------------------------------------------------------------------------------
// Name: statusBar
-// Desc: temporary KF5 porting helper
+// Desc: returns a pointer to the status bar
//------------------------------------------------------------------------------
-KStatusBar *KCalculator::statusBar() {
- return static_cast<KStatusBar *>(KXmlGuiWindow::statusBar());
-}
-
-//------------------------------------------------------------------------------
-// Name: setupStatusbar
-// Desc: sets up the status bar with default text
-//------------------------------------------------------------------------------
-void KCalculator::setupStatusbar() {
- setStatusBar(new KStatusBar(this));
-
- // Status bar contents
- statusBar()->insertPermanentFixedItem(QLatin1String(" NORM "), ShiftField);
- statusBar()->setItemAlignment(ShiftField, Qt::AlignCenter);
-
- statusBar()->insertPermanentFixedItem(QLatin1String(" HEX "), BaseField);
- statusBar()->setItemAlignment(BaseField, Qt::AlignCenter);
-
- statusBar()->insertPermanentFixedItem(QLatin1String(" DEG "), AngleField);
- statusBar()->setItemAlignment(AngleField, Qt::AlignCenter);
+KCalcStatusBar *KCalculator::statusBar() {
- statusBar()->insertPermanentFixedItem(QLatin1String(" \xa0\xa0 "), MemField); // \
nbsp
- statusBar()->setItemAlignment(MemField, Qt::AlignCenter);
+ return static_cast<KCalcStatusBar *>(KXmlGuiWindow::statusBar());
}
//------------------------------------------------------------------------------
@@ -766,29 +746,25 @@ void KCalculator::slotBaseSelected(int base) {
int current_base;
// set display & statusbar (if item exist in statusbar)
+ statusBar()->setBase(base);
switch (base) {
case BinMode:
current_base = calc_display->setBase(NumBase(2));
- statusBar()->changeItem(QLatin1String("BIN"), BaseField);
calc_display->setStatusText(BaseField, QLatin1String("Bin"));
break;
case OctMode:
current_base = calc_display->setBase(NumBase(8));
- statusBar()->changeItem(QLatin1String("OCT"), BaseField);
calc_display->setStatusText(BaseField, QLatin1String("Oct"));
break;
case DecMode:
current_base = calc_display->setBase(NumBase(10));
- statusBar()->changeItem(QLatin1String("DEC"), BaseField);
calc_display->setStatusText(BaseField, QLatin1String("Dec"));
break;
case HexMode:
current_base = calc_display->setBase(NumBase(16));
- statusBar()->changeItem(QLatin1String("HEX"), BaseField);
calc_display->setStatusText(BaseField, QLatin1String("Hex"));
break;
default:
- statusBar()->changeItem(QLatin1String("Error"), BaseField);
calc_display->setStatusText(BaseField, QLatin1String("Error"));
return;
}
@@ -872,17 +848,15 @@ void KCalculator::slotAngleSelected(int mode) {
angle_mode_ = mode;
+ statusBar()->setAngleMode(KCalcStatusBar::AngleMode(mode));
switch (mode) {
case DegMode:
- statusBar()->changeItem(QLatin1String("DEG"), AngleField);
calc_display->setStatusText(AngleField, QLatin1String("Deg"));
break;
case RadMode:
- statusBar()->changeItem(QLatin1String("RAD"), AngleField);
calc_display->setStatusText(AngleField, QLatin1String("Rad"));
break;
case GradMode:
- statusBar()->changeItem(QLatin1String("GRA"), AngleField);
calc_display->setStatusText(AngleField, QLatin1String("Gra"));
break;
default: // we shouldn't ever end up here
@@ -910,11 +884,10 @@ void KCalculator::slotShifttoggled(bool flag) {
emit switchMode(ModeShift, flag);
+ statusBar()->setShiftIndicator(shift_mode_);
if (shift_mode_) {
- statusBar()->changeItem(i18nc("Second button functions are active", "SHIFT"), \
ShiftField); calc_display->setStatusText(ShiftField, i18n("Shift"));
} else {
- statusBar()->changeItem(i18nc("Normal button functions are active", "NORM"), \
ShiftField); calc_display->setStatusText(ShiftField, QString());
}
}
@@ -954,7 +927,7 @@ void KCalculator::slotMemStoreclicked() {
memory_num_ = calc_display->getAmount();
calc_display->setStatusText(MemField, QLatin1String("M"));
- statusBar()->changeItem(QLatin1String("M"), MemField);
+ statusBar()->setMemoryIndicator(true);
pbMemRecall->setEnabled(true);
}
@@ -1042,7 +1015,7 @@ void KCalculator::slotMemPlusMinusclicked() {
}
pbShift->setChecked(false);
- statusBar()->changeItem(i18n("M"), MemField);
+ statusBar()->setMemoryIndicator(true);
calc_display->setStatusText(MemField, i18n("M"));
pbMemRecall->setEnabled(true);
}
@@ -1264,7 +1237,7 @@ void KCalculator::slotPowerclicked() {
void KCalculator::slotMemClearclicked() {
memory_num_ = KNumber::Zero;
- statusBar()->changeItem(QLatin1String(" \xa0\xa0 "), MemField); // nbsp
+ statusBar()->setMemoryIndicator(false);
calc_display->setStatusText(MemField, QString());
pbMemRecall->setDisabled(true);
}
@@ -1929,7 +1902,7 @@ void KCalculator::showScienceButtons(bool toggled) {
}
setAngle();
- statusBar()->setItemFixed(AngleField, -1);
+ statusBar()->setAngleModeIndicatorVisible(true);
} else {
foreach(QAbstractButton* btn, scientific_buttons_) {
btn->hide();
@@ -1939,8 +1912,7 @@ void KCalculator::showScienceButtons(bool toggled) {
btn->hide();
}
- statusBar()->changeItem(QString(), AngleField);
- statusBar()->setItemFixed(AngleField, 0);
+ statusBar()->setAngleModeIndicatorVisible(false);
calc_display->setStatusText(AngleField, QString());
}
}
@@ -1961,7 +1933,7 @@ void KCalculator::showLogicButtons(bool toggled) {
}
setBase();
- statusBar()->setItemFixed(BaseField, -1);
+ statusBar()->setBaseIndicatorVisible(true);
foreach(QAbstractButton *btn, base_choose_group_->buttons()) {
btn->show();
@@ -1986,8 +1958,7 @@ void KCalculator::showLogicButtons(bool toggled) {
btn->hide();
}
- statusBar()->changeItem(QString(), BaseField);
- statusBar()->setItemFixed(BaseField, 0);
+ statusBar()->setBaseIndicatorVisible(false);
calc_display->setStatusText(BaseField, QString());
for (int i = 10; i < 16; ++i) {
(num_button_group_->button(i))->hide();
diff --git a/kcalc.h b/kcalc.h
index 0f04fa8..1e6dc28 100644
--- a/kcalc.h
+++ b/kcalc.h
@@ -26,7 +26,7 @@ class Constants;
class QButtonGroup;
class KToggleAction;
class KCalcConstMenu;
-class KStatusBar;
+class KCalcStatusBar;
/*
Kcalc basically consist of a class for the GUI (here), a class for
@@ -118,7 +118,6 @@ private:
virtual bool eventFilter(QObject *o, QEvent *e);
void updateGeometry();
void setupMainActions();
- void setupStatusbar();
void setupKeys();
void setupNumberKeys();
void setupRightKeypad();
@@ -135,7 +134,7 @@ private:
void setBase();
void updateDisplay(UpdateFlags flags);
- KStatusBar *statusBar();
+ KCalcStatusBar *statusBar();
// button sets
void showMemButtons(bool toggled);
diff --git a/kcalc_statusbar.cpp b/kcalc_statusbar.cpp
new file mode 100644
index 0000000..7bfea33
--- /dev/null
+++ b/kcalc_statusbar.cpp
@@ -0,0 +1,121 @@
+/*
+ * Copyright (c) 2014 Christoph Feck <christoph@maxiom.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#include "kcalc_statusbar.h"
+
+#include <QLabel>
+
+#include <KLocalizedString>
+
+#include "kcalc_statusbar.moc"
+
+KCalcStatusBar::KCalcStatusBar(QWidget *parent)
+ : QStatusBar(parent)
+{
+ setSizeGripEnabled(false);
+
+ shift_indicator_ = addIndicator(QList<QString>() << i18nc("Normal button \
functions are active", "NORM") << i18nc("Second button functions are active", \
"SHIFT")); + base_indicator_ = addIndicator(QList<QString>() << "DEC" << "BIN" << \
"OCT" << "HEX"); + angle_mode_indicator_ = addIndicator(QList<QString>() << "DEG" \
<< "RAD" << "GRA"); + memory_indicator_ = addIndicator(QList<QString>() << \
QString() << i18nc("Memory indicator in status bar", "M")); +}
+
+KCalcStatusBar::~KCalcStatusBar()
+{
+}
+
+QLabel *KCalcStatusBar::addIndicator(QList<QString> indicatorTexts)
+{
+ QLabel *l = new QLabel(indicatorTexts.at(0), this);
+
+ // find widest indicator text
+ QFontMetrics fm(l->font());
+ int maxWidth = 0;
+ foreach (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 = "BIN";
+ break;
+ case 8:
+ text = "OCT";
+ break;
+ case 10:
+ default:
+ text = "DEC";
+ break;
+ case 16:
+ text = "HEX";
+ break;
+ }
+ base_indicator_->setText(text);
+}
+
+void KCalcStatusBar::setAngleMode(AngleMode mode)
+{
+ QString text;
+
+ switch (mode) {
+ case DegMode:
+ text = "DEG";
+ break;
+ case RadMode:
+ text = "RAD";
+ break;
+ case GradMode:
+ text = "GRA";
+ break;
+ }
+ angle_mode_indicator_->setText(text);
+}
+
+void KCalcStatusBar::setMemoryIndicator(bool memory)
+{
+ memory_indicator_->setText(memory ? i18nc("Memory indicator in status bar", "M") \
: QString()); +}
+
diff --git a/kcalc_statusbar.h b/kcalc_statusbar.h
new file mode 100644
index 0000000..63c3425
--- /dev/null
+++ b/kcalc_statusbar.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright (c) 2014 Christoph Feck <christoph@maxiom.de>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ */
+
+#ifndef KCALC_STATUSBAR_H_
+#define KCALC_STATUSBAR_H_
+
+#include <QStatusBar>
+
+class QLabel;
+
+class KCalcStatusBar : public QStatusBar
+{
+ Q_OBJECT
+
+public:
+ KCalcStatusBar(QWidget *parent = 0);
+ ~KCalcStatusBar();
+
+public:
+ enum AngleMode {
+ DegMode,
+ RadMode,
+ GradMode
+ };
+
+public:
+ void setBaseIndicatorVisible(bool visible);
+ void setAngleModeIndicatorVisible(bool visible);
+
+ void setShiftIndicator(bool shift);
+ void setBase(int base);
+ void setAngleMode(AngleMode mode);
+ void setMemoryIndicator(bool memory);
+
+private:
+ QLabel *addIndicator(QList<QString> indicatorTexts);
+
+private:
+ QLabel *shift_indicator_;
+ QLabel *base_indicator_;
+ QLabel *angle_mode_indicator_;
+ QLabel *memory_indicator_;
+};
+
+#endif
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic