OLD | NEW |
| (Empty) |
1 /** | |
2 * An iterator that allows the user to move forward and backward though | |
3 * a set of items. (Bi-directional) | |
4 */ | |
5 class BiIterator<E> { | |
6 | |
7 /** | |
8 * Provides forward and backward iterator functionality to keep track | |
9 * which item is currently selected. | |
10 */ | |
11 ObservableValue<int> currentIndex; | |
12 | |
13 /** | |
14 * The collection of items we will be iterating through. | |
15 */ | |
16 List<E> list; | |
17 | |
18 BiIterator(this.list, [List<ChangeListener> oldListeners = null]) | |
19 : currentIndex = new ObservableValue<int>(0) { | |
20 if (oldListeners != null) { | |
21 currentIndex.listeners = oldListeners; | |
22 } | |
23 } | |
24 | |
25 /** | |
26 * Returns the next section from the sections, given the current | |
27 * position. Returns the last source if there is no next section. | |
28 */ | |
29 E next() { | |
30 if (currentIndex.value < list.length - 1) { | |
31 currentIndex.value += 1; | |
32 } | |
33 return list[currentIndex.value]; | |
34 } | |
35 | |
36 /** | |
37 * Returns the current Section (page in the UI) that the user is | |
38 * looking at. | |
39 */ | |
40 E get current() { | |
41 return list[currentIndex.value]; | |
42 } | |
43 | |
44 /** | |
45 * Returns the previous section from the sections, given the current | |
46 * position. Returns the front section if we are already at the front of | |
47 * the list. | |
48 */ | |
49 E previous() { | |
50 if (currentIndex.value > 0) { | |
51 currentIndex.value -= 1; | |
52 } | |
53 return list[currentIndex.value]; | |
54 } | |
55 | |
56 /** | |
57 * Move the iterator pointer over so that it points to a given list item. | |
58 */ | |
59 void jumpToValue(E val) { | |
60 for (int i = 0; i < list.length; i++) { | |
61 if (list[i] === val) { | |
62 currentIndex.value = i; | |
63 break; | |
64 } | |
65 } | |
66 } | |
67 } | |
OLD | NEW |