@@ -128,18 +128,27 @@ impl Data {
128
128
DataIter :: new ( self )
129
129
}
130
130
131
+ pub fn len ( & self ) -> usize {
132
+ if let Some ( filtered) = self . filtered_rows . as_ref ( ) {
133
+ filtered. len ( )
134
+ } else {
135
+ self . rows . len ( )
136
+ }
137
+ }
138
+
131
139
pub fn selected_row_data_as_slice (
132
140
& mut self ,
133
141
common_fields : & BTreeSet < String > ,
134
142
) -> Option < & [ ( String , String ) ] > {
135
143
let selected_row_index = self . selected_row ?;
144
+ // TODO 1: Fix here to use appropriate list
136
145
Some ( self . rows [ selected_row_index] . as_slice ( common_fields) )
137
146
}
138
147
139
148
pub fn move_selected_to_next ( & mut self ) {
140
- // TODO 1: Fix index values used
149
+ let n = self . len ( ) ;
141
150
if let Some ( selected) = self . selected_row . as_mut ( ) {
142
- if * selected < self . rows . len ( ) - 1 {
151
+ if * selected < n - 1 {
143
152
* selected += 1 ;
144
153
} else {
145
154
// Do nothing already on last row
@@ -162,16 +171,17 @@ impl Data {
162
171
}
163
172
164
173
pub fn move_selected_to_first ( & mut self ) {
165
- if ! self . rows . is_empty ( ) {
174
+ if self . len ( ) > 0 {
166
175
self . selected_row = Some ( 0 )
167
176
} else {
168
177
// No rows to select
169
178
}
170
179
}
171
180
172
181
pub fn move_selected_to_last ( & mut self ) {
173
- if !self . rows . is_empty ( ) {
174
- self . selected_row = Some ( self . rows . len ( ) - 1 ) ;
182
+ let n = self . len ( ) ;
183
+ if n > 0 {
184
+ self . selected_row = Some ( n - 1 ) ;
175
185
} else {
176
186
// No rows to select
177
187
}
@@ -188,7 +198,7 @@ impl Data {
188
198
189
199
pub fn apply_filter ( & mut self , common_fields : & BTreeSet < String > ) {
190
200
if let Some ( filter) = self . filter . as_ref ( ) {
191
- self . selected_row = None ;
201
+ self . selected_row = None ; // TODO 3: Update selected if still included in displayed rows
192
202
self . filtered_rows = Some (
193
203
self . rows
194
204
. iter_mut ( )
0 commit comments