Super dictionary optimization
This commit is contained in:
+84
-62
@@ -338,71 +338,84 @@ impl DictionaryState {
|
||||
continue;
|
||||
}
|
||||
|
||||
let mut line = Row::new().width(Length::Fill).align_y(Center);
|
||||
line = line.push(
|
||||
checkbox(self.include_map[i])
|
||||
.label("")
|
||||
.spacing(15)
|
||||
.on_toggle(move |b| Include(i, b)),
|
||||
);
|
||||
|
||||
line = line.push(
|
||||
text_input("Слово", &word.key)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetKey(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
line = line.push(
|
||||
text_input("Перевод", &word.value)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetValue(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
|
||||
line = line.push(
|
||||
text_input("Теги", &word.tags)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetTags(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
|
||||
let line_button = || {
|
||||
let action = WordAction(i);
|
||||
|
||||
if word.id == 0 {
|
||||
return button("-").on_press(action).style(|_x, _status| Style {
|
||||
background: None,
|
||||
text_color: Color::BLACK,
|
||||
border: Border::default(),
|
||||
shadow: Shadow::default(),
|
||||
snap: false,
|
||||
});
|
||||
}
|
||||
|
||||
button("").on_press(WordAction(i)).width(15)
|
||||
let word_line_data = WordLineState{
|
||||
is_included: self.include_map[i],
|
||||
key: word.key.clone(),
|
||||
value: word.value.clone(),
|
||||
tags: word.tags.clone(),
|
||||
id: word.id,
|
||||
};
|
||||
|
||||
line = line.push(line_button()).push(space().width(10));
|
||||
let lazy_line = lazy(word_line_data, move |data| {
|
||||
let mut line = Row::new().width(Length::Fill).align_y(Center);
|
||||
line = line.push(
|
||||
checkbox(data.is_included)
|
||||
.label("")
|
||||
.spacing(15)
|
||||
.on_toggle(move |b| Include(i, b)),
|
||||
);
|
||||
|
||||
col = col.push(line);
|
||||
line = line.push(
|
||||
text_input("Слово", &data.key)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetKey(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
line = line.push(
|
||||
text_input("Перевод", &data.value)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetValue(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
|
||||
line = line.push(
|
||||
text_input("Теги", &data.tags)
|
||||
.size(ACCENT_FONT_SIZE)
|
||||
.width(Length::Fill)
|
||||
.on_input(move |string| SetTags(i, string))
|
||||
.on_submit(SubmitWord(i))
|
||||
.style(|x, status| {
|
||||
let mut default_style = default(x, status);
|
||||
default_style.border.radius = 0.0.into();
|
||||
default_style
|
||||
}),
|
||||
);
|
||||
|
||||
let line_button = || {
|
||||
let action = WordAction(i);
|
||||
|
||||
if data.id == 0 {
|
||||
return button("-").on_press(action).style(|_x, _status| Style {
|
||||
background: None,
|
||||
text_color: Color::BLACK,
|
||||
border: Border::default(),
|
||||
shadow: Shadow::default(),
|
||||
snap: false,
|
||||
});
|
||||
}
|
||||
|
||||
button("").on_press(WordAction(i)).width(15)
|
||||
};
|
||||
line = line.push(line_button()).push(space().width(10));
|
||||
line
|
||||
});
|
||||
|
||||
|
||||
|
||||
|
||||
col = col.push(lazy_line);
|
||||
}
|
||||
|
||||
println!("Words rendering time: {:?}", time.elapsed());
|
||||
@@ -573,3 +586,12 @@ pub fn app_data_dir() -> PathBuf {
|
||||
|
||||
dir
|
||||
}
|
||||
|
||||
#[derive(Hash, PartialEq, Eq)]
|
||||
struct WordLineState{
|
||||
is_included: bool,
|
||||
key: String,
|
||||
value: String,
|
||||
tags: String,
|
||||
id: u32
|
||||
}
|
||||
Reference in New Issue
Block a user