wip on file comments
This commit is contained in:
@@ -115,11 +115,13 @@ class PersisterService extends Service {
|
|||||||
List sources = (List)json.sources
|
List sources = (List)json.sources
|
||||||
Set<Destination> sourceSet = sources.stream().map({d -> new Destination(d.toString())}).collect Collectors.toSet()
|
Set<Destination> sourceSet = sources.stream().map({d -> new Destination(d.toString())}).collect Collectors.toSet()
|
||||||
DownloadedFile df = new DownloadedFile(file, ih, pieceSize, sourceSet)
|
DownloadedFile df = new DownloadedFile(file, ih, pieceSize, sourceSet)
|
||||||
|
df.setComment(json.comment)
|
||||||
return new FileLoadedEvent(loadedFile : df)
|
return new FileLoadedEvent(loadedFile : df)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
SharedFile sf = new SharedFile(file, ih, pieceSize)
|
SharedFile sf = new SharedFile(file, ih, pieceSize)
|
||||||
|
sf.setComment(json.comment)
|
||||||
return new FileLoadedEvent(loadedFile: sf)
|
return new FileLoadedEvent(loadedFile: sf)
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -148,6 +150,7 @@ class PersisterService extends Service {
|
|||||||
json.infoHash = sf.getB64EncodedHashRoot()
|
json.infoHash = sf.getB64EncodedHashRoot()
|
||||||
json.pieceSize = sf.getPieceSize()
|
json.pieceSize = sf.getPieceSize()
|
||||||
json.hashList = sf.getB64EncodedHashList()
|
json.hashList = sf.getB64EncodedHashList()
|
||||||
|
json.comment = sf.getComment()
|
||||||
|
|
||||||
if (sf instanceof DownloadedFile) {
|
if (sf instanceof DownloadedFile) {
|
||||||
json.sources = sf.sources.stream().map( {d -> d.toBase64()}).collect(Collectors.toList())
|
json.sources = sf.sources.stream().map( {d -> d.toBase64()}).collect(Collectors.toList())
|
||||||
|
@@ -90,6 +90,10 @@ class ResultsParser {
|
|||||||
Set<Destination> sources = Collections.emptySet()
|
Set<Destination> sources = Collections.emptySet()
|
||||||
if (json.sources != null)
|
if (json.sources != null)
|
||||||
sources = json.sources.stream().map({new Destination(it)}).collect(Collectors.toSet())
|
sources = json.sources.stream().map({new Destination(it)}).collect(Collectors.toSet())
|
||||||
|
|
||||||
|
String comment = null
|
||||||
|
if (json.comment != null)
|
||||||
|
comment = DataUtil.readi18nString(Base64.decode(json.comment))
|
||||||
|
|
||||||
return new UIResultEvent( sender : p,
|
return new UIResultEvent( sender : p,
|
||||||
name : name,
|
name : name,
|
||||||
@@ -97,6 +101,7 @@ class ResultsParser {
|
|||||||
infohash : new InfoHash(infoHash),
|
infohash : new InfoHash(infoHash),
|
||||||
pieceSize : pieceSize,
|
pieceSize : pieceSize,
|
||||||
sources : sources,
|
sources : sources,
|
||||||
|
comment : comment,
|
||||||
uuid: uuid)
|
uuid: uuid)
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
throw new InvalidSearchResultException("parsing search result failed",e)
|
throw new InvalidSearchResultException("parsing search result failed",e)
|
||||||
|
@@ -121,6 +121,9 @@ class ResultsSender {
|
|||||||
|
|
||||||
if (it instanceof DownloadedFile)
|
if (it instanceof DownloadedFile)
|
||||||
obj.sources = it.sources.stream().map({dest -> dest.toBase64()}).collect(Collectors.toSet())
|
obj.sources = it.sources.stream().map({dest -> dest.toBase64()}).collect(Collectors.toSet())
|
||||||
|
|
||||||
|
if (it.getComment() != null)
|
||||||
|
obj.comment = it.getComment()
|
||||||
|
|
||||||
def json = jsonOutput.toJson(obj)
|
def json = jsonOutput.toJson(obj)
|
||||||
os.writeShort((short)json.length())
|
os.writeShort((short)json.length())
|
||||||
|
@@ -14,6 +14,7 @@ class UIResultEvent extends Event {
|
|||||||
long size
|
long size
|
||||||
InfoHash infohash
|
InfoHash infohash
|
||||||
int pieceSize
|
int pieceSize
|
||||||
|
String comment
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
|
@@ -21,6 +21,8 @@ public class SharedFile {
|
|||||||
private final String b64EncodedFileName;
|
private final String b64EncodedFileName;
|
||||||
private final String b64EncodedHashRoot;
|
private final String b64EncodedHashRoot;
|
||||||
private final List<String> b64EncodedHashList;
|
private final List<String> b64EncodedHashList;
|
||||||
|
|
||||||
|
private volatile String comment;
|
||||||
|
|
||||||
public SharedFile(File file, InfoHash infoHash, int pieceSize) throws IOException {
|
public SharedFile(File file, InfoHash infoHash, int pieceSize) throws IOException {
|
||||||
this.file = file;
|
this.file = file;
|
||||||
@@ -80,6 +82,14 @@ public class SharedFile {
|
|||||||
public long getCachedLength() {
|
public long getCachedLength() {
|
||||||
return cachedLength;
|
return cachedLength;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setComment(String comment) {
|
||||||
|
this.comment = comment;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getComment() {
|
||||||
|
return comment;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int hashCode() {
|
public int hashCode() {
|
||||||
|
@@ -46,4 +46,14 @@ mvcGroups {
|
|||||||
view = 'com.muwire.gui.ContentPanelView'
|
view = 'com.muwire.gui.ContentPanelView'
|
||||||
controller = 'com.muwire.gui.ContentPanelController'
|
controller = 'com.muwire.gui.ContentPanelController'
|
||||||
}
|
}
|
||||||
|
'show-comment' {
|
||||||
|
model = 'com.muwire.gui.ShowConmmentModel'
|
||||||
|
view = 'com.muwire.gui.ShowCommentView'
|
||||||
|
controller = 'com.muwire.gui.ShowCommentController'
|
||||||
|
}
|
||||||
|
'add-comment' {
|
||||||
|
model = 'com.muwire.gui.AddCommentModel'
|
||||||
|
view = 'com.muwire.gui.AddCommentView'
|
||||||
|
controller = 'com.muwire.gui.AddCommentController'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@@ -0,0 +1,39 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonController
|
||||||
|
import griffon.core.controller.ControllerAction
|
||||||
|
import griffon.inject.MVCMember
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
import net.i2p.data.Base64
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
|
import com.muwire.core.util.DataUtil
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonController)
|
||||||
|
class AddCommentController {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
AddCommentModel model
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
AddCommentView view
|
||||||
|
|
||||||
|
@ControllerAction
|
||||||
|
void save() {
|
||||||
|
String comment = view.textarea.getText()
|
||||||
|
if (comment.trim().length() == 0)
|
||||||
|
comment = null
|
||||||
|
else
|
||||||
|
comment = Base64.encode(DataUtil.encodei18nString(comment))
|
||||||
|
model.selectedFiles.each {
|
||||||
|
it.setComment(comment)
|
||||||
|
}
|
||||||
|
mvcGroup.parentGroup.view.builder.getVariable("shared-files-table").model.fireTableDataChanged()
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
|
|
||||||
|
@ControllerAction
|
||||||
|
void cancel() {
|
||||||
|
view.dialog.setVisible(false)
|
||||||
|
mvcGroup.destroy()
|
||||||
|
}
|
||||||
|
}
|
@@ -277,6 +277,17 @@ class MainFrameController {
|
|||||||
core.eventBus.publish(new FileUnsharedEvent(unsharedFile : it))
|
core.eventBus.publish(new FileUnsharedEvent(unsharedFile : it))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ControllerAction
|
||||||
|
void addComment() {
|
||||||
|
def selectedFiles = view.selectedSharedFiles()
|
||||||
|
if (selectedFiles == null || selectedFiles.isEmpty())
|
||||||
|
return
|
||||||
|
|
||||||
|
Map<String, Object> params = new HashMap<>()
|
||||||
|
params['selectedFiles'] = selectedFiles
|
||||||
|
mvcGroup.createMVCGroup("add-comment", "Add Comment", params)
|
||||||
|
}
|
||||||
|
|
||||||
void stopWatchingDirectory() {
|
void stopWatchingDirectory() {
|
||||||
String directory = mvcGroup.view.getSelectedWatchedDirectory()
|
String directory = mvcGroup.view.getSelectedWatchedDirectory()
|
||||||
|
@@ -0,0 +1,19 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonController
|
||||||
|
import griffon.core.controller.ControllerAction
|
||||||
|
import griffon.inject.MVCMember
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonController)
|
||||||
|
class ShowCommentController {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
ShowCommentView view
|
||||||
|
|
||||||
|
@ControllerAction
|
||||||
|
void dismiss() {
|
||||||
|
view.dialog.setVisible(false)
|
||||||
|
mvcGroup.destroy()
|
||||||
|
}
|
||||||
|
}
|
12
gui/griffon-app/models/com/muwire/gui/AddCommentModel.groovy
Normal file
12
gui/griffon-app/models/com/muwire/gui/AddCommentModel.groovy
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import com.muwire.core.SharedFile
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonModel
|
||||||
|
import griffon.transform.Observable
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonModel)
|
||||||
|
class AddCommentModel {
|
||||||
|
List<SharedFile> selectedFiles
|
||||||
|
}
|
@@ -81,6 +81,7 @@ class MainFrameModel {
|
|||||||
@Observable boolean pauseButtonEnabled
|
@Observable boolean pauseButtonEnabled
|
||||||
@Observable boolean clearButtonEnabled
|
@Observable boolean clearButtonEnabled
|
||||||
@Observable String resumeButtonText
|
@Observable String resumeButtonText
|
||||||
|
@Observable boolean addCommentButtonEnabled
|
||||||
@Observable boolean subscribeButtonEnabled
|
@Observable boolean subscribeButtonEnabled
|
||||||
@Observable boolean markNeutralFromTrustedButtonEnabled
|
@Observable boolean markNeutralFromTrustedButtonEnabled
|
||||||
@Observable boolean markDistrustedButtonEnabled
|
@Observable boolean markDistrustedButtonEnabled
|
||||||
|
@@ -0,0 +1,12 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import com.muwire.core.search.UIResultEvent
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonModel
|
||||||
|
import griffon.transform.Observable
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonModel)
|
||||||
|
class ShowCommentModel {
|
||||||
|
UIResultEvent result
|
||||||
|
}
|
68
gui/griffon-app/views/com/muwire/gui/AddCommentView.groovy
Normal file
68
gui/griffon-app/views/com/muwire/gui/AddCommentView.groovy
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonView
|
||||||
|
import griffon.inject.MVCMember
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
import net.i2p.data.Base64
|
||||||
|
|
||||||
|
import javax.swing.JDialog
|
||||||
|
import javax.swing.SwingConstants
|
||||||
|
|
||||||
|
import com.muwire.core.util.DataUtil
|
||||||
|
|
||||||
|
import java.awt.BorderLayout
|
||||||
|
import java.awt.event.WindowAdapter
|
||||||
|
import java.awt.event.WindowEvent
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonView)
|
||||||
|
class AddCommentView {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
FactoryBuilderSupport builder
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
AddCommentModel model
|
||||||
|
|
||||||
|
def mainFrame
|
||||||
|
def dialog
|
||||||
|
def p
|
||||||
|
def textarea
|
||||||
|
|
||||||
|
void initUI() {
|
||||||
|
mainFrame = application.windowManager.findWindow("main-frame")
|
||||||
|
String title = "Add comment to multiple files"
|
||||||
|
String comment = ""
|
||||||
|
if (model.selectedFiles.size() == 1) {
|
||||||
|
title = "Add comments to " + model.selectedFiles[0].getFile().getName()
|
||||||
|
if (model.selectedFiles[0].comment != null)
|
||||||
|
comment = DataUtil.readi18nString(Base64.decode(model.selectedFiles[0].comment))
|
||||||
|
}
|
||||||
|
dialog = new JDialog(mainFrame, title, true)
|
||||||
|
|
||||||
|
p = builder.panel {
|
||||||
|
borderLayout()
|
||||||
|
panel (constraints : BorderLayout.CENTER) {
|
||||||
|
scrollPane {
|
||||||
|
textarea = textArea(text : comment, rows : 20, columns : 100, editable : true)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panel (constraints : BorderLayout.SOUTH) {
|
||||||
|
button(text : "Save", saveAction)
|
||||||
|
button(text : "Cancel", cancelAction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mvcGroupInit(Map<String,String> args) {
|
||||||
|
dialog.getContentPane().add(p)
|
||||||
|
dialog.pack()
|
||||||
|
dialog.setLocationRelativeTo(mainFrame)
|
||||||
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
|
||||||
|
dialog.addWindowListener( new WindowAdapter() {
|
||||||
|
public void windowClosed(WindowEvent e) {
|
||||||
|
mvcGroup.destroy()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
}
|
@@ -209,6 +209,7 @@ class MainFrameView {
|
|||||||
tableModel(list : model.shared) {
|
tableModel(list : model.shared) {
|
||||||
closureColumn(header : "Name", preferredWidth : 500, type : String, read : {row -> row.getCachedPath()})
|
closureColumn(header : "Name", preferredWidth : 500, type : String, read : {row -> row.getCachedPath()})
|
||||||
closureColumn(header : "Size", preferredWidth : 100, type : Long, read : {row -> row.getCachedLength() })
|
closureColumn(header : "Size", preferredWidth : 100, type : Long, read : {row -> row.getCachedLength() })
|
||||||
|
closureColumn(header : "Comments", preferredWidth : 100, type : Boolean, read : {it.getComment() != null})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -221,8 +222,14 @@ class MainFrameView {
|
|||||||
button(text : "Share files", actionPerformed : shareFiles)
|
button(text : "Share files", actionPerformed : shareFiles)
|
||||||
}
|
}
|
||||||
panel {
|
panel {
|
||||||
label("Shared:")
|
gridLayout(rows : 1, cols : 2)
|
||||||
label(text : bind {model.loadedFiles.toString()})
|
panel {
|
||||||
|
label("Shared:")
|
||||||
|
label(text : bind {model.loadedFiles.toString()})
|
||||||
|
}
|
||||||
|
panel {
|
||||||
|
button(text : "Add Comment", enabled : bind {model.addCommentButtonEnabled}, addCommentAction)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -475,6 +482,9 @@ class MainFrameView {
|
|||||||
JMenuItem unshareSelectedFiles = new JMenuItem("Unshare selected files")
|
JMenuItem unshareSelectedFiles = new JMenuItem("Unshare selected files")
|
||||||
unshareSelectedFiles.addActionListener({mvcGroup.controller.unshareSelectedFile()})
|
unshareSelectedFiles.addActionListener({mvcGroup.controller.unshareSelectedFile()})
|
||||||
sharedFilesMenu.add(unshareSelectedFiles)
|
sharedFilesMenu.add(unshareSelectedFiles)
|
||||||
|
JMenuItem commentSelectedFiles = new JMenuItem("Comment selected files")
|
||||||
|
commentSelectedFiles.addActionListener({mvcGroup.controller.addComment()})
|
||||||
|
sharedFilesMenu.add(commentSelectedFiles)
|
||||||
sharedFilesTable.addMouseListener(new MouseAdapter() {
|
sharedFilesTable.addMouseListener(new MouseAdapter() {
|
||||||
@Override
|
@Override
|
||||||
public void mouseReleased(MouseEvent e) {
|
public void mouseReleased(MouseEvent e) {
|
||||||
@@ -487,6 +497,14 @@ class MainFrameView {
|
|||||||
showPopupMenu(sharedFilesMenu, e)
|
showPopupMenu(sharedFilesMenu, e)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
selectionModel = sharedFilesTable.getSelectionModel()
|
||||||
|
selectionModel.addListSelectionListener({
|
||||||
|
def selectedFiles = selectedSharedFiles()
|
||||||
|
if (selectedFiles == null || selectedFiles.isEmpty())
|
||||||
|
return
|
||||||
|
model.addCommentButtonEnabled = true
|
||||||
|
})
|
||||||
|
|
||||||
// searches table
|
// searches table
|
||||||
def searchesTable = builder.getVariable("searches-table")
|
def searchesTable = builder.getVariable("searches-table")
|
||||||
|
@@ -18,6 +18,7 @@ import javax.swing.SwingConstants
|
|||||||
import javax.swing.table.DefaultTableCellRenderer
|
import javax.swing.table.DefaultTableCellRenderer
|
||||||
|
|
||||||
import com.muwire.core.Persona
|
import com.muwire.core.Persona
|
||||||
|
import com.muwire.core.search.UIResultEvent
|
||||||
import com.muwire.core.util.DataUtil
|
import com.muwire.core.util.DataUtil
|
||||||
|
|
||||||
import java.awt.BorderLayout
|
import java.awt.BorderLayout
|
||||||
@@ -83,6 +84,7 @@ class SearchTabView {
|
|||||||
closureColumn(header: "Size", preferredWidth: 20, type: Long, read : {row -> row.size})
|
closureColumn(header: "Size", preferredWidth: 20, type: Long, read : {row -> row.size})
|
||||||
closureColumn(header: "Direct Sources", preferredWidth: 50, type : Integer, read : { row -> model.hashBucket[row.infohash].size()})
|
closureColumn(header: "Direct Sources", preferredWidth: 50, type : Integer, read : { row -> model.hashBucket[row.infohash].size()})
|
||||||
closureColumn(header: "Possible Sources", preferredWidth : 50, type : Integer, read : {row -> model.sourcesBucket[row.infohash].size()})
|
closureColumn(header: "Possible Sources", preferredWidth : 50, type : Integer, read : {row -> model.sourcesBucket[row.infohash].size()})
|
||||||
|
closureColumn(header: "Comments", preferredWidth: 20, type: Boolean, read : {row -> row.comment != null})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -225,6 +227,16 @@ class SearchTabView {
|
|||||||
copyHashToClipboard.addActionListener({mvcGroup.view.copyHashToClipboard()})
|
copyHashToClipboard.addActionListener({mvcGroup.view.copyHashToClipboard()})
|
||||||
menu.add(copyHashToClipboard)
|
menu.add(copyHashToClipboard)
|
||||||
showMenu = true
|
showMenu = true
|
||||||
|
|
||||||
|
// show comment if any
|
||||||
|
int selectedRow = resultsTable.getSelectedRow()
|
||||||
|
if (lastSortEvent != null)
|
||||||
|
selectedRow = resultsTable.rowSorter.convertRowIndexToModel(selectedRow)
|
||||||
|
if (model.results[selectedRow].comment != null) {
|
||||||
|
JMenuItem showComment = new JMenuItem("Show Comment")
|
||||||
|
showComment.addActionListener({mvcGroup.view.showComment()})
|
||||||
|
menu.add(showComment)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
if (showMenu)
|
if (showMenu)
|
||||||
menu.show(e.getComponent(), e.getX(), e.getY())
|
menu.show(e.getComponent(), e.getX(), e.getY())
|
||||||
@@ -243,6 +255,23 @@ class SearchTabView {
|
|||||||
clipboard.setContents(selection, null)
|
clipboard.setContents(selection, null)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def showComment() {
|
||||||
|
int selectedRow = resultsTable.getSelectedRow()
|
||||||
|
if (selectedRow < 0)
|
||||||
|
return
|
||||||
|
if (lastSortEvent != null)
|
||||||
|
selectedRow = resultsTable.rowSorter.convertRowIndexToModel(selectedRow)
|
||||||
|
UIResultEvent event = model.results[selectedRow]
|
||||||
|
if (event.comment == null)
|
||||||
|
return
|
||||||
|
|
||||||
|
String groupId = Base64.encode(event.infohash.getRoot())
|
||||||
|
Map<String,Object> params = new HashMap<>()
|
||||||
|
params['result'] = event
|
||||||
|
|
||||||
|
mvcGroup.createMVCGroup("show-comment", groupId, params)
|
||||||
|
}
|
||||||
|
|
||||||
int selectedSenderRow() {
|
int selectedSenderRow() {
|
||||||
int row = sendersTable.getSelectedRow()
|
int row = sendersTable.getSelectedRow()
|
||||||
if (row < 0)
|
if (row < 0)
|
||||||
|
63
gui/griffon-app/views/com/muwire/gui/ShowCommentView.groovy
Normal file
63
gui/griffon-app/views/com/muwire/gui/ShowCommentView.groovy
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonView
|
||||||
|
import griffon.inject.MVCMember
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
import net.i2p.data.Base64
|
||||||
|
|
||||||
|
import javax.swing.JDialog
|
||||||
|
import javax.swing.SwingConstants
|
||||||
|
|
||||||
|
import com.muwire.core.util.DataUtil
|
||||||
|
|
||||||
|
import java.awt.BorderLayout
|
||||||
|
import java.awt.event.WindowAdapter
|
||||||
|
import java.awt.event.WindowEvent
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonView)
|
||||||
|
class ShowCommentView {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
FactoryBuilderSupport builder
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
ShowCommentModel model
|
||||||
|
|
||||||
|
def mainFrame
|
||||||
|
def dialog
|
||||||
|
def p
|
||||||
|
|
||||||
|
void initUI() {
|
||||||
|
mainFrame = application.windowManager.findWindow("main-frame")
|
||||||
|
dialog = new JDialog(mainFrame, model.result.name, true)
|
||||||
|
dialog.setResizable(true)
|
||||||
|
|
||||||
|
|
||||||
|
String comment = DataUtil.readi18nString(Base64.decode(model.result.comment))
|
||||||
|
|
||||||
|
p = builder.panel {
|
||||||
|
borderLayout()
|
||||||
|
panel (constraints : BorderLayout.CENTER) {
|
||||||
|
scrollPane {
|
||||||
|
textArea(text : comment, rows : 20, columns : 100, editable : false)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
panel (constraints : BorderLayout.SOUTH) {
|
||||||
|
button(text : "Dismiss", dismissAction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void mvcGroupInit(Map<String,String> args) {
|
||||||
|
dialog.getContentPane().add(p)
|
||||||
|
dialog.pack()
|
||||||
|
dialog.setLocationRelativeTo(mainFrame)
|
||||||
|
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
|
||||||
|
dialog.addWindowListener( new WindowAdapter() {
|
||||||
|
public void windowClosed(WindowEvent e) {
|
||||||
|
mvcGroup.destroy()
|
||||||
|
}
|
||||||
|
})
|
||||||
|
dialog.show()
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user