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