Developer Documentation
Loading...
Searching...
No Matches
QtGLViewerLayout.cc
1/*===========================================================================*\
2* *
3* OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39* *
40\*===========================================================================*/
41
42
43
44
45
46
47//=============================================================================
48//
49// CLASS QtGLViewerLayout - IMPLEMENTATION
50//
51//=============================================================================
52
53//== INCLUDES =================================================================
54
55#include "QtGLViewerLayout.hh"
56
57//== NAMESPACES ===============================================================
58
59
60//== CLASS IMPLEMENTATION======================================================
61
62QtGLViewerLayout::QtGLViewerLayout (QGraphicsLayoutItem * _parent) :
63 QGraphicsLayout (_parent),
64 wheelX_ (0),
65 wheelY_ (0),
66 wheelZ_ (0)
67{
68}
69
70//-----------------------------------------------------------------------------
71
72void QtGLViewerLayout::addWheelX (QGraphicsWidget *_item)
73{
74 if (wheelX_)
75 items_.remove(items_.indexOf(wheelX_));
76 wheelX_ = _item;
77 items_.append(_item);
78}
79
80//-----------------------------------------------------------------------------
81
82void QtGLViewerLayout::addWheelY (QGraphicsWidget *_item)
83{
84 if (wheelY_)
85 items_.remove(items_.indexOf(wheelY_));
86 wheelY_ = _item;
87 items_.append(_item);
88}
89
90//-----------------------------------------------------------------------------
91
92void QtGLViewerLayout::addWheelZ (QGraphicsWidget *_item)
93{
94 if (wheelZ_)
95 items_.remove(items_.indexOf(wheelZ_));
96 wheelZ_ = _item;
97 items_.append(_item);
98}
99
100//-----------------------------------------------------------------------------
101
103{
104 return items_.size();
105}
106
107//-----------------------------------------------------------------------------
108
109QGraphicsLayoutItem * QtGLViewerLayout::itemAt(int _i) const
110{
111 if (_i < 0 || _i >= items_.size())
112 return 0;
113
114 return items_[_i];
115}
116
117//-----------------------------------------------------------------------------
118
119void QtGLViewerLayout::removeAt (int _index)
120{
121 if (_index < 0 || _index >= items_.size())
122 return;
123
124 if (items_[_index] == wheelX_)
125 wheelX_ = 0;
126 if (items_[_index] == wheelY_)
127 wheelY_ = 0;
128 if (items_[_index] == wheelZ_)
129 wheelZ_ = 0;
130
131 items_.remove(_index);
132}
133
134//-----------------------------------------------------------------------------
135
136QSizeF QtGLViewerLayout::sizeHint(Qt::SizeHint /*_which*/, const QSizeF & _constraint) const
137{
138 return _constraint;
139}
140
141//-----------------------------------------------------------------------------
142
143void QtGLViewerLayout::setGeometry(const QRectF & rect)
144{
145 QGraphicsLayoutItem::setGeometry (rect);
146 reLayout ();
147}
148
149//-----------------------------------------------------------------------------
150
152{
153 if (!wheelX_ || !wheelY_ || !wheelZ_)
154 return;
155
156 QRectF r = contentsRect ();
157 float scale = qMin(300.0, qMin(r.width(), r.height())) / 300.0;
158
159 foreach (QGraphicsWidget *item, items_)
160 {
161 if (item->size() != item->preferredSize ())
162 item->resize (item->preferredSize ());
163 item->resetTransform();
164 item->setScale (scale);
165 }
166
167 wheelX_->setPos (r.left(),
168 r.bottom() - ((wheelY_->size().height() + wheelX_->size().height()) * scale));
169 wheelY_->setPos (r.left() + (wheelX_->size().width() * scale),
170 r.bottom() - (wheelY_->size().height() * scale));
171 wheelZ_->setPos (r.right() - (wheelZ_->size().width() * scale),
172 r.bottom() - ((wheelY_->size().height() + wheelZ_->size().height()) * scale));
173}
174
175
176//=============================================================================
177//=============================================================================
void addWheelX(QGraphicsWidget *_item)
Add Wheel Widget to Layout.
virtual void setGeometry(const QRectF &rect)
Tracks geometry changes.
virtual int count() const
Pure virtual functions that have to be implemented.
void reLayout()
Recalculate layout.
QGraphicsWidget * wheelX_
Items.