8#include <QtDesigner/abstractformeditor.h>
9#include <QtDesigner/abstractwidgetfactory.h>
10#include <QtDesigner/abstractwidgetbox.h>
12#include <layoutinfo_p.h>
13#include <qdesigner_dnditem_p.h>
14#include <qdesigner_resource.h>
16#include <QtWidgets/qmainwindow.h>
18#include <QtGui/qaction.h>
19#include <QtGui/qcursor.h>
20#include <QtGui/qevent.h>
22#include <QtCore/qdebug.h>
29 : QDesignerFormWindowToolInterface(formWindow),
30 m_formWindow(formWindow),
31 m_action(
new QAction(tr(
"Edit Widgets"),
this)),
32 m_specialDockDrag(
false)
45 return m_formWindow->core();
56 QMainWindow *mw = qobject_cast<QMainWindow*>(widget);
60 if (event->type() != QEvent::MouseButtonPress
61 && event->type() != QEvent::MouseMove
62 && event->type() != QEvent::MouseButtonRelease)
65 QMouseEvent *e =
static_cast<QMouseEvent*>(event);
67 if (event->type() == QEvent::MouseButtonPress) {
68 if (mw->isSeparator(e->position().toPoint())) {
69 m_separator_drag_mw = mw;
75 if (event->type() == QEvent::MouseMove)
76 return m_separator_drag_mw == mw;
78 if (event->type() == QEvent::MouseButtonRelease) {
79 if (m_separator_drag_mw != mw)
81 m_separator_drag_mw =
nullptr;
90 auto *widgetFactory = core()->widgetFactory();
91 return widgetFactory->isPassiveInteractor(widget) || mainWindowSeparatorEvent(widget, event);
96 switch (event->type()) {
102 case QEvent::FocusOut:
103 case QEvent::FocusIn:
104 return widget != m_formWindow && widget != m_formWindow->mainContainer()
105 && !isPassiveInteractor(widget, event);
112 return !isPassiveInteractor(widget, event);
114 case QEvent::KeyPress:
115 return !isPassiveInteractor(widget, event)
116 && handleKeyPressEvent(widget, managedWidget,
static_cast<QKeyEvent*>(event));
118 case QEvent::KeyRelease:
119 return !isPassiveInteractor(widget, event)
120 && handleKeyReleaseEvent(widget, managedWidget,
static_cast<QKeyEvent*>(event));
122 case QEvent::MouseMove:
123 return !isPassiveInteractor(widget, event)
124 && handleMouseMoveEvent(widget, managedWidget,
static_cast<QMouseEvent*>(event));
126 case QEvent::MouseButtonPress:
127 return !isPassiveInteractor(widget, event)
128 && handleMousePressEvent(widget, managedWidget,
static_cast<QMouseEvent*>(event));
130 case QEvent::MouseButtonRelease:
131 return !isPassiveInteractor(widget, event)
132 && handleMouseReleaseEvent(widget, managedWidget,
static_cast<QMouseEvent*>(event));
134 case QEvent::MouseButtonDblClick:
135 return !isPassiveInteractor(widget, event)
136 && handleMouseButtonDblClickEvent(widget, managedWidget,
static_cast<QMouseEvent*>(event));
138 case QEvent::ContextMenu:
139 return !isPassiveInteractor(widget, event)
140 && handleContextMenu(widget, managedWidget,
static_cast<QContextMenuEvent*>(event));
142 case QEvent::DragEnter:
143 return handleDragEnterMoveEvent(widget, managedWidget,
static_cast<QDragEnterEvent *>(event),
true);
144 case QEvent::DragMove:
145 return handleDragEnterMoveEvent(widget, managedWidget,
static_cast<QDragMoveEvent *>(event),
false);
146 case QEvent::DragLeave:
147 return handleDragLeaveEvent(widget, managedWidget,
static_cast<QDragLeaveEvent *>(event));
149 return handleDropEvent(widget, managedWidget,
static_cast<QDropEvent *>(event));
162 return m_formWindow->handleContextMenu(widget, managedWidget, e);
167 return m_formWindow->handleMouseButtonDblClickEvent(widget, managedWidget, e);
172 return m_formWindow->handleMousePressEvent(widget, managedWidget, e);
177 return m_formWindow->handleMouseMoveEvent(widget, managedWidget, e);
182 return m_formWindow->handleMouseReleaseEvent(widget, managedWidget, e);
187 return m_formWindow->handleKeyPressEvent(widget, managedWidget, e);
192 return m_formWindow->handleKeyReleaseEvent(widget, managedWidget, e);
198 Q_UNUSED(managedWidget);
206 m_specialDockDrag =
false;
214 const auto item_list = mimeData->items();
216 for (QDesignerDnDItemInterface *item : item_list) {
217 if (item->decoration() && item->decoration()->property(
"_q_dockDrag").toBool())
218 m_specialDockDrag =
true;
225 const QDesignerMimeData *mimeData = qobject_cast<
const QDesignerMimeData *>(e->mimeData());
229 if (!m_formWindow->hasFeature(QDesignerFormWindowInterface::EditFeature)) {
235 detectDockDrag(mimeData);
238 QPoint globalPos = QPoint(0, 0);
239 if (m_specialDockDrag) {
240 m_lastDropTarget =
nullptr;
243 m_lastDropTarget = mw->centralWidget();
246 const QPoint formPos = widget != m_formWindow ? widget->mapTo(m_formWindow, e->position().toPoint()) : e->position().toPoint();
247 globalPos = m_formWindow->mapToGlobal(formPos);
248 const FormWindowBase::WidgetUnderMouseMode wum = mimeData->items().size() == 1 ? FormWindowBase::FindSingleSelectionDropTarget : FormWindowBase::FindMultiSelectionDropTarget;
249 QWidget *dropTarget = m_formWindow->widgetUnderMouse(formPos, wum);
250 if (m_lastDropTarget && dropTarget != m_lastDropTarget)
251 m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(globalPos), FormWindow::Restore);
252 m_lastDropTarget = dropTarget;
255 if (m_lastDropTarget)
256 m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(globalPos), FormWindow::Highlight);
258 if (isEnter || m_lastDropTarget)
259 mimeData->acceptEvent(e);
267 const QDesignerMimeData *mimeData = qobject_cast<
const QDesignerMimeData *>(e->mimeData());
271 if (!m_lastDropTarget ||
272 !m_formWindow->hasFeature(QDesignerFormWindowInterface::EditFeature)) {
277 const QPoint globalPos = widget->mapToGlobal(e->position().toPoint());
278 mimeData->moveDecoration(globalPos);
279 if (m_specialDockDrag) {
280 if (!m_formWindow->dropDockWidget(mimeData->items().at(0), globalPos)) {
284 }
else if (!m_formWindow->dropWidgets(mimeData->items(), m_lastDropTarget, globalPos)) {
288 mimeData->acceptEvent(e);
294 if (!m_lastDropTarget)
297 m_formWindow->highlightWidget(m_lastDropTarget, m_lastDropTarget->mapFromGlobal(QCursor::pos()), FormWindow::Restore);
298 m_lastDropTarget =
nullptr;
304 if (restoreDropHighlighting()) {
313 Q_ASSERT(formWindow() !=
nullptr);
314 return formWindow()->mainContainer();
319 if (core()->widgetBox())
320 core()->widgetBox()->setEnabled(
true);
322 if (m_formWindow ==
nullptr)
325 const QWidgetList &sel = m_formWindow->selectedWidgets();
326 for (QWidget *w : sel)
327 m_formWindow->raiseSelection(w);
332 if (core()->widgetBox())
333 core()->widgetBox()->setEnabled(
false);
335 if (m_formWindow ==
nullptr)
Combined button and popup list for selecting options.
Auxiliary methods to store/retrieve settings.