ui: fix dot input at transport amount, colored buttons at messages, animated wallet balance panel, hide soft keyboard on tx info modal close, fix translations

This commit is contained in:
ardocrat 2024-05-29 12:26:45 +03:00
parent 1cefb90071
commit 3a91ba6923
7 changed files with 19 additions and 13 deletions

View file

@ -81,7 +81,7 @@ wallets:
tx: Transaction tx: Transaction
messages: Messages messages: Messages
transport: Transport transport: Transport
input_slatepack_desc: 'Enter message to create response or finalize the request:' input_slatepack_desc: 'Enter received Slatepack message to create response or finalize request:'
parse_slatepack_err: 'An error occurred during reading of the message, check input:' parse_slatepack_err: 'An error occurred during reading of the message, check input:'
pay_balance_error: 'Account balance is insufficient to pay %{amount} ツ and network fee.' pay_balance_error: 'Account balance is insufficient to pay %{amount} ツ and network fee.'
parse_i1_slatepack_desc: 'To pay %{amount} ツ send this message to the receiver:' parse_i1_slatepack_desc: 'To pay %{amount} ツ send this message to the receiver:'
@ -109,7 +109,7 @@ wallets:
repair_unavailable: You need an active connection to the node and completed wallet synchronization. repair_unavailable: You need an active connection to the node and completed wallet synchronization.
delete: Delete wallet delete: Delete wallet
delete_conf: Are you sure you want to delete the wallet? delete_conf: Are you sure you want to delete the wallet?
delete_desc: Make sure you have saved your recovery phrase to access funds. delete_desc: Make sure you have saved your recovery phrase to access funds later.
wallet_loading_err: 'An error occurred during synchronization of the wallet, you can retry or change connection settings by selecting %{settings} at the bottom of the screen.' wallet_loading_err: 'An error occurred during synchronization of the wallet, you can retry or change connection settings by selecting %{settings} at the bottom of the screen.'
wallet: Wallet wallet: Wallet
send: Send send: Send

View file

@ -81,7 +81,7 @@ wallets:
tx: Транзакция tx: Транзакция
messages: Сообщения messages: Сообщения
transport: Транспорт transport: Транспорт
input_slatepack_desc: 'Сообщение для создания ответа или завершения запроса:' input_slatepack_desc: 'Введите сообщение для создания ответа или завершения запроса:'
parse_slatepack_err: 'Во время чтения сообщения произошла ошибка, проверьте входные данные:' parse_slatepack_err: 'Во время чтения сообщения произошла ошибка, проверьте входные данные:'
pay_balance_error: 'Средств на аккаунте недостаточно для оплаты %{amount} ツ и комиссии сети.' pay_balance_error: 'Средств на аккаунте недостаточно для оплаты %{amount} ツ и комиссии сети.'
parse_i1_slatepack_desc: 'Для оплаты %{amount} ツ отправьте это сообщение получателю:' parse_i1_slatepack_desc: 'Для оплаты %{amount} ツ отправьте это сообщение получателю:'
@ -93,7 +93,7 @@ wallets:
resp_slatepack_err: 'Во время создания ответа произошла ошибка, проверьте входные данные или повторите попытку:' resp_slatepack_err: 'Во время создания ответа произошла ошибка, проверьте входные данные или повторите попытку:'
resp_exists_err: Такая транзакция уже существует. resp_exists_err: Такая транзакция уже существует.
resp_canceled_err: Такая транзакция уже была отменена. resp_canceled_err: Такая транзакция уже была отменена.
create_request_desc: 'Создание запроса для отправки или получения средств:' create_request_desc: 'Запрос на отправку или получение средств:'
send_request_desc: 'Вы создали запрос на отправку %{amount} ツ. Отправьте это сообщение получателю:' send_request_desc: 'Вы создали запрос на отправку %{amount} ツ. Отправьте это сообщение получателю:'
send_slatepack_err: Во время создания запроса на отправку средств произошла ошибка, проверьте входные данные или повторите попытку. send_slatepack_err: Во время создания запроса на отправку средств произошла ошибка, проверьте входные данные или повторите попытку.
invoice_desc: 'Вы создали запрос на получение %{amount} ツ. Отправьте это сообщение отправителю:' invoice_desc: 'Вы создали запрос на получение %{amount} ツ. Отправьте это сообщение отправителю:'
@ -118,9 +118,9 @@ wallets:
tx_send_cancel_conf: 'Вы действительно хотите отменить отправку %{amount} ツ?' tx_send_cancel_conf: 'Вы действительно хотите отменить отправку %{amount} ツ?'
tx_receive_cancel_conf: 'Вы действительно хотите отменить получение %{amount} ツ?' tx_receive_cancel_conf: 'Вы действительно хотите отменить получение %{amount} ツ?'
rec_phrase_not_found: Фраза восстановления не найдена. rec_phrase_not_found: Фраза восстановления не найдена.
restore_wallet_desc: Восстановить кошелёк, удалив все файлы, если обычное исправление не помогло, вам будет необходимо переоткрыть кошелёк. restore_wallet_desc: Восстановить кошелёк, удалив все файлы, если обычное исправление не помогло. Необходимо переоткрыть кошелёк.
transport: transport:
desc: 'Используйте транспорт для синхронного получения или отправки сообщений:' desc: 'Используйте транспорт для синхронных получения или отправки сообщений:'
tor_network: Сеть Tor tor_network: Сеть Tor
connected: Подключено connected: Подключено
connecting: Подключение connecting: Подключение

View file

