summaryrefslogtreecommitdiffstats
path: root/default-plugins/session-manager/src/new_session_info.rs
diff options
context:
space:
mode:
Diffstat (limited to 'default-plugins/session-manager/src/new_session_info.rs')
-rw-r--r--default-plugins/session-manager/src/new_session_info.rs44
1 files changed, 39 insertions, 5 deletions
diff --git a/default-plugins/session-manager/src/new_session_info.rs b/default-plugins/session-manager/src/new_session_info.rs
index 02e539668..200ff0849 100644
--- a/default-plugins/session-manager/src/new_session_info.rs
+++ b/default-plugins/session-manager/src/new_session_info.rs
@@ -126,21 +126,28 @@ impl NewSessionInfo {
pub fn update_layout_list(&mut self, layout_info: Vec<LayoutInfo>) {
self.layout_list.update_layout_list(layout_info);
}
- pub fn layout_list(&self) -> Vec<(LayoutInfo, bool)> {
+ pub fn layout_list(&self, max_rows: usize) -> Vec<(LayoutInfo, bool)> {
// bool - is_selected
+ let range_to_render = self.range_to_render(
+ max_rows,
+ self.layout_count(),
+ Some(self.layout_list.selected_layout_index),
+ );
self.layout_list
.layout_list
.iter()
.enumerate()
.map(|(i, l)| (l.clone(), i == self.layout_list.selected_layout_index))
+ .take(range_to_render.1)
+ .skip(range_to_render.0)
.collect()
}
- pub fn layouts_to_render(&self) -> Vec<(LayoutInfo, Vec<usize>, bool)> {
+ pub fn layouts_to_render(&self, max_rows: usize) -> Vec<(LayoutInfo, Vec<usize>, bool)> {
// (layout_info,
// search_indices,
// is_selected)
if self.is_searching() {
- self.layout_search_results()
+ self.layout_search_results(max_rows)
.into_iter()
.map(|(layout_search_result, is_selected)| {
(
@@ -151,21 +158,48 @@ impl NewSessionInfo {
})
.collect()
} else {
- self.layout_list()
+ self.layout_list(max_rows)
.into_iter()
.map(|(layout_info, is_selected)| (layout_info, vec![], is_selected))
.collect()
}
}
- pub fn layout_search_results(&self) -> Vec<(LayoutSearchResult, bool)> {
+ pub fn layout_search_results(&self, max_rows: usize) -> Vec<(LayoutSearchResult, bool)> {
// bool - is_selected
+ let range_to_render = self.range_to_render(
+ max_rows,
+ self.layout_list.layout_search_results.len(),
+ Some(self.layout_list.selected_layout_index),
+ );
self.layout_list
.layout_search_results
.iter()
.enumerate()
.map(|(i, l)| (l.clone(), i == self.layout_list.selected_layout_index))
+ .take(range_to_render.1)
+ .skip(range_to_render.0)
.collect()
}
+ // TODO: merge with similar function in resurrectable_sessions
+ fn range_to_render(
+ &self,
+ table_rows: usize,
+ results_len: usize,
+ selected_index: Option<usize>,
+ ) -> (usize, usize) {
+ if table_rows <= results_len {
+ let row_count_to_render = table_rows.saturating_sub(1); // 1 for the title
+ let first_row_index_to_render = selected_index
+ .unwrap_or(0)
+ .saturating_sub(row_count_to_render / 2);
+ let last_row_index_to_render = first_row_index_to_render + row_count_to_render;
+ (first_row_index_to_render, last_row_index_to_render)
+ } else {
+ let first_row_index_to_render = 0;
+ let last_row_index_to_render = results_len;
+ (first_row_index_to_render, last_row_index_to_render)
+ }
+ }
pub fn is_searching(&self) -> bool {
!self.layout_list.layout_search_term.is_empty()
}