forked from 1b-agent/opencadstudio-upstream
76 lines
2.3 KiB
Rust
76 lines
2.3 KiB
Rust
use crate::app::Message;
|
|
use crate::t;
|
|
use iced::widget::{button, column, row, text, text_input, Space};
|
|
use iced::{Element, Fill, Length, Shrink};
|
|
use std::borrow::Cow;
|
|
|
|
pub const FIND_INPUT_ID: &str = "find-replace-search";
|
|
|
|
pub fn view_window<'a>(
|
|
search: &'a str,
|
|
replacement: &'a str,
|
|
status: &'a str,
|
|
sizing: crate::ui::modal::ModalSizing,
|
|
) -> Element<'a, Message> {
|
|
let field_width = if matches!(sizing.width, Length::Fill) {
|
|
Fill
|
|
} else {
|
|
Shrink
|
|
};
|
|
let find_input = text_input("", search)
|
|
.id(iced::widget::Id::new(FIND_INPUT_ID))
|
|
.on_input(Message::FindReplaceSearchChanged)
|
|
.on_submit(Message::FindReplaceNext)
|
|
.padding([6, 8])
|
|
.size(13);
|
|
let replacement_input = text_input("", replacement)
|
|
.on_input(Message::FindReplaceReplacementChanged)
|
|
.padding([6, 8])
|
|
.size(13);
|
|
|
|
let enabled = !search.trim().is_empty();
|
|
let action = |label: Cow<'static, str>, message: Message| {
|
|
let button = button(text(label).size(12)).padding([6, 12]);
|
|
if enabled {
|
|
button.on_press(message)
|
|
} else {
|
|
button
|
|
}
|
|
};
|
|
|
|
column![
|
|
row![
|
|
text(t!("Find:")).size(12).width(90),
|
|
find_input.width(field_width),
|
|
]
|
|
.spacing(8)
|
|
.align_y(iced::Center),
|
|
row![
|
|
text(t!("Replace with:")).size(12).width(90),
|
|
replacement_input.width(field_width),
|
|
]
|
|
.spacing(8)
|
|
.align_y(iced::Center),
|
|
text(t!("Searches Text, MText, Attribute Definitions, and block attribute values."))
|
|
.size(11),
|
|
text(status).size(11),
|
|
row![
|
|
Space::new().width(field_width),
|
|
button(text(t!("Close")).size(12))
|
|
.on_press(Message::CloseModal)
|
|
.padding([6, 12])
|
|
.style(button::secondary),
|
|
action(t!("Replace"), Message::FindReplaceOne).style(button::secondary),
|
|
action(t!("Replace All"), Message::FindReplaceAll).style(button::danger),
|
|
action(t!("Find Next"), Message::FindReplaceNext).style(button::primary),
|
|
]
|
|
.spacing(8)
|
|
.align_y(iced::Center),
|
|
]
|
|
.spacing(10)
|
|
.padding(12)
|
|
.width(sizing.width)
|
|
.height(sizing.height)
|
|
.into()
|
|
}
|