pub mod content;
pub mod opt;
#[cfg(test)]
mod content_tests;
#[cfg(test)]
mod opt_tests;
use crate::buf::BufferWk;
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 opt::*;
#[derive(Debug, Clone)]
pub struct Window {
__node: InodeBase,
options: WindowOptions,
content_id: NodeId,
buffer: BufferWk,
viewport: ViewportArc,
cursor_viewport: CursorViewportArc,
}
inodify_impl!(Window);
impl Window {
pub fn new(
id: NodeId,
ctx: TreeContextWk,
options: WindowOptions,
buffer: BufferWk,
content_id: NodeId,
content_size: &U16Size,
) -> Self {
let (viewport, cursor_viewport) = {
let buffer = buffer.upgrade().unwrap();
let buffer = lock!(buffer);
let viewport =
Viewport::view(&options, buffer.text(), content_size, 0, 0);
let cursor_viewport =
CursorViewport::from_top_left(&viewport, buffer.text(), content_size);
(
Viewport::to_arc(viewport),
CursorViewport::to_arc(cursor_viewport),
)
};
Window {
__node: InodeBase::new(id, ctx),
options,
content_id,
buffer,
viewport,
cursor_viewport,
}
}
pub fn __post_initialize_content_id(&mut self, value: NodeId) {
self.content_id = value;
}
}
impl Widgetable for Window {}
impl Window {
pub fn options(&self) -> &WindowOptions {
&self.options
}
pub fn set_options(&mut self, options: &WindowOptions) {
self.options = *options;
}
pub fn buffer(&self) -> BufferWk {
self.buffer.clone()
}
pub fn content_id(&self) -> NodeId {
self.content_id
}
}
impl Window {
pub fn viewport(&self) -> ViewportArc {
self.viewport.clone()
}
pub fn set_viewport(&mut self, viewport: ViewportArc) {
self.viewport = viewport;
}
pub fn cursor_viewport(&self) -> CursorViewportArc {
self.cursor_viewport.clone()
}
pub fn set_cursor_viewport(&mut self, cursor_viewport: CursorViewportArc) {
self.cursor_viewport = cursor_viewport;
}
}