From 4acd42b8c7cebba931fedbadcc176318a3068f2a Mon Sep 17 00:00:00 2001 From: Zlatin Balevsky Date: Tue, 31 May 2022 03:47:33 +0100 Subject: [PATCH] drag-and-drop image --- .../gui/profile/EditProfileController.groovy | 11 +++ .../muwire/gui/profile/EditProfileView.groovy | 69 ++++++++++++++++--- 2 files changed, 69 insertions(+), 11 deletions(-) diff --git a/gui/griffon-app/controllers/com/muwire/gui/profile/EditProfileController.groovy b/gui/griffon-app/controllers/com/muwire/gui/profile/EditProfileController.groovy index ad700dcc..3ce59f4c 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/profile/EditProfileController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/profile/EditProfileController.groovy @@ -24,4 +24,15 @@ class EditProfileController { void copyFull() { CopyPasteSupport.copyToClipboard(model.core.me.toBase64()) } + + @ControllerAction + void save() { + // TODO: implement + cancel() + } + + @ControllerAction + void cancel() { + view.dialog.setVisible(false) + } } diff --git a/gui/griffon-app/views/com/muwire/gui/profile/EditProfileView.groovy b/gui/griffon-app/views/com/muwire/gui/profile/EditProfileView.groovy index b9b98f93..7baaed55 100644 --- a/gui/griffon-app/views/com/muwire/gui/profile/EditProfileView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/profile/EditProfileView.groovy @@ -1,15 +1,25 @@ package com.muwire.gui.profile +import com.muwire.core.Constants import griffon.core.GriffonApplication import griffon.core.artifact.GriffonView import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor import javax.annotation.Nonnull +import javax.imageio.ImageIO import javax.inject.Inject +import javax.swing.JComponent import javax.swing.JDialog +import javax.swing.JFrame +import javax.swing.JLabel +import javax.swing.JPanel +import javax.swing.TransferHandler import javax.swing.border.TitledBorder import java.awt.BorderLayout +import java.awt.Dimension +import java.awt.datatransfer.DataFlavor +import java.awt.image.BufferedImage import static com.muwire.gui.Translator.trans @@ -23,37 +33,74 @@ class EditProfileView { EditProfileController controller @Inject GriffonApplication application - - def mainFrame - def dialog + + JFrame mainFrame + JDialog dialog + JPanel imagePanel def mainPanel void initUI() { mainFrame = application.windowManager.findWindow("main-frame") + + int dimX = Math.max(700, (int)(mainFrame.getWidth() / 2)) + int dimY = Math.max(700, (int)(mainFrame.getHeight() / 2)) dialog = new JDialog(mainFrame, "Profile Editor", true) + dialog.setSize([dimX, dimY] as Dimension) dialog.setResizable(false) + def transferHandler = new ImageTransferHandler() + mainPanel = builder.panel { borderLayout() panel ( border: titledBorder(title: trans("PROFILE_EDITOR_MUWIRE_ID"), border: etchedBorder(), titlePosition: TitledBorder.TOP), constraints: BorderLayout.NORTH) { - borderLayout() label(text: model.core.me.getHumanReadableName(), constraints: BorderLayout.NORTH) - panel(constraints: BorderLayout.SOUTH) { - button(text : trans("COPY_SHORT"), toolTipText: trans("TOOLTIP_COPY_SHORT_ID"), - copyShortAction) - button(text : trans("COPY_FULL"), toolTipText: trans("TOOLTIP_COPY_FULL_ID"), - copyFullAction) - } + button(text : trans("COPY_SHORT"), toolTipText: trans("TOOLTIP_COPY_SHORT_ID"), + copyShortAction) + button(text : trans("COPY_FULL"), toolTipText: trans("TOOLTIP_COPY_FULL_ID"), + copyFullAction) + } + panel(constraints: BorderLayout.CENTER, transferHandler: transferHandler) { + gridLayout(rows: 1, cols: 1) + imagePanel = panel() + } + panel (constraints: BorderLayout.SOUTH) { + button(text : trans("SAVE"), saveAction) + button(text : trans("CANCEL"), cancelAction) } } } void mvcGroupInit(Map args) { dialog.getContentPane().add(mainPanel) - dialog.pack() dialog.setLocationRelativeTo(mainFrame) dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) dialog.show() } + + void setImageAndThumbnail(BufferedImage image) { + def mainImage = ImageScaler.scaleToMax(image) + imagePanel.getGraphics().drawImage(image, 0, 0,null) + } + + private class ImageTransferHandler extends TransferHandler { + boolean canImport(TransferHandler.TransferSupport support) { + support.isDataFlavorSupported(DataFlavor.javaFileListFlavor) + } + + boolean importData(TransferHandler.TransferSupport support) { + def files = support.getTransferable().getTransferData(DataFlavor.javaFileListFlavor) + if (files == null) + return false + if (files.size() != 1) + return false + File f = files[0] + if (!(f.getName().endsWith("jpg") || f.getName().endsWith("jpeg") || f.getName().endsWith("png"))) + return false + if (f.length() > Constants.MAX_PROFILE_IMAGE_LENGTH) + return false + setImageAndThumbnail(ImageIO.read(f)) + return true + } + } }