summaryrefslogtreecommitdiffabout
path: root/microkde/KDGanttMinimizeSplitter.cpp
Unidiff
Diffstat (limited to 'microkde/KDGanttMinimizeSplitter.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--microkde/KDGanttMinimizeSplitter.cpp32
1 files changed, 31 insertions, 1 deletions
diff --git a/microkde/KDGanttMinimizeSplitter.cpp b/microkde/KDGanttMinimizeSplitter.cpp
index 029f14b..ea3a329 100644
--- a/microkde/KDGanttMinimizeSplitter.cpp
+++ b/microkde/KDGanttMinimizeSplitter.cpp
@@ -128,128 +128,130 @@ void KDGanttSplitterHandle::mousePressEvent( QMouseEvent *e )
128 _activeButton = onButton( e->pos() ); 128 _activeButton = onButton( e->pos() );
129 mouseOffset = s->pick(e->pos()); 129 mouseOffset = s->pick(e->pos());
130 mMouseDown = true; 130 mMouseDown = true;
131 repaint(); 131 repaint();
132 updateCursor( e->pos() ); 132 updateCursor( e->pos() );
133 } 133 }
134} 134}
135 135
136void KDGanttSplitterHandle::updateCursor( const QPoint& p) 136void KDGanttSplitterHandle::updateCursor( const QPoint& p)
137{ 137{
138 if ( onButton( p ) != 0 ) { 138 if ( onButton( p ) != 0 ) {
139 setCursor( arrowCursor ); 139 setCursor( arrowCursor );
140 } 140 }
141 else { 141 else {
142 if ( orient == KDGanttMinimizeSplitter::Horizontal ) 142 if ( orient == KDGanttMinimizeSplitter::Horizontal )
143 setCursor( splitHCursor ); 143 setCursor( splitHCursor );
144 else 144 else
145 setCursor( splitVCursor ); 145 setCursor( splitVCursor );
146 } 146 }
147} 147}
148void KDGanttSplitterHandle::toggle() 148void KDGanttSplitterHandle::toggle()
149{ 149{
150 int pos; 150 int pos;
151 int min, max; 151 int min, max;
152 if ( !_collapsed ) { 152 if ( !_collapsed ) {
153 s->expandPos( id(), &min, &max ); 153 s->expandPos( id(), &min, &max );
154 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left 154 if ( s->minimizeDirection() == KDGanttMinimizeSplitter::Left
155 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 155 || s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
156 pos = min; 156 pos = min;
157 } 157 }
158 else { 158 else {
159 pos = max; 159 pos = max;
160 } 160 }
161 161
162 _origPos = s->pick(mapToParent( QPoint( 0,0 ) )); 162 _origPos = s->pick(mapToParent( QPoint( 0,0 ) ));
163 s->moveSplitter( pos, id() ); 163 s->moveSplitter( pos, id() );
164 _collapsed = true; 164 _collapsed = true;
165 } 165 }
166 else { 166 else {
167 s->moveSplitter( _origPos, id() ); 167 s->moveSplitter( _origPos, id() );
168 _collapsed = false; 168 _collapsed = false;
169 } 169 }
170 repaint(); 170 repaint();
171} 171}
172 172
173void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e ) 173void KDGanttSplitterHandle::mouseReleaseEvent( QMouseEvent *e )
174{ 174{
175 mMouseDown = false; 175 mMouseDown = false;
176 if ( _activeButton != 0 ) { 176 if ( _activeButton != 0 ) {
177 if ( onButton( e->pos() ) == _activeButton ) 177 if ( onButton( e->pos() ) == _activeButton )
178 { 178 {
179 toggle(); 179 toggle();
180 } 180 }
181 _activeButton = 0; 181 _activeButton = 0;
182 updateCursor( e->pos() ); 182 updateCursor( e->pos() );
183 } 183 }
184 else { 184 else {
185 if ( !opaque() && e->button() == LeftButton ) { 185 if ( !opaque() && e->button() == LeftButton ) {
186 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos())) 186 QCOORD pos = s->pick(parentWidget()->mapFromGlobal(e->globalPos()))
187 - mouseOffset; 187 - mouseOffset;
188 s->setRubberband( -1 ); 188 s->setRubberband( -1 );
189 s->moveSplitter( pos, id() ); 189 s->moveSplitter( pos, id() );
190 } 190 }
191 } 191 }
192 if ( s->rubberBand() )
193 s->rubberBand()->hide();
192 repaint(); 194 repaint();
193} 195}
194 196
195int KDGanttSplitterHandle::onButton( const QPoint& p ) 197int KDGanttSplitterHandle::onButton( const QPoint& p )
196{ 198{
197 QValueList<QPointArray> list = buttonRegions(); 199 QValueList<QPointArray> list = buttonRegions();
198 int index = 1; 200 int index = 1;
199 int add = 12; 201 int add = 12;
200 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) { 202 for( QValueList<QPointArray>::Iterator it = list.begin(); it != list.end(); ++it ) {
201 QRect rect = (*it).boundingRect(); 203 QRect rect = (*it).boundingRect();
202 rect.setLeft( rect.left()- add ); 204 rect.setLeft( rect.left()- add );
203 rect.setRight( rect.right() + add); 205 rect.setRight( rect.right() + add);
204 rect.setTop( rect.top()- add ); 206 rect.setTop( rect.top()- add );
205 rect.setBottom( rect.bottom() + add); 207 rect.setBottom( rect.bottom() + add);
206 if ( rect.contains( p ) ) { 208 if ( rect.contains( p ) ) {
207 return index; 209 return index;
208 } 210 }
209 index++; 211 index++;
210 } 212 }
211 return 0; 213 return 0;
212} 214}
213 215
214 216
215QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions() 217QValueList<QPointArray> KDGanttSplitterHandle::buttonRegions()
216{ 218{
217 QValueList<QPointArray> list; 219 QValueList<QPointArray> list;
218 220
219 int sw = 8; 221 int sw = 8;
220 int yyy = 1; 222 int yyy = 1;
221 int xxx = 1; 223 int xxx = 1;
222 int voffset[] = { (int) -sw*3, (int) sw*3 }; 224 int voffset[] = { (int) -sw*3, (int) sw*3 };
223 for ( int i = 0; i < 2; i++ ) { 225 for ( int i = 0; i < 2; i++ ) {
224 QPointArray arr; 226 QPointArray arr;
225 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right || 227 if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ||
226 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) { 228 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left) {
227 int mid = height()/2 + voffset[i]; 229 int mid = height()/2 + voffset[i];
228 arr.setPoints( 3, 230 arr.setPoints( 3,
229 1-xxx, mid - sw + 4, 231 1-xxx, mid - sw + 4,
230 sw-3-xxx, mid, 232 sw-3-xxx, mid,
231 1-xxx, mid + sw -4); 233 1-xxx, mid + sw -4);
232 } 234 }
233 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left || 235 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Left ||
234 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) { 236 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Right ) {
235 int mid = height()/2 + voffset[i]; 237 int mid = height()/2 + voffset[i];
236 arr.setPoints( 3, 238 arr.setPoints( 3,
237 sw-4, mid - sw + 4, 239 sw-4, mid - sw + 4,
238 0, mid, 240 0, mid,
239 sw-4, mid + sw - 4); 241 sw-4, mid + sw - 4);
240 } 242 }
241 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up || 243 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ||
242 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) { 244 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down) {
243 int mid = width()/2 + voffset[i]; 245 int mid = width()/2 + voffset[i];
244 arr.setPoints( 3, 246 arr.setPoints( 3,
245 mid - sw + 4, sw-4, 247 mid - sw + 4, sw-4,
246 mid, 0, 248 mid, 0,
247 mid + sw - 4, sw-4 ); 249 mid + sw - 4, sw-4 );
248 } 250 }
249 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down || 251 else if ( !_collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Down ||
250 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) { 252 _collapsed && s->minimizeDirection() == KDGanttMinimizeSplitter::Up ) {
251 int mid = width()/2 + voffset[i]; 253 int mid = width()/2 + voffset[i];
252 arr.setPoints( 3, 254 arr.setPoints( 3,
253 mid - sw + 4, 1-yyy, 255 mid - sw + 4, 1-yyy,
254 mid, sw-3-yyy, 256 mid, sw-3-yyy,
255 mid + sw -4, 1-yyy); 257 mid + sw -4, 1-yyy);
@@ -373,166 +375,170 @@ void kdganttGeomCalc( QMemArray<QLayoutStruct> &chain, int start, int count, int
373 This class (and its documentation) is largely a copy of Qt's 375 This class (and its documentation) is largely a copy of Qt's
374 QSplitter; the copying was necessary because QSplitter is not 376 QSplitter; the copying was necessary because QSplitter is not
375 extensible at all. QSplitter and its documentation are licensed 377 extensible at all. QSplitter and its documentation are licensed
376 according to the GPL and the Qt Professional License (if you hold 378 according to the GPL and the Qt Professional License (if you hold
377 such a license) and are (C) Trolltech AS. 379 such a license) and are (C) Trolltech AS.
378 380
379 A splitter lets the user control the size of child widgets by 381 A splitter lets the user control the size of child widgets by
380 dragging the boundary between the children. Any number of widgets 382 dragging the boundary between the children. Any number of widgets
381 may be controlled. 383 may be controlled.
382 384
383 To show a QListBox, a QListView and a QTextEdit side by side: 385 To show a QListBox, a QListView and a QTextEdit side by side:
384 386
385 \code 387 \code
386 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent ); 388 KDGanttMinimizeSplitter *split = new KDGanttMinimizeSplitter( parent );
387 QListBox *lb = new QListBox( split ); 389 QListBox *lb = new QListBox( split );
388 QListView *lv = new QListView( split ); 390 QListView *lv = new QListView( split );
389 QTextEdit *ed = new QTextEdit( split ); 391 QTextEdit *ed = new QTextEdit( split );
390 \endcode 392 \endcode
391 393
392 In KDGanttMinimizeSplitter, the boundary can be either horizontal or 394 In KDGanttMinimizeSplitter, the boundary can be either horizontal or
393 vertical. The default is horizontal (the children are side by side) 395 vertical. The default is horizontal (the children are side by side)
394 but you can use setOrientation( QSplitter::Vertical ) to set it to 396 but you can use setOrientation( QSplitter::Vertical ) to set it to
395 vertical. 397 vertical.
396 398
397 Use setResizeMode() to specify 399 Use setResizeMode() to specify
398 that a widget should keep its size when the splitter is resized. 400 that a widget should keep its size when the splitter is resized.
399 401
400 Although KDGanttMinimizeSplitter normally resizes the children only 402 Although KDGanttMinimizeSplitter normally resizes the children only
401 at the end of a resize operation, if you call setOpaqueResize( TRUE 403 at the end of a resize operation, if you call setOpaqueResize( TRUE
402 ) the widgets are resized as often as possible. 404 ) the widgets are resized as often as possible.
403 405
404 The initial distribution of size between the widgets is determined 406 The initial distribution of size between the widgets is determined
405 by the initial size of each widget. You can also use setSizes() to 407 by the initial size of each widget. You can also use setSizes() to
406 set the sizes of all the widgets. The function sizes() returns the 408 set the sizes of all the widgets. The function sizes() returns the
407 sizes set by the user. 409 sizes set by the user.
408 410
409 If you hide() a child, its space will be distributed among the other 411 If you hide() a child, its space will be distributed among the other
410 children. It will be reinstated when you show() it again. It is also 412 children. It will be reinstated when you show() it again. It is also
411 possible to reorder the widgets within the splitter using 413 possible to reorder the widgets within the splitter using
412 moveToFirst() and moveToLast(). 414 moveToFirst() and moveToLast().
413*/ 415*/
414 416
415 417
416 418
417static QSize minSize( const QWidget* /*w*/ ) 419static QSize minSize( const QWidget* /*w*/ )
418{ 420{
419 return QSize(0,0); 421 return QSize(0,0);
420} 422}
421 423
422// This is the original version of minSize 424// This is the original version of minSize
423static QSize minSizeHint( const QWidget* w ) 425static QSize minSizeHint( const QWidget* w )
424{ 426{
425 QSize min = w->minimumSize(); 427 QSize min = w->minimumSize();
426 QSize s; 428 QSize s;
427 if ( min.height() <= 0 || min.width() <= 0 ) 429 if ( min.height() <= 0 || min.width() <= 0 )
428 s = w->minimumSizeHint(); 430 s = w->minimumSizeHint();
429 if ( min.height() > 0 ) 431 if ( min.height() > 0 )
430 s.setHeight( min.height() ); 432 s.setHeight( min.height() );
431 if ( min.width() > 0 ) 433 if ( min.width() > 0 )
432 s.setWidth( min.width() ); 434 s.setWidth( min.width() );
433 return s.expandedTo(QSize(0,0)); 435 return s.expandedTo(QSize(0,0));
434} 436}
435 437
436 438
437
438/*! 439/*!
439 Constructs a horizontal splitter with the \a parent and \a 440 Constructs a horizontal splitter with the \a parent and \a
440 name arguments being passed on to the QFrame constructor. 441 name arguments being passed on to the QFrame constructor.
441*/ 442*/
442KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name ) 443KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( QWidget *parent, const char *name )
443 :QFrame(parent,name,WPaintUnclipped) 444 :QFrame(parent,name,WPaintUnclipped)
444{ 445{
446 mRubberBand = 0;
445 mFirstHandle = 0; 447 mFirstHandle = 0;
446#if QT_VERSION >= 232 448#if QT_VERSION >= 232
447 orient = Horizontal; 449 orient = Horizontal;
448 init(); 450 init();
449#endif 451#endif
450} 452}
451 453
452/*! 454/*!
453 Constructs a splitter with orientation \a o with the \a parent 455 Constructs a splitter with orientation \a o with the \a parent
454 and \a name arguments being passed on to the QFrame constructor. 456 and \a name arguments being passed on to the QFrame constructor.
455*/ 457*/
456KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name ) 458KDGanttMinimizeSplitter::KDGanttMinimizeSplitter( Orientation o, QWidget *parent, const char *name )
457 :QFrame(parent,name,WPaintUnclipped) 459 :QFrame(parent,name,WPaintUnclipped)
458{ 460{
461
462 mRubberBand = 0;
459 mFirstHandle = 0; 463 mFirstHandle = 0;
460#if QT_VERSION >= 232 464#if QT_VERSION >= 232
461 orient = o; 465 orient = o;
462 init(); 466 init();
463#endif 467#endif
464} 468}
465 469
466/*! 470/*!
467 Destroys the splitter and any children. 471 Destroys the splitter and any children.
468*/ 472*/
469KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter() 473KDGanttMinimizeSplitter::~KDGanttMinimizeSplitter()
470{ 474{
471#if QT_VERSION >= 232 475#if QT_VERSION >= 232
472 data->list.setAutoDelete( TRUE ); 476 data->list.setAutoDelete( TRUE );
473 delete data; 477 delete data;
474#endif 478#endif
479 if ( mRubberBand )
480 delete mRubberBand;
475} 481}
476 482
477 483
478#if QT_VERSION >= 232 484#if QT_VERSION >= 232
479void KDGanttMinimizeSplitter::init() 485void KDGanttMinimizeSplitter::init()
480{ 486{
481 data = new QSplitterData; 487 data = new QSplitterData;
482 if ( orient == Horizontal ) 488 if ( orient == Horizontal )
483 setSizePolicy( QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum) ); 489 setSizePolicy( QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Minimum) );
484 else 490 else
485 setSizePolicy( QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding) ); 491 setSizePolicy( QSizePolicy(QSizePolicy::Minimum,QSizePolicy::Expanding) );
486#ifndef DESKTOP_VERSION 492#ifndef DESKTOP_VERSION
487 setOpaqueResize( false ); 493 setOpaqueResize( false );
488#else 494#else
489 setOpaqueResize( true ); 495 setOpaqueResize( true );
490#endif 496#endif
491} 497}
492#endif 498#endif
493 499
494 500
495void KDGanttMinimizeSplitter::toggle() 501void KDGanttMinimizeSplitter::toggle()
496{ 502{
497 if ( mFirstHandle ) 503 if ( mFirstHandle )
498 mFirstHandle->toggle(); 504 mFirstHandle->toggle();
499 else 505 else
500 qDebug("KDGanttMinimizeSplitter::toggle::sorry, handle not available "); 506 qDebug("KDGanttMinimizeSplitter::toggle::sorry, handle not available ");
501 507
502} 508}
503 509
504 510
505/*! 511/*!
506 \brief the orientation of the splitter 512 \brief the orientation of the splitter
507 513
508 By default the orientation is horizontal (the widgets are side by side). 514 By default the orientation is horizontal (the widgets are side by side).
509 The possible orientations are Qt:Vertical and Qt::Horizontal (the default). 515 The possible orientations are Qt:Vertical and Qt::Horizontal (the default).
510*/ 516*/
511void KDGanttMinimizeSplitter::setOrientation( Orientation o ) 517void KDGanttMinimizeSplitter::setOrientation( Orientation o )
512{ 518{
513#if QT_VERSION >= 232 519#if QT_VERSION >= 232
514 if ( orient == o ) 520 if ( orient == o )
515 return; 521 return;
516 orient = o; 522 orient = o;
517 523
518 if ( orient == Horizontal ) 524 if ( orient == Horizontal )
519 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) ); 525 setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Minimum ) );
520 else 526 else
521 setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) ); 527 setSizePolicy( QSizePolicy( QSizePolicy::Minimum, QSizePolicy::Expanding ) );
522 528
523 QSplitterLayoutStruct *s = data->list.first(); 529 QSplitterLayoutStruct *s = data->list.first();
524 while ( s ) { 530 while ( s ) {
525 if ( s->isSplitter ) 531 if ( s->isSplitter )
526 ((KDGanttSplitterHandle*)s->wid)->setOrientation( o ); 532 ((KDGanttSplitterHandle*)s->wid)->setOrientation( o );
527 s = data->list.next(); // ### next at end of loop, no iterator 533 s = data->list.next(); // ### next at end of loop, no iterator
528 } 534 }
529 recalc( isVisible() ); 535 recalc( isVisible() );
530#endif 536#endif
531} 537}
532 538
533 539
534#if QT_VERSION >= 232 540#if QT_VERSION >= 232
535/*! 541/*!
536 \reimp 542 \reimp
537*/ 543*/
538void KDGanttMinimizeSplitter::resizeEvent( QResizeEvent * ) 544void KDGanttMinimizeSplitter::resizeEvent( QResizeEvent * )
@@ -581,153 +587,177 @@ QSplitterLayoutStruct *KDGanttMinimizeSplitter::addWidget( QWidget *w, bool firs
581 s->isSplitter = FALSE; 587 s->isSplitter = FALSE;
582 if ( first ) 588 if ( first )
583 data->list.insert( 0, s ); 589 data->list.insert( 0, s );
584 else 590 else
585 data->list.append( s ); 591 data->list.append( s );
586 if ( newHandle && isVisible() ) 592 if ( newHandle && isVisible() )
587 newHandle->show(); //will trigger sending of post events 593 newHandle->show(); //will trigger sending of post events
588 return s; 594 return s;
589} 595}
590 596
591 597
592/*! 598/*!
593 Tells the splitter that a child widget has been inserted or removed. 599 Tells the splitter that a child widget has been inserted or removed.
594 The event is passed in \a c. 600 The event is passed in \a c.
595*/ 601*/
596void KDGanttMinimizeSplitter::childEvent( QChildEvent *c ) 602void KDGanttMinimizeSplitter::childEvent( QChildEvent *c )
597{ 603{
598 if ( c->type() == QEvent::ChildInserted ) { 604 if ( c->type() == QEvent::ChildInserted ) {
599 if ( !c->child()->isWidgetType() ) 605 if ( !c->child()->isWidgetType() )
600 return; 606 return;
601 607
602 if ( ((QWidget*)c->child())->testWFlags( WType_TopLevel ) ) 608 if ( ((QWidget*)c->child())->testWFlags( WType_TopLevel ) )
603 return; 609 return;
604 610
605 QSplitterLayoutStruct *s = data->list.first(); 611 QSplitterLayoutStruct *s = data->list.first();
606 while ( s ) { 612 while ( s ) {
607 if ( s->wid == c->child() ) 613 if ( s->wid == c->child() )
608 return; 614 return;
609 s = data->list.next(); 615 s = data->list.next();
610 } 616 }
611 addWidget( (QWidget*)c->child() ); 617 addWidget( (QWidget*)c->child() );
612 recalc( isVisible() ); 618 recalc( isVisible() );
613 619
614 } else if ( c->type() == QEvent::ChildRemoved ) { 620 } else if ( c->type() == QEvent::ChildRemoved ) {
615 QSplitterLayoutStruct *p = 0; 621 QSplitterLayoutStruct *p = 0;
616 if ( data->list.count() > 1 ) 622 if ( data->list.count() > 1 )
617 p = data->list.at(1); //remove handle _after_ first widget. 623 p = data->list.at(1); //remove handle _after_ first widget.
618 QSplitterLayoutStruct *s = data->list.first(); 624 QSplitterLayoutStruct *s = data->list.first();
619 while ( s ) { 625 while ( s ) {
620 if ( s->wid == c->child() ) { 626 if ( s->wid == c->child() ) {
621 data->list.removeRef( s ); 627 data->list.removeRef( s );
622 delete s; 628 delete s;
623 if ( p && p->isSplitter ) { 629 if ( p && p->isSplitter ) {
624 data->list.removeRef( p ); 630 data->list.removeRef( p );
625 delete p->wid; //will call childEvent 631 delete p->wid; //will call childEvent
626 delete p; 632 delete p;
627 } 633 }
628 recalcId(); 634 recalcId();
629 doResize(); 635 doResize();
630 return; 636 return;
631 } 637 }
632 p = s; 638 p = s;
633 s = data->list.next(); 639 s = data->list.next();
634 } 640 }
635 } 641 }
636} 642}
637 643
638 644
639/*! 645/*!
640 Shows a rubber band at position \a p. If \a p is negative, the 646 Shows a rubber band at position \a p. If \a p is negative, the
641 rubber band is removed. 647 rubber band is removed.
642*/ 648*/
643void KDGanttMinimizeSplitter::setRubberband( int p ) 649void KDGanttMinimizeSplitter::setRubberband( int p )
644{ 650{
651#ifdef DESKTOP_VERSION
645 QPainter paint( this ); 652 QPainter paint( this );
646 paint.setPen( gray ); 653 paint.setPen( gray );
647 paint.setBrush( gray ); 654 paint.setBrush( gray );
648 paint.setRasterOp( XorROP ); 655 paint.setRasterOp( XorROP );
649 QRect r = contentsRect(); 656 QRect r = contentsRect();
650 const int rBord = 3; //Themable???? 657 const int rBord = 3; //Themable????
651#if QT_VERSION >= 0x030000 658#if QT_VERSION >= 0x030000
652 int sw = style().pixelMetric(QStyle::PM_SplitterWidth, this); 659 int sw = style().pixelMetric(QStyle::PM_SplitterWidth, this);
653#else 660#else
654 int sw = style().splitterWidth(); 661 int sw = style().splitterWidth();
655#endif 662#endif
656 if ( orient == Horizontal ) { 663 if ( orient == Horizontal ) {
657 if ( opaqueOldPos >= 0 ) 664 if ( opaqueOldPos >= 0 )
658 paint.drawRect( opaqueOldPos + sw/2 - rBord , r.y(), 665 paint.drawRect( opaqueOldPos + sw/2 - rBord , r.y(),
659 2*rBord, r.height() ); 666 2*rBord, r.height() );
660 if ( p >= 0 ) 667 if ( p >= 0 )
661 paint.drawRect( p + sw/2 - rBord, r.y(), 2*rBord, r.height() ); 668 paint.drawRect( p + sw/2 - rBord, r.y(), 2*rBord, r.height() );
662 } else { 669 } else {
663 if ( opaqueOldPos >= 0 ) 670 if ( opaqueOldPos >= 0 )
664 paint.drawRect( r.x(), opaqueOldPos + sw/2 - rBord, 671 paint.drawRect( r.x(), opaqueOldPos + sw/2 - rBord,
665 r.width(), 2*rBord ); 672 r.width(), 2*rBord );
666 if ( p >= 0 ) 673 if ( p >= 0 )
667 paint.drawRect( r.x(), p + sw/2 - rBord, r.width(), 2*rBord ); 674 paint.drawRect( r.x(), p + sw/2 - rBord, r.width(), 2*rBord );
668 } 675 }
669 opaqueOldPos = p; 676 opaqueOldPos = p;
677#else
678 if ( !mRubberBand ) {
679 mRubberBand = new QFrame( 0, "rubber", WStyle_NoBorder | WStyle_Customize | WStyle_StaysOnTop);
680 mRubberBand->setFrameStyle( Box | Raised );
681 mRubberBand->setPalette( QPalette ( Qt::green.light(),Qt::green.dark() ) );
682 }
683 QRect r = contentsRect();
684 const int rBord = 5; //Themable????
685 int sw = style().splitterWidth();
686 if ( orient == Horizontal ) {
687 if ( p >= 0 ) {
688 QPoint geo = mapToGlobal (QPoint ( p + sw/2 - rBord, r.y()));
689 mRubberBand->setGeometry( geo.x(), geo.y(), 2*rBord, r.height() );
690 }
691 } else {
692 if ( p >= 0 ) {
693 QPoint geo = mapToGlobal (QPoint ( r.x(), p + sw/2 - rBord));
694 mRubberBand->setGeometry( geo.x(), geo.y(), r.width(), 2*rBord);
695 }
696 }
697 opaqueOldPos = p;
698 mRubberBand->show();
699#endif
670} 700}
671 701
672 702
673/*! \reimp */ 703/*! \reimp */
674bool KDGanttMinimizeSplitter::event( QEvent *e ) 704bool KDGanttMinimizeSplitter::event( QEvent *e )
675{ 705{
676 if ( e->type() == QEvent::LayoutHint || ( e->type() == QEvent::Show && data->firstShow ) ) { 706 if ( e->type() == QEvent::LayoutHint || ( e->type() == QEvent::Show && data->firstShow ) ) {
677 recalc( isVisible() ); 707 recalc( isVisible() );
678 if ( e->type() == QEvent::Show ) 708 if ( e->type() == QEvent::Show )
679 data->firstShow = FALSE; 709 data->firstShow = FALSE;
680 } 710 }
681 return QWidget::event( e ); 711 return QWidget::event( e );
682} 712}
683 713
684 714
685/*! 715/*!
686 \obsolete 716 \obsolete
687 717
688 Draws the splitter handle in the rectangle described by \a x, \a y, 718 Draws the splitter handle in the rectangle described by \a x, \a y,
689 \a w, \a h using painter \a p. 719 \a w, \a h using painter \a p.
690 \sa QStyle::drawPrimitive() 720 \sa QStyle::drawPrimitive()
691*/ 721*/
692void KDGanttMinimizeSplitter::drawSplitter( QPainter *p, 722void KDGanttMinimizeSplitter::drawSplitter( QPainter *p,
693 QCOORD x, QCOORD y, QCOORD w, QCOORD h ) 723 QCOORD x, QCOORD y, QCOORD w, QCOORD h )
694{ 724{
695#if 0 725#if 0
696 // LR 726 // LR
697 style().drawPrimitive(QStyle::PE_Splitter, p, QRect(x, y, w, h), colorGroup(), 727 style().drawPrimitive(QStyle::PE_Splitter, p, QRect(x, y, w, h), colorGroup(),
698 (orientation() == Qt::Horizontal ? 728 (orientation() == Qt::Horizontal ?
699 QStyle::Style_Horizontal : 0)); 729 QStyle::Style_Horizontal : 0));
700#endif 730#endif
701} 731}
702 732
703 733
704/*! 734/*!
705 Returns the id of the splitter to the right of or below the widget \a w, 735 Returns the id of the splitter to the right of or below the widget \a w,
706 or 0 if there is no such splitter 736 or 0 if there is no such splitter
707 (i.e. it is either not in this KDGanttMinimizeSplitter or it is at the end). 737 (i.e. it is either not in this KDGanttMinimizeSplitter or it is at the end).
708*/ 738*/
709int KDGanttMinimizeSplitter::idAfter( QWidget* w ) const 739int KDGanttMinimizeSplitter::idAfter( QWidget* w ) const
710{ 740{
711 QSplitterLayoutStruct *s = data->list.first(); 741 QSplitterLayoutStruct *s = data->list.first();
712 bool seen_w = FALSE; 742 bool seen_w = FALSE;
713 while ( s ) { 743 while ( s ) {
714 if ( s->isSplitter && seen_w ) 744 if ( s->isSplitter && seen_w )
715 return data->list.at(); 745 return data->list.at();
716 if ( !s->isSplitter && s->wid == w ) 746 if ( !s->isSplitter && s->wid == w )
717 seen_w = TRUE; 747 seen_w = TRUE;
718 s = data->list.next(); 748 s = data->list.next();
719 } 749 }
720 return 0; 750 return 0;
721} 751}
722 752
723 753
724/*! 754/*!
725 Moves the left/top edge of the splitter handle with id \a id as 755 Moves the left/top edge of the splitter handle with id \a id as
726 close as possible to position \a p, which is the distance from the 756 close as possible to position \a p, which is the distance from the
727 left (or top) edge of the widget. 757 left (or top) edge of the widget.
728 758
729 For Arabic and Hebrew the layout is reversed, and using this 759 For Arabic and Hebrew the layout is reversed, and using this
730 function to set the position of the splitter might lead to 760 function to set the position of the splitter might lead to
731 unexpected results, since in Arabic and Hebrew the position of 761 unexpected results, since in Arabic and Hebrew the position of
732 splitter one is to the left of the position of splitter zero. 762 splitter one is to the left of the position of splitter zero.
733 763