Revision 12716 trunk/libraries/libUIComponent/src/org/gvsig/gui/beans/listview/ListViewComponent.java

View differences:

ListViewComponent.java
299 299
					((JScrollPane) jViewport.getParent()).getVerticalScrollBar().setUnitIncrement(((ListViewItem) items.get(0)).getItemRectangle().height);
300 300
			}
301 301
		}
302

  
303 302
	}
304 303

  
305 304
	public boolean isMultiSelect() {
......
416 415

  
417 416
			if (jViewport.getParent() instanceof JScrollPane) {
418 417
				ListViewItem lvi = ((ListViewItem) items.get(pos));
419
				Rectangle rectangle = lvi.getItemRectangle();
418
				Rectangle rectangle = (Rectangle) lvi.getItemRectangle().clone();
420 419
				if (rectangle == null)
421 420
					return;
422 421
				rectangle.setLocation((int) rectangle.getX() - getVisibleRect().x, (int) rectangle.getY() - getVisibleRect().y);
423 422
				jViewport.scrollRectToVisible(rectangle);
423
				((JScrollPane)jViewport.getParent()).getVerticalScrollBar().paintImmediately(((JScrollPane)jViewport.getParent()).getVerticalScrollBar().getVisibleRect());
424 424
			}
425 425
		}
426 426
	}
......
560 560
			((ListViewItem) items.get(i)).setSelected(i == value);
561 561
		}
562 562
		viewItem(value);
563
		update(getGraphics());
563 564
	}
564 565

  
565 566
	/**
......
701 702
	}
702 703

  
703 704
	/**
704
	 * Mueve el cursor hacia arriba
705
	 * Mueve el cursor hacia abajo
705 706
	 */
