cleanup up nav

This commit is contained in:
Connor Brewster 2016-06-06 18:19:28 -06:00
parent c0ea1f16a8
commit a042166b68

View file

@ -1281,47 +1281,32 @@ impl<Message, LTF, STF> Constellation<Message, LTF, STF>
let prev = frame.current; let prev = frame.current;
let next = match direction { let next = match direction {
NavigationDirection::Forward(delta) => { NavigationDirection::Forward(delta) => {
if frame.next.len() < delta { if delta > frame.next.len() && delta > 0 {
return warn!("Invalid navigation delta"); return warn!("Invalid navigation delta");
} }
let mut new_current = frame.current; let new_next_len = frame.next.len() - (delta - 1);
for _ in 0..delta { frame.prev.push(frame.current);
match frame.next.pop() { frame.prev.extend(frame.next.drain(new_next_len..).rev());
None => { frame.current = match frame.next.pop() {
warn!("no next page to navigate to"); Some(frame) => frame,
return; None => return warn!("Could not get next frame for forward navigation"),
}, };
Some(next) => { frame.current
frame.prev.push(frame.current);
frame.current = next;
new_current = next;
},
}
}
new_current
} }
NavigationDirection::Back(delta) => { NavigationDirection::Back(delta) => {
if frame.prev.len() < delta { if delta > frame.prev.len() && delta > 0 {
return warn!("Invalid navigation delta"); return warn!("Invalid navigation delta");
} }
let mut new_current = frame.current; let new_prev_len = frame.prev.len() - (delta - 1);
for _ in 0..delta { frame.next.push(frame.current);
match frame.prev.pop() { frame.next.extend(frame.prev.drain(new_prev_len..).rev());
None => { frame.current = match frame.prev.pop() {
warn!("no prev page to navigate to"); Some(frame) => frame,
return; None => return warn!("Could not get prev frame for back navigation"),
}, };
Some(prev) => { frame.current
frame.next.push(frame.current);
frame.current = prev;
new_current = prev;
},
}
}
new_current
} }
}; };
frame.current = next;
(prev, next) (prev, next)
}, },
None => { None => {