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_TOOLBAR_H
41#define QDESIGNER_TOOLBAR_H
42
43#include "shared_global_p.h"
44
45#include <QtWidgets/qaction.h>
46#include <QtWidgets/qtoolbutton.h>
47
48#include <QtCore/qlist.h>
49#include <QtCore/qpoint.h>
50
51QT_BEGIN_NAMESPACE
52
53class QDesignerFormWindowInterface;
54class QToolBar;
55class QRect;
56class QAction;
57
58namespace qdesigner_internal {
59
60class PromotionTaskMenu;
61
62// Special event filter for tool bars in designer.
63// Handles drag and drop to and from. Ensures that each
64// child widget is WA_TransparentForMouseEvents to enable drag and drop.
65
66class QDESIGNER_SHARED_EXPORT ToolBarEventFilter : public QObject {
67 Q_OBJECT
68
69public:
70 static void install(QToolBar *tb);
71
72 // Find action by position. Note that QToolBar::actionAt() will
73 // not work as designer sets WA_TransparentForMouseEvents on its tool bar buttons
74 // to be able to drag them. This function will return the dummy
75 // sentinel action when applied to tool bars created by designer if the position matches.
76 static QAction *actionAt(const QToolBar *tb, const QPoint &pos);
77
78 static bool withinHandleArea(const QToolBar *tb, const QPoint &pos);
79 static QRect handleArea(const QToolBar *tb);
80 static QRect freeArea(const QToolBar *tb);
81
82 // Utility to create an action
83 static QAction *createAction(QDesignerFormWindowInterface *fw, const QString &objectName, bool separator);
84
85 bool eventFilter (QObject *watched, QEvent *event) override;
86
87 // Helper for task menu extension
88 QList<QAction *> contextMenuActions(const QPoint &globalPos = QPoint(-1, -1));
89
90 static ToolBarEventFilter *eventFilterOf(const QToolBar *tb);
91
92private slots:
93 void slotRemoveSelectedAction();
94 void slotRemoveToolBar();
95 void slotInsertSeparator();
96
97private:
98 explicit ToolBarEventFilter(QToolBar *tb);
99
100 bool handleContextMenuEvent(QContextMenuEvent * event);
101 bool handleDragEnterMoveEvent(QDragMoveEvent *event);
102 bool handleDragLeaveEvent(QDragLeaveEvent *);
103 bool handleDropEvent(QDropEvent *event);
104 bool handleMousePressEvent(QMouseEvent *event);
105 bool handleMouseReleaseEvent(QMouseEvent *event);
106 bool handleMouseMoveEvent(QMouseEvent *event);
107
108 QDesignerFormWindowInterface *formWindow() const;
109 void adjustDragIndicator(const QPoint &pos);
110 void hideDragIndicator();
111 void startDrag(const QPoint &pos, Qt::KeyboardModifiers modifiers);
112 bool withinHandleArea(const QPoint &pos) const;
113
114 QToolBar *m_toolBar;
115 PromotionTaskMenu *m_promotionTaskMenu;
116 QPoint m_startPosition;
117};
118} // namespace qdesigner_internal
119
120QT_END_NAMESPACE
121
122#endif // QDESIGNER_TOOLBAR_H
123

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