pub mod indicator;
pub mod input;
pub mod message;
#[cfg(test)]
pub mod indicator_tests;
use crate::cmdltext::CmdlineTextWk;
use crate::inodify_impl;
use crate::prelude::*;
use crate::ui::tree::*;
use crate::ui::viewport::CursorViewport;
use crate::ui::viewport::CursorViewportArc;
use crate::ui::viewport::Viewport;
use crate::ui::viewport::ViewportArc;
use crate::ui::widget::Widgetable;
use crate::ui::widget::window::opt::WindowOptions;
use crate::ui::widget::window::opt::WindowOptionsBuilder;
#[derive(Debug, Clone)]
pub struct Cmdline {
__node: InodeBase,
options: WindowOptions,
input_panel_id: NodeId,
indicator_id: NodeId,
input_id: NodeId,
message_id: NodeId,
input_viewport: ViewportArc,
input_cursor_viewport: CursorViewportArc,
message_viewport: ViewportArc,
}
inodify_impl!(Cmdline);
impl Cmdline {
pub fn new(
id: NodeId,
ctx: TreeContextWk,
cmdline_text: CmdlineTextWk,
input_panel_id: NodeId,
indicator_id: NodeId,
input_id: NodeId,
input_size: &U16Size,
message_id: NodeId,
message_size: &U16Size,
) -> Self {
let options = WindowOptionsBuilder::default()
.wrap(false)
.line_break(false)
.scroll_off(0)
.build()
.unwrap();
let (input_viewport, input_cursor_viewport, message_viewport) = {
let cmdline_text = cmdline_text.upgrade().unwrap();
let cmdline_text = lock!(cmdline_text);
let input_viewport =
Viewport::view(&options, cmdline_text.input(), input_size, 0, 0);
let input_cursor_viewport = CursorViewport::from_top_left(
&input_viewport,
cmdline_text.input(),
input_size,
);
let message_viewport =
Viewport::view(&options, cmdline_text.message(), message_size, 0, 0);
(input_viewport, input_cursor_viewport, message_viewport)
};
let input_viewport = Viewport::to_arc(input_viewport);
let input_cursor_viewport = CursorViewport::to_arc(input_cursor_viewport);
let message_viewport = Viewport::to_arc(message_viewport);
Self {
__node: InodeBase::new(id, ctx),
options,
input_panel_id,
indicator_id,
input_id,
message_id,
input_viewport,
input_cursor_viewport,
message_viewport,
}
}
}
impl Widgetable for Cmdline {}
impl Cmdline {
pub fn options(&self) -> &WindowOptions {
&self.options
}
pub fn set_options(&mut self, options: &WindowOptions) {
self.options = *options;
}
pub fn input_panel_id(&self) -> NodeId {
self.input_panel_id
}
pub fn indicator_id(&self) -> NodeId {
self.indicator_id
}
pub fn input_id(&self) -> NodeId {
self.input_id
}
pub fn message_id(&self) -> NodeId {
self.message_id
}
}
impl Cmdline {
pub fn input_viewport(&self) -> ViewportArc {
self.input_viewport.clone()
}
pub fn message_viewport(&self) -> ViewportArc {
self.message_viewport.clone()
}
pub fn set_input_viewport(&mut self, viewport: ViewportArc) {
self.input_viewport = viewport;
}
pub fn set_message_viewport(&mut self, viewport: ViewportArc) {
self.message_viewport = viewport;
}
pub fn input_cursor_viewport(&self) -> CursorViewportArc {
self.input_cursor_viewport.clone()
}
pub fn set_input_cursor_viewport(
&mut self,
cursor_viewport: CursorViewportArc,
) {
self.input_cursor_viewport = cursor_viewport;
}
}