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 #ifndef CONTAINERWIDGER_TASKMENU_H
30 #define CONTAINERWIDGER_TASKMENU_H
31 
32 #include <qdesigner_taskmenu_p.h>
33 #include <shared_enums_p.h>
34 
35 #include <extensionfactory_p.h>
36 
37 #include <QtCore/qpointer.h>
38 
39 QT_BEGIN_NAMESPACE
40 
41 class QDesignerFormWindowInterface;
42 class QDesignerFormEditorInterface;
43 class QDesignerContainerExtension;
44 class QAction;
45 class QMdiArea;
46 class QMenu;
47 class QWizard;
48 
49 namespace qdesigner_internal {
50 
51 class PromotionTaskMenu;
52 
53 // ContainerWidgetTaskMenu: Task menu for containers with extension
54 
55 class ContainerWidgetTaskMenu: public QDesignerTaskMenu
56 {
57     Q_OBJECT
58 public:
59     explicit ContainerWidgetTaskMenu(QWidget *widget, ContainerType type, QObject *parent = nullptr);
60     ~ContainerWidgetTaskMenu() override;
61 
62     QAction *preferredEditAction() const override;
63     QList<QAction*> taskActions() const override;
64 
65 private slots:
66     void removeCurrentPage();
67     void addPage();
68     void addPageAfter();
69 
70 protected:
71     QDesignerContainerExtension *containerExtension() const;
containerActions()72     QList<QAction*> &containerActions() { return m_taskActions; }
73     int pageCount() const;
74 
75 private:
76     QDesignerFormWindowInterface *formWindow() const;
77 
78 private:
79     static QString pageMenuText(ContainerType ct, int index, int count);
80     bool canDeletePage() const;
81 
82     const ContainerType m_type;
83     QWidget *m_containerWidget;
84     QDesignerFormEditorInterface *m_core;
85     PromotionTaskMenu *m_pagePromotionTaskMenu;
86     QAction *m_pageMenuAction;
87     QMenu *m_pageMenu;
88     QList<QAction*> m_taskActions;
89     QAction *m_actionInsertPageAfter;
90     QAction *m_actionInsertPage;
91     QAction *m_actionDeletePage;
92 };
93 
94 // WizardContainerWidgetTaskMenu: Provide next/back since QWizard
95 // has modes in which the "Back" button is not visible.
96 
97 class WizardContainerWidgetTaskMenu : public ContainerWidgetTaskMenu {
98     Q_OBJECT
99 public:
100     explicit WizardContainerWidgetTaskMenu(QWizard *w, QObject *parent = nullptr);
101 
102     QList<QAction*> taskActions() const override;
103 
104 private:
105     QAction *m_nextAction;
106     QAction *m_previousAction;
107 };
108 
109 
110 // MdiContainerWidgetTaskMenu: Provide tile/cascade for MDI containers in addition
111 
112 class MdiContainerWidgetTaskMenu : public ContainerWidgetTaskMenu {
113     Q_OBJECT
114 public:
115     explicit MdiContainerWidgetTaskMenu(QMdiArea *m, QObject *parent = nullptr);
116 
117     QList<QAction*> taskActions() const override;
118 private:
119     void initializeActions();
120 
121     QAction *m_nextAction = nullptr;
122     QAction *m_previousAction = nullptr;
123     QAction *m_tileAction = nullptr;
124     QAction *m_cascadeAction = nullptr;
125 };
126 
127 class ContainerWidgetTaskMenuFactory: public QExtensionFactory
128 {
129     Q_OBJECT
130 public:
131     explicit ContainerWidgetTaskMenuFactory(QDesignerFormEditorInterface *core, QExtensionManager *extensionManager = nullptr);
132 
133 protected:
134     QObject *createExtension(QObject *object, const QString &iid, QObject *parent) const override;
135 
136 private:
137     QDesignerFormEditorInterface *m_core;
138 };
139 
140 }  // namespace qdesigner_internal
141 
142 QT_END_NAMESPACE
143 
144 #endif // CONTAINERWIDGER_TASKMENU_H
145