drag-and-drop image

dbus-notify
Zlatin Balevsky 2022-05-31 03:47:33 +01:00
parent 771bce0160
commit 4acd42b8c7
No known key found for this signature in database
GPG Key ID: A72832072D525E41
2 changed files with 69 additions and 11 deletions

View File

@ -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)
}
}

View File

@ -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<String, String> 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
}
}
}