Skip to content

Commit 1b02c07

Browse files
committed
Limit size of user available text_inputs to prevent freezes cause by large inputs.
1 parent 6aa1da7 commit 1b02c07

File tree

7 files changed

+52
-10
lines changed

7 files changed

+52
-10
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -53,5 +53,5 @@ Thanks to those who created these docs:
5353

5454
Tool to download data from these docs can be found [here](https://github.com/ZakisM/bl3_save_edit_resource_downloader).
5555

56-
Thanks to the [Ajour](https://github.com/ajour/ajour) project for their methods of bundling Rust Apps as well as updating
57-
them.
56+
Thanks to the [Ajour](https://github.com/ajour/ajour) project for their methods of bundling Rust Apps as well as
57+
updating them.

bl3_save_edit_ui/src/views/item_editor/available_parts.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use iced::{
22
button, scrollable, text_input, Align, Button, Checkbox, Color, Column, Container, Element,
3-
Length, Row, Scrollable, Text, TextInput,
3+
Length, Row, Scrollable, Text,
44
};
55
use rayon::iter::ParallelIterator;
66
use rayon::iter::{IntoParallelIterator, IntoParallelRefIterator};
@@ -16,6 +16,7 @@ use crate::views::item_editor::item_button_style::ItemEditorButtonStyle;
1616
use crate::views::item_editor::parts_tab_bar::{parts_tab_bar_button, AvailablePartType};
1717
use crate::views::item_editor::ItemEditorInteractionMessage;
1818
use crate::views::InteractionExt;
19+
use crate::widgets::text_input_limited::TextInputLimited;
1920
use crate::widgets::text_margin::TextMargin;
2021

2122
#[derive(Debug, Copy, Clone, Default)]
@@ -257,16 +258,18 @@ impl AvailableParts {
257258
}
258259
};
259260

260-
let search_input = TextInput::new(
261+
let search_input = TextInputLimited::new(
261262
&mut self.search_input_state,
262263
&placeholder,
263264
&self.search_input,
265+
500,
264266
move |s| {
265267
interaction_message(
266268
ItemEditorInteractionMessage::AvailablePartsSearchInputChanged(s),
267269
)
268270
},
269271
)
272+
.0
270273
.font(JETBRAINS_MONO)
271274
.padding(10)
272275
.size(17)

bl3_save_edit_ui/src/views/item_editor/mod.rs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ use std::time::Duration;
44
use anyhow::Result;
55
use iced::{
66
button, scrollable, text_input, tooltip, Align, Button, Color, Column, Command, Container,
7-
Length, Row, Scrollable, Text, TextInput, Tooltip,
7+
Length, Row, Scrollable, Text, Tooltip,
88
};
99

1010
use bl3_save_edit_core::bl3_item::{
@@ -27,6 +27,7 @@ use crate::views::InteractionExt;
2727
use crate::widgets::labelled_element::LabelledElement;
2828
use crate::widgets::notification::{Notification, NotificationSentiment};
2929
use crate::widgets::number_input::NumberInput;
30+
use crate::widgets::text_input_limited::TextInputLimited;
3031
use crate::widgets::text_margin::TextMargin;
3132

3233
pub mod available_parts;
@@ -515,12 +516,14 @@ where
515516
LabelledElement::create(
516517
"Import Serial",
517518
Length::Units(120),
518-
TextInput::new(
519+
TextInputLimited::new(
519520
&mut item_editor_state.import_serial_input_state,
520521
"BL3(AwAAAABmboC7I9xAEzwShMJVX8nPYwsAAA==)",
521522
&item_editor_state.import_serial_input,
523+
500,
522524
move |s| interaction_message(ItemEditorInteractionMessage::ImportItem(s)),
523525
)
526+
.0
524527
.font(JETBRAINS_MONO)
525528
.padding(10)
526529
.size(17)

bl3_save_edit_ui/src/views/manage_save/character/mod.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
use iced::{
2-
pick_list, text_input, tooltip, Align, Column, Container, Length, PickList, Row, TextInput,
3-
Tooltip,
2+
pick_list, text_input, tooltip, Align, Column, Container, Length, PickList, Row, Tooltip,
43
};
54

65
use bl3_save_edit_core::bl3_save::player_class::PlayerClass;
@@ -18,6 +17,7 @@ use crate::views::manage_save::ManageSaveInteractionMessage;
1817
use crate::views::InteractionExt;
1918
use crate::widgets::labelled_element::LabelledElement;
2019
use crate::widgets::number_input::NumberInput;
20+
use crate::widgets::text_input_limited::TextInputLimited;
2121

2222
mod ammo;
2323
mod gear;
@@ -117,10 +117,11 @@ pub fn view(character_state: &mut CharacterState) -> Container<Bl3Message> {
117117
LabelledElement::create(
118118
"Name",
119119
Length::Units(75),
120-
TextInput::new(
120+
TextInputLimited::new(
121121
&mut character_state.name_input_state,
122122
"FL4K",
123123
&character_state.name_input,
124+
500,
124125
|c| {
125126
InteractionMessage::ManageSaveInteraction(
126127
ManageSaveInteractionMessage::Character(
@@ -129,6 +130,7 @@ pub fn view(character_state: &mut CharacterState) -> Container<Bl3Message> {
129130
)
130131
},
131132
)
133+
.0
132134
.font(JETBRAINS_MONO)
133135
.padding(10)
134136
.size(17)

bl3_save_edit_ui/src/views/manage_save/general.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ use crate::views::manage_save::ManageSaveInteractionMessage;
1212
use crate::views::InteractionExt;
1313
use crate::widgets::labelled_element::LabelledElement;
1414
use crate::widgets::number_input::NumberInput;
15+
use crate::widgets::text_input_limited::TextInputLimited;
1516

1617
#[derive(Debug, Default)]
1718
pub struct GeneralState {
@@ -83,10 +84,11 @@ pub fn view(general_state: &mut GeneralState) -> Container<Bl3Message> {
8384
LabelledElement::create(
8485
"Save GUID",
8586
Length::Units(90),
86-
TextInput::new(
87+
TextInputLimited::new(
8788
&mut general_state.guid_input_state,
8889
"00000000000000000000000000000000",
8990
&general_state.guid_input,
91+
500,
9092
|s| {
9193
InteractionMessage::ManageSaveInteraction(
9294
ManageSaveInteractionMessage::General(
@@ -95,6 +97,7 @@ pub fn view(general_state: &mut GeneralState) -> Container<Bl3Message> {
9597
)
9698
},
9799
)
100+
.0
98101
.font(JETBRAINS_MONO)
99102
.padding(10)
100103
.size(17)
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
pub mod labelled_element;
22
pub mod notification;
33
pub mod number_input;
4+
pub mod text_input_limited;
45
pub mod text_margin;
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
use iced::{text_input, TextInput};
2+
3+
use crate::bl3_ui::InteractionMessage;
4+
5+
pub struct TextInputLimited<'a>(pub TextInput<'a, InteractionMessage>);
6+
7+
impl<'a> TextInputLimited<'a> {
8+
pub fn new<F>(
9+
state: &'a mut text_input::State,
10+
placeholder: &str,
11+
value: &str,
12+
max_length: usize,
13+
on_change: F,
14+
) -> Self
15+
where
16+
F: 'static + Fn(String) -> InteractionMessage,
17+
{
18+
let value_len = value.len();
19+
20+
let input = TextInput::new(state, placeholder, value, move |s| {
21+
if s.len() <= max_length && value_len <= max_length {
22+
on_change(s)
23+
} else {
24+
InteractionMessage::Ignore
25+
}
26+
});
27+
28+
Self(input)
29+
}
30+
}

0 commit comments

Comments
 (0)