-rw-r--r-- | libqtaux/qsplitter.cpp | 2 |
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 | ||
479 | int QSplitter::idAfter( QWidget* w ) const | 479 | int 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 | */ |
501 | void QSplitter::moveSplitter( QCOORD p, int id ) | 501 | void 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 | ||
516 | void QSplitter::setG( QWidget *w, int p, int s ) | 516 | void 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 | ||
531 | void QSplitter::moveBefore( int pos, int id, bool upLeft ) | 531 | void 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 | ||
566 | void QSplitter::moveAfter( int pos, int id, bool upLeft ) | 566 | void 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 | ||
605 | void QSplitter::getRange( int id, int *min, int *max ) | 605 | void 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 | ||
654 | int QSplitter::adjustPos( int p, int id ) | 654 | int 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 | ||
665 | void QSplitter::doResize() | 665 | void 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 | ||
713 | void QSplitter::recalc( bool update ) | 713 | void 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 | ||
801 | void QSplitter::setResizeMode( QWidget *w, ResizeMode mode ) | 801 | void 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 | ||
823 | bool QSplitter::opaqueResize() const | 823 | bool 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 | ||
835 | void QSplitter::setOpaqueResize( bool on ) | 835 | void 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 | ||
845 | void QSplitter::moveToFirst( QWidget *w ) | 845 | void 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 | ||
874 | void QSplitter::moveToLast( QWidget *w ) | 874 | void 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 | ||
899 | void QSplitter::recalcId() | 899 | void 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 | */ |
912 | QSize QSplitter::sizeHint() const | 912 | QSize 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 | ||
942 | QSize QSplitter::minimumSizeHint() const | 942 | QSize 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 | */ |
971 | QSizePolicy QSplitter::sizePolicy() const | 971 | QSizePolicy 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 | ||
981 | void QSplitter::storeSizes() | 981 | void 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() ); |