use super::*;
#[derive(Debug, Clone, PartialEq, Eq)]
pub(crate) struct UsageModalState {
pub(crate) loading: bool,
pub(crate) result: Option<crate::tui::usage::UsageLoadResult>,
}
impl MissionControlState {
pub(crate) fn open_usage_modal_loading(&mut self) {
self.modals.usage_modal = Some(UsageModalState {
loading: true,
result: None,
});
self.hide_autocomplete();
}
pub(crate) fn set_usage_modal_result(
&mut self,
result: crate::tui::usage::UsageLoadResult,
) -> bool {
let Some(modal) = &mut self.modals.usage_modal else {
return false;
};
let changed = modal.loading || modal.result.as_ref() != Some(&result);
modal.loading = false;
modal.result = Some(result);
self.set_scroll_offset(&self.scroll_views.usage_modal, 0);
changed
}
pub(crate) fn close_usage_modal(&mut self) -> bool {
self.pending_usage_request_id = None;
self.modals.usage_modal.take().is_some()
}
pub(crate) fn usage_modal_visible(&self) -> bool {
self.modals.usage_modal.is_some()
}
pub(crate) fn scroll_usage_up_by(
&mut self,
rows: u16,
visible_rows: u16,
wrap_width: u16,
) -> bool {
let before = self.scroll_offset(&self.scroll_views.usage_modal);
let overflow = self.usage_scroll_overflow(visible_rows, wrap_width);
self.set_scroll_offset(
&self.scroll_views.usage_modal,
before.saturating_sub(usize::from(rows)).min(overflow),
);
self.scroll_offset(&self.scroll_views.usage_modal) != before
}
pub(crate) fn scroll_usage_down_by(
&mut self,
rows: u16,
visible_rows: u16,
wrap_width: u16,
) -> bool {
let before = self.scroll_offset(&self.scroll_views.usage_modal);
let overflow = self.usage_scroll_overflow(visible_rows, wrap_width);
self.set_scroll_offset(
&self.scroll_views.usage_modal,
before.saturating_add(usize::from(rows)).min(overflow),
);
self.scroll_offset(&self.scroll_views.usage_modal) != before
}
pub(crate) fn usage_scroll_overflow(&self, visible_rows: u16, wrap_width: u16) -> usize {
let Some(modal) = &self.modals.usage_modal else {
return 0;
};
crate::tui::usage::usage_visual_rows(modal.loading, modal.result.as_ref(), wrap_width)
.saturating_sub(visible_rows.max(1) as usize)
}
}