summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJiayi Zhao <jeff.no.zhao@gmail.com>2018-12-24 13:01:37 -0500
committerJiayi Zhao <jeff.no.zhao@gmail.com>2018-12-24 13:01:37 -0500
commitb38161b64fd5096b43a82f9454b0433cc065b387 (patch)
treed5395de4f8aca459c1f21741d09a315b7bd58cd4
parentee9fe6b2b0d22c67db5b5c6a240fea9883d5d1a3 (diff)
move methods from mod to ui
-rw-r--r--src/joshuto/mod.rs141
-rw-r--r--src/joshuto/ui.rs117
2 files changed, 150 insertions, 108 deletions
diff --git a/src/joshuto/mod.rs b/src/joshuto/mod.rs
index 9a10925..fcd2c1d 100644
--- a/src/joshuto/mod.rs
+++ b/src/joshuto/mod.rs
@@ -47,13 +47,18 @@ fn recurse_get_keycommand<'a>(joshuto_view : &structs::JoshutoView,
}
}
}
+/*
-fn redraw_views(joshuto_view : &structs::JoshutoView,
+fn refresh_view(joshuto_view : &structs::JoshutoView,
parent_view: Option<&structs::JoshutoDirList>,
curr_view: Option<&structs::JoshutoDirList>,
- preview_view: Option<&structs::JoshutoDirList>)
+ preview_view: Option<&structs::JoshutoDirList>,
+ config_t: &config::JoshutoConfig,
+
+ )
{
if let Some(s) = parent_view {
+ s.update(
s.display_contents(&joshuto_view.left_win);
ncurses::wnoutrefresh(joshuto_view.left_win.win);
}
@@ -68,40 +73,7 @@ fn redraw_views(joshuto_view : &structs::JoshutoView,
ncurses::wnoutrefresh(joshuto_view.right_win.win);
}
}
-
-fn redraw_status(joshuto_view : &structs::JoshutoView,
- curr_view: Option<&structs::JoshutoDirList>, curr_path: &path::PathBuf,
- username: &str, hostname: &str)
-{
- if let Some(s) = curr_view.as_ref() {
- let dirent = s.get_dir_entry(s.index);
- if let Some(dirent) = dirent {
- if let Ok(file_name) = dirent.entry.file_name().into_string() {
- ui::wprint_path(&joshuto_view.top_win, username, hostname,
- curr_path, file_name.as_str());
- ui::wprint_file_info(joshuto_view.bot_win.win, &dirent.entry);
- }
- }
- }
-}
-
-fn refresh_handler(config_t: &config::JoshutoConfig,
- joshuto_view : &mut structs::JoshutoView,
- curr_path : &path::PathBuf,
- parent_view : Option<&structs::JoshutoDirList>,
- curr_view : Option<&structs::JoshutoDirList>,
- preview_view : Option<&structs::JoshutoDirList>)
-{
- joshuto_view.redraw_views();
- ncurses::refresh();
-
- redraw_views(joshuto_view, parent_view, curr_view, preview_view);
-
- redraw_status(joshuto_view, curr_view, curr_path,
- &config_t.username, &config_t.hostname);
-
- ncurses::doupdate();
-}
+*/
pub fn run(mut config_t: config::JoshutoConfig,
keymap_t: keymap::JoshutoKeymap,
@@ -148,36 +120,36 @@ pub fn run(mut config_t: config::JoshutoConfig,
};
let mut preview_view : Option<structs::JoshutoDirList>;
- if curr_view.as_ref().unwrap().contents.as_ref().unwrap().len() > 0 &&
- curr_view.as_ref().unwrap().index >= 0 {
- let index : usize = curr_view.as_ref().unwrap().index as usize;
- let dirent : &structs::JoshutoDirEntry = &curr_view.as_ref().unwrap()
- .contents.as_ref().unwrap()[index];
-
- let preview_path = dirent.entry.path();
- if preview_path.is_dir() {
- preview_view = match structs::JoshutoDirList::new(&preview_path, &config_t.sort_type) {
- Ok(s) => { Some(s) },
- Err(e) => {
- eprintln!("{}", e);
- None
- },
- };
- } else {
- preview_view = None;
- ncurses::werase(joshuto_view.right_win.win);
- let mime_type = unix::get_mime_type(&dirent.entry.path());
- ui::wprint_msg(&joshuto_view.right_win, mime_type.as_str());
- ncurses::wnoutrefresh(joshuto_view.right_win.win);
+ if let Some(s) = curr_view.as_ref() {
+ match s.get_dir_entry(s.index) {
+ Some(dirent) => {
+ let preview_path = dirent.entry.path();
+ if preview_path.is_dir() {
+ preview_view = match structs::JoshutoDirList::new(&preview_path, &config_t.sort_type) {
+ Ok(s) => { Some(s) },
+ Err(e) => {
+ eprintln!("{}", e);
+ None
+ },
+ };
+ } else {
+ preview_view = None;
+ let mimetype = unix::get_mime_type(&dirent.entry.path());
+ ui::wprint_mimetype(&joshuto_view.right_win, &mimetype);
+ }
+ },
+ None => {
+ preview_view = None;
+ }
}
} else {
- preview_view = None;
+ preview_view = None
}
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
parent_view.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
@@ -187,7 +159,8 @@ pub fn run(mut config_t: config::JoshutoConfig,
loop {
let ch: i32 = ncurses::getch();
if ch == ncurses::KEY_RESIZE {
- refresh_handler(&config_t, &mut joshuto_view, &curr_path,
+ ui::resize_handler(&config_t,
+ &mut joshuto_view, &curr_path,
parent_view.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
@@ -213,6 +186,9 @@ pub fn run(mut config_t: config::JoshutoConfig,
match *keycommand {
JoshutoCommand::Quit => break,
+ JoshutoCommand::ReloadDirList => {
+
+ },
JoshutoCommand::MoveUp => {
let curr_index = curr_view.as_ref().unwrap().index;
if curr_index <= 0 {
@@ -229,12 +205,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -258,12 +234,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -291,12 +267,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -310,7 +286,7 @@ pub fn run(mut config_t: config::JoshutoConfig,
continue;
}
- let half_page : i32 = joshuto_view.mid_win.cols / 2;
+ let half_page: i32 = joshuto_view.mid_win.cols / 2;
let curr_index = if curr_index + half_page as usize >= dir_len {
(dir_len - 1) as i32
} else {
@@ -327,12 +303,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -352,12 +328,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -380,12 +356,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
None.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -426,7 +402,7 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
parent_view.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
@@ -436,7 +412,7 @@ pub fn run(mut config_t: config::JoshutoConfig,
},
};
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
ncurses::doupdate();
@@ -484,6 +460,9 @@ pub fn run(mut config_t: config::JoshutoConfig,
JoshutoCommand::CopyFile => {
},
+ JoshutoCommand::PasteFile => {
+
+ },
JoshutoCommand::Open => {
if curr_view.as_ref().unwrap().contents.as_ref().unwrap().len() == 0 {
continue;
@@ -521,11 +500,11 @@ pub fn run(mut config_t: config::JoshutoConfig,
}
}
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
if curr_view.as_ref().unwrap().contents.as_ref().unwrap().len() == 0 {
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
parent_view.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
@@ -552,12 +531,12 @@ pub fn run(mut config_t: config::JoshutoConfig,
ui::wprint_err(&joshuto_view.right_win, "Not a directory");
}
- redraw_views(&joshuto_view,
+ ui::redraw_views(&joshuto_view,
parent_view.as_ref(),
curr_view.as_ref(),
preview_view.as_ref());
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
@@ -599,7 +578,7 @@ pub fn run(mut config_t: config::JoshutoConfig,
let dirent : &structs::JoshutoDirEntry = &curr_view.as_ref().unwrap()
.contents.as_ref().unwrap()[index];
- redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
+ ui::redraw_status(&joshuto_view, curr_view.as_ref(), &curr_path,
&config_t.username, &config_t.hostname);
s.update(dirent.entry.path().as_path(), &config_t.sort_type);
diff --git a/src/joshuto/ui.rs b/src/joshuto/ui.rs
index b0fed96..1f302b4 100644
--- a/src/joshuto/ui.rs
+++ b/src/joshuto/ui.rs
@@ -5,6 +5,7 @@ use std::fs;
use std::path;
use std::collections::HashMap;
+use joshuto::config;
use joshuto::structs;
use joshuto::unix;
use joshuto::keymapll::JoshutoCommand;
@@ -91,6 +92,39 @@ pub fn wprint_path(win: &structs::JoshutoWindow, username: &str,
ncurses::wnoutrefresh(win.win);
}
+pub fn wprint_mimetype(win: &structs::JoshutoWindow, mimetype: &str)
+{
+ ncurses::werase(win.win);
+ wprint_msg(&win, mimetype);
+ ncurses::wnoutrefresh(win.win);
+}
+
+pub fn wprint_file(win: &structs::JoshutoWindow, file : &fs::DirEntry)
+{
+ match file.file_name().into_string() {
+ Ok(file_name) => {
+ ncurses::waddstr(win.win, " ");
+ let name_len = file_name.len();
+ if name_len >= win.cols as usize {
+ let mut trim_index: usize = win.cols as usize - 3;
+ for (index, _) in file_name.char_indices() {
+ if index >= win.cols as usize - 3 {
+ trim_index = index;
+ break;
+ }
+ }
+ ncurses::waddstr(win.win, &file_name[..trim_index]);
+ ncurses::waddstr(win.win, "…");
+ } else {
+ ncurses::waddstr(win.win, &file_name);
+ }
+ },
+ Err(e) => {
+ ncurses::waddstr(win.win, format!("{:?}", e).as_str());
+ },
+ };
+}
+
pub fn wprint_file_info(win : ncurses::WINDOW, file : &fs::DirEntry)
{
use std::os::unix::fs::PermissionsExt;
@@ -188,33 +222,6 @@ pub fn display_contents(win : &structs::JoshutoWindow,
ncurses::wnoutrefresh(win.win);
}
-pub fn wprint_file(win: &structs::JoshutoWindow, file : &fs::DirEntry)
-{
- match file.file_name().into_string() {
- Ok(file_name) => {
- ncurses::waddstr(win.win, " ");
- let name_len = file_name.len();
- if name_len >= win.cols as usize {
- let mut trim_index: usize = win.cols as usize - 3;
- for (index, _) in file_name.char_indices() {
- if index >= win.cols as usize - 3 {
- trim_index = index;
- break;
- }
- }
- ncurses::waddstr(win.win, &file_name[..trim_index]);
- ncurses::waddstr(win.win, "…");
- } else {
- ncurses::waddstr(win.win, &file_name);
- }
- },
- Err(e) => {
- ncurses::waddstr(win.win, format!("{:?}", e).as_str());
- },
- };
-}
-
-
pub fn display_options(win: &structs::JoshutoWindow, keymap: &HashMap<i32, JoshutoCommand>)
{
ncurses::werase(win.win);
@@ -230,6 +237,62 @@ pub fn display_options(win: &structs::JoshutoWindow, keymap: &HashMap<i32, Joshu
ncurses::wnoutrefresh(win.win);
}
+pub fn redraw_views(joshuto_view : &structs::JoshutoView,
+ parent_view: Option<&structs::JoshutoDirList>,
+ curr_view: Option<&structs::JoshutoDirList>,
+ preview_view: Option<&structs::JoshutoDirList>)
+{
+ if let Some(s) = parent_view {
+ s.display_contents(&joshuto_view.left_win);
+ ncurses::wnoutrefresh(joshuto_view.left_win.win);
+ }
+
+ if let Some(s) = curr_view {
+ s.display_contents(&joshuto_view.mid_win);
+ ncurses::wnoutrefresh(joshuto_view.mid_win.win);
+ }
+
+ if let Some(s) = preview_view {
+ s.display_contents(&joshuto_view.right_win);
+ ncurses::wnoutrefresh(joshuto_view.right_win.win);
+ }
+}
+
+pub fn redraw_status(joshuto_view : &structs::JoshutoView,
+ curr_view: Option<&structs::JoshutoDirList>, curr_path: &path::PathBuf,
+ username: &str, hostname: &str)
+{
+ if let Some(s) = curr_view.as_ref() {
+ let dirent = s.get_dir_entry(s.index);
+ if let Some(dirent) = dirent {
+ if let Ok(file_name) = dirent.entry.file_name().into_string() {
+ wprint_path(&joshuto_view.top_win, username, hostname,
+ curr_path, file_name.as_str());
+ wprint_file_info(joshuto_view.bot_win.win, &dirent.entry);
+ }
+ }
+ }
+}
+
+pub fn resize_handler(config_t: &config::JoshutoConfig,
+ joshuto_view : &mut structs::JoshutoView,
+ curr_path : &path::PathBuf,
+ parent_view : Option<&structs::JoshutoDirList>,
+ curr_view : Option<&structs::JoshutoDirList>,
+ preview_view : Option<&structs::JoshutoDirList>)
+{
+ joshuto_view.redraw_views();
+ ncurses::refresh();
+
+ redraw_views(joshuto_view, parent_view, curr_view, preview_view);
+
+ redraw_status(joshuto_view, curr_view, curr_path,
+ &config_t.username, &config_t.hostname);
+
+ ncurses::doupdate();
+}
+
+
fn file_attr_apply(win : ncurses::WINDOW, coord : (i32, i32), mode : u32,
file_extension : Option<&ffi::OsStr>, attr : ncurses::attr_t)
{