URI: 
       Fixed resize dialog. - icy_draw - icy_draw is the successor to mystic draw. fork / mirror
  HTML git clone https://git.drkhsh.at/icy_draw.git
   DIR Log
   DIR Files
   DIR Refs
   DIR README
   DIR LICENSE
       ---
   DIR commit 8928820d104a9732bbb4e8eb7207870be2f5028c
   DIR parent 354304412f6e53aedd04cb4e9a88404ee28d45ac
  HTML Author: Mike Krüger <mkrueger@posteo.de>
       Date:   Sun, 10 Sep 2023 06:39:38 +0200
       
       Fixed resize dialog.
       
       Diffstat:
         M i18n/de/icy_draw.ftl                |       1 +
         M i18n/en/icy_draw.ftl                |       1 +
         M src/ui/dialogs/resize_layer_dialog… |      21 +++++++++++++++------
         M src/ui/dialogs/set_canvas_size_dia… |      38 ++++++++++++++++++++++++++-----
         M src/ui/main_window.rs               |      30 +++++++++++++++++++++++++++---
         M src/ui/messages.rs                  |      11 +++++++----
       
       6 files changed, 83 insertions(+), 19 deletions(-)
       ---
   DIR diff --git a/i18n/de/icy_draw.ftl b/i18n/de/icy_draw.ftl
       @@ -104,6 +104,7 @@ edit-canvas-size-title=Leinwandgröße
        edit-canvas-size-width-label=Breite:
        edit-canvas-size-height-label=Höhe:
        edit-canvas-size-resize=Größe ändern
       +edit-canvas-size-resize_layers-label=Ebenen anpassen
        
        toolbar-size = { $colums } Zeilen x { $rows } Reihen
        toolbar-position = ({ $column }:{ $line })
   DIR diff --git a/i18n/en/icy_draw.ftl b/i18n/en/icy_draw.ftl
       @@ -104,6 +104,7 @@ edit-canvas-size-title=Set Canvas Size
        edit-canvas-size-width-label=Width:
        edit-canvas-size-height-label=Height:
        edit-canvas-size-resize=Resize
       +edit-canvas-size-resize_layers-label=Resize layers
        
        toolbar-size = { $colums } Columns x { $rows } Rows
        toolbar-position = ({ $column }:{ $line })
   DIR diff --git a/src/ui/dialogs/resize_layer_dialog.rs b/src/ui/dialogs/resize_layer_dialog.rs
       @@ -6,10 +6,11 @@ use icy_engine::TextPane;
        use crate::{AnsiEditor, Message, ModalDialog, TerminalResult};
        
        pub struct ResizeLayerDialog {
       -    pub should_commit: bool,
       -    pub layer: usize,
       -    pub width: i32,
       -    pub height: i32,
       +    should_commit: bool,
       +    layer: usize,
       +
       +    width: i32,
       +    height: i32,
        }
        
        impl ResizeLayerDialog {
       @@ -39,13 +40,21 @@ impl ModalDialog for ResizeLayerDialog {
                                ui.with_layout(Layout::right_to_left(egui::Align::Center), |ui| {
                                    ui.label(fl!(crate::LANGUAGE_LOADER, "edit-canvas-size-width-label"));
                                });
       -                        ui.add(egui::DragValue::new(&mut self.width));
       +                        let mut tmp_str = self.width.to_string();
       +                        ui.add(egui::TextEdit::singleline(&mut tmp_str).char_limit(35));
       +                        if let Ok(new_width) = tmp_str.parse::<i32>() {
       +                            self.width = new_width;
       +                        }
                                ui.end_row();
        
                                ui.with_layout(Layout::right_to_left(egui::Align::Center), |ui| {
                                    ui.label(fl!(crate::LANGUAGE_LOADER, "edit-canvas-size-height-label"));
                                });
       -                        ui.add(egui::DragValue::new(&mut self.height));
       +                        let mut tmp_str = self.height.to_string();
       +                        ui.add(egui::TextEdit::singleline(&mut tmp_str).char_limit(35));
       +                        if let Ok(new_height) = tmp_str.parse::<i32>() {
       +                            self.height = new_height;
       +                        }
                                ui.end_row();
                            });
                        ui.add_space(4.0);
   DIR diff --git a/src/ui/dialogs/set_canvas_size_dialog.rs b/src/ui/dialogs/set_canvas_size_dialog.rs
       @@ -6,9 +6,10 @@ use icy_engine::TextPane;
        use crate::{AnsiEditor, Message, ModalDialog, TerminalResult};
        
        pub struct SetCanvasSizeDialog {
       -    pub should_commit: bool,
       -    pub width: i32,
       -    pub height: i32,
       +    should_commit: bool,
       +    width: i32,
       +    height: i32,
       +    resize_layer: bool,
        }
        
        impl SetCanvasSizeDialog {
       @@ -17,6 +18,7 @@ impl SetCanvasSizeDialog {
                    should_commit: false,
                    width: buf.get_width(),
                    height: buf.get_height(),
       +            resize_layer: true,
                }
            }
        }
       @@ -27,6 +29,8 @@ impl ModalDialog for SetCanvasSizeDialog {
                let modal = Modal::new(ctx, "set_canvas_size_dialog");
        
                modal.show(|ui| {
       +            ui.set_width(250.);
       +
                    modal.title(ui, fl!(crate::LANGUAGE_LOADER, "edit-canvas-size-title"));
        
                    modal.frame(ui, |ui| {
       @@ -37,13 +41,31 @@ impl ModalDialog for SetCanvasSizeDialog {
                                ui.with_layout(Layout::right_to_left(egui::Align::Center), |ui| {
                                    ui.label(fl!(crate::LANGUAGE_LOADER, "edit-canvas-size-width-label"));
                                });
       -                        ui.add(egui::DragValue::new(&mut self.width));
       +                        let mut tmp_str = self.width.to_string();
       +                        ui.add(egui::TextEdit::singleline(&mut tmp_str).char_limit(35));
       +                        if let Ok(new_width) = tmp_str.parse::<i32>() {
       +                            self.width = new_width;
       +                        }
                                ui.end_row();
        
                                ui.with_layout(Layout::right_to_left(egui::Align::Center), |ui| {
                                    ui.label(fl!(crate::LANGUAGE_LOADER, "edit-canvas-size-height-label"));
                                });
       -                        ui.add(egui::DragValue::new(&mut self.height));
       +                        let mut tmp_str = self.height.to_string();
       +                        ui.add(egui::TextEdit::singleline(&mut tmp_str).char_limit(35));
       +                        if let Ok(new_height) = tmp_str.parse::<i32>() {
       +                            self.height = new_height;
       +                        }
       +                        ui.end_row();
       +
       +                        ui.label("");
       +                        ui.checkbox(
       +                            &mut self.resize_layer,
       +                            fl!(
       +                                crate::LANGUAGE_LOADER,
       +                                "edit-canvas-size-resize_layers-label"
       +                            ),
       +                        );
                                ui.end_row();
                            });
                        ui.add_space(4.0);
       @@ -74,6 +96,10 @@ impl ModalDialog for SetCanvasSizeDialog {
            }
        
            fn commit(&self, _editor: &mut AnsiEditor) -> TerminalResult<Option<Message>> {
       -        Ok(Some(Message::ResizeBuffer(self.width, self.height)))
       +        Ok(Some(Message::ResizeBuffer(
       +            self.resize_layer,
       +            self.width,
       +            self.height,
       +        )))
            }
        }
   DIR diff --git a/src/ui/main_window.rs b/src/ui/main_window.rs
       @@ -566,7 +566,7 @@ impl eframe::App for MainWindow {
                        }
                    });
                self.dialog_open = false;
       -
       +        let mut dialog_message = None;
                if self.modal_dialog.is_some() {
                    self.dialog_open = true;
                    if self.modal_dialog.as_mut().unwrap().show(ctx) {
       @@ -574,10 +574,32 @@ impl eframe::App for MainWindow {
                        if modal_dialog.should_commit() {
                            if let Some(doc) = self.get_active_document() {
                                if let Some(editor) = doc.lock().unwrap().get_ansi_editor_mut() {
       -                            modal_dialog.commit(editor).unwrap();
       +                            match modal_dialog.commit(editor) {
       +                                Ok(msg) => {
       +                                    dialog_message = msg;
       +                                }
       +                                Err(err) => {
       +                                    log::error!("Error: {}", err);
       +                                    self.toasts
       +                                        .error(format!("{err}"))
       +                                        .set_duration(Some(Duration::from_secs(5)));
       +                                }
       +                            }
       +                        }
       +                    }
       +                    match modal_dialog.commit_self(self) {
       +                        Ok(msg) => {
       +                            if dialog_message.is_none() {
       +                                dialog_message = msg;
       +                            }
       +                        }
       +                        Err(err) => {
       +                            log::error!("Error: {}", err);
       +                            self.toasts
       +                                .error(format!("{err}"))
       +                                .set_duration(Some(Duration::from_secs(5)));
                                }
                            }
       -                    modal_dialog.commit_self(self).unwrap();
                        }
                    }
        
       @@ -585,6 +607,8 @@ impl eframe::App for MainWindow {
                        self.modal_dialog = None;
                    }
                }
       +        self.handle_message(dialog_message);
       +
                self.toasts.show(ctx);
                if let Some(close) = self.document_behavior.request_close {
                    self.document_tree.tiles.remove(close);
   DIR diff --git a/src/ui/messages.rs b/src/ui/messages.rs
       @@ -60,7 +60,7 @@ pub enum Message {
            FlipY,
            Crop,
            Paste,
       -    ResizeBuffer(i32, i32),
       +    ResizeBuffer(bool, i32, i32),
            PasteAsNewImage,
            PasteAsBrush,
            Copy,
       @@ -463,10 +463,13 @@ impl MainWindow {
                            to_message(lock.get_edit_state_mut().crop())
                        });
                    }
       -            Message::ResizeBuffer(w, h) => {
       -                self.run_editor_command((w, h), |_, editor, (w, h)| {
       +            Message::ResizeBuffer(resize_layer, w, h) => {
       +                self.run_editor_command((resize_layer, w, h), |_, editor, (resize_layer, w, h)| {
                            let mut lock = editor.buffer_view.lock();
       -                    to_message(lock.get_edit_state_mut().resize_buffer(Size::new(w, h)))
       +                    to_message(
       +                        lock.get_edit_state_mut()
       +                            .resize_buffer(resize_layer, Size::new(w, h)),
       +                    )
                        });
                    }