Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file | 1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| 2 // for details. All rights reserved. Use of this source code is governed by a | 2 // for details. All rights reserved. Use of this source code is governed by a |
| 3 // BSD-style license that can be found in the LICENSE file. | 3 // BSD-style license that can be found in the LICENSE file. |
| 4 | 4 |
| 5 part of swarmlib; | 5 part of swarmlib; |
| 6 | 6 |
| 7 // This file contains View framework classes. | 7 // This file contains View framework classes. |
| 8 // As it grows, it may need to be split into multiple files. | 8 // As it grows, it may need to be split into multiple files. |
| 9 | 9 |
| 10 /** A factory that creates a view from a data model. */ | 10 /** A factory that creates a view from a data model. */ |
| (...skipping 652 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 663 return itemLength * (_data.length - 1) + Math.max(viewLength, itemLength); | 663 return itemLength * (_data.length - 1) + Math.max(viewLength, itemLength); |
| 664 } | 664 } |
| 665 } | 665 } |
| 666 | 666 |
| 667 int getOffset(int index) { | 667 int getOffset(int index) { |
| 668 return index * _itemLength; | 668 return index * _itemLength; |
| 669 } | 669 } |
| 670 | 670 |
| 671 int getPageLength(int viewLength) { | 671 int getPageLength(int viewLength) { |
| 672 final itemsPerPage = (viewLength / _itemLength).floor(); | 672 final itemsPerPage = (viewLength / _itemLength).floor(); |
| 673 return (Math.max(1, itemsPerPage) * _itemLength).toInt(); | 673 return (Math.max(1, itemsPerPage) * _itemLength); |
| 674 } | 674 } |
| 675 | 675 |
| 676 int getPage(int index, int viewLength) { | 676 int getPage(int index, int viewLength) { |
| 677 return (getOffset(index) / getPageLength(viewLength)).floor().toInt(); | 677 return (getOffset(index) / getPageLength(viewLength)).floor(); |
|
Lasse Reichstein Nielsen
2013/01/04 10:29:42
~/ ?
| |
| 678 } | 678 } |
| 679 | 679 |
| 680 int getPageStartIndex(int page, int viewLength) { | 680 int getPageStartIndex(int page, int viewLength) { |
| 681 return (getPageLength(viewLength) / _itemLength).toInt() * page; | 681 return (getPageLength(viewLength) ~/ _itemLength) * page; |
| 682 } | 682 } |
| 683 | 683 |
| 684 int getSnapIndex(num offset, int viewLength) { | 684 int getSnapIndex(num offset, int viewLength) { |
| 685 int index = (-offset / _itemLength).round().toInt(); | 685 int index = (-offset / _itemLength).round(); |
| 686 if (_paginate) { | 686 if (_paginate) { |
| 687 index = getPageStartIndex(getPage(index, viewLength), viewLength); | 687 index = getPageStartIndex(getPage(index, viewLength), viewLength); |
| 688 } | 688 } |
| 689 return GoogleMath.clamp(index, 0, _data.length - 1); | 689 return GoogleMath.clamp(index, 0, _data.length - 1); |
| 690 } | 690 } |
| 691 | 691 |
| 692 Interval computeVisibleInterval( | 692 Interval computeVisibleInterval( |
| 693 num offset, num viewLength, num bufferLength) { | 693 num offset, num viewLength, num bufferLength) { |
| 694 num targetIntervalStart = | 694 num targetIntervalStart = |
| 695 Math.max(0,((-offset - bufferLength) / _itemLength).floor()); | 695 Math.max(0, (-offset - bufferLength) ~/ _itemLength); |
| 696 num targetIntervalEnd = GoogleMath.clamp( | 696 num targetIntervalEnd = GoogleMath.clamp( |
| 697 ((-offset + viewLength + bufferLength) / _itemLength).ceil(), | 697 ((-offset + viewLength + bufferLength) / _itemLength).ceil(), |
| 698 targetIntervalStart, | 698 targetIntervalStart, |
| 699 _data.length); | 699 _data.length); |
| 700 return new Interval(targetIntervalStart.toInt(), | 700 return new Interval(targetIntervalStart, targetIntervalEnd.truncate()); |
| 701 targetIntervalEnd.toInt()); | |
| 702 } | 701 } |
| 703 } | 702 } |
| 704 | 703 |
| 705 /** | 704 /** |
| 706 * Simple list view class where each item has fixed width and height. | 705 * Simple list view class where each item has fixed width and height. |
| 707 */ | 706 */ |
| 708 class ListView<D> extends GenericListView<D> { | 707 class ListView<D> extends GenericListView<D> { |
| 709 | 708 |
| 710 /** | 709 /** |
| 711 * Creates a new ListView for the given data. If [:_data:] is an | 710 * Creates a new ListView for the given data. If [:_data:] is an |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 799 // Estimate length by taking the average of the lengths | 798 // Estimate length by taking the average of the lengths |
| 800 // of the known views. | 799 // of the known views. |
| 801 num lengthFromAllButLastElement = 0; | 800 num lengthFromAllButLastElement = 0; |
| 802 if (_itemOffsets.length > 2) { | 801 if (_itemOffsets.length > 2) { |
| 803 lengthFromAllButLastElement = | 802 lengthFromAllButLastElement = |
| 804 (getOffset(_itemOffsets.length - 2) - | 803 (getOffset(_itemOffsets.length - 2) - |
| 805 getOffset(0)) * | 804 getOffset(0)) * |
| 806 (_data.length / (_itemOffsets.length - 2)); | 805 (_data.length / (_itemOffsets.length - 2)); |
| 807 } | 806 } |
| 808 return (lengthFromAllButLastElement + | 807 return (lengthFromAllButLastElement + |
| 809 Math.max(viewLength, _lengths[_lengths.length - 1])).toInt(); | 808 Math.max(viewLength, _lengths[_lengths.length - 1])).truncate(); |
| 810 } else { | 809 } else { |
| 811 if (_lengths.length == 1) { | 810 if (_lengths.length == 1) { |
| 812 return Math.max(viewLength, _lengths[0]); | 811 return Math.max(viewLength, _lengths[0]); |
| 813 } else { | 812 } else { |
| 814 return viewLength; | 813 return viewLength; |
| 815 } | 814 } |
| 816 } | 815 } |
| 817 } | 816 } |
| 818 | 817 |
| 819 int getLength(int viewLength) { | 818 int getLength(int viewLength) { |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 855 for (int i = 1; i < _data.length; i++) { | 854 for (int i = 1; i < _data.length; i++) { |
| 856 if (getOffset(i) + getOffset(i - 1) > -offset * 2) { | 855 if (getOffset(i) + getOffset(i - 1) > -offset * 2) { |
| 857 return i - 1; | 856 return i - 1; |
| 858 } | 857 } |
| 859 } | 858 } |
| 860 return _data.length - 1; | 859 return _data.length - 1; |
| 861 } | 860 } |
| 862 | 861 |
| 863 Interval computeVisibleInterval( | 862 Interval computeVisibleInterval( |
| 864 num offset, num viewLength, num bufferLength) { | 863 num offset, num viewLength, num bufferLength) { |
| 865 offset = offset.toInt(); | 864 offset = offset.truncate(); |
| 866 int start = _findFirstItemBefore( | 865 int start = _findFirstItemBefore( |
| 867 -offset - bufferLength, | 866 -offset - bufferLength, |
| 868 _lastVisibleInterval != null ? _lastVisibleInterval.start : 0); | 867 _lastVisibleInterval != null ? _lastVisibleInterval.start : 0); |
| 869 int end = _findFirstItemAfter( | 868 int end = _findFirstItemAfter( |
| 870 -offset + viewLength + bufferLength, | 869 -offset + viewLength + bufferLength, |
| 871 _lastVisibleInterval != null ? _lastVisibleInterval.end : 0); | 870 _lastVisibleInterval != null ? _lastVisibleInterval.end : 0); |
| 872 _lastVisibleInterval = new Interval(start, Math.max(start, end)); | 871 _lastVisibleInterval = new Interval(start, Math.max(start, end)); |
| 873 _lastOffset = offset; | 872 _lastOffset = offset; |
| 874 return _lastVisibleInterval; | 873 return _lastVisibleInterval; |
| 875 } | 874 } |
| (...skipping 100 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 976 | 975 |
| 977 container = node.query('.dialog-body'); | 976 container = node.query('.dialog-body'); |
| 978 container.nodes.add(_content.node); | 977 container.nodes.add(_content.node); |
| 979 | 978 |
| 980 return node; | 979 return node; |
| 981 } | 980 } |
| 982 | 981 |
| 983 /** Override to handle dialog done. */ | 982 /** Override to handle dialog done. */ |
| 984 void onDone() { } | 983 void onDone() { } |
| 985 } | 984 } |
| OLD | NEW |