ui: initial mnemonic recovering
This commit is contained in:
parent
722ba65ce8
commit
952796abff
3 changed files with 91 additions and 79 deletions
|
@ -172,7 +172,7 @@ impl WalletCreation {
|
||||||
Some(step) => {
|
Some(step) => {
|
||||||
match step {
|
match step {
|
||||||
Step::EnterMnemonic => {
|
Step::EnterMnemonic => {
|
||||||
self.mnemonic_setup.ui(ui, cb);
|
self.mnemonic_setup.enter_ui(ui, cb);
|
||||||
}
|
}
|
||||||
Step::ConfirmMnemonic => {}
|
Step::ConfirmMnemonic => {}
|
||||||
Step::SetupConnection => {}
|
Step::SetupConnection => {}
|
||||||
|
|
|
@ -15,6 +15,7 @@
|
||||||
use egui::{RichText, ScrollArea};
|
use egui::{RichText, ScrollArea};
|
||||||
|
|
||||||
use crate::gui::Colors;
|
use crate::gui::Colors;
|
||||||
|
use crate::gui::icons::PENCIL;
|
||||||
use crate::gui::platform::PlatformCallbacks;
|
use crate::gui::platform::PlatformCallbacks;
|
||||||
use crate::gui::views::{Root, View};
|
use crate::gui::views::{Root, View};
|
||||||
use crate::gui::views::wallets::creation::types::{Mnemonic, PhraseMode, PhraseSize};
|
use crate::gui::views::wallets::creation::types::{Mnemonic, PhraseMode, PhraseSize};
|
||||||
|
@ -37,7 +38,7 @@ impl Default for MnemonicSetup {
|
||||||
}
|
}
|
||||||
|
|
||||||
impl MnemonicSetup {
|
impl MnemonicSetup {
|
||||||
pub fn ui(&mut self, ui: &mut egui::Ui, cb: &dyn PlatformCallbacks) {
|
pub fn enter_ui(&mut self, ui: &mut egui::Ui, cb: &dyn PlatformCallbacks) {
|
||||||
ScrollArea::vertical()
|
ScrollArea::vertical()
|
||||||
.id_source("mnemonic_words_list")
|
.id_source("mnemonic_words_list")
|
||||||
.auto_shrink([false; 2])
|
.auto_shrink([false; 2])
|
||||||
|
@ -49,10 +50,10 @@ impl MnemonicSetup {
|
||||||
|
|
||||||
ui.add_space(12.0);
|
ui.add_space(12.0);
|
||||||
View::horizontal_line(ui, Colors::ITEM_STROKE);
|
View::horizontal_line(ui, Colors::ITEM_STROKE);
|
||||||
ui.add_space(12.0);
|
ui.add_space(6.0);
|
||||||
|
|
||||||
// Show words setup.
|
// Show words setup.
|
||||||
self.words_ui(ui);
|
self.word_list_ui(ui);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -119,90 +120,95 @@ impl MnemonicSetup {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw words setup based on selected [`PhraseMode`].
|
/// Calculate word list columns count based on available ui width.
|
||||||
fn words_ui(&mut self, ui: &mut egui::Ui) {
|
fn calc_columns_count(ui: &mut egui::Ui) -> usize {
|
||||||
ui.vertical_centered(|ui| {
|
|
||||||
// Show word list based on setup mode.
|
|
||||||
match self.mnemonic.mode {
|
|
||||||
PhraseMode::Generate => self.word_list_generate_ui(ui),
|
|
||||||
PhraseMode::Import => self.word_list_import_ui(ui)
|
|
||||||
}
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Draw word list for [`PhraseMode::Generate`] mode.
|
|
||||||
fn word_list_generate_ui(&mut self, ui: &mut egui::Ui) {
|
|
||||||
// Calculate rows count based on available ui width.
|
|
||||||
const PADDING: f32 = 24.0;
|
|
||||||
let w = ui.available_width();
|
let w = ui.available_width();
|
||||||
let min_panel_w = Root::SIDE_PANEL_MIN_WIDTH;
|
let min_panel_w = Root::SIDE_PANEL_MIN_WIDTH - 12.0;
|
||||||
let double_min_panel_w = (min_panel_w * 2.0) - PADDING;
|
let double_min_panel_w = min_panel_w * 2.0;
|
||||||
let cols = if w >= (min_panel_w * 1.5) - PADDING && w < double_min_panel_w {
|
if w >= min_panel_w * 1.5 && w < double_min_panel_w {
|
||||||
3
|
3
|
||||||
} else if w >= double_min_panel_w {
|
} else if w >= double_min_panel_w {
|
||||||
4
|
4
|
||||||
} else {
|
} else {
|
||||||
2
|
2
|
||||||
};
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Show words amount.
|
/// Draw word list for mnemonic phrase.
|
||||||
let mut word_number = 0;
|
fn word_list_ui(&self, ui: &mut egui::Ui) {
|
||||||
let _ = self.mnemonic.words.chunks(cols).map(|chunk| {
|
ui.scope(|ui| {
|
||||||
let size = chunk.len();
|
// Setup spacing between columns.
|
||||||
word_number += 1;
|
ui.spacing_mut().item_spacing = egui::Vec2::new(6.0, 6.0);
|
||||||
if size > 1 {
|
|
||||||
ui.columns(cols, |columns| {
|
if self.mnemonic.mode == PhraseMode::Generate {
|
||||||
columns[0].horizontal(|ui| {
|
ui.add_space(6.0)
|
||||||
ui.add_space(PADDING);
|
|
||||||
Self::generated_word_ui(ui, word_number, chunk, 0);
|
|
||||||
});
|
|
||||||
columns[1].horizontal(|ui| {
|
|
||||||
ui.add_space(PADDING);
|
|
||||||
word_number += 1;
|
|
||||||
Self::generated_word_ui(ui, word_number, chunk, 1);
|
|
||||||
});
|
|
||||||
if size > 2 {
|
|
||||||
columns[2].horizontal(|ui| {
|
|
||||||
ui.add_space(PADDING);
|
|
||||||
word_number += 1;
|
|
||||||
Self::generated_word_ui(ui, word_number, chunk, 2);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
if size > 3 {
|
|
||||||
columns[3].horizontal(|ui| {
|
|
||||||
ui.add_space(PADDING);
|
|
||||||
word_number += 1;
|
|
||||||
Self::generated_word_ui(ui, word_number, chunk, 3);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
ui.columns(cols, |columns| {
|
|
||||||
columns[0].horizontal(|ui| {
|
|
||||||
ui.add_space(PADDING);
|
|
||||||
Self::generated_word_ui(ui, word_number, chunk, 0);
|
|
||||||
});
|
|
||||||
});
|
|
||||||
ui.add_space(12.0);
|
|
||||||
}
|
}
|
||||||
ui.add_space(8.0);
|
|
||||||
}).collect::<Vec<_>>();
|
let mut word_number = 0;
|
||||||
|
let cols = Self::calc_columns_count(ui);
|
||||||
|
let _ = self.mnemonic.words.chunks(cols).map(|chunk| {
|
||||||
|
let size = chunk.len();
|
||||||
|
word_number += 1;
|
||||||
|
if size > 1 {
|
||||||
|
ui.columns(cols, |columns| {
|
||||||
|
columns[0].horizontal(|ui| {
|
||||||
|
self.word_item_ui(ui, word_number, chunk, 0);
|
||||||
|
});
|
||||||
|
columns[1].horizontal(|ui| {
|
||||||
|
word_number += 1;
|
||||||
|
self.word_item_ui(ui, word_number, chunk, 1);
|
||||||
|
});
|
||||||
|
if size > 2 {
|
||||||
|
columns[2].horizontal(|ui| {
|
||||||
|
word_number += 1;
|
||||||
|
self.word_item_ui(ui, word_number, chunk, 2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
if size > 3 {
|
||||||
|
columns[3].horizontal(|ui| {
|
||||||
|
word_number += 1;
|
||||||
|
self.word_item_ui(ui, word_number, chunk, 3);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} else {
|
||||||
|
ui.columns(cols, |columns| {
|
||||||
|
columns[0].horizontal(|ui| {
|
||||||
|
self.word_item_ui(ui, word_number, chunk, 0);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
ui.add_space(12.0);
|
||||||
|
}
|
||||||
|
}).collect::<Vec<_>>();
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Draw generated word at given index from provided chunk.
|
/// Draw word item at given index from provided chunk.
|
||||||
fn generated_word_ui(ui: &mut egui::Ui,
|
fn word_item_ui(&self,
|
||||||
word_number: usize,
|
ui: &mut egui::Ui,
|
||||||
chunk: &[String],
|
word_number: usize,
|
||||||
index: usize) {
|
chunk: &[String],
|
||||||
let word = chunk.get(index).unwrap();
|
index: usize) {
|
||||||
let text = format!("#{} {}", word_number, word);
|
match self.mnemonic.mode {
|
||||||
ui.label(RichText::new(text).size(16.0).color(Colors::BLACK));
|
PhraseMode::Generate => {
|
||||||
}
|
ui.add_space(12.0);
|
||||||
|
let word = chunk.get(index).unwrap();
|
||||||
|
let text = format!("#{} {}", word_number, word);
|
||||||
/// Draw word list for [`PhraseMode::Import`] mode.
|
ui.label(RichText::new(text).size(17.0).color(Colors::BLACK));
|
||||||
fn word_list_import_ui(&mut self, ui: &mut egui::Ui) {
|
}
|
||||||
|
PhraseMode::Import => {
|
||||||
|
let mut size = ui.available_size();
|
||||||
|
size.x = 90.0;
|
||||||
|
ui.allocate_ui(size, |ui| {
|
||||||
|
View::button(ui, PENCIL.to_string(), Colors::BUTTON, || {
|
||||||
|
//TODO: open modal
|
||||||
|
});
|
||||||
|
});
|
||||||
|
ui.label(RichText::new(format!("#{}", word_number))
|
||||||
|
.size(17.0)
|
||||||
|
.color(Colors::BLACK));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Reset mnemonic phrase to default values.
|
/// Reset mnemonic phrase to default values.
|
||||||
|
|
|
@ -109,7 +109,13 @@ impl Mnemonic {
|
||||||
.map(|s| s.to_string())
|
.map(|s| s.to_string())
|
||||||
.collect::<Vec<String>>()
|
.collect::<Vec<String>>()
|
||||||
},
|
},
|
||||||
PhraseMode::Import => Vec::with_capacity(size.value())
|
PhraseMode::Import => {
|
||||||
|
let mut words = Vec::with_capacity(size.value());
|
||||||
|
for _ in 0..size.value() {
|
||||||
|
words.push("".to_string())
|
||||||
|
}
|
||||||
|
words
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
Loading…
Reference in a new issue