~oif-team/ubuntu/natty/qt4-x11/xi2.1

« back to all changes in this revision

Viewing changes to doc/html/widgets-tooltips-sortingbox-cpp.html

  • Committer: Bazaar Package Importer
  • Author(s): Adam Conrad
  • Date: 2005-08-24 04:09:09 UTC
  • Revision ID: james.westby@ubuntu.com-20050824040909-xmxe9jfr4a0w5671
Tags: upstream-4.0.0
ImportĀ upstreamĀ versionĀ 4.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="iso-8859-1"?>
 
2
<!DOCTYPE html
 
3
    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
 
4
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 
5
<head>
 
6
    <title>Qt 4.0: sortingbox.cpp Example File (widgets/tooltips/sortingbox.cpp)</title>
 
7
    <style>h3.fn,span.fn { margin-left: 1cm; text-indent: -1cm; }
 
8
a:link { color: #004faf; text-decoration: none }
 
9
a:visited { color: #672967; text-decoration: none }
 
10
td.postheader { font-family: sans-serif }
 
11
tr.address { font-family: sans-serif }
 
12
body { background: #ffffff; color: black; }</style>
 
13
</head>
 
14
<body>
 
15
<table border="0" cellpadding="0" cellspacing="0" width="100%">
 
16
<tr>
 
17
<td align="left" valign="top" width="32"><img src="images/qt-logo.png" align="left" width="32" height="32" border="0" /></td>
 
18
<td width="1">&nbsp;&nbsp;</td><td class="postheader" valign="center"><a href="index.html"><font color="#004faf">Home</font></a>&nbsp;&middot; <a href="classes.html"><font color="#004faf">All&nbsp;Classes</font></a>&nbsp;&middot; <a href="mainclasses.html"><font color="#004faf">Main&nbsp;Classes</font></a>&nbsp;&middot; <a href="annotated.html"><font color="#004faf">Annotated</font></a>&nbsp;&middot; <a href="groups.html"><font color="#004faf">Grouped&nbsp;Classes</font></a>&nbsp;&middot; <a href="functions.html"><font color="#004faf">Functions</font></a></td>
 
19
<td align="right" valign="top" width="230"><img src="images/trolltech-logo.png" align="right" width="203" height="32" border="0" /></td></tr></table><h1 align="center">sortingbox.cpp Example File<br /><small><small>widgets/tooltips/sortingbox.cpp</small></small></h1>
 
20
<pre>&nbsp;   /****************************************************************************
 
21
    **
 
22
    ** Copyright (C) 2005-2005 Trolltech AS. All rights reserved.
 
23
    **
 
24
    ** This file is part of the documentation of the Qt Toolkit.
 
25
    **
 
26
    ** This file may be distributed under the terms of the Q Public License
 
27
** as defined by Trolltech AS of Norway and appearing in the file
 
28
** LICENSE.QPL included in the packaging of this file.
 
29
**
 
30
** This file may be distributed and/or modified under the terms of the
 
31
** GNU General Public License version 2 as published by the Free Software
 
32
** Foundation and appearing in the file LICENSE.GPL included in the
 
33
** packaging of this file.
 
34
**
 
35
** See http://www.trolltech.com/pricing.html or email sales@trolltech.com for
 
36
**   information about Qt Commercial License Agreements.
 
37
** See http://www.trolltech.com/qpl/ for QPL licensing information.
 
38
** See http://www.trolltech.com/gpl/ for GPL licensing information.
 
39
**
 
40
** Contact info@trolltech.com if any conditions of this licensing are
 
41
** not clear to you.
 
42
    **
 
43
    ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
 
44
    ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
 
45
    **
 
46
    ****************************************************************************/
 
47
 
 
48
    #include &lt;QtGui&gt;
 
49
 
 
50
    #include &lt;stdlib.h&gt;
 
51
 
 
52
    #include &quot;sortingbox.h&quot;
 
53
 
 
54
    SortingBox::SortingBox()
 
55
    {
 
56
        setAttribute(Qt::WA_StaticContents);
 
57
        setMouseTracking(true);
 
58
        setBackgroundRole(QPalette::Base);
 
59
 
 
60
        itemInMotion = 0;
 
61
 
 
62
        newCircleButton = createToolButton(tr(&quot;New Circle&quot;),
 
63
                                           QIcon(&quot;:/images/circle.png&quot;),
 
64
                                           SLOT(createNewCircle()));
 
65
 
 
66
        newSquareButton = createToolButton(tr(&quot;New Square&quot;),
 
67
                                           QIcon(&quot;:/images/square.png&quot;),
 
68
                                           SLOT(createNewSquare()));
 
69
 
 
70
        newTriangleButton = createToolButton(tr(&quot;New Triangle&quot;),
 
71
                                             QIcon(&quot;:/images/triangle.png&quot;),
 
72
                                             SLOT(createNewTriangle()));
 
73
 
 
74
        circlePath.addEllipse(QRect(0, 0, 100, 100));
 
75
        squarePath.addRect(QRect(0, 0, 100, 100));
 
76
 
 
77
        qreal x = trianglePath.currentPosition().x();
 
78
        qreal y = trianglePath.currentPosition().y();
 
79
        trianglePath.moveTo(x + 120 / 2, y);
 
80
        trianglePath.lineTo(0, 100);
 
81
        trianglePath.lineTo(120, 100);
 
82
        trianglePath.lineTo(x + 120 / 2, y);
 
83
 
 
84
        setWindowTitle(tr(&quot;Tooltips&quot;));
 
85
        resize(500, 300);
 
86
 
 
87
        createShapeItem(circlePath, tr(&quot;Circle&quot;), initialItemPosition(circlePath),
 
88
                        initialItemColor());
 
89
        createShapeItem(squarePath, tr(&quot;Square&quot;), initialItemPosition(squarePath),
 
90
                        initialItemColor());
 
91
        createShapeItem(trianglePath, tr(&quot;Triangle&quot;),
 
92
                        initialItemPosition(trianglePath), initialItemColor());
 
93
    }
 
94
 
 
95
    bool SortingBox::event(QEvent *event)
 
96
    {
 
97
        if (event-&gt;type() == QEvent::ToolTip) {
 
98
            QHelpEvent *helpEvent = static_cast&lt;QHelpEvent *&gt;(event);
 
99
            int index = itemAt(helpEvent-&gt;pos());
 
100
            if (index != -1)
 
101
                QToolTip::showText(helpEvent-&gt;globalPos(), shapeItems[index].toolTip());
 
102
        }
 
103
        return QWidget::event(event);
 
104
    }
 
105
 
 
106
    void SortingBox::resizeEvent(QResizeEvent * /* event */)
 
107
    {
 
108
        int margin = style()-&gt;pixelMetric(QStyle::PM_DefaultTopLevelMargin);
 
109
        int x = width() - margin;
 
110
        int y = height() - margin;
 
111
 
 
112
        y = updateButtonGeometry(newCircleButton, x, y);
 
113
        y = updateButtonGeometry(newSquareButton, x, y);
 
114
        updateButtonGeometry(newTriangleButton, x, y);
 
115
    }
 
116
 
 
117
    void SortingBox::paintEvent(QPaintEvent * /* event */)
 
118
    {
 
119
        QPainter painter(this);
 
120
        foreach (ShapeItem shapeItem, shapeItems) {
 
121
            painter.translate(shapeItem.position());
 
122
            painter.setBrush(shapeItem.color());
 
123
            painter.drawPath(shapeItem.path());
 
124
            painter.translate(-shapeItem.position());
 
125
        }
 
126
    }
 
127
 
 
128
    void SortingBox::mousePressEvent(QMouseEvent *event)
 
129
    {
 
130
        if (event-&gt;button() == Qt::LeftButton) {
 
131
            int index = itemAt(event-&gt;pos());
 
132
            if (index != -1) {
 
133
                itemInMotion = &amp;shapeItems[index];
 
134
                previousPosition = event-&gt;pos();
 
135
                shapeItems.move(index, shapeItems.size() - 1);
 
136
                update();
 
137
            }
 
138
        }
 
139
    }
 
140
 
 
141
    void SortingBox::mouseMoveEvent(QMouseEvent *event)
 
142
    {
 
143
        if ((event-&gt;buttons() &amp; Qt::LeftButton) &amp;&amp; itemInMotion)
 
144
            moveItemTo(event-&gt;pos());
 
145
    }
 
146
 
 
147
    void SortingBox::mouseReleaseEvent(QMouseEvent *event)
 
148
    {
 
149
        if (event-&gt;button() == Qt::LeftButton &amp;&amp; itemInMotion) {
 
150
            moveItemTo(event-&gt;pos());
 
151
            itemInMotion = 0;
 
152
        }
 
153
    }
 
154
 
 
155
    void SortingBox::createNewCircle()
 
156
    {
 
157
        createShapeItem(circlePath, tr(&quot;Circle&quot;), randomItemPosition(),
 
158
                        randomItemColor());
 
159
    }
 
160
 
 
161
    void SortingBox::createNewSquare()
 
162
    {
 
163
        createShapeItem(squarePath, tr(&quot;Square&quot;), randomItemPosition(),
 
164
                        randomItemColor());
 
165
    }
 
166
 
 
167
    void SortingBox::createNewTriangle()
 
168
    {
 
169
        createShapeItem(trianglePath, tr(&quot;Triangle&quot;), randomItemPosition(),
 
170
                        randomItemColor());
 
171
    }
 
172
 
 
173
    int SortingBox::itemAt(const QPoint &amp;pos)
 
174
    {
 
175
        for (int i = shapeItems.size() - 1; i &gt;= 0; --i) {
 
176
            const ShapeItem &amp;item = shapeItems[i];
 
177
            if (item.path().contains(pos - item.position()))
 
178
                return i;
 
179
        }
 
180
        return -1;
 
181
    }
 
182
 
 
183
    void SortingBox::moveItemTo(const QPoint &amp;pos)
 
184
    {
 
185
        QPoint offset = pos - previousPosition;
 
186
        itemInMotion-&gt;setPosition(itemInMotion-&gt;position() + offset);
 
187
        previousPosition = pos;
 
188
        update();
 
189
    }
 
190
 
 
191
    int SortingBox::updateButtonGeometry(QToolButton *button, int x, int y)
 
192
    {
 
193
        QSize size = button-&gt;sizeHint();
 
194
        button-&gt;setGeometry(x - size.rwidth(), y - size.rheight(),
 
195
                            size.rwidth(), size.rheight());
 
196
 
 
197
        return y - size.rheight()
 
198
               - style()-&gt;pixelMetric(QStyle::PM_DefaultLayoutSpacing);
 
199
    }
 
200
 
 
201
    void SortingBox::createShapeItem(const QPainterPath &amp;path,
 
202
                                     const QString &amp;toolTip, const QPoint &amp;pos,
 
203
                                     const QColor &amp;color)
 
204
    {
 
205
        ShapeItem shapeItem;
 
206
        shapeItem.setPath(path);
 
207
        shapeItem.setToolTip(toolTip);
 
208
        shapeItem.setPosition(pos);
 
209
        shapeItem.setColor(color);
 
210
        shapeItems.append(shapeItem);
 
211
        update();
 
212
    }
 
213
 
 
214
    QToolButton *SortingBox::createToolButton(const QString &amp;toolTip,
 
215
                                              const QIcon &amp;icon, const char *member)
 
216
    {
 
217
        QToolButton *button = new QToolButton(this);
 
218
        button-&gt;setToolTip(toolTip);
 
219
        button-&gt;setIcon(icon);
 
220
        button-&gt;setIconSize(QSize(32, 32));
 
221
        connect(button, SIGNAL(clicked()), this, member);
 
222
 
 
223
        return button;
 
224
    }
 
225
 
 
226
    QPoint SortingBox::initialItemPosition(const QPainterPath &amp;path)
 
227
    {
 
228
        int x;
 
229
        int y = (height() - (int)path.controlPointRect().height()) / 2;
 
230
        if (shapeItems.size() == 0)
 
231
            x = ((3 * width()) / 2 - (int)path.controlPointRect().width()) / 2;
 
232
        else
 
233
            x = (width() / shapeItems.size()
 
234
                 - (int)path.controlPointRect().width()) / 2;
 
235
 
 
236
        return QPoint(x, y);
 
237
    }
 
238
 
 
239
    QPoint SortingBox::randomItemPosition()
 
240
    {
 
241
        return QPoint(rand() % (width() - 120), rand() % (height() - 120));
 
242
    }
 
243
 
 
244
    QColor SortingBox::initialItemColor()
 
245
    {
 
246
        return QColor::fromHsv(((shapeItems.size() + 1) * 85) % 256, 255, 190);
 
247
    }
 
248
 
 
249
    QColor SortingBox::randomItemColor()
 
250
    {
 
251
        return QColor::fromHsv(rand() % 256, 255, 190);
 
252
    }</pre>
 
253
<p /><address><hr /><div align="center">
 
254
<table width="100%" cellspacing="0" border="0"><tr class="address">
 
255
<td width="30%">Copyright &copy; 2005 <a href="trolltech.html">Trolltech</a></td>
 
256
<td width="40%" align="center"><a href="trademarks.html">Trademarks</a></td>
 
257
<td width="30%" align="right"><div align="right">Qt 4.0.0</div></td>
 
258
</tr></table></div></address></body>
 
259
</html>