extern crate libc;
extern crate mio;
extern crate term_input;
extern crate termbox_simple;
extern crate tiny;
use mio::Events;
use mio::Poll;
use mio::PollOpt;
use mio::Ready;
use mio::Token;
use mio::unix::EventedFd;
use term_input::{Input, Event};
use tiny::config::Colors;
use tiny::tui::tabbed::MsgSource;
use tiny::tui::tabbed::TabStyle;
use tiny::tui::{TUI, TUIRet, MsgTarget, Timestamp};
fn main() {
let mut tui = TUI::new(Colors::default());
for serv_idx in 0 .. 10 {
let server = format!("server_{}", serv_idx);
tui.new_server_tab(&server);
tui.new_chan_tab(&server, "chan_0");
tui.set_tab_style(TabStyle::NewMsg, &MsgTarget::Chan {
serv_name: &server,
chan_name: "chan_0"
});
tui.new_chan_tab(&server, "chan_1");
tui.set_tab_style(TabStyle::Highlight, &MsgTarget::Chan {
serv_name: &server,
chan_name: "chan_1"
});
tui.new_chan_tab(&server, "chan_2");
}
tui.draw();
let poll = Poll::new().unwrap();
poll.register(
&EventedFd(&libc::STDIN_FILENO),
Token(libc::STDIN_FILENO as usize),
Ready::readable(),
PollOpt::level()).unwrap();
let mut ev_buffer: Vec<Event> = Vec::new();
let mut input = Input::new();
let mut events = Events::with_capacity(10);
'mainloop:
loop {
match poll.poll(&mut events, None) {
Err(_) => {
tui.resize();
tui.draw();
}
Ok(_) => {
input.read_input_events(&mut ev_buffer);
for ev in ev_buffer.drain(0..) {
match tui.handle_input_event(ev) {
TUIRet::Input { msg, from } => {
let msg_string = msg.iter().cloned().collect::<String>();
match from {
MsgSource::Chan { serv_name, chan_name } => {
tui.add_privmsg(
"me",
&msg_string,
Timestamp::now(),
&MsgTarget::Chan { serv_name: &serv_name, chan_name: &chan_name });
}
MsgSource::Serv { .. } => {
tui.add_client_err_msg(
"Can't send PRIVMSG to a server.",
&MsgTarget::CurrentTab);
}
_ => {}
}
}
TUIRet::Abort => {
break 'mainloop;
}
_ => {}
}
}
tui.draw();
}
}
}
}