diff --git a/gui/src/installer/mod.rs b/gui/src/installer/mod.rs index 5ba5f7de..3f8596fd 100644 --- a/gui/src/installer/mod.rs +++ b/gui/src/installer/mod.rs @@ -160,7 +160,7 @@ impl Installer { self.steps .get(self.current) .expect("There is always a step") - .view() + .view((self.current, self.steps.len() - 1)) } } diff --git a/gui/src/installer/step/descriptor.rs b/gui/src/installer/step/descriptor.rs index ba0b8739..45cd5632 100644 --- a/gui/src/installer/step/descriptor.rs +++ b/gui/src/installer/step/descriptor.rs @@ -158,11 +158,12 @@ impl Step for DefineDescriptor { true } - fn view(&self) -> Element { + fn view(&self, progress: (usize, usize)) -> Element { if let Some(modal) = &self.modal { modal.view() } else { view::define_descriptor( + progress, self.network, self.network_valid, &self.user_xpub, @@ -372,8 +373,9 @@ impl Step for ImportDescriptor { } } - fn view(&self) -> Element { + fn view(&self, progress: (usize, usize)) -> Element { view::import_descriptor( + progress, self.network, self.network_valid, &self.imported_descriptor, @@ -473,9 +475,10 @@ impl Step for RegisterDescriptor { Message::ConnectedHardwareWallets, ) } - fn view(&self) -> Element { + fn view(&self, progress: (usize, usize)) -> Element { let desc = self.descriptor.as_ref().unwrap(); view::register_descriptor( + progress, desc.to_string(), &self.hws, self.error.as_ref(), @@ -519,9 +522,9 @@ impl Step for BackupDescriptor { fn load_context(&mut self, ctx: &Context) { self.descriptor = ctx.descriptor.clone(); } - fn view(&self) -> Element { + fn view(&self, progress: (usize, usize)) -> Element { let desc = self.descriptor.as_ref().unwrap(); - view::backup_descriptor(desc.to_string(), self.done) + view::backup_descriptor(progress, desc.to_string(), self.done) } } diff --git a/gui/src/installer/step/mod.rs b/gui/src/installer/step/mod.rs index e0e08ee7..b3a20ff1 100644 --- a/gui/src/installer/step/mod.rs +++ b/gui/src/installer/step/mod.rs @@ -24,7 +24,7 @@ pub trait Step { fn update(&mut self, _message: Message) -> Command { Command::none() } - fn view(&self) -> Element; + fn view(&self, progress: (usize, usize)) -> Element; fn load_context(&mut self, _ctx: &Context) {} fn load(&self) -> Command { Command::none() @@ -69,7 +69,7 @@ impl Context { pub struct Welcome {} impl Step for Welcome { - fn view(&self) -> Element { + fn view(&self, _progress: (usize, usize)) -> Element { view::welcome() } } @@ -191,8 +191,8 @@ impl Step for DefineBitcoind { } } - fn view(&self) -> Element { - view::define_bitcoin(&self.address, &self.cookie_path) + fn view(&self, progress: (usize, usize)) -> Element { + view::define_bitcoin(progress, &self.address, &self.cookie_path) } } @@ -252,10 +252,11 @@ impl Step for Final { Command::none() } - fn view(&self) -> Element { + fn view(&self, progress: (usize, usize)) -> Element { let ctx = self.context.as_ref().unwrap(); let desc = ctx.descriptor.as_ref().unwrap().to_string(); view::install( + progress, ctx, desc, self.generating, diff --git a/gui/src/installer/view.rs b/gui/src/installer/view.rs index 8c923de7..4cfd0e19 100644 --- a/gui/src/installer/view.rs +++ b/gui/src/installer/view.rs @@ -118,6 +118,7 @@ pub fn welcome<'a>() -> Element<'a, Message> { } pub fn define_descriptor<'a>( + progress: (usize, usize), network: bitcoin::Network, network_valid: bool, user_xpub: &form::Value, @@ -207,6 +208,7 @@ pub fn define_descriptor<'a>( .spacing(10); layout( + progress, Column::new() .push(text("Create the wallet").bold().size(50)) .push( @@ -239,6 +241,7 @@ pub fn define_descriptor<'a>( } pub fn import_descriptor<'a>( + progress: (usize, usize), network: bitcoin::Network, network_valid: bool, imported_descriptor: &form::Value, @@ -273,6 +276,7 @@ pub fn import_descriptor<'a>( ) .spacing(10); layout( + progress, Column::new() .push(text("Import the wallet").bold().size(50)) .push( @@ -298,6 +302,7 @@ pub fn import_descriptor<'a>( } pub fn register_descriptor<'a>( + progress: (usize, usize), descriptor: String, hws: &[(HardwareWallet, Option<[u8; 32]>, bool)], error: Option<&Error>, @@ -305,6 +310,7 @@ pub fn register_descriptor<'a>( chosen_hw: Option, ) -> Element<'a, Message> { layout( + progress, Column::new() .push(text("Register descriptor").bold().size(50)) .push(card::simple( @@ -368,8 +374,13 @@ pub fn register_descriptor<'a>( ) } -pub fn backup_descriptor<'a>(descriptor: String, done: bool) -> Element<'a, Message> { +pub fn backup_descriptor<'a>( + progress: (usize, usize), + descriptor: String, + done: bool, +) -> Element<'a, Message> { layout( + progress, Column::new() .push( text("Did you backup your wallet descriptor ?") @@ -442,6 +453,7 @@ pub fn help_backup<'a>() -> Element<'a, Message> { } pub fn define_bitcoin<'a>( + progress: (usize, usize), address: &form::Value, cookie_path: &form::Value, ) -> Element<'a, Message> { @@ -470,6 +482,7 @@ pub fn define_bitcoin<'a>( .spacing(10); layout( + progress, Column::new() .push( text("Set up connection to the Bitcoin full node") @@ -492,6 +505,7 @@ pub fn define_bitcoin<'a>( } pub fn install<'a>( + progress: (usize, usize), context: &Context, descriptor: String, generating: bool, @@ -606,7 +620,7 @@ pub fn install<'a>( ); } - layout(col) + layout(progress, col) } pub fn hardware_wallet_xpubs_modal<'a>( @@ -715,13 +729,21 @@ fn hw_list_view<'a>( .into() } -fn layout<'a>(content: impl Into>) -> Element<'a, Message> { +fn layout<'a>( + progress: (usize, usize), + content: impl Into>, +) -> Element<'a, Message> { Container::new(Scrollable::new( Column::new() .push( Container::new(button::transparent(None, "< Previous").on_press(Message::Previous)) .padding(5), ) + .push( + Container::new(text(format!("{}/{}", progress.0, progress.1))) + .width(Length::Fill) + .center_x(), + ) .push(Container::new(content).width(Length::Fill).center_x()), )) .center_x()