Tidy & set up for pages
This commit is contained in:
@@ -129,12 +129,6 @@ pub struct OnboardingUI {
|
||||
current_focus: OnboardingFocus,
|
||||
completed_pages: [bool; 4],
|
||||
|
||||
// Page entities
|
||||
basics_page: Entity<BasicsPage>,
|
||||
editing_page: Entity<EditingPage>,
|
||||
ai_setup_page: Entity<AiSetupPage>,
|
||||
welcome_page: Entity<WelcomePage>,
|
||||
|
||||
// Workspace reference for Item trait
|
||||
workspace: WeakEntity<Workspace>,
|
||||
}
|
||||
@@ -147,68 +141,16 @@ impl Focusable for OnboardingUI {
|
||||
}
|
||||
}
|
||||
|
||||
pub struct BasicsPage {
|
||||
focus_handle: FocusHandle,
|
||||
parent: WeakEntity<OnboardingUI>,
|
||||
}
|
||||
|
||||
pub struct EditingPage {
|
||||
focus_handle: FocusHandle,
|
||||
parent: WeakEntity<OnboardingUI>,
|
||||
}
|
||||
|
||||
pub struct AiSetupPage {
|
||||
focus_handle: FocusHandle,
|
||||
parent: WeakEntity<OnboardingUI>,
|
||||
}
|
||||
|
||||
pub struct WelcomePage {
|
||||
focus_handle: FocusHandle,
|
||||
parent: WeakEntity<OnboardingUI>,
|
||||
}
|
||||
|
||||
// Event types for communication between pages and main UI
|
||||
#[derive(Clone)]
|
||||
pub enum OnboardingEvent {
|
||||
PageCompleted(OnboardingPage),
|
||||
}
|
||||
|
||||
// Implement EventEmitter for all entities
|
||||
impl EventEmitter<OnboardingEvent> for BasicsPage {}
|
||||
impl EventEmitter<OnboardingEvent> for EditingPage {}
|
||||
impl EventEmitter<OnboardingEvent> for AiSetupPage {}
|
||||
impl EventEmitter<OnboardingEvent> for WelcomePage {}
|
||||
|
||||
impl Focusable for BasicsPage {
|
||||
fn focus_handle(&self, _cx: &App) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Focusable for EditingPage {
|
||||
fn focus_handle(&self, _cx: &App) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Focusable for AiSetupPage {
|
||||
fn focus_handle(&self, _cx: &App) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
||||
impl Focusable for WelcomePage {
|
||||
fn focus_handle(&self, _cx: &App) -> FocusHandle {
|
||||
self.focus_handle.clone()
|
||||
}
|
||||
}
|
||||
|
||||
// Placeholder Render implementations
|
||||
impl Render for OnboardingUI {
|
||||
fn render(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
window: &mut gpui::Window,
|
||||
cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
h_flex()
|
||||
.id("onboarding-ui")
|
||||
@@ -218,82 +160,17 @@ impl Render for OnboardingUI {
|
||||
.h(px(500.))
|
||||
.gap(px(48.))
|
||||
.child(v_flex().h_full().w(px(256.)).child("nav"))
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for BasicsPage {
|
||||
fn render(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
gpui::div()
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for EditingPage {
|
||||
fn render(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
gpui::div()
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for AiSetupPage {
|
||||
fn render(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
gpui::div()
|
||||
}
|
||||
}
|
||||
|
||||
impl Render for WelcomePage {
|
||||
fn render(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
gpui::div()
|
||||
.child(self.render_active_page(window, cx))
|
||||
}
|
||||
}
|
||||
|
||||
impl OnboardingUI {
|
||||
pub fn new(workspace: &Workspace, cx: &mut Context<Self>) -> Self {
|
||||
let parent_handle = cx.entity().downgrade();
|
||||
|
||||
let basics_page = cx.new(|cx| BasicsPage {
|
||||
focus_handle: cx.focus_handle(),
|
||||
parent: parent_handle.clone(),
|
||||
});
|
||||
|
||||
let editing_page = cx.new(|cx| EditingPage {
|
||||
focus_handle: cx.focus_handle(),
|
||||
parent: parent_handle.clone(),
|
||||
});
|
||||
|
||||
let ai_setup_page = cx.new(|cx| AiSetupPage {
|
||||
focus_handle: cx.focus_handle(),
|
||||
parent: parent_handle.clone(),
|
||||
});
|
||||
|
||||
let welcome_page = cx.new(|cx| WelcomePage {
|
||||
focus_handle: cx.focus_handle(),
|
||||
parent: parent_handle.clone(),
|
||||
});
|
||||
|
||||
Self {
|
||||
focus_handle: cx.focus_handle(),
|
||||
current_page: OnboardingPage::Basics,
|
||||
current_focus: OnboardingFocus::Page,
|
||||
completed_pages: [false; 4],
|
||||
basics_page,
|
||||
editing_page,
|
||||
ai_setup_page,
|
||||
welcome_page,
|
||||
workspace: workspace.weak_handle(),
|
||||
}
|
||||
}
|
||||
@@ -352,6 +229,35 @@ impl OnboardingUI {
|
||||
self.completed_pages[index] = true;
|
||||
cx.notify();
|
||||
}
|
||||
|
||||
fn render_active_page(
|
||||
&mut self,
|
||||
_window: &mut gpui::Window,
|
||||
_cx: &mut Context<Self>,
|
||||
) -> impl gpui::IntoElement {
|
||||
match self.current_page {
|
||||
OnboardingPage::Basics => self.render_basics_page(),
|
||||
OnboardingPage::Editing => self.render_editing_page(),
|
||||
OnboardingPage::AiSetup => self.render_ai_setup_page(),
|
||||
OnboardingPage::Welcome => self.render_welcome_page(),
|
||||
}
|
||||
}
|
||||
|
||||
fn render_basics_page(&self) -> impl gpui::IntoElement {
|
||||
v_flex().h_full().w_full().child("Basics Page")
|
||||
}
|
||||
|
||||
fn render_editing_page(&self) -> impl gpui::IntoElement {
|
||||
v_flex().h_full().w_full().child("Editing Page")
|
||||
}
|
||||
|
||||
fn render_ai_setup_page(&self) -> impl gpui::IntoElement {
|
||||
v_flex().h_full().w_full().child("AI Setup Page")
|
||||
}
|
||||
|
||||
fn render_welcome_page(&self) -> impl gpui::IntoElement {
|
||||
v_flex().h_full().w_full().child("Welcome Page")
|
||||
}
|
||||
}
|
||||
|
||||
impl Item for OnboardingUI {
|
||||
|
||||
Reference in New Issue
Block a user