706
	private void moveUp(boolean refresh) {
707
	private void moveDown() {
707 708
		int selItem = -1;
708
		for (int i = items.size() - 1; i >= 0; i--) {
709

  
710
		for (int i = 0; i < items.size(); i++) {
709 711
			if (cursorPos == i)
710 712
				continue;
711
			if ((((ListViewItem) items.get(i)).getItemRectangle().y + ((ListViewItem) items.get(i)).getItemRectangle().height) <= ((ListViewItem) items.get(cursorPos)).getItemRectangle().y) {
713
			if (((ListViewItem) items.get(i)).getItemRectangle().y >= (((ListViewItem) items.get(cursorPos)).getItemRectangle().y + ((ListViewItem) items.get(cursorPos)).getItemRectangle().height)) {
712 714
				if (((ListViewItem) items.get(i)).getItemRectangle().x == ((ListViewItem) items.get(cursorPos)).getItemRectangle().x) {
713 715
					selItem = i;
714 716
					break;
......
718 720

  
719 721
		if (selItem != -1) {
720 722
			cursorPos = selItem;
721
			if (refresh) {
722
				setSelectedIndex(selItem);
723
				viewItem(selItem);
724
			}
723
			setSelectedIndex(selItem);
725 724
		}
726 725
	}
727 726

  
728 727
	/**
729
	 * Mueve el cursor hacia abajo
728
	 * Mueve el cursor hacia la izquierda
730 729
	 */
731
	private void moveDown(boolean refresh) {
730
	private void moveLeft() {
732 731
		int selItem = -1;
733
		for (int i = 0; i < items.size(); i++) {
732
		for (int i = items.size() - 1; i >= 0; i--) {
734 733
			if (cursorPos == i)
735 734
				continue;
736
			if (((ListViewItem) items.get(i)).getItemRectangle().y >= (((ListViewItem) items.get(cursorPos)).getItemRectangle().y + ((ListViewItem) items.get(cursorPos)).getItemRectangle().height)) {
737
				if (((ListViewItem) items.get(i)).getItemRectangle().x == ((ListViewItem) items.get(cursorPos)).getItemRectangle().x) {
735
			if ((((ListViewItem) items.get(i)).getItemRectangle().x + ((ListViewItem) items.get(i)).getItemRectangle().width) <= ((ListViewItem) items.get(cursorPos)).getItemRectangle().x) {
736
				if (((ListViewItem) items.get(i)).getItemRectangle().y == ((ListViewItem) items.get(cursorPos)).getItemRectangle().y) {
738 737
					selItem = i;
739 738
					break;
740 739
				}
......
743 742

  
744 743
		if (selItem != -1) {
745 744
			cursorPos = selItem;
746
			if (refresh) {
747
				setSelectedIndex(selItem);
748
				viewItem(selItem);
749
			}
745
			setSelectedIndex(selItem);
750 746
		}
751 747
	}
752 748

  
753 749
	/**
754
	 * Mueve el cursor hacia la izquierda
750
	 * Mueve el cursor hacia la derecha
755 751
	 */
756
	private void moveLeft() {
752
	private void moveRight() {
757 753
		int selItem = -1;
758
		for (int i = items.size() - 1; i >= 0; i--) {
754
		for (int i = 0; i < items.size(); i++) {
759 755
			if (cursorPos == i)
760 756
				continue;
761
			if ((((ListViewItem) items.get(i)).getItemRectangle().x + ((ListViewItem) items.get(i)).getItemRectangle().width) <= ((ListViewItem) items.get(cursorPos)).getItemRectangle().x) {
757
			if (((ListViewItem) items.get(i)).getItemRectangle().x >= (((ListViewItem) items.get(cursorPos)).getItemRectangle().x + ((ListViewItem) items.get(cursorPos)).getItemRectangle().width)) {
762 758
				if (((ListViewItem) items.get(i)).getItemRectangle().y == ((ListViewItem) items.get(cursorPos)).getItemRectangle().y) {
763 759
					selItem = i;
764 760
					break;
......
769 765
		if (selItem != -1) {
770 766
			cursorPos = selItem;
771 767
			setSelectedIndex(selItem);
772
			viewItem(selItem);
773 768
		}
774 769
	}
775 770

  
776 771
	/**
777
	 * Mueve el cursor hacia la derecha
772
	 * Mueve el cursor hacia arriba
778 773
	 */
779
	private void moveRight() {
774
	private void moveUp() {
780 775
		int selItem = -1;
781
		for (int i = 0; i < items.size(); i++) {
776
		for (int i = items.size() - 1; i >= 0; i--) {
782 777
			if (cursorPos == i)
783 778
				continue;
784
			if (((ListViewItem) items.get(i)).getItemRectangle().x >= (((ListViewItem) items.get(cursorPos)).getItemRectangle().x + ((ListViewItem) items.get(cursorPos)).getItemRectangle().width)) {
785
				if (((ListViewItem) items.get(i)).getItemRectangle().y == ((ListViewItem) items.get(cursorPos)).getItemRectangle().y) {
779
			if ((((ListViewItem) items.get(i)).getItemRectangle().y + ((ListViewItem) items.get(i)).getItemRectangle().height) <= ((ListViewItem) items.get(cursorPos)).getItemRectangle().y) {
780
				if (((ListViewItem) items.get(i)).getItemRectangle().x == ((ListViewItem) items.get(cursorPos)).getItemRectangle().x) {
786 781
					selItem = i;
787 782
					break;
788 783
				}
......
792 787
		if (selItem != -1) {
793 788
			cursorPos = selItem;
794 789
			setSelectedIndex(selItem);
795
			viewItem(selItem);
796 790
		}
797 791
	}
798 792

  
......
803 797
					renameItem(cursorPos);
804 798
					break;
805 799
				case KeyEvent.VK_DOWN:
806
					moveDown(true);
800
					moveDown();
807 801
					break;
808 802
				case KeyEvent.VK_LEFT:
809 803
					moveLeft();
......
812 806
					moveRight();
813 807
					break;
814 808
				case KeyEvent.VK_UP:
815
					moveUp(true);
809
					moveUp();
816 810
					break;
817 811
				case KeyEvent.VK_HOME:
818 812
					cursorPos = 0;
819 813
					setSelectedIndex(cursorPos);
820
					viewItem(cursorPos);
821 814
					break;
822 815
				case KeyEvent.VK_END:
823 816
					cursorPos = items.size() - 1;
824 817
					setSelectedIndex(cursorPos);
825
					viewItem(cursorPos);
826 818
					break;
827 819
				case KeyEvent.VK_PAGE_UP:
828 820
					if (items.size() > 0) {
829 821
						int cont = (int) Math.floor(this.getVisibleRect().getHeight() / ((ListViewItem) items.get(0)).getItemRectangle().height);
830 822
						for (int i = 0; i < cont; i++)
831
							moveUp(false);
832
						setSelectedIndex(cursorPos);
833
						viewItem(cursorPos);
823
							moveUp();
834 824
					}
835 825
					break;
836 826
				case KeyEvent.VK_PAGE_DOWN:
837 827
					if (items.size() > 0) {
838 828
						int cont = (int) Math.floor(this.getVisibleRect().getHeight() / ((ListViewItem) items.get(0)).getItemRectangle().height);
839 829
						for (int i = 0; i < cont; i++)
840
							moveDown(false);
841
						setSelectedIndex(cursorPos);
842
						viewItem(cursorPos);
830
							moveDown();
843 831
					}
844 832
					break;
845 833
			}
......
862 850
		switch (e.getKeyCode()) {
863 851
			case KeyEvent.VK_DOWN:
864 852
			case KeyEvent.VK_UP:
853
			case KeyEvent.VK_LEFT:
854
			case KeyEvent.VK_RIGHT:
865 855
			case KeyEvent.VK_HOME:
866 856
			case KeyEvent.VK_END:
867 857
			case KeyEvent.VK_PAGE_UP:

Also available in: Unified diff