|
@@ -23,15 +23,18 @@ use darkfi_serial::Encodable;
|
|
|
|
|
|
|
|
use crate::{
|
|
use crate::{
|
|
|
app::{
|
|
app::{
|
|
|
- node::{create_decimal_edit, create_layer, create_singleline_edit, create_text},
|
|
|
|
|
|
|
+ node::{
|
|
|
|
|
+ create_decimal_edit, create_layer, create_singleline_edit, create_text,
|
|
|
|
|
+ create_vector_art,
|
|
|
|
|
+ },
|
|
|
App,
|
|
App,
|
|
|
},
|
|
},
|
|
|
expr,
|
|
expr,
|
|
|
gfx::gfxtag,
|
|
gfx::gfxtag,
|
|
|
- mesh::{COLOR_CYAN, COLOR_PALECYAN},
|
|
|
|
|
|
|
+ mesh::{COLOR_CYAN, COLOR_NEONGREEN, COLOR_PALECYAN, COLOR_TRANSAQUA},
|
|
|
prop::{PropertyAtomicGuard, PropertyBool, PropertyFloat32, PropertyRect, Role},
|
|
prop::{PropertyAtomicGuard, PropertyBool, PropertyFloat32, PropertyRect, Role},
|
|
|
scene::{SceneNodePtr, Slot},
|
|
scene::{SceneNodePtr, Slot},
|
|
|
- ui::{BaseEdit, BaseEditType, Layer, Text},
|
|
|
|
|
|
|
+ ui::{BaseEdit, BaseEditType, Layer, Text, VectorArt, VectorShape},
|
|
|
util::i18n::I18nBabelFish,
|
|
util::i18n::I18nBabelFish,
|
|
|
};
|
|
};
|
|
|
|
|
|
|
@@ -172,6 +175,8 @@ pub async fn make(
|
|
|
|
|
|
|
|
y += PADDING_Y * 2. + SUBTITLE_FONTSIZE + 1.;
|
|
y += PADDING_Y * 2. + SUBTITLE_FONTSIZE + 1.;
|
|
|
|
|
|
|
|
|
|
+ create_separator(app, atom, &send_step3_layer, "recipient_separator", &mut y, true).await;
|
|
|
|
|
+
|
|
|
// Recipient address value
|
|
// Recipient address value
|
|
|
let node = create_text("send_recipient_value3");
|
|
let node = create_text("send_recipient_value3");
|
|
|
let addr_h_prop = node.get_property("height").unwrap();
|
|
let addr_h_prop = node.get_property("height").unwrap();
|
|
@@ -180,12 +185,12 @@ pub async fn make(
|
|
|
prop.set_default_f32(1, y + PADDING_Y).unwrap();
|
|
prop.set_default_f32(1, y + PADDING_Y).unwrap();
|
|
|
let code = cc.compile("w - PADDING_X * 2").unwrap();
|
|
let code = cc.compile("w - PADDING_X * 2").unwrap();
|
|
|
prop.set_default_expr(2, code).unwrap();
|
|
prop.set_default_expr(2, code).unwrap();
|
|
|
- prop.set_default_f32(3, TITLE_FONTSIZE).unwrap();
|
|
|
|
|
- node.get_property("font_size").unwrap().set_default_f32(0, TITLE_FONTSIZE).unwrap();
|
|
|
|
|
|
|
+ prop.set_default_f32(3, SUBTITLE_FONTSIZE).unwrap();
|
|
|
|
|
+ node.get_property("font_size").unwrap().set_default_f32(0, SUBTITLE_FONTSIZE).unwrap();
|
|
|
node.set_property_str(atom, Role::App, "text", "").unwrap();
|
|
node.set_property_str(atom, Role::App, "text", "").unwrap();
|
|
|
node.set_property_enum(atom, Role::App, "overflow_wrap", "anywhere").unwrap();
|
|
node.set_property_enum(atom, Role::App, "overflow_wrap", "anywhere").unwrap();
|
|
|
let prop = node.get_property("text_color").unwrap();
|
|
let prop = node.get_property("text_color").unwrap();
|
|
|
- prop.set_default_f32_multi(&[1., 1., 1., 1.]).unwrap();
|
|
|
|
|
|
|
+ prop.set_default_f32_multi(&COLOR_NEONGREEN).unwrap();
|
|
|
node.set_property_u32(atom, Role::App, "z_index", 2).unwrap();
|
|
node.set_property_u32(atom, Role::App, "z_index", 2).unwrap();
|
|
|
let node = node
|
|
let node = node
|
|
|
.setup(|me| {
|
|
.setup(|me| {
|
|
@@ -200,6 +205,30 @@ pub async fn make(
|
|
|
.await;
|
|
.await;
|
|
|
send_step3_layer.link(node);
|
|
send_step3_layer.link(node);
|
|
|
|
|
|
|
|
|
|
+ // Recipient address background
|
|
|
|
|
+ let addr_bg_node = create_vector_art("send_recipient_bg");
|
|
|
|
|
+ let prop = addr_bg_node.get_property("rect").unwrap();
|
|
|
|
|
+ prop.set_default_f32(0, 0.).unwrap();
|
|
|
|
|
+ prop.set_default_f32(1, y).unwrap();
|
|
|
|
|
+ prop.set_default_expr(2, expr::load_var("w")).unwrap();
|
|
|
|
|
+ let code = cc.compile("PADDING_Y * 2 + addr_height + 1").unwrap();
|
|
|
|
|
+ prop.set_default_expr(3, code).unwrap();
|
|
|
|
|
+ prop.add_depend(Role::App, &addr_h_prop, 0, "addr_height");
|
|
|
|
|
+ addr_bg_node.set_property_u32(atom, Role::App, "z_index", 1).unwrap();
|
|
|
|
|
+ let mut shape = VectorShape::new();
|
|
|
|
|
+ shape.add_filled_box(
|
|
|
|
|
+ expr::const_f32(0.),
|
|
|
|
|
+ expr::const_f32(0.),
|
|
|
|
|
+ expr::load_var("w"),
|
|
|
|
|
+ expr::load_var("h"),
|
|
|
|
|
+ COLOR_TRANSAQUA,
|
|
|
|
|
+ );
|
|
|
|
|
+ addr_bg_node.set_property_shape(atom, Role::App, "shape", shape).unwrap();
|
|
|
|
|
+ let addr_bg_node = addr_bg_node
|
|
|
|
|
+ .setup(|me| VectorArt::new(me, app.renderer.clone(), app.redraw_trigger.clone()))
|
|
|
|
|
+ .await;
|
|
|
|
|
+ send_step3_layer.link(addr_bg_node);
|
|
|
|
|
+
|
|
|
// Separator line
|
|
// Separator line
|
|
|
let mut y_ = y.clone();
|
|
let mut y_ = y.clone();
|
|
|
let y2 = format!("{y} + (PADDING_Y * 2. + addr_height) + 1");
|
|
let y2 = format!("{y} + (PADDING_Y * 2. + addr_height) + 1");
|
|
@@ -209,7 +238,7 @@ pub async fn make(
|
|
|
&send_step3_layer,
|
|
&send_step3_layer,
|
|
|
"send_amount_label_separator",
|
|
"send_amount_label_separator",
|
|
|
&mut y_,
|
|
&mut y_,
|
|
|
- false,
|
|
|
|
|
|
|
+ true,
|
|
|
)
|
|
)
|
|
|
.await;
|
|
.await;
|
|
|
let prop = node.get_property("rect").unwrap();
|
|
let prop = node.get_property("rect").unwrap();
|
|
@@ -367,7 +396,7 @@ pub async fn make(
|
|
|
.set_default_f32(0, AMOUNT_FONTSIZE)
|
|
.set_default_f32(0, AMOUNT_FONTSIZE)
|
|
|
.unwrap();
|
|
.unwrap();
|
|
|
let prop = token_symbol_node.get_property("text_color").unwrap();
|
|
let prop = token_symbol_node.get_property("text_color").unwrap();
|
|
|
- prop.set_default_f32_multi(&[0.5, 0.5, 0.5, 1.]).unwrap();
|
|
|
|
|
|
|
+ prop.set_default_f32_multi(&[1., 1., 1., 1.]).unwrap();
|
|
|
let prop = token_symbol_node.get_property("hi_bg_color").unwrap();
|
|
let prop = token_symbol_node.get_property("hi_bg_color").unwrap();
|
|
|
prop.set_default_f32_multi(&[0.5, 0.5, 0.5, 1.]).unwrap();
|
|
prop.set_default_f32_multi(&[0.5, 0.5, 0.5, 1.]).unwrap();
|
|
|
let prop = token_symbol_node.get_property("text_hi_color").unwrap();
|
|
let prop = token_symbol_node.get_property("text_hi_color").unwrap();
|
|
@@ -468,6 +497,7 @@ pub async fn make(
|
|
|
&amount_input2,
|
|
&amount_input2,
|
|
|
&token_symbol_node2,
|
|
&token_symbol_node2,
|
|
|
Some(&available_balance_node2),
|
|
Some(&available_balance_node2),
|
|
|
|
|
+ 0.,
|
|
|
)
|
|
)
|
|
|
.await;
|
|
.await;
|
|
|
let is_valid = if sanitized_amount == "0" {
|
|
let is_valid = if sanitized_amount == "0" {
|
|
@@ -531,6 +561,7 @@ pub async fn make(
|
|
|
// Store the amount (use sanitized value)
|
|
// Store the amount (use sanitized value)
|
|
|
let mut data = send_tx_data4.lock().unwrap();
|
|
let mut data = send_tx_data4.lock().unwrap();
|
|
|
data.amount = Some(sanitized_text.clone());
|
|
data.amount = Some(sanitized_text.clone());
|
|
|
|
|
+ data.tx_built = false;
|
|
|
let token_symbol = data.token_symbol.clone().unwrap();
|
|
let token_symbol = data.token_symbol.clone().unwrap();
|
|
|
let recipient_str = data.recipient_str.clone().unwrap();
|
|
let recipient_str = data.recipient_str.clone().unwrap();
|
|
|
let amount = data.amount.clone().unwrap();
|
|
let amount = data.amount.clone().unwrap();
|
|
@@ -636,6 +667,7 @@ pub async fn make(
|
|
|
&input_node_clone,
|
|
&input_node_clone,
|
|
|
&token_symbol_node_clone,
|
|
&token_symbol_node_clone,
|
|
|
Some(&available_balance_node_clone),
|
|
Some(&available_balance_node_clone),
|
|
|
|
|
+ 0.,
|
|
|
)
|
|
)
|
|
|
.await;
|
|
.await;
|
|
|
}
|
|
}
|