modde_ui/views/
overwrite.rs1use std::path::PathBuf;
2
3use iced::widget::{button, column, row, scrollable, text};
4use iced::{Element, Length};
5
6use crate::app::Message;
7
8#[derive(Debug, Clone, Default)]
10pub struct OverwriteState {
11 pub files: Vec<String>, pub overrides_dir: PathBuf,
13}
14
15pub fn view<'a>(state: &'a OverwriteState) -> Element<'a, Message> {
16 let title = text("Overwrite / Profile Overrides").size(20);
17
18 let count_text = text(format!("{} file(s) in overrides", state.files.len())).size(14);
19
20 if state.files.is_empty() {
21 return column![
22 title,
23 count_text,
24 text("No override files. Files placed here will win over all mods during deploy.")
25 .size(12),
26 ]
27 .spacing(12)
28 .padding(16)
29 .into();
30 }
31
32 let file_list: Vec<Element<Message>> = state
33 .files
34 .iter()
35 .map(|f| row![text(f).size(12).width(Length::Fill),].padding(4).into())
36 .collect();
37
38 let actions = row![
39 button(text("Clear All").size(12))
40 .on_press(Message::ClearOverwrite)
41 .style(button::danger)
42 .padding([4, 12]),
43 button(text("Create Mod from Overrides").size(12))
44 .on_press(Message::MoveOverwriteToMod(
45 "__from_overrides__".to_string()
46 ))
47 .padding([4, 12]),
48 ]
49 .spacing(8);
50
51 column![
52 title,
53 count_text,
54 actions,
55 scrollable(column(file_list).spacing(2)).height(Length::Fill),
56 ]
57 .spacing(12)
58 .padding(16)
59 .into()
60}