mirror of https://github.com/zlatinb/muwire
Saving and loading of profiles, working editor
parent
089d479e12
commit
3e3e0d5b68
|
@ -1,5 +1,8 @@
|
||||||
package com.muwire.gui.profile
|
package com.muwire.gui.profile
|
||||||
|
|
||||||
|
import com.muwire.core.Constants
|
||||||
|
import com.muwire.core.profile.MWProfile
|
||||||
|
import com.muwire.core.profile.MWProfileHeader
|
||||||
import com.muwire.core.profile.MWProfileImageFormat
|
import com.muwire.core.profile.MWProfileImageFormat
|
||||||
import com.muwire.gui.CopyPasteSupport
|
import com.muwire.gui.CopyPasteSupport
|
||||||
import griffon.core.artifact.GriffonController
|
import griffon.core.artifact.GriffonController
|
||||||
|
@ -9,6 +12,7 @@ import griffon.metadata.ArtifactProviderFor
|
||||||
|
|
||||||
import javax.annotation.Nonnull
|
import javax.annotation.Nonnull
|
||||||
import javax.imageio.ImageIO
|
import javax.imageio.ImageIO
|
||||||
|
import javax.swing.JOptionPane
|
||||||
|
|
||||||
@ArtifactProviderFor(GriffonController)
|
@ArtifactProviderFor(GriffonController)
|
||||||
class EditProfileController {
|
class EditProfileController {
|
||||||
|
@ -39,7 +43,29 @@ class EditProfileController {
|
||||||
|
|
||||||
@ControllerAction
|
@ControllerAction
|
||||||
void save() {
|
void save() {
|
||||||
// TODO: implement
|
if (model.imageData == null || model.thumbnailData == null) {
|
||||||
|
view.showErrorNoImage()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
String title = view.titleField.getText()
|
||||||
|
if (title == null)
|
||||||
|
title = ""
|
||||||
|
if (title.length() > Constants.MAX_PROFILE_TITLE_LENGTH) {
|
||||||
|
view.showErrorLongTitle()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
String body = view.bodyArea.getText()
|
||||||
|
if (body == null)
|
||||||
|
body = ""
|
||||||
|
if (body.length() > Constants.MAX_COMMENT_LENGTH) {
|
||||||
|
view.showErrorLongProfile()
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
MWProfileHeader header = new MWProfileHeader(model.core.me, model.thumbnailData, title, model.core.spk)
|
||||||
|
MWProfile profile = new MWProfile(header, model.imageData, model.format, body, model.core.spk)
|
||||||
|
model.core.myProfile = profile
|
||||||
|
model.core.saveProfile()
|
||||||
cancel()
|
cancel()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -705,6 +705,10 @@ PROFILE_EDITOR_THUMBNAIL=Avatar Thumbnail
|
||||||
PROFILE_EDITOR_TITLE=Profile Title ({0} characters max)
|
PROFILE_EDITOR_TITLE=Profile Title ({0} characters max)
|
||||||
PROFILE_EDITOR_BODY=Profile ({0} characters max)
|
PROFILE_EDITOR_BODY=Profile ({0} characters max)
|
||||||
PROFILE_EDITOR_GENERATE=Generate Avatar
|
PROFILE_EDITOR_GENERATE=Generate Avatar
|
||||||
|
PROFILE_EDITOR_ERROR_LARGE_FILE=The selected file is too large
|
||||||
|
PROFILE_EDITOR_ERROR_NO_IMAGE=Please select an avatar or generate one
|
||||||
|
PROFILE_EDITOR_ERROR_LARGE_TITLE=Profile title is too long
|
||||||
|
PROFILE_EDITOR_ERROR_LARGE_BODY=Profile is too long
|
||||||
|
|
||||||
## Tooltips
|
## Tooltips
|
||||||
|
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
package com.muwire.gui.profile
|
package com.muwire.gui.profile
|
||||||
|
|
||||||
import com.muwire.core.Constants
|
import com.muwire.core.Constants
|
||||||
|
import com.muwire.core.profile.MWProfile
|
||||||
import com.muwire.core.profile.MWProfileImageFormat
|
import com.muwire.core.profile.MWProfileImageFormat
|
||||||
import griffon.core.GriffonApplication
|
import griffon.core.GriffonApplication
|
||||||
import griffon.core.artifact.GriffonView
|
import griffon.core.artifact.GriffonView
|
||||||
|
@ -14,15 +15,19 @@ import javax.swing.JComponent
|
||||||
import javax.swing.JDialog
|
import javax.swing.JDialog
|
||||||
import javax.swing.JFrame
|
import javax.swing.JFrame
|
||||||
import javax.swing.JLabel
|
import javax.swing.JLabel
|
||||||
|
import javax.swing.JOptionPane
|
||||||
import javax.swing.JPanel
|
import javax.swing.JPanel
|
||||||
import javax.swing.JTextArea
|
import javax.swing.JTextArea
|
||||||
import javax.swing.JTextField
|
import javax.swing.JTextField
|
||||||
|
import javax.swing.SwingUtilities
|
||||||
import javax.swing.TransferHandler
|
import javax.swing.TransferHandler
|
||||||
import javax.swing.border.TitledBorder
|
import javax.swing.border.TitledBorder
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
import java.awt.Dimension
|
import java.awt.Dimension
|
||||||
import java.awt.GridBagConstraints
|
import java.awt.GridBagConstraints
|
||||||
import java.awt.datatransfer.DataFlavor
|
import java.awt.datatransfer.DataFlavor
|
||||||
|
import java.awt.event.WindowAdapter
|
||||||
|
import java.awt.event.WindowEvent
|
||||||
import java.awt.image.BufferedImage
|
import java.awt.image.BufferedImage
|
||||||
|
|
||||||
import static com.muwire.gui.Translator.trans
|
import static com.muwire.gui.Translator.trans
|
||||||
|
@ -48,8 +53,8 @@ class EditProfileView {
|
||||||
void initUI() {
|
void initUI() {
|
||||||
mainFrame = application.windowManager.findWindow("main-frame")
|
mainFrame = application.windowManager.findWindow("main-frame")
|
||||||
|
|
||||||
int dimX = Math.max(1024, (int)(mainFrame.getWidth() / 2))
|
int dimX = Math.max(1100, (int)(mainFrame.getWidth() / 2))
|
||||||
int dimY = Math.max(600, (int)(mainFrame.getHeight() / 2))
|
int dimY = Math.max(700, (int)(mainFrame.getHeight() / 2))
|
||||||
dialog = new JDialog(mainFrame, "Profile Editor", true)
|
dialog = new JDialog(mainFrame, "Profile Editor", true)
|
||||||
dialog.setSize([dimX, dimY] as Dimension)
|
dialog.setSize([dimX, dimY] as Dimension)
|
||||||
dialog.setResizable(false)
|
dialog.setResizable(false)
|
||||||
|
@ -116,9 +121,26 @@ class EditProfileView {
|
||||||
|
|
||||||
void mvcGroupInit(Map<String, String> args) {
|
void mvcGroupInit(Map<String, String> args) {
|
||||||
dialog.getContentPane().add(mainPanel)
|
dialog.getContentPane().add(mainPanel)
|
||||||
|
|
||||||
|
MWProfile profile = model.core.myProfile
|
||||||
|
if (profile != null) {
|
||||||
|
model.format = profile.getFormat()
|
||||||
|
model.imageData = profile.getImage()
|
||||||
|
bodyArea.setText(profile.getBody())
|
||||||
|
|
||||||
|
model.thumbnailData = profile.getHeader().getThumbNail()
|
||||||
|
titleField.setText(profile.getHeader().getTitle())
|
||||||
|
dialog.addWindowListener(new WindowAdapter() {
|
||||||
|
@Override
|
||||||
|
void windowOpened(WindowEvent e) {
|
||||||
|
setImageAndThumbnail(new ByteArrayInputStream(model.imageData))
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
dialog.setLocationRelativeTo(mainFrame)
|
dialog.setLocationRelativeTo(mainFrame)
|
||||||
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
|
||||||
dialog.show()
|
dialog.setVisible(true)
|
||||||
}
|
}
|
||||||
|
|
||||||
void setImageAndThumbnail(InputStream inputStream) {
|
void setImageAndThumbnail(InputStream inputStream) {
|
||||||
|
@ -167,8 +189,11 @@ class EditProfileView {
|
||||||
if (!(fileName.endsWith("jpg") || fileName.endsWith("jpeg") || fileName.endsWith("png")))
|
if (!(fileName.endsWith("jpg") || fileName.endsWith("jpeg") || fileName.endsWith("png")))
|
||||||
return false
|
return false
|
||||||
|
|
||||||
if (f.length() > Constants.MAX_PROFILE_IMAGE_LENGTH)
|
if (f.length() > Constants.MAX_PROFILE_IMAGE_LENGTH) {
|
||||||
|
JOptionPane.showMessageDialog(dialog, trans("PROFILE_EDITOR_ERROR_LARGE_FILE"),
|
||||||
|
trans("PROFILE_EDITOR_ERROR_LARGE_FILE"), JOptionPane.ERROR_MESSAGE)
|
||||||
return false
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
f.withInputStream {setImageAndThumbnail it}
|
f.withInputStream {setImageAndThumbnail it}
|
||||||
|
|
||||||
|
@ -178,4 +203,19 @@ class EditProfileView {
|
||||||
return true
|
return true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void showErrorNoImage() {
|
||||||
|
JOptionPane.showMessageDialog(dialog, trans("PROFILE_EDITOR_ERROR_NO_IMAGE"),
|
||||||
|
trans("PROFILE_EDITOR_ERROR_NO_IMAGE"), JOptionPane.ERROR_MESSAGE)
|
||||||
|
}
|
||||||
|
|
||||||
|
void showErrorLongTitle() {
|
||||||
|
JOptionPane.showMessageDialog(dialog, trans("PROFILE_EDITOR_ERROR_LARGE_TITLE"),
|
||||||
|
trans("PROFILE_EDITOR_ERROR_LARGE_TITLE"), JOptionPane.ERROR_MESSAGE)
|
||||||
|
}
|
||||||
|
|
||||||
|
void showErrorLongProfile() {
|
||||||
|
JOptionPane.showMessageDialog(dialog, trans("PROFILE_EDITOR_ERROR_LARGE_PROFILE"),
|
||||||
|
trans("PROFILE_EDITOR_ERROR_LARGE_PROFILE"), JOptionPane.ERROR_MESSAGE)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue