mirror of
https://github.com/FliegendeWurst/cursive.git
synced 2024-11-13 20:53:07 +00:00
48 lines
1.5 KiB
Rust
48 lines
1.5 KiB
Rust
extern crate cursive;
|
|
|
|
use cursive::view::{Boxable, Identifiable};
|
|
use cursive::views::{Dialog, EditView, LinearLayout, TextView};
|
|
use cursive::Cursive;
|
|
|
|
// This example shows a way to access multiple views at the same time.
|
|
|
|
fn main() {
|
|
let mut siv = Cursive::default();
|
|
|
|
// Create a dialog with 2 edit fields, and a text view.
|
|
// The text view indicates when the 2 fields content match.
|
|
siv.add_layer(
|
|
Dialog::around(
|
|
LinearLayout::vertical()
|
|
.child(EditView::new().on_edit(on_edit).with_id("1"))
|
|
.child(EditView::new().on_edit(on_edit).with_id("2"))
|
|
.child(TextView::new("match").with_id("match"))
|
|
.fixed_width(10),
|
|
).button("Quit", Cursive::quit),
|
|
);
|
|
|
|
siv.run();
|
|
}
|
|
|
|
// Compare the content of the two edit views,
|
|
// and update the TextView accordingly.
|
|
//
|
|
// We'll ignore the `content` and `cursor` arguments,
|
|
// and directly retrieve the content from the `Cursive` root.
|
|
fn on_edit(siv: &mut Cursive, _content: &str, _cursor: usize) {
|
|
// Get handles for each view.
|
|
let edit_1 = siv.find_id::<EditView>("1").unwrap();
|
|
let edit_2 = siv.find_id::<EditView>("2").unwrap();
|
|
|
|
// Directly compare references to edit_1 and edit_2.
|
|
let matches = edit_1.get_content() == edit_2.get_content();
|
|
|
|
siv.call_on_id("match", |v: &mut TextView| {
|
|
v.set_content(if matches {
|
|
"match"
|
|
} else {
|
|
"no match"
|
|
})
|
|
});
|
|
}
|