summaryrefslogtreecommitdiffstats
path: root/examples/text_input
diff options
context:
space:
mode:
authorLibravatar Dan Mishin <danila.mishin.2001@gmail.com>2023-03-03 10:01:49 +0300
committerLibravatar Héctor Ramón Jiménez <hector0193@gmail.com>2023-04-12 03:55:18 +0200
commitf10e936f00d4b83dcacfdebd2727b1a5cd1add95 (patch)
tree09f0b4bbfa6446003adebc19c79a1368a89eec6c /examples/text_input
parentca828f03f5aab9efacc9d63d4149363333035a0c (diff)
downloadiced-f10e936f00d4b83dcacfdebd2727b1a5cd1add95.tar.gz
iced-f10e936f00d4b83dcacfdebd2727b1a5cd1add95.tar.bz2
iced-f10e936f00d4b83dcacfdebd2727b1a5cd1add95.zip
Introduce disabled state for `TextInput`
Diffstat (limited to 'examples/text_input')
-rw-r--r--examples/text_input/Cargo.toml11
-rw-r--r--examples/text_input/README.md15
-rw-r--r--examples/text_input/src/main.rs94
3 files changed, 120 insertions, 0 deletions
diff --git a/examples/text_input/Cargo.toml b/examples/text_input/Cargo.toml
new file mode 100644
index 00000000..aead9896
--- /dev/null
+++ b/examples/text_input/Cargo.toml
@@ -0,0 +1,11 @@
+[package]
+name = "text_input"
+authors = ["Dan Mishin <jungletryne@yandex.com>"]
+version = "0.1.0"
+edition = "2021"
+
+# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
+
+[dependencies]
+iced = { path = "../..", features = ["tokio"] }
+tokio = { version = "1.26.0", features = ["time"] }
diff --git a/examples/text_input/README.md b/examples/text_input/README.md
new file mode 100644
index 00000000..435989cc
--- /dev/null
+++ b/examples/text_input/README.md
@@ -0,0 +1,15 @@
+# Text Input
+
+This example shows basic usage of text edit.
+The button delays the change of the text field state to allow testing of the corner cases.
+
+<div align="center">
+ <a href="https://gfycat.com/everycarelessisabellinewheatear">
+ <img src="https://thumbs.gfycat.com/EveryCarelessIsabellinewheatear-max-1mb.gif" height="400px">
+ </a>
+</div>
+
+You can run it with cargo run:
+```bash
+cargo run --package text_input
+``` \ No newline at end of file
diff --git a/examples/text_input/src/main.rs b/examples/text_input/src/main.rs
new file mode 100644
index 00000000..977b5099
--- /dev/null
+++ b/examples/text_input/src/main.rs
@@ -0,0 +1,94 @@
+use crate::Message::{StartTimer, TextEditModeChange};
+use iced::widget::{button, column, container, row, text, text_input};
+use iced::{
+ executor, window, Application, Command, Element, Length, Renderer,
+ Settings, Theme,
+};
+use tokio::time::{sleep, Duration};
+
+fn main() -> iced::Result {
+ let settings = Settings {
+ window: window::Settings {
+ size: (700, 100),
+ ..window::Settings::default()
+ },
+ ..Settings::default()
+ };
+
+ Example::run(settings)
+}
+
+#[derive(Default)]
+struct Example {
+ data: String,
+ text_edit_enabled: bool,
+}
+
+#[derive(Debug, Clone)]
+enum Message {
+ StartTimer,
+ TextEditModeChange,
+ TextInputChanged(String),
+}
+
+impl Application for Example {
+ type Executor = executor::Default;
+ type Message = Message;
+ type Theme = Theme;
+ type Flags = ();
+
+ fn new(_flags: Self::Flags) -> (Self, Command<Self::Message>) {
+ (Self::default(), Command::none())
+ }
+
+ fn title(&self) -> String {
+ "TextInput example".into()
+ }
+
+ fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
+ match message {
+ Message::TextEditModeChange => {
+ self.text_edit_enabled = !self.text_edit_enabled;
+ Command::none()
+ }
+ Message::TextInputChanged(updated_text) => {
+ self.data = updated_text;
+ Command::none()
+ }
+ StartTimer => {
+ let timer_f = async {
+ sleep(Duration::from_secs(3)).await;
+ };
+ Command::perform(timer_f, |_| TextEditModeChange)
+ }
+ }
+ }
+
+ fn view(&self) -> Element<'_, Self::Message, Renderer<Self::Theme>> {
+ let placeholder = if self.text_edit_enabled {
+ "Enabled TextEdit"
+ } else {
+ "Disabled TextEdit"
+ };
+
+ let mut txt_input = text_input(placeholder, &self.data);
+
+ if self.text_edit_enabled {
+ txt_input = txt_input.on_change(Message::TextInputChanged);
+ }
+
+ let btn = button("Enable/Disable").on_press(StartTimer);
+ let label = text(
+ "The mode will be changed after 3s when the button is pressed",
+ );
+
+ let content = row![txt_input, btn].spacing(10);
+ let content = column![content, label].spacing(10);
+
+ container(content)
+ .width(Length::Shrink)
+ .height(Length::Shrink)
+ .padding(20)
+ .into()
+ }
+}