File: slidecontainer.h

package info (click to toggle)
ktextaddons 1.9.1-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 17,856 kB
  • sloc: cpp: 62,045; ansic: 6,520; xml: 2,630; sh: 11; makefile: 7
file content (93 lines) | stat: -rw-r--r-- 2,092 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
/*
Gwenview: an image viewer
SPDX-FileCopyrightText: 2007 Aurélien Gâteau <agateau@kde.org>

SPDX-License-Identifier: GPL-2.0-or-later

*/
#pragma once

// Qt
#include <QFrame>
#include <QPointer>

#include "textaddonswidgets_export.h"

class QPropertyAnimation;

namespace TextAddonsWidgets
{
/*!
 * \class TextAddonsWidgets::SlideContainer
 * \inmodule TextAddonsWidgets
 * \inheaderfile TextAddonsWidgets/SlideContainer
 *
 * This widget is design to contain one child widget, the "content" widget.
 * It will start hidden by default. Calling slideIn() will slide in the content
 * widget from the top border. Calling slideOut() will slide it out.
 */
class TEXTADDONSWIDGETS_EXPORT SlideContainer : public QFrame
{
    Q_OBJECT
    Q_PROPERTY(int slideHeight READ slideHeight WRITE setSlideHeight)
public:
    /*!
     */
    explicit SlideContainer(QWidget *parent = nullptr);

    /*!
     * Returns the content widget
     */
    QWidget *content() const;

    /*!
     * Defines the content widget
     */
    void setContent(QWidget *content);

    /*!
     */
    QSize sizeHint() const override;
    /*!
     */
    QSize minimumSizeHint() const override;

    /*!
     */
    [[nodiscard]] int slideHeight() const;

    /*!
     */
    Q_INVOKABLE void setSlideHeight(int height);

public Q_SLOTS:
    /*!
     * Slides the content widget in.
     * Calling it multiple times won't cause the animation to be replayed.
     */
    void slideIn();

    /*!
     * Slides the content widget out.
     * Calling it multiple times won't cause the animation to be replayed.
     */
    void slideOut();

Q_SIGNALS:
    void slidedIn();
    void slidedOut();

protected:
    void resizeEvent(QResizeEvent *) override;
    bool eventFilter(QObject *, QEvent *event) override;

private:
    TEXTADDONSWIDGETS_NO_EXPORT void slotAnimFinished();
    TEXTADDONSWIDGETS_NO_EXPORT void adjustContentGeometry();

    TEXTADDONSWIDGETS_NO_EXPORT void animTo(int height);
    QPointer<QWidget> mContent;
    QPointer<QPropertyAnimation> mAnim;
    bool mSlidingOut = false;
};
} /* namespace */