edit_deck.rs (2462B)
1 use egui::Widget; 2 3 use crate::deck_state::DeckState; 4 5 use super::configure_deck::{ConfigureDeckResponse, ConfigureDeckView}; 6 use notedeck::{tr, Localization}; 7 use notedeck_ui::padding; 8 9 pub struct EditDeckView<'a> { 10 config_view: ConfigureDeckView<'a>, 11 } 12 13 pub enum EditDeckResponse { 14 Edit(ConfigureDeckResponse), 15 Delete, 16 } 17 18 impl<'a> EditDeckView<'a> { 19 pub fn new(state: &'a mut DeckState, i18n: &'a mut Localization) -> Self { 20 let txt = tr!(i18n, "Edit Deck", "Button label to edit a deck"); 21 let config_view = ConfigureDeckView::new(state, i18n).with_create_text(txt); 22 Self { config_view } 23 } 24 25 pub fn ui(&mut self, ui: &mut egui::Ui) -> Option<EditDeckResponse> { 26 let mut edit_deck_resp = None; 27 28 padding(egui::Margin::symmetric(16, 4), ui, |ui| { 29 if ui.add(delete_button(self.config_view.i18n)).clicked() { 30 edit_deck_resp = Some(EditDeckResponse::Delete); 31 } 32 }); 33 34 if let Some(config_resp) = self.config_view.ui(ui) { 35 edit_deck_resp = Some(EditDeckResponse::Edit(config_resp)) 36 } 37 38 edit_deck_resp 39 } 40 } 41 42 fn delete_button<'a>(i18n: &'a mut Localization) -> impl Widget + 'a { 43 |ui: &mut egui::Ui| { 44 let size = egui::vec2(108.0, 40.0); 45 ui.allocate_ui_with_layout(size, egui::Layout::top_down(egui::Align::Center), |ui| { 46 ui.add( 47 egui::Button::new(tr!(i18n, "Delete Deck", "Button label to delete a deck")) 48 .fill(ui.visuals().error_fg_color) 49 .min_size(size), 50 ) 51 }) 52 .inner 53 } 54 } 55 56 mod preview { 57 use crate::{ 58 deck_state::DeckState, 59 ui::{Preview, PreviewConfig}, 60 }; 61 62 use super::EditDeckView; 63 use notedeck::{App, AppAction, AppContext}; 64 65 pub struct EditDeckPreview { 66 state: DeckState, 67 } 68 69 impl EditDeckPreview { 70 fn new() -> Self { 71 let state = DeckState::default(); 72 73 EditDeckPreview { state } 74 } 75 } 76 77 impl App for EditDeckPreview { 78 fn update(&mut self, ctx: &mut AppContext<'_>, ui: &mut egui::Ui) -> Option<AppAction> { 79 EditDeckView::new(&mut self.state, ctx.i18n).ui(ui); 80 None 81 } 82 } 83 84 impl Preview for EditDeckView<'_> { 85 type Prev = EditDeckPreview; 86 87 fn preview(_cfg: PreviewConfig) -> Self::Prev { 88 EditDeckPreview::new() 89 } 90 } 91 }