Skip to content

Commit a29972c

Browse files
committed
chore: clean up page switching code
1 parent 17bb44e commit a29972c

4 files changed

Lines changed: 32 additions & 48 deletions

File tree

asteride/src/main.rs

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ use lucide_icons::LUCIDE_FONT_BYTES;
1111

1212
struct AsterIDE {
1313
sidebar: sidebar::Sidebar,
14-
page: pages::Page,
1514
home: pages::home::Home,
1615
search: pages::search::Search,
1716
workspace: pages::workspace::Workspace,
@@ -43,13 +42,7 @@ impl AsterIDE {
4342

4443
fn update(&mut self, message: Message) -> Task<Message> {
4544
match message {
46-
Message::Sidebar(msg) => {
47-
let (task, event) = self.sidebar.update(msg);
48-
if let sidebar::Event::OpenPage(id) = event {
49-
self.page = id;
50-
}
51-
task.map(Message::Sidebar)
52-
}
45+
Message::Sidebar(msg) => self.sidebar.update(msg).map(Message::Sidebar),
5346
Message::BottomArea(msg) => self.bottom_area.update(msg).map(Message::BottomArea),
5447
Message::Home(msg) => self.home.update(msg).map(Message::Home),
5548
Message::Search(msg) => self.search.update(msg).map(Message::Search),
@@ -59,7 +52,7 @@ impl AsterIDE {
5952
}
6053

6154
fn view(&self) -> Element<'_, Message> {
62-
let page: Element<'_, Message> = match self.page {
55+
let page: Element<'_, Message> = match pages::current_page() {
6356
pages::Page::Home => self.home.view().map(Message::Home),
6457
pages::Page::Search => self.search.view().map(Message::Search),
6558
pages::Page::Workspace => self.workspace.view().map(Message::Workspace),
@@ -77,7 +70,6 @@ impl AsterIDE {
7770
Self {
7871
sidebar: sidebar::Sidebar::new(),
7972
bottom_area: bottom_area::BottomArea::new(),
80-
page: pages::Page::Home,
8173
home: pages::home::Home::new(),
8274
search: pages::search::Search::new(),
8375
workspace: pages::workspace::Workspace::new(),
@@ -88,9 +80,8 @@ impl AsterIDE {
8880

8981
pub fn main() -> iced::Result {
9082
let window_settings = window::Settings {
91-
// TODO: Looking to create own titlebar stuff later
83+
// TODO: Create own titlebar later
9284
decorations: true,
93-
// INFO: will ready for cool looks
9485
transparent: true,
9586
icon: app_icon::APP_ICON.clone(),
9687
..Default::default()

asteride/src/sidebar.rs

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,27 +13,17 @@ pub struct Sidebar {}
1313
pub enum Message {
1414
ContextButtonEnter(String, String),
1515
ContextButtonExit,
16-
ItemSelected(Page),
17-
}
18-
19-
pub enum Event {
20-
None,
21-
OpenPage(Page),
16+
SwitchPage(Page),
2217
}
2318

2419
impl Sidebar {
25-
pub fn update(&mut self, message: Message) -> (Task<Message>, Event) {
20+
pub fn update(&mut self, message: Message) -> Task<Message> {
2621
match message {
27-
Message::ContextButtonEnter(t, d) => {
28-
bottom_area::announce_ctx(t, d);
29-
(Task::none(), Event::None)
30-
}
31-
Message::ContextButtonExit => {
32-
bottom_area::clear_ctx();
33-
(Task::none(), Event::None)
34-
}
35-
Message::ItemSelected(page) => (Task::none(), Event::OpenPage(page)),
22+
Message::ContextButtonEnter(t, d) => bottom_area::announce_ctx(t, d),
23+
Message::ContextButtonExit => bottom_area::clear_ctx(),
24+
Message::SwitchPage(p) => pages::set_page(p),
3625
}
26+
Task::none()
3727
}
3828

3929
pub fn view(&self) -> Element<'_, Message> {
@@ -94,7 +84,7 @@ fn nav_button<'a>(
9484
) -> Element<'a, Message> {
9585
mouse_area(
9686
button(icon.into())
97-
.on_press(Message::ItemSelected(page))
87+
.on_press(Message::SwitchPage(page))
9888
.width(Length::Fill)
9989
.height(40)
10090
.style(|theme: &Theme, state: button::Status| {

elements/src/bottom_area.rs

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,7 @@
1-
use std::sync::{
2-
Mutex,
3-
OnceLock,
4-
};
5-
6-
use iced::widget::{
7-
Space,
8-
container,
9-
row,
10-
text,
11-
};
12-
use iced::{
13-
Element,
14-
Length,
15-
Padding,
16-
Task,
17-
Theme,
18-
};
1+
use std::sync::{Mutex, OnceLock};
2+
3+
use iced::widget::{Space, container, row, text};
4+
use iced::{Element, Length, Padding, Task, Theme};
195

206
#[derive(Default)]
217
struct ContextState {

pages/src/lib.rs

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,29 @@
1+
use std::sync::{Mutex, OnceLock};
2+
13
pub mod home;
24
pub mod search;
35
pub mod settings;
46
pub mod workspace;
57

6-
#[derive(Debug, Clone, PartialEq, Eq)]
8+
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
79
pub enum Page {
810
Home,
911
Search,
1012
Workspace,
1113
Settings,
1214
}
15+
16+
/// Owner of data on what page you are on
17+
fn current() -> &'static Mutex<Page> {
18+
static CURRENT: OnceLock<Mutex<Page>> = OnceLock::new();
19+
CURRENT.get_or_init(|| Mutex::new(Page::Home))
20+
}
21+
22+
/// Sets page data for which page view to be on
23+
pub fn set_page(id: Page) {
24+
*current().lock().unwrap() = id;
25+
}
26+
27+
pub fn current_page() -> Page {
28+
*current().lock().unwrap()
29+
}

0 commit comments

Comments
 (0)