Developer Documentation

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
62 QtGLViewerLayout::QtGLViewerLayout (QGraphicsLayoutItem * _parent) :
63 QGraphicsLayout (_parent),
64 wheelX_ (0),
65 wheelY_ (0),
66 wheelZ_ (0)
67 {
68 }
69
70 //-----------------------------------------------------------------------------
71
72 void 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
82 void 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
92 void 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
102 int QtGLViewerLayout::count() const
103 {
104 return items_.size();
105 }
106
107 //-----------------------------------------------------------------------------
108
109 QGraphicsLayoutItem * 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
119 void 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
136 QSizeF QtGLViewerLayout::sizeHint(Qt::SizeHint /*_which*/, const QSizeF & _constraint) const
137 {
138 return _constraint;
139 }
140
141 //-----------------------------------------------------------------------------
142
143 void QtGLViewerLayout::setGeometry(const QRectF & rect)
144 {
145 QGraphicsLayoutItem::setGeometry (rect);
146 reLayout ();
147 }
148
149 //-----------------------------------------------------------------------------
150
151 void QtGLViewerLayout::reLayout ()
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 //=============================================================================
QtGLViewerLayout::reLayout
void reLayout()
Recalculate layout.
Definition: QtGLViewerLayout.cc:151
QtGLViewerLayout::setGeometry
virtual void setGeometry(const QRectF &rect)
Tracks geometry changes.
Definition: QtGLViewerLayout.cc:143
QtGLViewerLayout::addWheelX
void addWheelX(QGraphicsWidget *_item)
Add Wheel Widget to Layout.
Definition: QtGLViewerLayout.cc:72
QtGLViewerLayout::count
virtual int count() const
Pure virtual functions that have to be implemented.
Definition: QtGLViewerLayout.cc:102