File indexing completed on 2024-05-12 16:02:12

0001 /* This file is part of the KDE project
0002    SPDX-FileCopyrightText: 2007 C. Boemann <cbo@boemann.dk>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 #ifndef KoSliderCombo_p_h
0007 #define KoSliderCombo_p_h
0008 
0009 #include "KoSliderCombo.h"
0010 
0011 #include <QTimer>
0012 #include <QApplication>
0013 #include <QSize>
0014 #include <QSlider>
0015 #include <QStyle>
0016 #include <QStylePainter>
0017 #include <QStyleOptionSlider>
0018 #include <QLineEdit>
0019 #include <QValidator>
0020 #include <QHBoxLayout>
0021 #include <QFrame>
0022 #include <QMenu>
0023 #include <QMouseEvent>
0024 #include <QDoubleSpinBox>
0025 #include <QDesktopWidget>
0026 
0027 #include <klocalizedstring.h>
0028 #include <WidgetsDebug.h>
0029 
0030 class KoSliderComboContainer : public QMenu
0031 {
0032 public:
0033     KoSliderComboContainer(KoSliderCombo *parent) : QMenu(parent ), m_parent(parent) {}
0034 
0035 protected:
0036     void mousePressEvent(QMouseEvent *e) override;
0037 private:
0038     KoSliderCombo *m_parent;
0039 };
0040 
0041 void KoSliderComboContainer::mousePressEvent(QMouseEvent *e)
0042 {
0043     QStyleOptionComboBox opt;
0044     opt.init(m_parent);
0045     opt.subControls = QStyle::SC_All;
0046     opt.activeSubControls = QStyle::SC_ComboBoxArrow;
0047     QStyle::SubControl sc = style()->hitTestComplexControl(QStyle::CC_ComboBox, &opt,
0048                                                            m_parent->mapFromGlobal(e->globalPos()),
0049                                                            m_parent);
0050     if (sc == QStyle::SC_ComboBoxArrow)
0051         setAttribute(Qt::WA_NoMouseReplay);
0052     QMenu::mousePressEvent(e);
0053 }
0054 
0055 class Q_DECL_HIDDEN KoSliderCombo::KoSliderComboPrivate {
0056 public:
0057     KoSliderCombo *thePublic;
0058     QValidator *m_validator;
0059     QTimer m_timer;
0060     KoSliderComboContainer *container;
0061     QSlider *slider;
0062     QStyle::StateFlag arrowState;
0063     qreal minimum;
0064     qreal maximum;
0065     int decimals;
0066     bool firstShowOfSlider;
0067 
0068     void showPopup();
0069     void hidePopup();
0070 
0071     void sliderValueChanged(int value);
0072     void sliderReleased();
0073     void lineEditFinished();
0074 };
0075 
0076 #endif