Skip to content

Commit 93342e9

Browse files
authored
Create welcome.rs
1 parent c58340d commit 93342e9

1 file changed

Lines changed: 90 additions & 0 deletions

File tree

source-code/src/welcome.rs

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
use crate::config::HdevConfig;
2+
3+
#[derive(Debug, Clone, PartialEq)]
4+
pub enum WelcomeAction {
5+
OpenEditor,
6+
OpenTerminal,
7+
OpenMarketplace,
8+
OpenSettings,
9+
OpenRecentFile(String),
10+
None,
11+
}
12+
13+
#[derive(Debug, Clone, PartialEq)]
14+
pub enum WelcomeItem {
15+
NewFile,
16+
OpenFolder,
17+
Terminal,
18+
Marketplace,
19+
Settings,
20+
RecentFile(String),
21+
}
22+
23+
impl WelcomeItem {
24+
pub fn label(&self) -> String {
25+
match self {
26+
WelcomeItem::NewFile => " New File Ctrl+T".to_string(),
27+
WelcomeItem::OpenFolder => " Open Folder Ctrl+O".to_string(),
28+
WelcomeItem::Terminal => " Terminal Ctrl+B".to_string(),
29+
WelcomeItem::Marketplace => " Marketplace Ctrl+M".to_string(),
30+
WelcomeItem::Settings => " Settings Ctrl+,".to_string(),
31+
WelcomeItem::RecentFile(p) => {
32+
let name = std::path::Path::new(p)
33+
.file_name()
34+
.and_then(|n| n.to_str())
35+
.unwrap_or(p);
36+
format!(" {}", name)
37+
}
38+
}
39+
}
40+
pub fn icon(&self) -> &'static str {
41+
match self {
42+
WelcomeItem::NewFile => "◈",
43+
WelcomeItem::OpenFolder => "⊞",
44+
WelcomeItem::Terminal => "❯",
45+
WelcomeItem::Marketplace => "◎",
46+
WelcomeItem::Settings => "⚙",
47+
WelcomeItem::RecentFile(_)=> "◷",
48+
}
49+
}
50+
}
51+
52+
pub struct WelcomeScreen {
53+
pub items: Vec<WelcomeItem>,
54+
pub selected: usize,
55+
}
56+
57+
impl WelcomeScreen {
58+
pub fn new(config: &HdevConfig) -> Self {
59+
let mut items = vec![
60+
WelcomeItem::NewFile,
61+
WelcomeItem::OpenFolder,
62+
WelcomeItem::Terminal,
63+
WelcomeItem::Marketplace,
64+
WelcomeItem::Settings,
65+
];
66+
for recent in config.recent_files.iter().take(5) {
67+
items.push(WelcomeItem::RecentFile(recent.clone()));
68+
}
69+
Self { items, selected: 0 }
70+
}
71+
72+
pub fn move_up(&mut self) {
73+
if self.selected > 0 { self.selected -= 1; }
74+
}
75+
76+
pub fn move_down(&mut self) {
77+
if self.selected + 1 < self.items.len() { self.selected += 1; }
78+
}
79+
80+
pub fn select(&self) -> WelcomeAction {
81+
match &self.items[self.selected] {
82+
WelcomeItem::NewFile => WelcomeAction::OpenEditor,
83+
WelcomeItem::OpenFolder => WelcomeAction::OpenEditor,
84+
WelcomeItem::Terminal => WelcomeAction::OpenTerminal,
85+
WelcomeItem::Marketplace => WelcomeAction::OpenMarketplace,
86+
WelcomeItem::Settings => WelcomeAction::OpenSettings,
87+
WelcomeItem::RecentFile(p)=> WelcomeAction::OpenRecentFile(p.clone()),
88+
}
89+
}
90+
}

0 commit comments

Comments
 (0)