1/****************************************************************************
2**
3** Copyright (C) 2016 The Qt Company Ltd.
4** Contact: https://www.qt.io/licensing/
5**
6** This file is part of the Qt Designer of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:GPL-EXCEPT$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see https://www.qt.io/terms-conditions. For further
15** information use the contact form at https://www.qt.io/contact-us.
16**
17** GNU General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU
19** General Public License version 3 as published by the Free Software
20** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
21** included in the packaging of this file. Please review the following
22** information to ensure the GNU General Public License requirements will
23** be met: https://www.gnu.org/licenses/gpl-3.0.html.
24**
25** $QT_END_LICENSE$
26**
27****************************************************************************/
28
29//
30// W A R N I N G
31// -------------
32//
33// This file is not part of the Qt API. It exists for the convenience
34// of Qt Designer. This header
35// file may change from version to version without notice, or even be removed.
36//
37// We mean it.
38//
39
40#ifndef QDESIGNER_STACKEDBOX_H
41#define QDESIGNER_STACKEDBOX_H
42
43#include "shared_global_p.h"
44#include "qdesigner_propertysheet_p.h"
45
46QT_BEGIN_NAMESPACE
47
48class QStackedWidget;
49class QWidget;
50class QAction;
51class QMenu;
52class QToolButton;
53
54namespace qdesigner_internal {
55 class PromotionTaskMenu;
56}
57
58// Event filter to be installed on a QStackedWidget in preview mode.
59// Create two buttons to switch pages.
60
61class QDESIGNER_SHARED_EXPORT QStackedWidgetPreviewEventFilter : public QObject
62{
63 Q_OBJECT
64public:
65 explicit QStackedWidgetPreviewEventFilter(QStackedWidget *parent);
66
67 // Install helper on QStackedWidget
68 static void install(QStackedWidget *stackedWidget);
69 bool eventFilter(QObject *watched, QEvent *event) override;
70
71 void setButtonToolTipEnabled(bool v) { m_buttonToolTipEnabled = v; }
72 bool buttonToolTipEnabled() const { return m_buttonToolTipEnabled; }
73
74public slots:
75 void updateButtons();
76 void prevPage();
77 void nextPage();
78
79protected:
80 QStackedWidget *stackedWidget() const { return m_stackedWidget; }
81 virtual void gotoPage(int page);
82
83private:
84 void updateButtonToolTip(QObject *o);
85
86 bool m_buttonToolTipEnabled;
87 QStackedWidget *m_stackedWidget;
88 QToolButton *m_prev;
89 QToolButton *m_next;
90};
91
92// Event filter to be installed on a QStackedWidget in editing mode.
93// In addition to the browse buttons, handles context menu and everything
94
95class QDESIGNER_SHARED_EXPORT QStackedWidgetEventFilter : public QStackedWidgetPreviewEventFilter
96{
97 Q_OBJECT
98public:
99 explicit QStackedWidgetEventFilter(QStackedWidget *parent);
100
101 // Install helper on QStackedWidget
102 static void install(QStackedWidget *stackedWidget);
103 static QStackedWidgetEventFilter *eventFilterOf(const QStackedWidget *stackedWidget);
104 // Convenience to add a menu on a tackedWidget
105 static QMenu *addStackedWidgetContextMenuActions(const QStackedWidget *stackedWidget, QMenu *popup);
106
107 // Add context menu and return page submenu or 0.
108 QMenu *addContextMenuActions(QMenu *popup);
109
110private slots:
111 void removeCurrentPage();
112 void addPage();
113 void addPageAfter();
114 void changeOrder();
115
116protected:
117 void gotoPage(int page) override;
118
119private:
120 QAction *m_actionPreviousPage;
121 QAction *m_actionNextPage;
122 QAction *m_actionDeletePage;
123 QAction *m_actionInsertPage;
124 QAction *m_actionInsertPageAfter;
125 QAction *m_actionChangePageOrder;
126 qdesigner_internal::PromotionTaskMenu* m_pagePromotionTaskMenu;
127};
128
129// PropertySheet to handle the "currentPageName" property
130class QDESIGNER_SHARED_EXPORT QStackedWidgetPropertySheet : public QDesignerPropertySheet {
131public:
132 explicit QStackedWidgetPropertySheet(QStackedWidget *object, QObject *parent = nullptr);
133
134 void setProperty(int index, const QVariant &value) override;
135 QVariant property(int index) const override;
136 bool reset(int index) override;
137 bool isEnabled(int index) const override;
138
139 // Check whether the property is to be saved. Returns false for the page
140 // properties (as the property sheet has no concept of 'stored')
141 static bool checkProperty(const QString &propertyName);
142
143private:
144 QStackedWidget *m_stackedWidget;
145};
146
147using QStackedWidgetPropertySheetFactory = QDesignerPropertySheetFactory<QStackedWidget, QStackedWidgetPropertySheet>;
148
149QT_END_NAMESPACE
150
151#endif // QDESIGNER_STACKEDBOX_H
152

source code of qttools/src/designer/src/lib/shared/qdesigner_stackedbox_p.h