@ -121,7 +121,7 @@ impl RecoverySetup {
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(6.0); ui.add_space(6.0);
ui.label(RichText::new(t!("wallets.delete_desc")).size(16.0).color(Colors::TEXT)); ui.label(RichText::new(t!("wallets.delete_desc")).size(16.0).color(Colors::RED));
ui.add_space(6.0); ui.add_space(6.0);
// Draw button to delete the wallet. // Draw button to delete the wallet.

View file

@ -72,6 +72,7 @@ const ACCOUNT_LIST_MODAL: &'static str = "account_list_modal";
const QR_CODE_SCAN_MODAL: &'static str = "qr_code_scan_modal"; const QR_CODE_SCAN_MODAL: &'static str = "qr_code_scan_modal";
impl WalletContent { impl WalletContent {
/// Draw wallet content.
pub fn ui(&mut self, pub fn ui(&mut self,
ui: &mut egui::Ui, ui: &mut egui::Ui,
frame: &mut eframe::Frame, frame: &mut eframe::Frame,
@ -83,11 +84,11 @@ impl WalletContent {
let data = wallet.get_data(); let data = wallet.get_data();
let data_empty = data.is_none(); let data_empty = data.is_none();
// Show wallet balance panel not on Settings tab, when wallet is not repairing, // Show wallet balance panel not on Settings tab with selected non-repairing
// there is no error and data is not empty. // wallet, when there is no error and data is not empty.
let show_balance = self.current_tab.get_type() != WalletTabType::Settings && !data_empty let show_balance = self.current_tab.get_type() != WalletTabType::Settings && !data_empty
&& !wallet.sync_error() && !wallet.is_repairing(); && !wallet.sync_error() && !wallet.is_repairing();
egui::TopBottomPanel::top("wallet_balance") egui::TopBottomPanel::top(Id::from("wallet_balance").with(wallet.identifier()))
.frame(egui::Frame { .frame(egui::Frame {
fill: Colors::FILL, fill: Colors::FILL,
stroke: View::DEFAULT_STROKE, stroke: View::DEFAULT_STROKE,

View file

@ -253,7 +253,7 @@ impl WalletMessages {
columns[0].vertical_centered_justified(|ui| { columns[0].vertical_centered_justified(|ui| {
// Draw sending request creation button. // Draw sending request creation button.
let send_text = format!("{} {}", UPLOAD_SIMPLE, t!("wallets.send")); let send_text = format!("{} {}", UPLOAD_SIMPLE, t!("wallets.send"));
View::button(ui, send_text, Colors::BUTTON, || { View::colored_text_button(ui, send_text, Colors::RED, Colors::BUTTON, || {
self.show_request_modal(false, cb); self.show_request_modal(false, cb);
}); });
}); });
@ -271,7 +271,7 @@ impl WalletMessages {
/// Draw invoice request creation button. /// Draw invoice request creation button.
fn receive_button_ui(&mut self, ui: &mut egui::Ui, cb: &dyn PlatformCallbacks) { fn receive_button_ui(&mut self, ui: &mut egui::Ui, cb: &dyn PlatformCallbacks) {
let receive_text = format!("{} {}", DOWNLOAD_SIMPLE, t!("wallets.receive")); let receive_text = format!("{} {}", DOWNLOAD_SIMPLE, t!("wallets.receive"));
View::button(ui, receive_text, Colors::BUTTON, || { View::colored_text_button(ui, receive_text, Colors::GREEN, Colors::BUTTON, || {
self.show_request_modal(true, cb); self.show_request_modal(true, cb);
}); });
} }

View file

@ -671,6 +671,7 @@ impl WalletTransport {
modal: &Modal, modal: &Modal,
cb: &dyn PlatformCallbacks) { cb: &dyn PlatformCallbacks) {
ui.add_space(6.0); ui.add_space(6.0);
let has_send_err = self.has_tor_send_error(); let has_send_err = self.has_tor_send_error();
let sending = self.tor_sending(); let sending = self.tor_sending();
if !has_send_err && !sending { if !has_send_err && !sending {
@ -690,7 +691,7 @@ impl WalletTransport {
cb.show_keyboard(); cb.show_keyboard();
} else { } else {
self.address_scan_content.ui(ui, cb); self.address_scan_content.ui(ui, cb);
ui.add_space(12.0); ui.add_space(6.0);
// Setup spacing between buttons. // Setup spacing between buttons.
ui.spacing_mut().item_spacing = egui::Vec2::new(6.0, 0.0); ui.spacing_mut().item_spacing = egui::Vec2::new(6.0, 0.0);
@ -740,6 +741,8 @@ impl WalletTransport {
// Check value if input was changed. // Check value if input was changed.
if amount_edit_before != self.amount_edit { if amount_edit_before != self.amount_edit {
if !self.amount_edit.is_empty() { if !self.amount_edit.is_empty() {
// Trim text, replace "," by "." and parse amount.
self.amount_edit = self.amount_edit.trim().replace(",", ".");
match amount_from_hr_string(self.amount_edit.as_str()) { match amount_from_hr_string(self.amount_edit.as_str()) {
Ok(a) => { Ok(a) => {
if !self.amount_edit.contains(".") { if !self.amount_edit.contains(".") {

View file

@ -529,6 +529,7 @@ impl WalletTransactions {
.filter(|tx| tx.data.id == tx_id) .filter(|tx| tx.data.id == tx_id)
.collect::<Vec<&WalletTransaction>>(); .collect::<Vec<&WalletTransaction>>();
if txs.is_empty() { if txs.is_empty() {
cb.hide_keyboard();
modal.close(); modal.close();
return; return;
} }
@ -693,6 +694,7 @@ impl WalletTransactions {
modal: &Modal, modal: &Modal,
cb: &dyn PlatformCallbacks) { cb: &dyn PlatformCallbacks) {
if self.tx_info_slate.is_none() { if self.tx_info_slate.is_none() {
cb.hide_keyboard();
modal.close(); modal.close();
return; return;
} }