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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
|
// Copyright (C) 2016 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
#ifndef WIDGETSELECTION_H
#define WIDGETSELECTION_H
#include "formeditor_global.h"
#include <invisible_widget_p.h>
#include <QtCore/qhash.h>
#include <QtCore/qpointer.h>
QT_BEGIN_NAMESPACE
class QDesignerFormEditorInterface;
class QMouseEvent;
class QPaintEvent;
namespace qdesigner_internal {
class FormWindow;
class WidgetSelection;
class QT_FORMEDITOR_EXPORT WidgetHandle: public InvisibleWidget
{
Q_OBJECT
public:
enum Type
{
LeftTop,
Top,
RightTop,
Right,
RightBottom,
Bottom,
LeftBottom,
Left,
TypeCount
};
WidgetHandle(FormWindow *parent, Type t, WidgetSelection *s);
void setWidget(QWidget *w);
void setActive(bool a);
void updateCursor();
void setEnabled(bool) {}
QDesignerFormEditorInterface *core() const;
protected:
void paintEvent(QPaintEvent *e) override;
void mousePressEvent(QMouseEvent *e) override;
void mouseMoveEvent(QMouseEvent *e) override;
void mouseReleaseEvent(QMouseEvent *e) override;
private:
void changeGridLayoutItemSpan();
void changeFormLayoutItemSpan();
void trySetGeometry(QWidget *w, int x, int y, int width, int height);
void tryResize(QWidget *w, int width, int height);
private:
QWidget *m_widget;
const Type m_type;
QPoint m_origPressPos;
FormWindow *m_formWindow;
WidgetSelection *m_sel;
QRect m_geom, m_origGeom;
bool m_active;
};
class QT_FORMEDITOR_EXPORT WidgetSelection: public QObject
{
Q_OBJECT
public:
WidgetSelection(FormWindow *parent);
void setWidget(QWidget *w);
bool isUsed() const;
void updateActive();
void updateGeometry();
void hide();
void show();
void update();
QWidget *widget() const;
QDesignerFormEditorInterface *core() const;
bool eventFilter(QObject *object, QEvent *event) override;
enum WidgetState { UnlaidOut, LaidOut, ManagedGridLayout, ManagedFormLayout };
static WidgetState widgetState(const QDesignerFormEditorInterface *core, QWidget *w);
private:
WidgetHandle *m_handles[WidgetHandle::TypeCount];
QPointer<QWidget> m_widget;
FormWindow *m_formWindow;
};
} // namespace qdesigner_internal
QT_END_NAMESPACE
#endif // WIDGETSELECTION_H
|