summaryrefslogtreecommitdiff
path: root/libqtaux
Unidiff
Diffstat (limited to 'libqtaux') (more/less context) (ignore whitespace changes)
-rw-r--r--libqtaux/qsplitter.cpp2
1 files changed, 1 insertions, 1 deletions
diff --git a/libqtaux/qsplitter.cpp b/libqtaux/qsplitter.cpp
index 39321f8..959d5e1 100644
--- a/libqtaux/qsplitter.cpp
+++ b/libqtaux/qsplitter.cpp
@@ -474,513 +474,513 @@ void QSplitter::drawSplitter( QPainter *p,
474 Returns the id of the splitter to the right of or below the widget \a w, 474 Returns the id of the splitter to the right of or below the widget \a w,
475 or 0 if there is no such splitter. 475 or 0 if there is no such splitter.
476 (ie. it is either not in this QSplitter, or it is at the end). 476 (ie. it is either not in this QSplitter, or it is at the end).
477*/ 477*/
478 478
479int QSplitter::idAfter( QWidget* w ) const 479int QSplitter::idAfter( QWidget* w ) const
480{ 480{
481 QSplitterLayoutStruct *s = data->list.first(); 481 QSplitterLayoutStruct *s = data->list.first();
482 bool seen_w = FALSE; 482 bool seen_w = FALSE;
483 while ( s ) { 483 while ( s ) {
484 if ( s->isSplitter && seen_w ) 484 if ( s->isSplitter && seen_w )
485 return data->list.at(); 485 return data->list.at();
486 if ( !s->isSplitter && s->wid == w ) 486 if ( !s->isSplitter && s->wid == w )
487 seen_w = TRUE; 487 seen_w = TRUE;
488 s = data->list.next(); 488 s = data->list.next();
489 } 489 }
490 return 0; 490 return 0;
491} 491}
492 492
493 493
494/*! 494/*!
495 Moves the left/top edge of the splitter handle with id \a id as 495 Moves the left/top edge of the splitter handle with id \a id as
496 close as possible to \a p which is the distance from the left (or 496 close as possible to \a p which is the distance from the left (or
497 top) edge of the widget. 497 top) edge of the widget.
498 498
499 \sa idAfter() 499 \sa idAfter()
500*/ 500*/
501void QSplitter::moveSplitter( QCOORD p, int id ) 501void QSplitter::moveSplitter( QCOORD p, int id )
502{ 502{
503 p = adjustPos( p, id ); 503 p = adjustPos( p, id );
504 504
505 QSplitterLayoutStruct *s = data->list.at(id); 505 QSplitterLayoutStruct *s = data->list.at(id);
506 int oldP = orient == Horizontal? s->wid->x() : s->wid->y(); 506 int oldP = orient == Horizontal? s->wid->x() : s->wid->y();
507 bool upLeft = p < oldP; 507 bool upLeft = p < oldP;
508 508
509 moveAfter( p, id, upLeft ); 509 moveAfter( p, id, upLeft );
510 moveBefore( p-1, id-1, upLeft ); 510 moveBefore( p-1, id-1, upLeft );
511 511
512 storeSizes(); 512 storeSizes();
513} 513}
514 514
515 515
516void QSplitter::setG( QWidget *w, int p, int s ) 516void QSplitter::setG( QWidget *w, int p, int s )
517{ 517{
518 if ( orient == Horizontal ) 518 if ( orient == Horizontal )
519 w->setGeometry( p, contentsRect().y(), s, contentsRect().height() ); 519 w->setGeometry( p, contentsRect().y(), s, contentsRect().height() );
520 else 520 else
521 w->setGeometry( contentsRect().x(), p, contentsRect().width(), s ); 521 w->setGeometry( contentsRect().x(), p, contentsRect().width(), s );
522} 522}
523 523
524 524
525/*! 525/*!
526 Places the right/bottom edge of the widget at \a id at position \a pos. 526 Places the right/bottom edge of the widget at \a id at position \a pos.
527 527
528 \sa idAfter() 528 \sa idAfter()
529*/ 529*/
530 530
531void QSplitter::moveBefore( int pos, int id, bool upLeft ) 531void QSplitter::moveBefore( int pos, int id, bool upLeft )
532{ 532{
533 QSplitterLayoutStruct *s = data->list.at(id); 533 QSplitterLayoutStruct *s = data->list.at(id);
534 if ( !s ) 534 if ( !s )
535 return; 535 return;
536 QWidget *w = s->wid; 536 QWidget *w = s->wid;
537 if ( w->isHidden() ) { 537 if ( w->isHidden() ) {
538 moveBefore( pos, id-1, upLeft ); 538 moveBefore( pos, id-1, upLeft );
539 } else if ( s->isSplitter ) { 539 } else if ( s->isSplitter ) {
540 int dd = s->sizer; 540 int dd = s->sizer;
541 if ( upLeft ) { 541 if ( upLeft ) {
542 setG( w, pos-dd+1, dd ); 542 setG( w, pos-dd+1, dd );
543 moveBefore( pos-dd, id-1, upLeft ); 543 moveBefore( pos-dd, id-1, upLeft );
544 } else { 544 } else {
545 moveBefore( pos-dd, id-1, upLeft ); 545 moveBefore( pos-dd, id-1, upLeft );
546 setG( w, pos-dd+1, dd ); 546 setG( w, pos-dd+1, dd );
547 } 547 }
548 } else { 548 } else {
549 int left = pick( w->pos() ); 549 int left = pick( w->pos() );
550 int dd = pos - left + 1; 550 int dd = pos - left + 1;
551 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 551 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
552 int newLeft = pos-dd+1; 552 int newLeft = pos-dd+1;
553 setG( w, newLeft, dd ); 553 setG( w, newLeft, dd );
554 if ( left != newLeft ) 554 if ( left != newLeft )
555 moveBefore( newLeft-1, id-1, upLeft ); 555 moveBefore( newLeft-1, id-1, upLeft );
556 } 556 }
557} 557}
558 558
559 559
560/*! 560/*!
561 Places the left/top edge of the widget at \a id at position \a pos. 561 Places the left/top edge of the widget at \a id at position \a pos.
562 562
563 \sa idAfter() 563 \sa idAfter()
564*/ 564*/
565 565
566void QSplitter::moveAfter( int pos, int id, bool upLeft ) 566void QSplitter::moveAfter( int pos, int id, bool upLeft )
567{ 567{
568 QSplitterLayoutStruct *s = id < int(data->list.count()) ? 568 QSplitterLayoutStruct *s = id < int(data->list.count()) ?
569 data->list.at(id) : 0; 569 data->list.at(id) : 0;
570 if ( !s ) 570 if ( !s )
571 return; 571 return;
572 QWidget *w = s->wid; 572 QWidget *w = s->wid;
573 if ( w->isHidden() ) { 573 if ( w->isHidden() ) {
574 moveAfter( pos, id+1, upLeft ); 574 moveAfter( pos, id+1, upLeft );
575 } else if ( pick( w->pos() ) == pos ) { 575 } else if ( pick( w->pos() ) == pos ) {
576 //No need to do anything if it's already there. 576 //No need to do anything if it's already there.
577 return; 577 return;
578 } else if ( s->isSplitter ) { 578 } else if ( s->isSplitter ) {
579 int dd = s->sizer; 579 int dd = s->sizer;
580 if ( upLeft ) { 580 if ( upLeft ) {
581 setG( w, pos, dd ); 581 setG( w, pos, dd );
582 moveAfter( pos+dd, id+1, upLeft ); 582 moveAfter( pos+dd, id+1, upLeft );
583 } else { 583 } else {
584 moveAfter( pos+dd, id+1, upLeft ); 584 moveAfter( pos+dd, id+1, upLeft );
585 setG( w, pos, dd ); 585 setG( w, pos, dd );
586 } 586 }
587 } else { 587 } else {
588 int right = pick( w->geometry().bottomRight() ); 588 int right = pick( w->geometry().bottomRight() );
589 589
590 int dd = right - pos + 1; 590 int dd = right - pos + 1;
591 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize()))); 591 dd = QMAX( pick(minSize(w)), QMIN(dd, pick(w->maximumSize())));
592 int newRight = pos+dd-1; 592 int newRight = pos+dd-1;
593 setG( w, pos, dd ); 593 setG( w, pos, dd );
594 moveAfter( newRight+1, id+1, upLeft ); 594 moveAfter( newRight+1, id+1, upLeft );
595 } 595 }
596} 596}
597 597
598 598
599/*! 599/*!
600 Returns the valid range of the splitter with id \a id in \a min and \a max. 600 Returns the valid range of the splitter with id \a id in \a min and \a max.
601 601
602 \sa idAfter() 602 \sa idAfter()
603*/ 603*/
604 604
605void QSplitter::getRange( int id, int *min, int *max ) 605void QSplitter::getRange( int id, int *min, int *max )
606{ 606{
607 int minB = 0;//before 607 int minB = 0;//before
608 int maxB = 0; 608 int maxB = 0;
609 int minA = 0; 609 int minA = 0;
610 int maxA = 0;//after 610 int maxA = 0;//after
611 int n = data->list.count(); 611 int n = data->list.count();
612 if ( id < 0 || id >= n ) 612 if ( id < 0 || id >= n )
613 return; 613 return;
614 int i; 614 int i;
615 for ( i = 0; i < id; i++ ) { 615 for ( i = 0; i < id; i++ ) {
616 QSplitterLayoutStruct *s = data->list.at(i); 616 QSplitterLayoutStruct *s = data->list.at(i);
617 if ( s->wid->isHidden() ) { 617 if ( s->wid->isHidden() ) {
618 //ignore 618 //ignore
619 } else if ( s->isSplitter ) { 619 } else if ( s->isSplitter ) {
620 minB += s->sizer; 620 minB += s->sizer;
621 maxB += s->sizer; 621 maxB += s->sizer;
622 } else { 622 } else {
623 minB += pick( minSize(s->wid) ); 623 minB += pick( minSize(s->wid) );
624 maxB += pick( s->wid->maximumSize() ); 624 maxB += pick( s->wid->maximumSize() );
625 } 625 }
626 } 626 }
627 for ( i = id; i < n; i++ ) { 627 for ( i = id; i < n; i++ ) {
628 QSplitterLayoutStruct *s = data->list.at(i); 628 QSplitterLayoutStruct *s = data->list.at(i);
629 if ( s->wid->isHidden() ) { 629 if ( s->wid->isHidden() ) {
630 //ignore 630 //ignore
631 } else if ( s->isSplitter ) { 631 } else if ( s->isSplitter ) {
632 minA += s->sizer; 632 minA += s->sizer;
633 maxA += s->sizer; 633 maxA += s->sizer;
634 } else { 634 } else {
635 minA += pick( minSize(s->wid) ); 635 minA += pick( minSize(s->wid) );
636 maxA += pick( s->wid->maximumSize() ); 636 maxA += pick( s->wid->maximumSize() );
637 } 637 }
638 } 638 }
639 QRect r = contentsRect(); 639 QRect r = contentsRect();
640 if ( min ) 640 if ( min )
641 *min = pick(r.topLeft()) + QMAX( minB, pick(r.size())-maxA ); 641 *min = pick(r.topLeft()) + QMAX( minB, pick(r.size())-maxA );
642 if ( max ) 642 if ( max )
643 *max = pick(r.topLeft()) + QMIN( maxB, pick(r.size())-minA ); 643 *max = pick(r.topLeft()) + QMIN( maxB, pick(r.size())-minA );
644 644
645} 645}
646 646
647 647
648/*! 648/*!
649 Returns the legal position closest to \a p of the splitter with id \a id. 649 Returns the legal position closest to \a p of the splitter with id \a id.
650 650
651 \sa idAfter() 651 \sa idAfter()
652*/ 652*/
653 653
654int QSplitter::adjustPos( int p, int id ) 654int QSplitter::adjustPos( int p, int id )
655{ 655{
656 int min = 0; 656 int min = 0;
657 int max = 0; 657 int max = 0;
658 getRange( id, &min, &max ); 658 getRange( id, &min, &max );
659 p = QMAX( min, QMIN( p, max ) ); 659 p = QMAX( min, QMIN( p, max ) );
660 660
661 return p; 661 return p;
662} 662}
663 663
664 664
665void QSplitter::doResize() 665void QSplitter::doResize()
666{ 666{
667 QRect r = contentsRect(); 667 QRect r = contentsRect();
668 int i; 668 int i;
669 int n = data->list.count(); 669 int n = data->list.count();
670 QArray<QLayoutStruct> a( n ); 670 QArray<QLayoutStruct> a( n );
671 for ( i = 0; i< n; i++ ) { 671 for ( i = 0; i< n; i++ ) {
672 a[i].init(); 672 a[i].init();
673 QSplitterLayoutStruct *s = data->list.at(i); 673 QSplitterLayoutStruct *s = data->list.at(i);
674 if ( s->wid->isHidden() ) { 674 if ( s->wid->isHidden() ) {
675 a[i].stretch = 0; 675 a[i].stretch = 0;
676 a[i].sizeHint = a[i].minimumSize = 0; 676 a[i].sizeHint = a[i].minimumSize = 0;
677 a[i].maximumSize = 0; 677 a[i].maximumSize = 0;
678 } else if ( s->isSplitter ) { 678 } else if ( s->isSplitter ) {
679 a[i].stretch = 0; 679 a[i].stretch = 0;
680 a[i].sizeHint = a[i].minimumSize = a[i].maximumSize = s->sizer; 680 a[i].sizeHint = a[i].minimumSize = a[i].maximumSize = s->sizer;
681 a[i].empty = FALSE; 681 a[i].empty = FALSE;
682 } else if ( s->mode == KeepSize ) { 682 } else if ( s->mode == KeepSize ) {
683 a[i].stretch = 0; 683 a[i].stretch = 0;
684 a[i].minimumSize = pick( minSize(s->wid) ); 684 a[i].minimumSize = pick( minSize(s->wid) );
685 a[i].sizeHint = s->sizer; 685 a[i].sizeHint = s->sizer;
686 a[i].maximumSize = pick( s->wid->maximumSize() ); 686 a[i].maximumSize = pick( s->wid->maximumSize() );
687 a[i].empty = FALSE; 687 a[i].empty = FALSE;
688 } else if ( s->mode == FollowSizeHint ) { 688 } else if ( s->mode == FollowSizeHint ) {
689 a[i].stretch = 0; 689 a[i].stretch = 0;
690 a[i].minimumSize = a[i].sizeHint = pick( s->wid->sizeHint() ); 690 a[i].minimumSize = a[i].sizeHint = pick( s->wid->sizeHint() );
691 a[i].maximumSize = pick( s->wid->maximumSize() ); 691 a[i].maximumSize = pick( s->wid->maximumSize() );
692 a[i].empty = FALSE; 692 a[i].empty = FALSE;
693 } else { //proportional 693 } else { //proportional
694 a[i].stretch = s->sizer; 694 a[i].stretch = s->sizer;
695 a[i].maximumSize = pick( s->wid->maximumSize() ); 695 a[i].maximumSize = pick( s->wid->maximumSize() );
696 a[i].sizeHint = a[i].minimumSize = pick( minSize(s->wid) ); 696 a[i].sizeHint = a[i].minimumSize = pick( minSize(s->wid) );
697 a[i].empty = FALSE; 697 a[i].empty = FALSE;
698 } 698 }
699 } 699 }
700 700
701 qGeomCalc( a, 0, n, pick( r.topLeft() ), pick( r.size() ), 0 ); 701 qGeomCalc( a, 0, n, pick( r.topLeft() ), pick( r.size() ), 0 );
702 for ( i = 0; i< n; i++ ) { 702 for ( i = 0; i< n; i++ ) {
703 QSplitterLayoutStruct *s = data->list.at(i); 703 QSplitterLayoutStruct *s = data->list.at(i);
704 if ( orient == Horizontal ) 704 if ( orient == Horizontal )
705 s->wid->setGeometry( a[i].pos, r.top(), a[i].size, r.height() ); 705 s->wid->setGeometry( a[i].pos, r.top(), a[i].size, r.height() );
706 else 706 else
707 s->wid->setGeometry( r.left(), a[i].pos, r.width(), a[i].size ); 707 s->wid->setGeometry( r.left(), a[i].pos, r.width(), a[i].size );
708 } 708 }
709 709
710} 710}
711 711
712 712
713void QSplitter::recalc( bool update ) 713void QSplitter::recalc( bool update )
714{ 714{
715 int fi = 2*frameWidth(); 715 int fi = 2*frameWidth();
716 int maxl = fi; 716 int maxl = fi;
717 int minl = fi; 717 int minl = fi;
718 int maxt = QWIDGETSIZE_MAX; 718 int maxt = QWIDGETSIZE_MAX;
719 int mint = fi; 719 int mint = fi;
720 int n = data->list.count(); 720 int n = data->list.count();
721 bool first = TRUE; 721 bool first = TRUE;
722 /* 722 /*
723 The splitter before a hidden widget is always hidden. 723 The splitter before a hidden widget is always hidden.
724 The splitter before the first visible widget is hidden. 724 The splitter before the first visible widget is hidden.
725 The splitter before any other visible widget is visible. 725 The splitter before any other visible widget is visible.
726 */ 726 */
727 for ( int i = 0; i< n; i++ ) { 727 for ( int i = 0; i< n; i++ ) {
728 QSplitterLayoutStruct *s = data->list.at(i); 728 QSplitterLayoutStruct *s = data->list.at(i);
729 if ( !s->isSplitter ) { 729 if ( !s->isSplitter ) {
730 QSplitterLayoutStruct *p = (i > 0) ? p = data->list.at( i-1 ) : 0; 730 QSplitterLayoutStruct *p = (i > 0) ? data->list.at( i-1 ) : 0;
731 if ( p && p->isSplitter ) 731 if ( p && p->isSplitter )
732 if ( first || s->wid->isHidden() ) 732 if ( first || s->wid->isHidden() )
733 p->wid->hide(); //may trigger new recalc 733 p->wid->hide(); //may trigger new recalc
734 else 734 else
735 p->wid->show(); //may trigger new recalc 735 p->wid->show(); //may trigger new recalc
736 if ( !s->wid->isHidden() ) 736 if ( !s->wid->isHidden() )
737 first = FALSE; 737 first = FALSE;
738 } 738 }
739 } 739 }
740 740
741 bool empty=TRUE; 741 bool empty=TRUE;
742 for ( int j = 0; j< n; j++ ) { 742 for ( int j = 0; j< n; j++ ) {
743 QSplitterLayoutStruct *s = data->list.at(j); 743 QSplitterLayoutStruct *s = data->list.at(j);
744 if ( !s->wid->isHidden() ) { 744 if ( !s->wid->isHidden() ) {
745 empty = FALSE; 745 empty = FALSE;
746 if ( s->isSplitter ) { 746 if ( s->isSplitter ) {
747 minl += s->sizer; 747 minl += s->sizer;
748 maxl += s->sizer; 748 maxl += s->sizer;
749 } else { 749 } else {
750 QSize minS = minSize(s->wid); 750 QSize minS = minSize(s->wid);
751 minl += pick( minS ); 751 minl += pick( minS );
752 maxl += pick( s->wid->maximumSize() ); 752 maxl += pick( s->wid->maximumSize() );
753 mint = QMAX( mint, trans( minS )); 753 mint = QMAX( mint, trans( minS ));
754 int tm = trans( s->wid->maximumSize() ); 754 int tm = trans( s->wid->maximumSize() );
755 if ( tm > 0 ) 755 if ( tm > 0 )
756 maxt = QMIN( maxt, tm ); 756 maxt = QMIN( maxt, tm );
757 } 757 }
758 } 758 }
759 } 759 }
760 if ( empty ) 760 if ( empty )
761 maxl = maxt = 0; 761 maxl = maxt = 0;
762 else 762 else
763 maxl = QMIN( maxl, QWIDGETSIZE_MAX ); 763 maxl = QMIN( maxl, QWIDGETSIZE_MAX );
764 if ( maxt < mint ) 764 if ( maxt < mint )
765 maxt = mint; 765 maxt = mint;
766 766
767 if ( orient == Horizontal ) { 767 if ( orient == Horizontal ) {
768 setMaximumSize( maxl, maxt ); 768 setMaximumSize( maxl, maxt );
769 setMinimumSize( minl, mint ); 769 setMinimumSize( minl, mint );
770 } else { 770 } else {
771 setMaximumSize( maxt, maxl ); 771 setMaximumSize( maxt, maxl );
772 setMinimumSize( mint, minl ); 772 setMinimumSize( mint, minl );
773 } 773 }
774 if ( update ) 774 if ( update )
775 doResize(); 775 doResize();
776} 776}
777 777
778/*! \enum QSplitter::ResizeMode 778/*! \enum QSplitter::ResizeMode
779 779
780 This enum type describes how QSplitter will resize each of its child widgets. The currently defined values are: <ul> 780 This enum type describes how QSplitter will resize each of its child widgets. The currently defined values are: <ul>
781 781
782 <li> \c Stretch - the widget will be resized when the splitter 782 <li> \c Stretch - the widget will be resized when the splitter
783 itself is resized. 783 itself is resized.
784 784
785 <li> \c KeepSize - QSplitter will try to keep this widget's size 785 <li> \c KeepSize - QSplitter will try to keep this widget's size
786 unchanged. 786 unchanged.
787 787
788 <li> \c FollowSizeHint - QSplitter will resize the widget when its 788 <li> \c FollowSizeHint - QSplitter will resize the widget when its
789 size hint changes. 789 size hint changes.
790 790
791 </ul> 791 </ul>
792 792
793*/ 793*/
794 794
795/*! 795/*!
796 Sets resize mode of \a w to \a mode. 796 Sets resize mode of \a w to \a mode.
797 797
798 \sa ResizeMode 798 \sa ResizeMode
799*/ 799*/
800 800
801void QSplitter::setResizeMode( QWidget *w, ResizeMode mode ) 801void QSplitter::setResizeMode( QWidget *w, ResizeMode mode )
802{ 802{
803 processChildEvents(); 803 processChildEvents();
804 QSplitterLayoutStruct *s = data->list.first(); 804 QSplitterLayoutStruct *s = data->list.first();
805 while ( s ) { 805 while ( s ) {
806 if ( s->wid == w ) { 806 if ( s->wid == w ) {
807 s->mode = mode; 807 s->mode = mode;
808 return; 808 return;
809 } 809 }
810 s = data->list.next(); 810 s = data->list.next();
811 } 811 }
812 s = addWidget( w, TRUE ); 812 s = addWidget( w, TRUE );
813 s->mode = mode; 813 s->mode = mode;
814} 814}
815 815
816 816
817/*! 817/*!
818 Returns TRUE if opaque resize is on, FALSE otherwise. 818 Returns TRUE if opaque resize is on, FALSE otherwise.
819 819
820 \sa setOpaqueResize() 820 \sa setOpaqueResize()
821*/ 821*/
822 822
823bool QSplitter::opaqueResize() const 823bool QSplitter::opaqueResize() const
824{ 824{
825 return data->opaque; 825 return data->opaque;
826} 826}
827 827
828 828
829/*! 829/*!
830 Sets opaque resize to \a on. Opaque resize is initially turned off. 830 Sets opaque resize to \a on. Opaque resize is initially turned off.
831 831
832 \sa opaqueResize() 832 \sa opaqueResize()
833*/ 833*/
834 834
835void QSplitter::setOpaqueResize( bool on ) 835void QSplitter::setOpaqueResize( bool on )
836{ 836{
837 data->opaque = on; 837 data->opaque = on;
838} 838}
839 839
840 840
841/*! 841/*!
842 Moves \a w to the leftmost/top position. 842 Moves \a w to the leftmost/top position.
843*/ 843*/
844 844
845void QSplitter::moveToFirst( QWidget *w ) 845void QSplitter::moveToFirst( QWidget *w )
846{ 846{
847 processChildEvents(); 847 processChildEvents();
848 bool found = FALSE; 848 bool found = FALSE;
849 QSplitterLayoutStruct *s = data->list.first(); 849 QSplitterLayoutStruct *s = data->list.first();
850 while ( s ) { 850 while ( s ) {
851 if ( s->wid == w ) { 851 if ( s->wid == w ) {
852 found = TRUE; 852 found = TRUE;
853 QSplitterLayoutStruct *p = data->list.prev(); 853 QSplitterLayoutStruct *p = data->list.prev();
854 if ( p ) { // not already at first place 854 if ( p ) { // not already at first place
855 data->list.take(); //take p 855 data->list.take(); //take p
856 data->list.take(); // take s 856 data->list.take(); // take s
857 data->list.insert( 0, p ); 857 data->list.insert( 0, p );
858 data->list.insert( 0, s ); 858 data->list.insert( 0, s );
859 } 859 }
860 break; 860 break;
861 } 861 }
862 s = data->list.next(); 862 s = data->list.next();
863 } 863 }
864 if ( !found ) 864 if ( !found )
865 addWidget( w, TRUE ); 865 addWidget( w, TRUE );
866 recalcId(); 866 recalcId();
867} 867}
868 868
869 869
870/*! 870/*!
871 Moves \a w to the rightmost/bottom position. 871 Moves \a w to the rightmost/bottom position.
872*/ 872*/
873 873
874void QSplitter::moveToLast( QWidget *w ) 874void QSplitter::moveToLast( QWidget *w )
875{ 875{
876 processChildEvents(); 876 processChildEvents();
877 bool found = FALSE; 877 bool found = FALSE;
878 QSplitterLayoutStruct *s = data->list.first(); 878 QSplitterLayoutStruct *s = data->list.first();
879 while ( s ) { 879 while ( s ) {
880 if ( s->wid == w ) { 880 if ( s->wid == w ) {
881 found = TRUE; 881 found = TRUE;
882 data->list.take(); // take s 882 data->list.take(); // take s
883 QSplitterLayoutStruct *p = data->list.current(); 883 QSplitterLayoutStruct *p = data->list.current();
884 if ( p ) { // the splitter handle after s 884 if ( p ) { // the splitter handle after s
885 data->list.take(); //take p 885 data->list.take(); //take p
886 data->list.append( p ); 886 data->list.append( p );
887 } 887 }
888 data->list.append( s ); 888 data->list.append( s );
889 break; 889 break;
890 } 890 }
891 s = data->list.next(); 891 s = data->list.next();
892 } 892 }
893 if ( !found ) 893 if ( !found )
894 addWidget( w); 894 addWidget( w);
895 recalcId(); 895 recalcId();
896} 896}
897 897
898 898
899void QSplitter::recalcId() 899void QSplitter::recalcId()
900{ 900{
901 int n = data->list.count(); 901 int n = data->list.count();
902 for ( int i = 0; i < n; i++ ) { 902 for ( int i = 0; i < n; i++ ) {
903 QSplitterLayoutStruct *s = data->list.at(i); 903 QSplitterLayoutStruct *s = data->list.at(i);
904 if ( s->isSplitter ) 904 if ( s->isSplitter )
905 ((QSplitterHandle*)s->wid)->setId(i); 905 ((QSplitterHandle*)s->wid)->setId(i);
906 } 906 }
907} 907}
908 908
909 909
910/*!\reimp 910/*!\reimp
911*/ 911*/
912QSize QSplitter::sizeHint() const 912QSize QSplitter::sizeHint() const
913{ 913{
914 constPolish(); 914 constPolish();
915 int l = 0; 915 int l = 0;
916 int t = 0; 916 int t = 0;
917 if ( children() ) { 917 if ( children() ) {
918 const QObjectList * c = children(); 918 const QObjectList * c = children();
919 QObjectListIt it( *c ); 919 QObjectListIt it( *c );
920 QObject * o; 920 QObject * o;
921 921
922 while( (o=it.current()) != 0 ) { 922 while( (o=it.current()) != 0 ) {
923 ++it; 923 ++it;
924 if ( o->isWidgetType() && 924 if ( o->isWidgetType() &&
925 !((QWidget*)o)->isHidden() ) { 925 !((QWidget*)o)->isHidden() ) {
926 QSize s = ((QWidget*)o)->sizeHint(); 926 QSize s = ((QWidget*)o)->sizeHint();
927 if ( s.isValid() ) { 927 if ( s.isValid() ) {
928 l += pick( s ); 928 l += pick( s );
929 t = QMAX( t, trans( s ) ); 929 t = QMAX( t, trans( s ) );
930 } 930 }
931 } 931 }
932 } 932 }
933 } 933 }
934 return orientation() == Horizontal ? QSize( l, t ) : QSize( t, l ); 934 return orientation() == Horizontal ? QSize( l, t ) : QSize( t, l );
935} 935}
936 936
937 937
938/*! 938/*!
939\reimp 939\reimp
940*/ 940*/
941 941
942QSize QSplitter::minimumSizeHint() const 942QSize QSplitter::minimumSizeHint() const
943{ 943{
944 constPolish(); 944 constPolish();
945 int l = 0; 945 int l = 0;
946 int t = 0; 946 int t = 0;
947 if ( children() ) { 947 if ( children() ) {
948 const QObjectList * c = children(); 948 const QObjectList * c = children();
949 QObjectListIt it( *c ); 949 QObjectListIt it( *c );
950 QObject * o; 950 QObject * o;
951 951
952 while( (o=it.current()) != 0 ) { 952 while( (o=it.current()) != 0 ) {
953 ++it; 953 ++it;
954 if ( o->isWidgetType() && 954 if ( o->isWidgetType() &&
955 !((QWidget*)o)->isHidden() ) { 955 !((QWidget*)o)->isHidden() ) {
956 QSize s = minSize((QWidget*)o); 956 QSize s = minSize((QWidget*)o);
957 if ( s.isValid() ) { 957 if ( s.isValid() ) {
958 l += pick( s ); 958 l += pick( s );
959 t = QMAX( t, trans( s ) ); 959 t = QMAX( t, trans( s ) );
960 } 960 }
961 } 961 }
962 } 962 }
963 } 963 }
964 return orientation() == Horizontal ? QSize( l, t ) : QSize( t, l ); 964 return orientation() == Horizontal ? QSize( l, t ) : QSize( t, l );
965} 965}
966 966
967 967
968 968
969/*!\reimp 969/*!\reimp
970*/ 970*/
971QSizePolicy QSplitter::sizePolicy() const 971QSizePolicy QSplitter::sizePolicy() const
972{ 972{
973 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding ); 973 return QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Expanding );
974} 974}
975 975
976 976
977/*! 977/*!
978 Calculates stretch parameters from current sizes 978 Calculates stretch parameters from current sizes
979*/ 979*/
980 980
981void QSplitter::storeSizes() 981void QSplitter::storeSizes()
982{ 982{
983 QSplitterLayoutStruct *s = data->list.first(); 983 QSplitterLayoutStruct *s = data->list.first();
984 while ( s ) { 984 while ( s ) {
985 if ( !s->isSplitter ) 985 if ( !s->isSplitter )
986 s->sizer = pick( s->wid->size() ); 986 s->sizer = pick( s->wid->size() );