1 /* 2 This file is part of the KDE project 3 SPDX-FileCopyrightText: 2015 David Edmundson <davidedmundson@kde.org> 4 5 SPDX-License-Identifier: LGPL-2.0-or-later 6 */ 7 8 #ifndef KCOLLAPSIBLEGROUPBOX_H 9 #define KCOLLAPSIBLEGROUPBOX_H 10 11 #include <QWidget> 12 #include <kwidgetsaddons_export.h> 13 #include <memory> 14 15 /** 16 * @class KCollapsibleGroupBox kcollapsiblegroupbox.h KCollapsibleGroupBox 17 * 18 * A groupbox featuring a clickable header and arrow indicator that can be 19 * expanded and collapsed to reveal the contents. 20 * 21 * When expanded, the widget will resize to fit the sizeHint of child items. 22 * 23 * @since 5.16 24 */ 25 class KWIDGETSADDONS_EXPORT KCollapsibleGroupBox : public QWidget 26 { 27 Q_OBJECT 28 Q_PROPERTY(QString title READ title WRITE setTitle NOTIFY titleChanged) 29 Q_PROPERTY(bool expanded READ isExpanded WRITE setExpanded NOTIFY expandedChanged) 30 31 public: 32 explicit KCollapsibleGroupBox(QWidget *parent = nullptr); 33 ~KCollapsibleGroupBox() override; 34 35 /** 36 * Set the title that will be permanently shown at the top of the collapsing box 37 * Mnemonics are supported 38 */ 39 void setTitle(const QString &title); 40 41 /** 42 * The title 43 */ 44 QString title() const; 45 46 /** 47 * Set whether contents are shown 48 * 49 * The default is false until the user clicks 50 */ 51 void setExpanded(bool expanded); 52 53 /** 54 * Whether contents are shown 55 * During animations, this will reflect the target state at the end of the animation 56 */ 57 bool isExpanded() const; 58 59 QSize sizeHint() const override; 60 QSize minimumSizeHint() const override; 61 62 public Q_SLOTS: 63 /** 64 * Expands if collapsed and vice versa 65 */ 66 void toggle(); 67 68 /** 69 * Equivalent to setExpanded(true) 70 */ 71 void expand(); 72 73 /** 74 * Equivalent to setExpanded(false) 75 */ 76 void collapse(); 77 78 Q_SIGNALS: 79 /** 80 * Emitted when the title is changed 81 */ 82 void titleChanged(); 83 84 /** 85 * Emitted when the widget expands or collapsed 86 */ 87 void expandedChanged(); 88 89 protected: 90 void paintEvent(QPaintEvent *) override; 91 92 bool event(QEvent *) override; 93 void mousePressEvent(QMouseEvent *) override; 94 void mouseMoveEvent(QMouseEvent *) override; 95 void leaveEvent(QEvent *) override; 96 void keyPressEvent(QKeyEvent *) override; 97 void resizeEvent(QResizeEvent *) override; 98 99 private Q_SLOTS: 100 void overrideFocusPolicyOf(QWidget *widget); 101 102 private: 103 std::unique_ptr<class KCollapsibleGroupBoxPrivate> const d; 104 105 Q_DISABLE_COPY(KCollapsibleGroupBox) 106 }; 107 108 #endif 109