use super::super::shared::functions;
use super::*;
use std::any::Any;
use std::fmt::Display;
use std::io::{self, Write};
#[cfg(target_os = "windows")]
use winapi::um::winnt::HANDLE;
pub struct ScreenManager {
screen_manager: Box<IScreenManager>,
}
impl ScreenManager {
pub fn new() -> ScreenManager {
#[cfg(target_os = "windows")]
let screen_manager = functions::get_module::<Box<IScreenManager>>(
Box::from(WinApiScreenManager::new()),
Box::from(AnsiScreenManager::new()),
).unwrap();
#[cfg(not(target_os = "windows"))]
let screen_manager = Box::from(AnsiScreenManager::new()) as Box<IScreenManager>;
ScreenManager {
screen_manager: screen_manager,
}
}
pub fn toggle_is_alternate_screen(&mut self, is_alternate_screen: bool) {
self.screen_manager
.toggle_is_alternate_screen(is_alternate_screen);
}
pub fn write_string(&mut self, string: String) -> io::Result<usize> {
self.screen_manager.write_string(string)
}
pub fn write_str(&mut self, string: &str) -> io::Result<usize>
{
self.screen_manager.write_str(string)
}
pub fn as_any(&mut self) -> &mut Any {
self.screen_manager.as_any()
}
}
impl Write for ScreenManager {
fn write(&mut self, buf: &[u8]) -> io::Result<usize> {
self.screen_manager.write(buf)
}
fn flush(&mut self) -> io::Result<()> {
self.screen_manager.flush()
}
}