notedeck

One damus client to rule them all
git clone git://jb55.com/notedeck
Log | Files | Refs | README | LICENSE

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 }