37
38
struct WidgetFloaterPrivate {
39
QPointer<QWidget> mChild;
40
Qt::Alignment mAlignment;
42
int mHorizontalMargin;
44
bool mInsideUpdateChildGeometry;
46
void updateChildGeometry() {
50
if (mInsideUpdateChildGeometry) {
53
mInsideUpdateChildGeometry = true;
56
int childWidth, childHeight;
57
int parentWidth, parentHeight;
59
childWidth = mChild->width();
60
childHeight = mChild->height();
62
parentWidth = mParent->width();
63
parentHeight = mParent->height();
65
if (mAlignment & Qt::AlignLeft) {
66
posX = mHorizontalMargin;
67
} else if (mAlignment & Qt::AlignHCenter) {
68
posX = (parentWidth - childWidth) / 2;
69
} else if (mAlignment & Qt::AlignJustify) {
70
posX = mHorizontalMargin;
71
childWidth = parentWidth - 2 * mHorizontalMargin;
72
QRect childGeometry = mChild->geometry();
73
childGeometry.setWidth(childWidth);
74
mChild->setGeometry(childGeometry);
76
posX = parentWidth - childWidth - mHorizontalMargin;
79
if (mAlignment & Qt::AlignTop) {
80
posY = mVerticalMargin;
81
} else if (mAlignment & Qt::AlignVCenter) {
82
posY = (parentHeight - childHeight) / 2;
84
posY = parentHeight - childHeight - mVerticalMargin;
87
mChild->move(posX, posY);
89
mInsideUpdateChildGeometry = false;
40
QPointer<QWidget> mChild;
41
Qt::Alignment mAlignment;
43
int mHorizontalMargin;
45
bool mInsideUpdateChildGeometry;
47
void updateChildGeometry()
52
if (mInsideUpdateChildGeometry) {
55
mInsideUpdateChildGeometry = true;
58
int childWidth, childHeight;
59
int parentWidth, parentHeight;
61
childWidth = mChild->width();
62
childHeight = mChild->height();
64
parentWidth = mParent->width();
65
parentHeight = mParent->height();
67
if (mAlignment & Qt::AlignLeft) {
68
posX = mHorizontalMargin;
69
} else if (mAlignment & Qt::AlignHCenter) {
70
posX = (parentWidth - childWidth) / 2;
71
} else if (mAlignment & Qt::AlignJustify) {
72
posX = mHorizontalMargin;
73
childWidth = parentWidth - 2 * mHorizontalMargin;
74
QRect childGeometry = mChild->geometry();
75
childGeometry.setWidth(childWidth);
76
mChild->setGeometry(childGeometry);
78
posX = parentWidth - childWidth - mHorizontalMargin;
81
if (mAlignment & Qt::AlignTop) {
82
posY = mVerticalMargin;
83
} else if (mAlignment & Qt::AlignVCenter) {
84
posY = (parentHeight - childHeight) / 2;
86
posY = parentHeight - childHeight - mVerticalMargin;
89
mChild->move(posX, posY);
91
mInsideUpdateChildGeometry = false;
94
95
WidgetFloater::WidgetFloater(QWidget* parent)
96
, d(new WidgetFloaterPrivate) {
99
d->mParent->installEventFilter(this);
101
d->mAlignment = Qt::AlignCenter;
102
d->mHorizontalMargin = KDialog::marginHint();
103
d->mVerticalMargin = KDialog::marginHint();
104
d->mInsideUpdateChildGeometry = false;
108
WidgetFloater::~WidgetFloater() {
113
void WidgetFloater::setChildWidget(QWidget* child) {
115
d->mChild->removeEventFilter(this);
118
d->mChild->setParent(d->mParent);
119
d->mChild->installEventFilter(this);
120
d->updateChildGeometry();
126
void WidgetFloater::setAlignment(Qt::Alignment alignment) {
127
d->mAlignment = alignment;
128
d->updateChildGeometry();
132
bool WidgetFloater::eventFilter(QObject*, QEvent* event) {
133
switch (event->type()) {
136
d->updateChildGeometry();
145
void WidgetFloater::setHorizontalMargin(int value) {
146
d->mHorizontalMargin = value;
147
d->updateChildGeometry();
151
int WidgetFloater::horizontalMargin() const {
152
return d->mHorizontalMargin;
156
void WidgetFloater::setVerticalMargin(int value) {
157
d->mVerticalMargin = value;
158
d->updateChildGeometry();
162
int WidgetFloater::verticalMargin() const {
163
return d->mVerticalMargin;
97
, d(new WidgetFloaterPrivate)
101
d->mParent->installEventFilter(this);
103
d->mAlignment = Qt::AlignCenter;
104
d->mHorizontalMargin = KDialog::marginHint();
105
d->mVerticalMargin = KDialog::marginHint();
106
d->mInsideUpdateChildGeometry = false;
109
WidgetFloater::~WidgetFloater()
114
void WidgetFloater::setChildWidget(QWidget* child)
117
d->mChild->removeEventFilter(this);
120
d->mChild->setParent(d->mParent);
121
d->mChild->installEventFilter(this);
122
d->updateChildGeometry();
127
void WidgetFloater::setAlignment(Qt::Alignment alignment)
129
d->mAlignment = alignment;
130
d->updateChildGeometry();
133
bool WidgetFloater::eventFilter(QObject*, QEvent* event)
135
switch (event->type()) {
138
d->updateChildGeometry();
146
void WidgetFloater::setHorizontalMargin(int value)
148
d->mHorizontalMargin = value;
149
d->updateChildGeometry();
152
int WidgetFloater::horizontalMargin() const
154
return d->mHorizontalMargin;
157
void WidgetFloater::setVerticalMargin(int value)
159
d->mVerticalMargin = value;
160
d->updateChildGeometry();
163
int WidgetFloater::verticalMargin() const
165
return d->mVerticalMargin;