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

0001 /*
0002     SPDX-FileCopyrightText: 2001-2013 Evan Teran <evan.teran@gmail.com>
0003     SPDX-FileCopyrightText: 2003-2005 Klaus Niederkrueger <kniederk@math.uni-koeln.de>
0004 
0005     SPDX-License-Identifier: GPL-2.0-or-later
0006 */
0007 
0008 #pragma once
0009 
0010 #include <QMap>
0011 #include <QPushButton>
0012 
0013 // The class KCalcButton is an overridden QPushButton. It offers extra
0014 // functionality e.g. text can be richtext, and the button can be
0015 // told to display its shortcuts in the label, but the most important
0016 // thing is that the button may have several modes with corresponding
0017 // labels and tooltips. When one switches modes, the corresponding
0018 // label is displayed.
0019 
0020 enum ButtonModeFlags { ModeNormal = 0, ModeShift = 1, ModeHyperbolic = 2 };
0021 
0022 // Each kcalc button can be in one of several modes.
0023 // The following class describes label, tooltip etc. for each mode...
0024 class ButtonMode
0025 {
0026 public:
0027     ButtonMode() = default;
0028 
0029     ButtonMode(const QString &label, const QString &tooltip)
0030         : label(label)
0031         , tooltip(tooltip)
0032     {
0033     }
0034 
0035     QString label;
0036     QString tooltip;
0037 };
0038 
0039 class KCalcButton : public QPushButton
0040 {
0041     Q_OBJECT
0042 
0043 public:
0044     explicit KCalcButton(QWidget *parent);
0045     KCalcButton(const QString &label, QWidget *parent, const QString &tooltip = QString());
0046 
0047     void addMode(ButtonModeFlags mode, const QString &label, const QString &tooltip);
0048 
0049     QSize sizeHint() const override;
0050 
0051     void setFont(const QFont &fnt);
0052     void setTextColor(const QColor &color);
0053     void setText(const QString &text); // reimp
0054     void setToolTip(const QString &tip); // reimp
0055 
0056 public Q_SLOTS:
0057     void slotSetMode(ButtonModeFlags mode, bool flag);
0058     void slotSetAccelDisplayMode(bool flag);
0059 
0060 protected:
0061     void paintEvent(QPaintEvent *e) override;
0062 
0063 private:
0064     void calcSizeHint();
0065 
0066 private:
0067     bool show_shortcut_mode_ = false;
0068     ButtonModeFlags mode_flags_;
0069     QMap<ButtonModeFlags, ButtonMode> mode_;
0070     QSize size_;
0071     QColor text_color_;
0072 };
0073