summaryrefslogtreecommitdiffabout
path: root/microkde/KDGanttMinimizeSplitter.cpp
authorzautrix <zautrix>2005-04-21 12:32:52 (UTC)
committer zautrix <zautrix>2005-04-21 12:32:52 (UTC)
commit0a13a3490ec3bf4735e3435f80f58fa7d50b4448 (patch) (unidiff)
treec7f28c49b52e479f47da0dce9f0bfe9189ecdca4 /microkde/KDGanttMinimizeSplitter.cpp
parent4d96d7b681ce99d76746a843c289b75f5e7dba64 (diff)
downloadkdepimpi-0a13a3490ec3bf4735e3435f80f58fa7d50b4448.zip
kdepimpi-0a13a3490ec3bf4735e3435f80f58fa7d50b4448.tar.gz
kdepimpi-0a13a3490ec3bf4735e3435f80f58fa7d50b4448.tar.bz2
rubberband fix
Diffstat (limited to 'microkde/KDGanttMinimizeSplitter.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/KDGanttMinimizeSplitter.cpp21
1 files changed, 18 insertions, 3 deletions
diff --git a/microkde/KDGanttMinimizeSplitter.cpp b/microkde/KDGanttMinimizeSplitter.cpp
index fb5d4e3..72c4e60 100644
--- a/microkde/KDGanttMinimizeSplitter.cpp
+++ b/microkde/KDGanttMinimizeSplitter.cpp
@@ -1,1068 +1,1083 @@
1/* -*- Mode: C++ -*- 1/* -*- Mode: C++ -*-
2 $Id$ 2 $Id$
3*/ 3*/
4 4
5/**************************************************************************** 5/****************************************************************************
6 ** Copyright (C) 2002-2004 Klarälvdalens Datakonsult AB. All rights reserved. 6 ** Copyright (C) 2002-2004 Klarälvdalens Datakonsult AB. All rights reserved.
7 ** 7 **
8 ** This file is part of the KDGantt library. 8 ** This file is part of the KDGantt library.
9 ** 9 **
10 ** This file may be distributed and/or modified under the terms of the 10 ** This file may be distributed and/or modified under the terms of the
11 ** GNU General Public License version 2 as published by the Free Software 11 ** GNU General Public License version 2 as published by the Free Software
12 ** Foundation and appearing in the file LICENSE.GPL included in the 12 ** Foundation and appearing in the file LICENSE.GPL included in the
13 ** packaging of this file. 13 ** packaging of this file.
14 ** 14 **
15 ** Licensees holding valid commercial KDGantt licenses may use this file in 15 ** Licensees holding valid commercial KDGantt licenses may use this file in
16 ** accordance with the KDGantt Commercial License Agreement provided with 16 ** accordance with the KDGantt Commercial License Agreement provided with
17 ** the Software. 17 ** the Software.
18 ** 18 **
19 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 19 ** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
20 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 20 ** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
21 ** 21 **
22 ** See http://www.klaralvdalens-datakonsult.se/Public/products/ for 22 ** See http://www.klaralvdalens-datakonsult.se/Public/products/ for
23 ** information about KDGantt Commercial License Agreements. 23 ** information about KDGantt Commercial License Agreements.
24 ** 24 **
25 ** Contact info@klaralvdalens-datakonsult.se if any conditions of this 25 ** Contact info@klaralvdalens-datakonsult.se if any conditions of this
26 ** licensing are not clear to you. 26 ** licensing are not clear to you.
27 ** 27 **
28 ** As a special exception, permission is given to link this program 28 ** As a special exception, permission is given to link this program
29 ** with any edition of Qt, and distribute the resulting executable, 29 ** with any edition of Qt, and distribute the resulting executable,
30 ** without including the source code for Qt in the source distribution. 30 ** without including the source code for Qt in the source distribution.
31 ** 31 **
32 **********************************************************************/ 32 **********************************************************************/
33 33
34#include "KDGanttMinimizeSplitter.h" 34#include "KDGanttMinimizeSplitter.h"
35#ifndef QT_NO_SPLITTER___ 35#ifndef QT_NO_SPLITTER___
36 36
37#include "qpainter.h" 37#include "qpainter.h"
38#include "qdrawutil.h" 38#include "qdrawutil.h"
39#include "qbitmap.h" 39#include "qbitmap.h"
40#if QT_VERSION >= 0x030000 40#if QT_VERSION >= 0x030000
41#include "qptrlist.h" 41#include "qptrlist.h"
42#include "qmemarray.h" 42#include "qmemarray.h"
43#else 43#else
44#include <qlist.h> 44#include <qlist.h>
45#include <qarray.h> 45#include <qarray.h>
46#define QPtrList QList 46#define QPtrList QList
47#define QMemArray QArray 47#define QMemArray QArray
48#endif 48#endif
49#include "qlayoutengine_p.h" 49#include "qlayoutengine_p.h"
50#include "qobjectlist.h" 50#include "qobjectlist.h"
51#include "qstyle.h" 51#include "qstyle.h"
52#include "qapplication.h" //sendPostedEvents 52#include "qapplication.h" //sendPostedEvents
53#include <qvaluelist.h> 53#include <qvaluelist.h>
54#include <qcursor.h> 54#include <qcursor.h>
55#include <qframe.h>
55#ifndef KDGANTT_MASTER_CVS 56#ifndef KDGANTT_MASTER_CVS
56//#include "KDGanttMinimizeSplitter.moc" 57//#include "KDGanttMinimizeSplitter.moc"
57#endif 58#endif
58 59
59 60
60 61
61#ifndef DOXYGEN_SKIP_INTERNAL 62#ifndef DOXYGEN_SKIP_INTERNAL
62 63
63#if QT_VERSION >= 232 64#if QT_VERSION >= 232
64static int mouseOffset; 65static int mouseOffset;
65static int opaqueOldPos = -1; //### there's only one mouse, but this is a bit risky 66static int opaqueOldPos = -1; //### there's only one mouse, but this is a bit risky
66 67
68class KDRubberBand: public QFrame
69{
70public:
71 KDRubberBand( QWidget *parent, const char * name, WFlags f ) :QFrame ( parent, name, f ) {;}
72
73protected:
74 virtual void mousePressEvent ( QMouseEvent * )
75 {
76 close();
77 };
78
79};
67 80
68KDGanttSplitterHandle::KDGanttSplitterHandle( Qt::Orientation o, 81KDGanttSplitterHandle::KDGanttSplitterHandle( Qt::Orientation o,
69 KDGanttMinimizeSplitter *parent, const char * name ) 82 KDGanttMinimizeSplitter *parent, const char * name )
70 : QWidget( parent, name ), _activeButton( 0 ), _collapsed( false ) 83 : QWidget( parent, name ), _activeButton( 0 ), _collapsed( false )
71{ 84{
72 85
73 if ( QApplication::desktop()->width() > 320 && QApplication::desktop()->width() < 650 ) { 86 if ( QApplication::desktop()->width() > 320 && QApplication::desktop()->width() < 650 ) {
74 mSizeHint = QSize(7,7); 87 mSizeHint = QSize(7,7);
75 mUseOffset = true; 88 mUseOffset = true;
76 } else { 89 } else {
77 mSizeHint = QSize(6,6); 90 mSizeHint = QSize(6,6);
78 mUseOffset = false; 91 mUseOffset = false;
79 } 92 }
80 s = parent; 93 s = parent;
81 setOrientation(o); 94 setOrientation(o);
82 setMouseTracking( true ); 95 setMouseTracking( true );
83 mMouseDown = false; 96 mMouseDown = false;
84 //setMaximumHeight( 5 ); // test only 97 //setMaximumHeight( 5 ); // test only
85} 98}
86 99
87QSize KDGanttSplitterHandle::sizeHint() const 100QSize KDGanttSplitterHandle::sizeHint() const
88{ 101{
89 return mSizeHint; 102 return mSizeHint;
90} 103}
91 104
92void KDGanttSplitterHandle::setOrientation( Qt::Orientation o ) 105void KDGanttSplitterHandle::setOrientation( Qt::Orientation o )
93{ 106{
94 orient = o; 107 orient = o;
95#ifndef QT_NO_CURSOR 108#ifndef QT_NO_CURSOR
96 if ( o == KDGanttMinimizeSplitter::Horizontal ) 109 if ( o == KDGanttMinimizeSplitter::Horizontal )
97 setCursor( splitHCursor ); 110 setCursor( splitHCursor );
98 else 111 else
99 setCursor( splitVCursor ); 112 setCursor( splitVCursor );
100#endif 113#endif
101} 114}
102 115
103 116
104void KDGanttSplitterHandle::mouseMoveEvent( QMouseEvent *e ) 117void KDGanttSplitterHandle::mouseMoveEvent( QMouseEvent *e )
105{ 118{
106 updateCursor( e->pos() ); 119 updateCursor( e->pos() );
107 if ( !(e->state()&LeftButton) ) 120 if ( !(e->state()&LeftButton) )
108 return; 121 return;
109 122
110 if ( _activeButton != 0) 123 if ( _activeButton != 0)
111 return; 124 return;
112 125
113 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos())) 126 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos()))
114 - mouseOffset; 127 - mouseOffset;
115 if ( opaque() ) { 128 if ( opaque() ) {
116 s->moveSplitter( pos, id() ); 129 s->moveSplitter( pos, id() );
117 } else { 130 } else {
118 int min = pos; int max = pos; 131 int min = pos; int max = pos;
119 s->getRange( id(), &min, &max ); 132 s->getRange( id(), &min, &max );
120 s->setRubberband( QMAX( min, QMIN(max, pos ))); 133 s->setRubberband( QMAX( min, QMIN(max, pos )));
121 } 134 }
122 _collapsed = false; 135 _collapsed = false;
123} 136}
124 137
125void KDGanttSplitterHandle::mousePressEvent( QMouseEvent *e ) 138void KDGanttSplitterHandle::mousePressEvent( QMouseEvent *e )
126{ 139{
127 if ( e->button() == LeftButton ) { 140 if ( e->button() == LeftButton ) {
128 _activeButton = onButton( e->pos() ); 141 _activeButton = onButton( e->pos() );
129 mouseOffset = s->pick(e->pos()); 142 mouseOffset = s->pick(e->pos());
130 mMouseDown = true; 143 mMouseDown = true;
131 repaint(); 144 repaint();
132 updateCursor( e->pos() ); 145 updateCursor( e->pos() );
133 } 146 }
134} 147}
135 148
136void KDGanttSplitterHandle::updateCursor( const QPoint& p) 149void KDGanttSplitterHandle::updateCursor( const QPoint& p)
137{ 150{
138 if ( onButton( p ) != 0 ) { 151 if ( onButton( p ) != 0 ) {
139 setCursor( arrowCursor ); 152 setCursor( arrowCursor );
140 } 153 }
141 else { 154 else {
142 if ( orient == KDGanttMinimizeSplitter::Horizontal ) 155 if ( orient == KDGanttMinimizeSplitter::Horizontal )
143 setCursor( splitHCursor ); 156 setCursor( splitHCursor );
144 else 157 else
145 setCursor( splitVCursor ); 158 setCursor( splitVCursor );
146 } 159 }
147} 160}
148void KDGanttSplitterHandle::toggle() 161void KDGanttSplitterHandle::toggle()
149{ 162{
150 int pos; 163 int pos;
151 int min, max; 164 int min, max;
152 if ( !_collapsed ) { 165 if ( !_collapsed ) {
153 s->expandPos( id(), &min, &max ); 166 s->expandPos( id(), &min, &max );
154 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left 167 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left
155 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 168 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
156 pos = min; 169 pos = min;
157 } 170 }
158 else { 171 else {
159 pos = max; 172 pos = max;
160 } 173 }
161 174
162 _origPos = s->pick(mapToParent( QPoint( 0,0 ) )); 175 _origPos = s->pick(mapToParent( QPoint( 0,0 ) ));
163 s->moveSplitter( pos, id() ); 176 s->moveSplitter( pos, id() );
164 _collapsed = true; 177 _collapsed = true;
165 } 178 }
166 else { 179 else {
167 s->moveSplitter( _origPos, id() ); 180 s->moveSplitter( _origPos, id() );
168 _collapsed = false; 181 _collapsed = false;
169 } 182 }
170 repaint(); 183 repaint();
171} 184}
172 185
173void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e ) 186void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e )
174{ 187{
175 mMouseDown = false; 188 mMouseDown = false;
176 if ( _activeButton != 0 ) { 189 if ( _activeButton != 0 ) {
177 if ( onButton( e->pos() ) == _activeButton ) 190 if ( onButton( e->pos() ) == _activeButton )
178 { 191 {
179 toggle(); 192 toggle();
180 } 193 }
181 _activeButton = 0; 194 _activeButton = 0;
182 updateCursor( e->pos() ); 195 updateCursor( e->pos() );
183 } 196 }
184 else { 197 else {
185 if ( !opaque() && e->button() == LeftButton ) { 198 if ( !opaque() && e->button() == LeftButton ) {
186 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos())) 199 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos()))
187 - mouseOffset; 200 - mouseOffset;
188 s->setRubberband( -1 ); 201 s->setRubberband( -1 );
189 s->moveSplitter( pos, id() ); 202 s->moveSplitter( pos, id() );
190 } 203 }
191 } 204 }
192 if ( s->rubberBand() ) 205 if ( s->rubberBand() ) {
193 s->rubberBand()->hide(); 206 //qDebug("hide rubberband ");
207 s->rubberBand()->close();
208 }
194 repaint(); 209 repaint();
195} 210}
196 211
197int KDGanttSplitterHandle::onButton( const QPoint& p ) 212int KDGanttSplitterHandle::onButton( const QPoint& p )
198{ 213{
199 QValueList<QPointArray> list = buttonRegions(); 214 QValueList<QPointArray> list = buttonRegions();
200 int index = 1; 215 int index = 1;
201 int add = 12; 216 int add = 12;
202 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) { 217 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) {
203 QRect rect = (*it).boundingRect(); 218 QRect rect = (*it).boundingRect();
204 rect.setLeft( rect.left()- add ); 219 rect.setLeft( rect.left()- add );
205 rect.setRight( rect.right() + add); 220 rect.setRight( rect.right() + add);
206 rect.setTop( rect.top()- add ); 221 rect.setTop( rect.top()- add );
207 rect.setBottom( rect.bottom() + add); 222 rect.setBottom( rect.bottom() + add);
208 if ( rect.contains( p ) ) { 223 if ( rect.contains( p ) ) {
209 return index; 224 return index;
210 } 225 }
211 index++; 226 index++;
212 } 227 }
213 return 0; 228 return 0;
214} 229}
215 230
216 231
217QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions() 232QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions()
218{ 233{
219 QValueList<QPointArray> list; 234 QValueList<QPointArray> list;
220 235
221 int sw = 8; 236 int sw = 8;
222 int yyy = 1; 237 int yyy = 1;
223 int xxx = 1; 238 int xxx = 1;
224 int voffset[] = { (int) -sw*3, (int) sw*3 }; 239 int voffset[] = { (int) -sw*3, (int) sw*3 };
225 for ( int i = 0; i < 2; i++ ) { 240 for ( int i = 0; i < 2; i++ ) {
226 QPointArray arr; 241 QPointArray arr;
227 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right || 242 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ||
228 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) { 243 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) {
229 int mid = height()/2 + voffset[i]; 244 int mid = height()/2 + voffset[i];
230 arr.setPoints( 3, 245 arr.setPoints( 3,
231 1-xxx, mid - sw + 4, 246 1-xxx, mid - sw + 4,
232 sw-3-xxx, mid, 247 sw-3-xxx, mid,
233 1-xxx, mid + sw -4); 248 1-xxx, mid + sw -4);
234 } 249 }
235 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left || 250 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left ||
236 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) { 251 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) {
237 int mid = height()/2 + voffset[i]; 252 int mid = height()/2 + voffset[i];
238 arr.setPoints( 3, 253 arr.setPoints( 3,
239 sw-4, mid - sw + 4, 254 sw-4, mid - sw + 4,
240 0, mid, 255 0, mid,
241 sw-4, mid + sw - 4); 256 sw-4, mid + sw - 4);
242 } 257 }
243 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up || 258 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ||
244 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) { 259 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) {
245 int mid = width()/2 + voffset[i]; 260 int mid = width()/2 + voffset[i];
246 arr.setPoints( 3, 261 arr.setPoints( 3,
247 mid - sw + 4, sw-4, 262 mid - sw + 4, sw-4,
248 mid, 0, 263 mid, 0,
249 mid + sw - 4, sw-4 ); 264 mid + sw - 4, sw-4 );
250 } 265 }
251 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down || 266 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down ||
252 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 267 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
253 int mid = width()/2 + voffset[i]; 268 int mid = width()/2 + voffset[i];
254 arr.setPoints( 3, 269 arr.setPoints( 3,
255 mid - sw + 4, 1-yyy, 270 mid - sw + 4, 1-yyy,
256 mid, sw-3-yyy, 271 mid, sw-3-yyy,
257 mid + sw -4, 1-yyy); 272 mid + sw -4, 1-yyy);
258 } 273 }
259 list.append( arr ); 274 list.append( arr );
260 } 275 }
261 return list; 276 return list;
262} 277}
263 278
264void KDGanttSplitterHandle::paintEvent( QPaintEvent * ) 279void KDGanttSplitterHandle::paintEvent( QPaintEvent * )
265{ 280{
266 QPixmap buffer( size() ); 281 QPixmap buffer( size() );
267 QPainter p( &buffer ); 282 QPainter p( &buffer );
268 283
269 //LR 284 //LR
270 // Draw the splitter rectangle 285 // Draw the splitter rectangle
271 p.setBrush( colorGroup().background() ); 286 p.setBrush( colorGroup().background() );
272 p.setPen( colorGroup().foreground() ); 287 p.setPen( colorGroup().foreground() );
273 //p.drawRect( rect() ); 288 //p.drawRect( rect() );
274#ifndef DESKTOP_VERSION 289#ifndef DESKTOP_VERSION
275 if ( mMouseDown && ! _activeButton) 290 if ( mMouseDown && ! _activeButton)
276 buffer.fill( colorGroup().background().dark() ); 291 buffer.fill( colorGroup().background().dark() );
277 else 292 else
278#endif 293#endif
279 buffer.fill( colorGroup().background() ); 294 buffer.fill( colorGroup().background() );
280 //buffer.fill( backgroundColor() ); 295 //buffer.fill( backgroundColor() );
281 // parentWidget()->style().drawPrimitive( QStyle::PE_Panel, &p, rect(), parentWidget()->colorGroup()); 296 // parentWidget()->style().drawPrimitive( QStyle::PE_Panel, &p, rect(), parentWidget()->colorGroup());
282 297
283 int sw = 8; // Hardcoded, given I didn't use styles anymore, I didn't like to use their size 298 int sw = 8; // Hardcoded, given I didn't use styles anymore, I didn't like to use their size
284 299
285 // arrow color 300 // arrow color
286 QColor col; 301 QColor col;
287 if ( _activeButton ) 302 if ( _activeButton )
288 col = colorGroup().background().dark( 250 ); 303 col = colorGroup().background().dark( 250 );
289 else { 304 else {
290 if ( mMouseDown ) 305 if ( mMouseDown )
291 col = Qt::white; 306 col = Qt::white;
292 else 307 else
293 col = colorGroup().background().dark( 150 ); 308 col = colorGroup().background().dark( 150 );
294 } 309 }
295 //QColor col = backgroundColor().dark( 130 ); 310 //QColor col = backgroundColor().dark( 130 );
296 p.setBrush( col ); 311 p.setBrush( col );
297 p.setPen( col ); 312 p.setPen( col );
298 313
299 QValueList<QPointArray> list = buttonRegions(); 314 QValueList<QPointArray> list = buttonRegions();
300 int index = 1; 315 int index = 1;
301 if ( mUseOffset ) 316 if ( mUseOffset )
302 p.translate( 0, 1 ); 317 p.translate( 0, 1 );
303 for ( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) { 318 for ( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) {
304 if ( index == _activeButton ) { 319 if ( index == _activeButton ) {
305 320
306 /* 321 /*
307 if ( ! _collapsed ) { 322 if ( ! _collapsed ) {
308 p.save(); 323 p.save();
309 // p.translate( parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftHorizontal ), 324 // p.translate( parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftHorizontal ),
310 // parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftVertical ) ); 325 // parentWidget()->style().pixelMetric( QStyle::PM_ButtonShiftVertical ) );
311 p.translate( -1, 0 ); 326 p.translate( -1, 0 );
312 p.drawPolygon( *it, true ); 327 p.drawPolygon( *it, true );
313 p.restore(); } else 328 p.restore(); } else
314 */ 329 */
315 p.drawPolygon( *it, true ); 330 p.drawPolygon( *it, true );
316 331
317 } 332 }
318 else { 333 else {
319 /* 334 /*
320 if ( ! _collapsed ) { 335 if ( ! _collapsed ) {
321 p.save(); 336 p.save();
322 p.translate( -1, 0 ); 337 p.translate( -1, 0 );
323 p.drawPolygon( *it, true ); 338 p.drawPolygon( *it, true );
324 p.restore(); 339 p.restore();
325 } else 340 } else
326 */ 341 */
327 p.drawPolygon( *it, true ); 342 p.drawPolygon( *it, true );
328 343
329 } 344 }
330 index++; 345 index++;
331 } 346 }
332 347
333 // Draw the lines between the arrows 348 // Draw the lines between the arrows
334 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left || 349 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left ||
335 s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) { 350 s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) {
336 int mid = height()/2; 351 int mid = height()/2;
337 p.drawLine ( 1, mid - sw, 1, mid + sw ); 352 p.drawLine ( 1, mid - sw, 1, mid + sw );
338 p.drawLine ( 3, mid - sw, 3, mid + sw ); 353 p.drawLine ( 3, mid - sw, 3, mid + sw );
339 } 354 }
340 else if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Up || 355 else if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Up ||
341 s->minimizeDirection() == KDGanttMinimizeSplitter::Down ) { 356 s->minimizeDirection() == KDGanttMinimizeSplitter::Down ) {
342 int mid = width()/2; 357 int mid = width()/2;
343 p.drawLine( mid -sw, 1, mid +sw, 1 ); 358 p.drawLine( mid -sw, 1, mid +sw, 1 );
344 p.drawLine( mid -sw, 3, mid +sw, 3 ); 359 p.drawLine( mid -sw, 3, mid +sw, 3 );
345 } 360 }
346 bitBlt( this, 0, 0, &buffer ); 361 bitBlt( this, 0, 0, &buffer );
347 362
348} 363}
349#endif 364#endif
350 365
351class QSplitterLayoutStruct 366class QSplitterLayoutStruct
352{ 367{
353public: 368public:
354 KDGanttMinimizeSplitter::ResizeMode mode; 369 KDGanttMinimizeSplitter::ResizeMode mode;
355 QCOORD sizer; 370 QCOORD sizer;
356 bool isSplitter; 371 bool isSplitter;
357 QWidget *wid; 372 QWidget *wid;
358}; 373};
359 374
360class QSplitterData 375class QSplitterData
361{ 376{
362public: 377public:
363 QSplitterData() : opaque( FALSE ), firstShow( TRUE ) {} 378 QSplitterData() : opaque( FALSE ), firstShow( TRUE ) {}
364 379
365 QPtrList<QSplitterLayoutStruct> list; 380 QPtrList<QSplitterLayoutStruct> list;
366 bool opaque; 381 bool opaque;
367 bool firstShow; 382 bool firstShow;
368}; 383};
369 384
370void kdganttGeomCalc( QMemArray<QLayoutStruct> &chain, int start, int count, int pos, 385void kdganttGeomCalc( QMemArray<QLayoutStruct> &chain, int start, int count, int pos,
371 int space, int spacer ); 386 int space, int spacer );
372#endif // DOXYGEN_SKIP_INTERNAL 387#endif // DOXYGEN_SKIP_INTERNAL
373 388
374 389
375/*! 390/*!
376 \class KDGanttMinimizeSplitter KDGanttMinimizeSplitter.h 391 \class KDGanttMinimizeSplitter KDGanttMinimizeSplitter.h
377 \brief The KDGanttMinimizeSplitter class implements a splitter 392 \brief The KDGanttMinimizeSplitter class implements a splitter
378 widget with minimize buttons. 393 widget with minimize buttons.
379 394
380 This class (and its documentation) is largely a copy of Qt's 395 This class (and its documentation) is largely a copy of Qt's
381 QSplitter; the copying was necessary because QSplitter is not 396 QSplitter; the copying was necessary because QSplitter is not
382 extensible at all. QSplitter and its documentation are licensed 397 extensible at all. QSplitter and its documentation are licensed
383 according to the GPL and the Qt Professional License (if you hold 398 according to the GPL and the Qt Professional License (if you hold
384 such a license) and are (C) Trolltech AS. 399 such a license) and are (C) Trolltech AS.
385 400
386 A splitter lets the user control the size of child widgets by 401 A splitter lets the user control the size of child widgets by
387 dragging the boundary between the children. Any number of widgets 402 dragging the boundary between the children. Any number of widgets
388 may be controlled. 403 may be controlled.
389 404
390 To show a QListBox, a QListView and a QTextEdit side by side: 405 To show a QListBox, a QListView and a QTextEdit side by side:
391 406
392 \code 407 \code
393 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent ); 408 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent );
394 QListBox *lb = new QListBox( split ); 409 QListBox *lb = new QListBox( split );
395 QListView *lv = new QListView( split ); 410 QListView *lv = new QListView( split );
396 QTextEdit *ed = new QTextEdit( split ); 411 QTextEdit *ed = new QTextEdit( split );
397 \endcode 412 \endcode
398 413
399 In KDGanttMinimizeSplitter, the boundary can be either horizontal or 414 In KDGanttMinimizeSplitter, the boundary can be either horizontal or
400 vertical. The default is horizontal (the children are side by side) 415 vertical. The default is horizontal (the children are side by side)
401 but you can use setOrientation( QSplitter::Vertical ) to set it to 416 but you can use setOrientation( QSplitter::Vertical ) to set it to
402 vertical. 417 vertical.
403 418
404 Use setResizeMode() to specify 419 Use setResizeMode() to specify
405 that a widget should keep its size when the splitter is resized. 420 that a widget should keep its size when the splitter is resized.
406 421
407 Although KDGanttMinimizeSplitter normally resizes the children only 422 Although KDGanttMinimizeSplitter normally resizes the children only
408 at the end of a resize operation, if you call setOpaqueResize( TRUE 423 at the end of a resize operation, if you call setOpaqueResize( TRUE
409 ) the widgets are resized as often as possible. 424 ) the widgets are resized as often as possible.
410 425
411 The initial distribution of size between the widgets is determined 426 The initial distribution of size between the widgets is determined
412 by the initial size of each widget. You can also use setSizes() to 427 by the initial size of each widget. You can also use setSizes() to
413 set the sizes of all the widgets. The function sizes() returns the 428 set the sizes of all the widgets. The function sizes() returns the
414 sizes set by the user. 429 sizes set by the user.
415 430
416 If you hide() a child, its space will be distributed among the other 431 If you hide() a child, its space will be distributed among the other
417 children. It will be reinstated when you show() it again. It is also 432 children. It will be reinstated when you show() it again. It is also
418 possible to reorder the widgets within the splitter using 433 possible to reorder the widgets within the splitter using
419 moveToFirst() and moveToLast(). 434 moveToFirst() and moveToLast().
420*/ 435*/
421 436
422 437
423 438
424static QSize minSize( const QWidget* /*w*/ ) 439static QSize minSize( const QWidget* /*w*/ )
425{ 440{
426 return QSize(0,0); 441 return QSize(0,0);
427} 442}
428 443
429// This is the original version of minSize 444// This is the original version of minSize
430static QSize minSizeHint( const QWidget* w ) 445static QSize minSizeHint( const QWidget* w )
431{ 446{
432 QSize min = w->minimumSize(); 447 QSize min = w->minimumSize();
433 QSize s; 448 QSize s;
434 if ( min.height() <= 0 || min.width() <= 0 ) 449 if ( min.height() <= 0 || min.width() <= 0 )
435 s = w->minimumSizeHint(); 450 s = w->minimumSizeHint();
436 if ( min.height() > 0 ) 451 if ( min.height() > 0 )
437 s.setHeight( min.height() ); 452 s.setHeight( min.height() );
438 if ( min.width() > 0 ) 453 if ( min.width() > 0 )
439 s.setWidth( min.width() ); 454 s.setWidth( min.width() );
440 return s.expandedTo(QSize(0,0)); 455 return s.expandedTo(QSize(0,0));
441} 456}
442 457
443 458
444/*! 459/*!
445 Constructs a horizontal splitter with the \a parent and \a 460 Constructs a horizontal splitter with the \a parent and \a
446 name arguments being passed on to the QFrame constructor. 461 name arguments being passed on to the QFrame constructor.
447*/ 462*/
448KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name ) 463KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name )
449 :QFrame(parent,name,WPaintUnclipped) 464 :QFrame(parent,name,WPaintUnclipped)
450{ 465{
451 mRubberBand = 0; 466 mRubberBand = 0;
452 mFirstHandle = 0; 467 mFirstHandle = 0;
453#if QT_VERSION >= 232 468#if QT_VERSION >= 232
454 orient = Horizontal; 469 orient = Horizontal;
455 init(); 470 init();
456#endif 471#endif
457} 472}
458 473
459/*! 474/*!
460 Constructs a splitter with orientation \a o with the \a parent 475 Constructs a splitter with orientation \a o with the \a parent
461 and \a name arguments being passed on to the QFrame constructor. 476 and \a name arguments being passed on to the QFrame constructor.
462*/ 477*/
463KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name ) 478KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name )
464 :QFrame(parent,name,WPaintUnclipped) 479 :QFrame(parent,name,WPaintUnclipped)
465{ 480{
466 481
467 mRubberBand = 0; 482 mRubberBand = 0;
468 mFirstHandle = 0; 483 mFirstHandle = 0;
469#if QT_VERSION >= 232 484#if QT_VERSION >= 232
470 orient = o; 485 orient = o;
471 init(); 486 init();
472#endif 487#endif
473} 488}
474 489
475/*! 490/*!
476 Destroys the splitter and any children. 491 Destroys the splitter and any children.
477*/ 492*/
478KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter() 493KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter()
479{ 494{
480#if QT_VERSION >= 232 495#if QT_VERSION >= 232
481 data->list.setAutoDelete( TRUE ); 496 data->list.setAutoDelete( TRUE );
482 delete data; 497 delete data;
483#endif 498#endif
484 if ( mRubberBand ) 499 if ( mRubberBand )
485 delete mRubberBand; 500 delete mRubberBand;
486} 501}
487 502
488 503
489#if QT_VERSION >= 232 504#if QT_VERSION >= 232
490void KDGanttMinimizeSplitter::init() 505void KDGanttMinimizeSplitter::init()
491{ 506{
492 data = new QSplitterData; 507 data = new QSplitterData;
493 if ( orient == Horizontal ) 508 if ( orient == Horizontal )
494 setSizePolicy( QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum) ); 509 setSizePolicy( QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum) );
495 else 510 else
496 setSizePolicy( QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding) ); 511 setSizePolicy( QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding) );
497#ifndef DESKTOP_VERSION 512#ifndef DESKTOP_VERSION
498 setOpaqueResize( false ); 513 setOpaqueResize( false );
499#else 514#else
500 setOpaqueResize( true ); 515 setOpaqueResize( true );
501#endif 516#endif
502} 517}
503#endif 518#endif
504 519
505 520
506void KDGanttMinimizeSplitter::toggle() 521void KDGanttMinimizeSplitter::toggle()
507{ 522{
508 if ( mFirstHandle ) 523 if ( mFirstHandle )
509 mFirstHandle->toggle(); 524 mFirstHandle->toggle();
510 else 525 else
511 qDebug("KDGanttMinimizeSplitter::toggle::sorry, handle not available "); 526 qDebug("KDGanttMinimizeSplitter::toggle::sorry, handle not available ");
512 527
513} 528}
514 529
515 530
516/*! 531/*!
517 \brief the orientation of the splitter 532 \brief the orientation of the splitter
518 533
519 By default the orientation is horizontal (the widgets are side by side). 534 By default the orientation is horizontal (the widgets are side by side).
520 The possible orientations are Qt:Vertical and Qt::Horizontal (the default). 535 The possible orientations are Qt:Vertical and Qt::Horizontal (the default).
521*/ 536*/
522void KDGanttMinimizeSplitter::setOrientation( Orientation o ) 537void KDGanttMinimizeSplitter::setOrientation( Orientation o )
523{ 538{
524#if QT_VERSION >= 232 539#if QT_VERSION >= 232
525 if ( orient == o ) 540 if ( orient == o )
526 return; 541 return;
527 orient = o; 542 orient = o;
528 543
529 if ( orient == Horizontal ) 544 if ( orient == Horizontal )
530 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); 545 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
531 else 546 else
532 setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) ); 547 setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
533 548
534 QSplitterLayoutStruct *s = data->list.first(); 549 QSplitterLayoutStruct *s = data->list.first();
535 while ( s ) { 550 while ( s ) {
536 if ( s->isSplitter ) 551 if ( s->isSplitter )
537 ((KDGanttSplitterHandle*)s->wid)->setOrientation( o ); 552 ((KDGanttSplitterHandle*)s->wid)->setOrientation( o );
538 s = data->list.next(); // ### next at end of loop, no iterator 553 s = data->list.next(); // ### next at end of loop, no iterator
539 } 554 }
540 recalc( isVisible() ); 555 recalc( isVisible() );
541#endif 556#endif
542} 557}
543 558
544 559
545#if QT_VERSION >= 232 560#if QT_VERSION >= 232
546/*! 561/*!
547 \reimp 562 \reimp
548*/ 563*/
549void KDGanttMinimizeSplitter::resizeEvent( QResizeEvent * ) 564void KDGanttMinimizeSplitter::resizeEvent( QResizeEvent * )
550{ 565{
551 doResize(); 566 doResize();
552} 567}
553 568
554 569
555/* 570/*
556 Inserts the widget \a w at the end (or at the beginning if \a first 571 Inserts the widget \a w at the end (or at the beginning if \a first
557 is TRUE) of the splitter's list of widgets. 572 is TRUE) of the splitter's list of widgets.
558 573
559 It is the responsibility of the caller of this function to make sure 574 It is the responsibility of the caller of this function to make sure
560 that \a w is not already in the splitter and to call recalcId if 575 that \a w is not already in the splitter and to call recalcId if
561 needed. (If \a first is TRUE, then recalcId is very probably 576 needed. (If \a first is TRUE, then recalcId is very probably
562 needed.) 577 needed.)
563*/ 578*/
564QSplitterLayoutStruct *KDGanttMinimizeSplitter::addWidget( QWidget *w, bool first ) 579QSplitterLayoutStruct *KDGanttMinimizeSplitter::addWidget( QWidget *w, bool first )
565{ 580{
566 QSplitterLayoutStruct *s; 581 QSplitterLayoutStruct *s;
567 KDGanttSplitterHandle *newHandle = 0; 582 KDGanttSplitterHandle *newHandle = 0;
568 if ( data->list.count() > 0 ) { 583 if ( data->list.count() > 0 ) {
569 s = new QSplitterLayoutStruct; 584 s = new QSplitterLayoutStruct;
570 s->mode = KeepSize; 585 s->mode = KeepSize;
571 QString tmp = "qt_splithandle_"; 586 QString tmp = "qt_splithandle_";
572 tmp += w->name(); 587 tmp += w->name();
573 newHandle = new KDGanttSplitterHandle( orientation(), this, tmp.latin1() ); 588 newHandle = new KDGanttSplitterHandle( orientation(), this, tmp.latin1() );
574 if ( ! mFirstHandle ) 589 if ( ! mFirstHandle )
575 mFirstHandle = newHandle; 590 mFirstHandle = newHandle;
576 s->wid = newHandle; 591 s->wid = newHandle;
577 newHandle->setId(data->list.count()); 592 newHandle->setId(data->list.count());
578 s->isSplitter = TRUE; 593 s->isSplitter = TRUE;
579 s->sizer = pick( newHandle->sizeHint() ); 594 s->sizer = pick( newHandle->sizeHint() );
580 if ( first ) 595 if ( first )
581 data->list.insert( 0, s ); 596 data->list.insert( 0, s );
582 else 597 else
583 data->list.append( s ); 598 data->list.append( s );
584 } 599 }
585 s = new QSplitterLayoutStruct; 600 s = new QSplitterLayoutStruct;
586 s->mode = Stretch; 601 s->mode = Stretch;
587 s->wid = w; 602 s->wid = w;
588 if ( !testWState( WState_Resized ) && w->sizeHint().isValid() ) 603 if ( !testWState( WState_Resized ) && w->sizeHint().isValid() )
589 s->sizer = pick( w->sizeHint() ); 604 s->sizer = pick( w->sizeHint() );
590 else 605 else
591 s->sizer = pick( w->size() ); 606 s->sizer = pick( w->size() );
592 s->isSplitter = FALSE; 607 s->isSplitter = FALSE;
593 if ( first ) 608 if ( first )
594 data->list.insert( 0, s ); 609 data->list.insert( 0, s );
595 else 610 else
596 data->list.append( s ); 611 data->list.append( s );
597 if ( newHandle && isVisible() ) 612 if ( newHandle && isVisible() )
598 newHandle->show(); //will trigger sending of post events 613 newHandle->show(); //will trigger sending of post events
599 return s; 614 return s;
600} 615}
601 616
602 617
603/*! 618/*!
604 Tells the splitter that a child widget has been inserted or removed. 619 Tells the splitter that a child widget has been inserted or removed.
605 The event is passed in \a c. 620 The event is passed in \a c.
606*/ 621*/
607void KDGanttMinimizeSplitter::childEvent( QChildEvent *c ) 622void KDGanttMinimizeSplitter::childEvent( QChildEvent *c )
608{ 623{
609 if ( c->type() == QEvent::ChildInserted ) { 624 if ( c->type() == QEvent::ChildInserted ) {
610 if ( !c->child()->isWidgetType() ) 625 if ( !c->child()->isWidgetType() )
611 return; 626 return;
612 627
613 if ( ((QWidget*)c->child())->testWFlags( WType_TopLevel ) ) 628 if ( ((QWidget*)c->child())->testWFlags( WType_TopLevel ) )
614 return; 629 return;
615 630
616 QSplitterLayoutStruct *s = data->list.first(); 631 QSplitterLayoutStruct *s = data->list.first();
617 while ( s ) { 632 while ( s ) {
618 if ( s->wid == c->child() ) 633 if ( s->wid == c->child() )
619 return; 634 return;
620 s = data->list.next(); 635 s = data->list.next();
621 } 636 }
622 addWidget( (QWidget*)c->child() ); 637 addWidget( (QWidget*)c->child() );
623 recalc( isVisible() ); 638 recalc( isVisible() );
624 639
625 } else if ( c->type() == QEvent::ChildRemoved ) { 640 } else if ( c->type() == QEvent::ChildRemoved ) {
626 QSplitterLayoutStruct *p = 0; 641 QSplitterLayoutStruct *p = 0;
627 if ( data->list.count() > 1 ) 642 if ( data->list.count() > 1 )
628 p = data->list.at(1); //remove handle _after_ first widget. 643 p = data->list.at(1); //remove handle _after_ first widget.
629 QSplitterLayoutStruct *s = data->list.first(); 644 QSplitterLayoutStruct *s = data->list.first();
630 while ( s ) { 645 while ( s ) {
631 if ( s->wid == c->child() ) { 646 if ( s->wid == c->child() ) {
632 data->list.removeRef( s ); 647 data->list.removeRef( s );
633 delete s; 648 delete s;
634 if ( p && p->isSplitter ) { 649 if ( p && p->isSplitter ) {
635 data->list.removeRef( p ); 650 data->list.removeRef( p );
636 delete p->wid; //will call childEvent 651 delete p->wid; //will call childEvent
637 delete p; 652 delete p;
638 } 653 }
639 recalcId(); 654 recalcId();
640 doResize(); 655 doResize();
641 return; 656 return;
642 } 657 }
643 p = s; 658 p = s;
644 s = data->list.next(); 659 s = data->list.next();
645 } 660 }
646 } 661 }
647} 662}
648 663
649 664
650/*! 665/*!
651 Shows a rubber band at position \a p. If \a p is negative, the 666 Shows a rubber band at position \a p. If \a p is negative, the
652 rubber band is removed. 667 rubber band is removed.
653*/ 668*/
654void KDGanttMinimizeSplitter::setRubberband( int p ) 669void KDGanttMinimizeSplitter::setRubberband( int p )
655{ 670{
656#ifdef DESKTOP_VERSION 671#ifdef DESKTOP_VERSION
657 QPainter paint( this ); 672 QPainter paint( this );
658 paint.setPen( gray ); 673 paint.setPen( gray );
659 paint.setBrush( gray ); 674 paint.setBrush( gray );
660 paint.setRasterOp( XorROP ); 675 paint.setRasterOp( XorROP );
661 QRect r = contentsRect(); 676 QRect r = contentsRect();
662 const int rBord = 3; //Themable???? 677 const int rBord = 3; //Themable????
663#if QT_VERSION >= 0x030000 678#if QT_VERSION >= 0x030000
664 int sw = style().pixelMetric(QStyle::PM_SplitterWidth, this); 679 int sw = style().pixelMetric(QStyle::PM_SplitterWidth, this);
665#else 680#else
666 int sw = style().splitterWidth(); 681 int sw = style().splitterWidth();
667#endif 682#endif
668 if ( orient == Horizontal ) { 683 if ( orient == Horizontal ) {
669 if ( opaqueOldPos >= 0 ) 684 if ( opaqueOldPos >= 0 )
670 paint.drawRect( opaqueOldPos + sw/2 - rBord , r.y(), 685 paint.drawRect( opaqueOldPos + sw/2 - rBord , r.y(),
671 2*rBord, r.height() ); 686 2*rBord, r.height() );
672 if ( p >= 0 ) 687 if ( p >= 0 )
673 paint.drawRect( p + sw/2 - rBord, r.y(), 2*rBord, r.height() ); 688 paint.drawRect( p + sw/2 - rBord, r.y(), 2*rBord, r.height() );
674 } else { 689 } else {
675 if ( opaqueOldPos >= 0 ) 690 if ( opaqueOldPos >= 0 )
676 paint.drawRect( r.x(), opaqueOldPos + sw/2 - rBord, 691 paint.drawRect( r.x(), opaqueOldPos + sw/2 - rBord,
677 r.width(), 2*rBord ); 692 r.width(), 2*rBord );
678 if ( p >= 0 ) 693 if ( p >= 0 )
679 paint.drawRect( r.x(), p + sw/2 - rBord, r.width(), 2*rBord ); 694 paint.drawRect( r.x(), p + sw/2 - rBord, r.width(), 2*rBord );
680 } 695 }
681 opaqueOldPos = p; 696 opaqueOldPos = p;
682#else 697#else
683 if ( !mRubberBand ) { 698 if ( !mRubberBand ) {
684 mRubberBand = new QFrame( 0, "rubber", WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop); 699 mRubberBand = new KDRubberBand( 0, "rubber", WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop);
685 mRubberBand->setFrameStyle( Box | Raised ); 700 mRubberBand->setFrameStyle( Box | Raised );
686 //mRubberBand->setPalette( QPalette ( Qt::red.light(),Qt::red.dark() ) ); 701 //mRubberBand->setPalette( QPalette ( Qt::red.light(),Qt::red.dark() ) );
687 mRubberBand->setPalette( QPalette ( colorGroup().background().light(), colorGroup().background().dark() )); 702 mRubberBand->setPalette( QPalette ( colorGroup().background().light(), colorGroup().background().dark() ));
688 } 703 }
689 QRect r = contentsRect(); 704 QRect r = contentsRect();
690 static int rBord = 0; //Themable???? 705 static int rBord = 0; //Themable????
691 if ( !rBord ) { 706 if ( !rBord ) {
692 if (QApplication::desktop()->width() <= 320 ) 707 if (QApplication::desktop()->width() <= 320 )
693 rBord = 3; 708 rBord = 3;
694 else 709 else
695 rBord = 4; 710 rBord = 4;
696 } 711 }
697 int sw = style().splitterWidth(); 712 int sw = style().splitterWidth();
698 if ( orient == Horizontal ) { 713 if ( orient == Horizontal ) {
699 if ( p >= 0 ) { 714 if ( p >= 0 ) {
700 QPoint geo = mapToGlobal (QPoint ( p + sw/2 - rBord, r.y())); 715 QPoint geo = mapToGlobal (QPoint ( p + sw/2 - rBord, r.y()));
701 mRubberBand->setGeometry( geo.x(), geo.y(), 2*rBord, r.height() ); 716 mRubberBand->setGeometry( geo.x(), geo.y(), 2*rBord, r.height() );
702 } 717 }
703 } else { 718 } else {
704 if ( p >= 0 ) { 719 if ( p >= 0 ) {
705 QPoint geo = mapToGlobal (QPoint ( r.x(), p + sw/2 - rBord)); 720 QPoint geo = mapToGlobal (QPoint ( r.x(), p + sw/2 - rBord));
706 mRubberBand->setGeometry( geo.x(), geo.y(), r.width(), 2*rBord); 721 mRubberBand->setGeometry( geo.x(), geo.y(), r.width(), 2*rBord);
707 } 722 }
708 } 723 }
709 opaqueOldPos = p; 724 opaqueOldPos = p;
710 if ( ! mRubberBand->isVisible() ) { 725 if ( ! mRubberBand->isVisible() ) {
711 mRubberBand->show(); 726 mRubberBand->show();
712 } 727 }
713#endif 728#endif
714} 729}
715 730
716 731
717/*! \reimp */ 732/*! \reimp */
718bool KDGanttMinimizeSplitter::event( QEvent *e ) 733bool KDGanttMinimizeSplitter::event( QEvent *e )
719{ 734{
720 if ( e->type() == QEvent::LayoutHint || ( e->type() == QEvent::Show && data->firstShow ) ) { 735 if ( e->type() == QEvent::LayoutHint || ( e->type() == QEvent::Show && data->firstShow ) ) {
721 recalc( isVisible() ); 736 recalc( isVisible() );
722 if ( e->type() == QEvent::Show ) 737 if ( e->type() == QEvent::Show )
723 data->firstShow = FALSE; 738 data->firstShow = FALSE;
724 } 739 }
725 return QWidget::event( e ); 740 return QWidget::event( e );
726} 741}
727 742
728 743
729/*! 744/*!
730 \obsolete 745 \obsolete
731 746
732 Draws the splitter handle in the rectangle described by \a x, \a y, 747 Draws the splitter handle in the rectangle described by \a x, \a y,
733 \a w, \a h using painter \a p. 748 \a w, \a h using painter \a p.
734 \sa QStyle::drawPrimitive() 749 \sa QStyle::drawPrimitive()
735*/ 750*/
736void KDGanttMinimizeSplitter::drawSplitter( QPainter *p, 751void KDGanttMinimizeSplitter::drawSplitter( QPainter *p,
737 QCOORD x, QCOORD y, QCOORD w, QCOORD h ) 752 QCOORD x, QCOORD y, QCOORD w, QCOORD h )
738{ 753{
739#if 0 754#if 0
740 // LR 755 // LR
741 style().drawPrimitive(QStyle::PE_Splitter, p, QRect(x, y, w, h), colorGroup(), 756 style().drawPrimitive(QStyle::PE_Splitter, p, QRect(x, y, w, h), colorGroup(),
742 (orientation() == Qt::Horizontal ? 757 (orientation() == Qt::Horizontal ?
743 QStyle::Style_Horizontal : 0)); 758 QStyle::Style_Horizontal : 0));
744#endif 759#endif
745} 760}
746 761
747 762
748/*! 763/*!
749 Returns the id of the splitter to the right of or below the widget \a w, 764 Returns the id of the splitter to the right of or below the widget \a w,
750 or 0 if there is no such splitter 765 or 0 if there is no such splitter
751 (i.e. it is either not in this KDGanttMinimizeSplitter or it is at the end). 766 (i.e. it is either not in this KDGanttMinimizeSplitter or it is at the end).
752*/ 767*/
753int KDGanttMinimizeSplitter::idAfter( QWidget* w ) const 768int KDGanttMinimizeSplitter::idAfter( QWidget* w ) const
754{ 769{
755 QSplitterLayoutStruct *s = data->list.first(); 770 QSplitterLayoutStruct *s = data->list.first();
756 bool seen_w = FALSE; 771 bool seen_w = FALSE;
757 while ( s ) { 772 while ( s ) {
758 if ( s->isSplitter && seen_w ) 773 if ( s->isSplitter && seen_w )
759 return data->list.at(); 774 return data->list.at();
760 if ( !s->isSplitter && s->wid == w ) 775 if ( !s->isSplitter && s->wid == w )
761 seen_w = TRUE; 776 seen_w = TRUE;
762 s = data->list.next(); 777 s = data->list.next();
763 } 778 }
764 return 0; 779 return 0;
765} 780}
766 781
767 782
768/*! 783/*!
769 Moves the left/top edge of the splitter handle with id \a id as 784 Moves the left/top edge of the splitter handle with id \a id as
770 close as possible to position \a p, which is the distance from the 785 close as possible to position \a p, which is the distance from the
771 left (or top) edge of the widget. 786 left (or top) edge of the widget.
772 787
773 For Arabic and Hebrew the layout is reversed, and using this 788 For Arabic and Hebrew the layout is reversed, and using this
774 function to set the position of the splitter might lead to 789 function to set the position of the splitter might lead to
775 unexpected results, since in Arabic and Hebrew the position of 790 unexpected results, since in Arabic and Hebrew the position of
776 splitter one is to the left of the position of splitter zero. 791 splitter one is to the left of the position of splitter zero.
777 792
778 \sa idAfter() 793 \sa idAfter()
779*/ 794*/
780void KDGanttMinimizeSplitter::moveSplitter( QCOORD p, int id ) 795void KDGanttMinimizeSplitter::moveSplitter( QCOORD p, int id )
781{ 796{
782 p = adjustPos( p, id ); 797 p = adjustPos( p, id );
783 QSplitterLayoutStruct *s = data->list.at(id); 798 QSplitterLayoutStruct *s = data->list.at(id);
784 int oldP = orient == Horizontal ? s->wid->x() : s->wid->y(); 799 int oldP = orient == Horizontal ? s->wid->x() : s->wid->y();
785 bool upLeft; 800 bool upLeft;
786 if ( false && orient == Horizontal ) { 801 if ( false && orient == Horizontal ) {
787 p += s->wid->width(); 802 p += s->wid->width();
788 upLeft = p > oldP; 803 upLeft = p > oldP;
789 } else 804 } else
790 upLeft = p < oldP; 805 upLeft = p < oldP;
791 806
792 moveAfter( p, id, upLeft ); 807 moveAfter( p, id, upLeft );
793 moveBefore( p-1, id-1, upLeft ); 808 moveBefore( p-1, id-1, upLeft );
794 809
795 storeSizes(); 810 storeSizes();
796} 811}
797 812
798 813
799void KDGanttMinimizeSplitter::setG( QWidget *w, int p, int s, bool isSplitter ) 814void KDGanttMinimizeSplitter::setG( QWidget *w, int p, int s, bool isSplitter )
800{ 815{
801 if ( orient == Horizontal ) { 816 if ( orient == Horizontal ) {
802 if ( false && orient == Horizontal && !isSplitter ) 817 if ( false && orient == Horizontal && !isSplitter )
803 p = contentsRect().width() - p - s; 818 p = contentsRect().width() - p - s;
804 w->setGeometry( p, contentsRect().y(), s, contentsRect().height() ); 819 w->setGeometry( p, contentsRect().y(), s, contentsRect().height() );
805 } else 820 } else
806 w->setGeometry( contentsRect().x(), p, contentsRect().width(), s ); 821 w->setGeometry( contentsRect().x(), p, contentsRect().width(), s );
807} 822}
808 823
809 824
810/* 825/*
811 Places the right/bottom edge of the widget at \a id at position \a pos. 826 Places the right/bottom edge of the widget at \a id at position \a pos.
812 827
813 \sa idAfter() 828 \sa idAfter()
814*/ 829*/
815void KDGanttMinimizeSplitter::moveBefore( int pos, int id, bool upLeft ) 830void KDGanttMinimizeSplitter::moveBefore( int pos, int id, bool upLeft )
816{ 831{
817 if( id < 0 ) 832 if( id < 0 )
818 return; 833 return;
819 QSplitterLayoutStruct *s = data->list.at(id); 834 QSplitterLayoutStruct *s = data->list.at(id);
820 if ( !s ) 835 if ( !s )
821 return; 836 return;
822 QWidget *w = s->wid; 837 QWidget *w = s->wid;
823 if ( w->isHidden() ) { 838 if ( w->isHidden() ) {
824 moveBefore( pos, id-1, upLeft ); 839 moveBefore( pos, id-1, upLeft );
825 } else if ( s->isSplitter ) { 840 } else if ( s->isSplitter ) {
826 int pos1, pos2; 841 int pos1, pos2;
827 int dd = s->sizer; 842 int dd = s->sizer;
828 if( false && orient == Horizontal ) { 843 if( false && orient == Horizontal ) {
829 pos1 = pos; 844 pos1 = pos;
830 pos2 = pos + dd; 845 pos2 = pos + dd;
831 } else { 846 } else {
832 pos2 = pos - dd; 847 pos2 = pos - dd;
833 pos1 = pos2 + 1; 848 pos1 = pos2 + 1;
834 } 849 }
835 if ( upLeft ) { 850 if ( upLeft ) {
836 setG( w, pos1, dd, TRUE ); 851 setG( w, pos1, dd, TRUE );
837 moveBefore( pos2, id-1, upLeft ); 852 moveBefore( pos2, id-1, upLeft );
838 } else { 853 } else {
839 moveBefore( pos2, id-1, upLeft ); 854 moveBefore( pos2, id-1, upLeft );
840 setG( w, pos1, dd, TRUE ); 855 setG( w, pos1, dd, TRUE );
841 } 856 }
842 } else { 857 } else {
843 int dd, newLeft, nextPos; 858 int dd, newLeft, nextPos;
844 if( false && orient == Horizontal ) { 859 if( false && orient == Horizontal ) {
845 dd = w->geometry().right() - pos; 860 dd = w->geometry().right() - pos;
846 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 861 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
847 newLeft = pos+1; 862 newLeft = pos+1;
848 nextPos = newLeft + dd; 863 nextPos = newLeft + dd;
849 } else { 864 } else {
850 dd = pos - pick( w->pos() ) + 1; 865 dd = pos - pick( w->pos() ) + 1;
851 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 866 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
852 newLeft = pos-dd+1; 867 newLeft = pos-dd+1;
853 nextPos = newLeft - 1; 868 nextPos = newLeft - 1;
854 } 869 }
855 setG( w, newLeft, dd, TRUE ); 870 setG( w, newLeft, dd, TRUE );
856 moveBefore( nextPos, id-1, upLeft ); 871 moveBefore( nextPos, id-1, upLeft );
857 } 872 }
858} 873}
859 874
860 875
861/* 876/*
862 Places the left/top edge of the widget at \a id at position \a pos. 877 Places the left/top edge of the widget at \a id at position \a pos.
863 878
864 \sa idAfter() 879 \sa idAfter()
865*/ 880*/
866void KDGanttMinimizeSplitter::moveAfter( int pos, int id, bool upLeft ) 881void KDGanttMinimizeSplitter::moveAfter( int pos, int id, bool upLeft )
867{ 882{
868 QSplitterLayoutStruct *s = id < int(data->list.count()) ? 883 QSplitterLayoutStruct *s = id < int(data->list.count()) ?
869 data->list.at(id) : 0; 884 data->list.at(id) : 0;
870 if ( !s ) 885 if ( !s )
871 return; 886 return;
872 QWidget *w = s->wid; 887 QWidget *w = s->wid;
873 if ( w->isHidden() ) { 888 if ( w->isHidden() ) {
874 moveAfter( pos, id+1, upLeft ); 889 moveAfter( pos, id+1, upLeft );
875 } else if ( pick( w->pos() ) == pos ) { 890 } else if ( pick( w->pos() ) == pos ) {
876 //No need to do anything if it's already there. 891 //No need to do anything if it's already there.
877 return; 892 return;
878 } else if ( s->isSplitter ) { 893 } else if ( s->isSplitter ) {
879 int dd = s->sizer; 894 int dd = s->sizer;
880 int pos1, pos2; 895 int pos1, pos2;
881 if( false && orient == Horizontal ) { 896 if( false && orient == Horizontal ) {
882 pos2 = pos - dd; 897 pos2 = pos - dd;
883 pos1 = pos2 + 1; 898 pos1 = pos2 + 1;
884 } else { 899 } else {
885 pos1 = pos; 900 pos1 = pos;
886 pos2 = pos + dd; 901 pos2 = pos + dd;
887 } 902 }
888 if ( upLeft ) { 903 if ( upLeft ) {
889 setG( w, pos1, dd, TRUE ); 904 setG( w, pos1, dd, TRUE );
890 moveAfter( pos2, id+1, upLeft ); 905 moveAfter( pos2, id+1, upLeft );
891 } else { 906 } else {
892 moveAfter( pos2, id+1, upLeft ); 907 moveAfter( pos2, id+1, upLeft );
893 setG( w, pos1, dd, TRUE ); 908 setG( w, pos1, dd, TRUE );
894 } 909 }
895 } else { 910 } else {
896 int left = pick( w->pos() ); 911 int left = pick( w->pos() );
897 int right, dd,/* newRight,*/ newLeft, nextPos; 912 int right, dd,/* newRight,*/ newLeft, nextPos;
898 if ( false && orient == Horizontal ) { 913 if ( false && orient == Horizontal ) {
899 dd = pos - left + 1; 914 dd = pos - left + 1;
900 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 915 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
901 newLeft = pos-dd+1; 916 newLeft = pos-dd+1;
902 nextPos = newLeft - 1; 917 nextPos = newLeft - 1;
903 } else { 918 } else {
904 right = pick( w->geometry().bottomRight() ); 919 right = pick( w->geometry().bottomRight() );
905 dd = right - pos + 1; 920 dd = right - pos + 1;
906 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 921 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
907 /*newRight = pos+dd-1;*/ 922 /*newRight = pos+dd-1;*/
908 newLeft = pos; 923 newLeft = pos;
909 nextPos = newLeft + dd; 924 nextPos = newLeft + dd;
910 } 925 }
911 setG( w, newLeft, dd, TRUE ); 926 setG( w, newLeft, dd, TRUE );
912 /*if( right != newRight )*/ 927 /*if( right != newRight )*/
913 moveAfter( nextPos, id+1, upLeft ); 928 moveAfter( nextPos, id+1, upLeft );
914 } 929 }
915} 930}
916 931
917 932
918void KDGanttMinimizeSplitter::expandPos( int id, int* min, int* max ) 933void KDGanttMinimizeSplitter::expandPos( int id, int* min, int* max )
919{ 934{
920 QSplitterLayoutStruct *s = data->list.at(id-1); 935 QSplitterLayoutStruct *s = data->list.at(id-1);
921 QWidget* w = s->wid; 936 QWidget* w = s->wid;
922 *min = pick( w->mapToParent( QPoint(0,0) ) ); 937 *min = pick( w->mapToParent( QPoint(0,0) ) );
923 938
924 if ( (uint) id == data->list.count() ) { 939 if ( (uint) id == data->list.count() ) {
925 pick( size() ); 940 pick( size() );
926 } 941 }
927 else { 942 else {
928 QSplitterLayoutStruct *s = data->list.at(id+1); 943 QSplitterLayoutStruct *s = data->list.at(id+1);
929 QWidget* w = s->wid; 944 QWidget* w = s->wid;
930 *max = pick( w->mapToParent( QPoint( w->width(), w->height() ) ) ) -8; 945 *max = pick( w->mapToParent( QPoint( w->width(), w->height() ) ) ) -8;
931 } 946 }
932} 947}
933 948
934 949
935/*! 950/*!
936 Returns the valid range of the splitter with id \a id in \a *min and \a *max. 951 Returns the valid range of the splitter with id \a id in \a *min and \a *max.
937 952
938 \sa idAfter() 953 \sa idAfter()
939*/ 954*/
940 955
941void KDGanttMinimizeSplitter::getRange( int id, int *min, int *max ) 956void KDGanttMinimizeSplitter::getRange( int id, int *min, int *max )
942{ 957{
943 int minB = 0;//before 958 int minB = 0;//before
944 int maxB = 0; 959 int maxB = 0;
945 int minA = 0; 960 int minA = 0;
946 int maxA = 0;//after 961 int maxA = 0;//after
947 int n = data->list.count(); 962 int n = data->list.count();
948 if ( id < 0 || id >= n ) 963 if ( id < 0 || id >= n )
949 return; 964 return;
950 int i; 965 int i;
951 for ( i = 0; i < id; i++ ) { 966 for ( i = 0; i < id; i++ ) {
952 QSplitterLayoutStruct *s = data->list.at(i); 967 QSplitterLayoutStruct *s = data->list.at(i);
953 if ( s->wid->isHidden() ) { 968 if ( s->wid->isHidden() ) {
954 //ignore 969 //ignore
955 } else if ( s->isSplitter ) { 970 } else if ( s->isSplitter ) {
956 minB += s->sizer; 971 minB += s->sizer;
957 maxB += s->sizer; 972 maxB += s->sizer;
958 } else { 973 } else {
959 minB += pick( minSize(s->wid) ); 974 minB += pick( minSize(s->wid) );
960 maxB += pick( s->wid->maximumSize() ); 975 maxB += pick( s->wid->maximumSize() );
961 } 976 }
962 } 977 }
963 for ( i = id; i < n; i++ ) { 978 for ( i = id; i < n; i++ ) {
964 QSplitterLayoutStruct *s = data->list.at(i); 979 QSplitterLayoutStruct *s = data->list.at(i);
965 if ( s->wid->isHidden() ) { 980 if ( s->wid->isHidden() ) {
966 //ignore 981 //ignore
967 } else if ( s->isSplitter ) { 982 } else if ( s->isSplitter ) {
968 minA += s->sizer; 983 minA += s->sizer;
969 maxA += s->sizer; 984 maxA += s->sizer;
970 } else { 985 } else {
971 minA += pick( minSize(s->wid) ); 986 minA += pick( minSize(s->wid) );
972 maxA += pick( s->wid->maximumSize() ); 987 maxA += pick( s->wid->maximumSize() );
973 } 988 }
974 } 989 }
975 QRect r = contentsRect(); 990 QRect r = contentsRect();
976 if ( orient == Horizontal && false ) { 991 if ( orient == Horizontal && false ) {
977#if QT_VERSION >= 0x030000 992#if QT_VERSION >= 0x030000
978 int splitterWidth = style().pixelMetric(QStyle::PM_SplitterWidth, this); 993 int splitterWidth = style().pixelMetric(QStyle::PM_SplitterWidth, this);
979#else 994#else
980 int splitterWidth = style().splitterWidth(); 995 int splitterWidth = style().splitterWidth();
981#endif 996#endif
982 997
983 if ( min ) 998 if ( min )
984 *min = pick(r.topRight()) - QMIN( maxB, pick(r.size())-minA ) - splitterWidth; 999 *min = pick(r.topRight()) - QMIN( maxB, pick(r.size())-minA ) - splitterWidth;
985 if ( max ) 1000 if ( max )
986 *max = pick(r.topRight()) - QMAX( minB, pick(r.size())-maxA ) - splitterWidth; 1001 *max = pick(r.topRight()) - QMAX( minB, pick(r.size())-maxA ) - splitterWidth;
987 } else { 1002 } else {
988 if ( min ) 1003 if ( min )
989 *min = pick(r.topLeft()) + QMAX( minB, pick(r.size())-maxA ); 1004 *min = pick(r.topLeft()) + QMAX( minB, pick(r.size())-maxA );
990 if ( max ) 1005 if ( max )
991 *max = pick(r.topLeft()) + QMIN( maxB, pick(r.size())-minA ); 1006 *max = pick(r.topLeft()) + QMIN( maxB, pick(r.size())-minA );
992 } 1007 }
993} 1008}
994 1009
995 1010
996/*! 1011/*!
997 Returns the closest legal position to \a p of the splitter with id \a id. 1012 Returns the closest legal position to \a p of the splitter with id \a id.
998 1013
999 \sa idAfter() 1014 \sa idAfter()
1000*/ 1015*/
1001 1016
1002int KDGanttMinimizeSplitter::adjustPos( int p, int id ) 1017int KDGanttMinimizeSplitter::adjustPos( int p, int id )
1003{ 1018{
1004 int min = 0; 1019 int min = 0;
1005 int max = 0; 1020 int max = 0;
1006 getRange( id, &min, &max ); 1021 getRange( id, &min, &max );
1007 p = QMAX( min, QMIN( p, max ) ); 1022 p = QMAX( min, QMIN( p, max ) );
1008 1023
1009 return p; 1024 return p;
1010} 1025}
1011 1026
1012 1027
1013void KDGanttMinimizeSplitter::doResize() 1028void KDGanttMinimizeSplitter::doResize()
1014{ 1029{
1015 QRect r = contentsRect(); 1030 QRect r = contentsRect();
1016 int i; 1031 int i;
1017 int n = data->list.count(); 1032 int n = data->list.count();
1018 QMemArray<QLayoutStruct> a( n ); 1033 QMemArray<QLayoutStruct> a( n );
1019 for ( i = 0; i< n; i++ ) { 1034 for ( i = 0; i< n; i++ ) {
1020 a[i].init(); 1035 a[i].init();
1021 QSplitterLayoutStruct *s = data->list.at(i); 1036 QSplitterLayoutStruct *s = data->list.at(i);
1022 if ( s->wid->isHidden() ) { 1037 if ( s->wid->isHidden() ) {
1023 a[i].stretch = 0; 1038 a[i].stretch = 0;
1024 a[i].sizeHint = a[i].minimumSize = 0; 1039 a[i].sizeHint = a[i].minimumSize = 0;
1025 a[i].maximumSize = 0; 1040 a[i].maximumSize = 0;
1026 } else if ( s->isSplitter ) { 1041 } else if ( s->isSplitter ) {
1027 a[i].stretch = 0; 1042 a[i].stretch = 0;
1028 a[i].sizeHint = a[i].minimumSize = a[i].maximumSize = s->sizer; 1043 a[i].sizeHint = a[i].minimumSize = a[i].maximumSize = s->sizer;
1029 a[i].empty = FALSE; 1044 a[i].empty = FALSE;
1030 } else if ( s->mode == KeepSize ) { 1045 } else if ( s->mode == KeepSize ) {
1031 a[i].stretch = 0; 1046 a[i].stretch = 0;
1032 a[i].minimumSize = pick( minSize(s->wid) ); 1047 a[i].minimumSize = pick( minSize(s->wid) );
1033 a[i].sizeHint = s->sizer; 1048 a[i].sizeHint = s->sizer;
1034 a[i].maximumSize = pick( s->wid->maximumSize() ); 1049 a[i].maximumSize = pick( s->wid->maximumSize() );
1035 a[i].empty = FALSE; 1050 a[i].empty = FALSE;
1036 } else if ( s->mode == FollowSizeHint ) { 1051 } else if ( s->mode == FollowSizeHint ) {
1037 a[i].stretch = 0; 1052 a[i].stretch = 0;
1038 a[i].minimumSize = a[i].sizeHint = pick( s->wid->sizeHint() ); 1053 a[i].minimumSize = a[i].sizeHint = pick( s->wid->sizeHint() );
1039 a[i].maximumSize = pick( s->wid->maximumSize() ); 1054 a[i].maximumSize = pick( s->wid->maximumSize() );
1040 a[i].empty = FALSE; 1055 a[i].empty = FALSE;
1041 } else { //proportional 1056 } else { //proportional
1042 a[i].stretch = s->sizer; 1057 a[i].stretch = s->sizer;
1043 a[i].maximumSize = pick( s->wid->maximumSize() ); 1058 a[i].maximumSize = pick( s->wid->maximumSize() );
1044 a[i].sizeHint = a[i].minimumSize = pick( minSize(s->wid) ); 1059 a[i].sizeHint = a[i].minimumSize = pick( minSize(s->wid) );
1045 a[i].empty = FALSE; 1060 a[i].empty = FALSE;
1046 } 1061 }
1047 } 1062 }
1048 1063
1049 kdganttGeomCalc( a, 0, n, pick( r.topLeft() ), pick( r.size() ), 0 ); 1064 kdganttGeomCalc( a, 0, n, pick( r.topLeft() ), pick( r.size() ), 0 );
1050 1065
1051 for ( i = 0; i< n; i++ ) { 1066 for ( i = 0; i< n; i++ ) {
1052 QSplitterLayoutStruct *s = data->list.at(i); 1067 QSplitterLayoutStruct *s = data->list.at(i);
1053 setG( s->wid, a[i].pos, a[i].size ); 1068 setG( s->wid, a[i].pos, a[i].size );
1054 } 1069 }
1055 1070
1056} 1071}
1057 1072
1058 1073
1059void KDGanttMinimizeSplitter::recalc( bool update ) 1074void KDGanttMinimizeSplitter::recalc( bool update )
1060{ 1075{
1061 int fi = 2*frameWidth(); 1076 int fi = 2*frameWidth();
1062 int maxl = fi; 1077 int maxl = fi;
1063 int minl = fi; 1078 int minl = fi;
1064 int maxt = QWIDGETSIZE_MAX; 1079 int maxt = QWIDGETSIZE_MAX;
1065 int mint = fi; 1080 int mint = fi;
1066 int n = data->list.count(); 1081 int n = data->list.count();
1067 bool first = TRUE; 1082 bool first = TRUE;
1068 /* 1083 /*