color the cryptographic part of the persona nicknames gray

dbus-notify
Zlatin Balevsky 2022-04-08 04:37:45 +01:00
parent 4f81f91219
commit bb415ad85f
No known key found for this signature in database
GPG Key ID: A72832072D525E41
20 changed files with 179 additions and 44 deletions

View File

@ -56,7 +56,7 @@ class CertificateControlView {
scrollPane {
usersTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.users) {
closureColumn(header : trans("ISSUER"), type : String, read : {it.getHumanReadableName()})
closureColumn(header : trans("ISSUER"), type : Persona, read : {it})
}
}
}
@ -79,6 +79,8 @@ class CertificateControlView {
}
void mvcGroupInit(Map<String,String> args) {
usersTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
usersTable.rowSorter.setComparator(0, new PersonaComparator())
usersTable.rowSorter.addRowSorterListener({evt -> lastUsersSortEvent = evt})
def selectionModel = usersTable.getSelectionModel()
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)

View File

@ -77,7 +77,7 @@ class ChatRoomView {
scrollPane {
membersTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.members) {
closureColumn(header : trans("NAME"), preferredWidth: 100, type: String, read : {it.getHumanReadableName()})
closureColumn(header : trans("NAME"), preferredWidth: 100, type: Persona, read : {it})
closureColumn(header : trans("TRUST_STATUS"), preferredWidth: 30, type : String, read : {trans(model.core.trustService.getLevel(it.destination).name())})
}
}
@ -124,6 +124,8 @@ class ChatRoomView {
if (membersTable != null) {
membersTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
membersTable.rowSorter.setComparator(0, new PersonaComparator())
membersTable.rowSorter.addRowSorterListener({evt -> lastMembersTableSortEvent = evt})
membersTable.rowSorter.setSortsOnUpdates(true)
membersTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION)

View File

@ -1,5 +1,7 @@
package com.muwire.gui
import com.muwire.core.Persona
import javax.swing.AbstractAction
import javax.swing.Action
import javax.swing.JComponent
@ -76,7 +78,7 @@ class CollectionTabView {
collectionsTable = table(id: "collections-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.collections) {
closureColumn(header: trans("NAME"), preferredWidth: 200, type : String, read : {HTMLSanitizer.sanitize(it.name)})
closureColumn(header: trans("AUTHOR"), preferredWidth: 200, type : String, read : {it.author.getHumanReadableName()})
closureColumn(header: trans("AUTHOR"), preferredWidth: 200, type : Persona, read : {it.author})
closureColumn(header: trans("COLLECTION_TOTAL_FILES"), preferredWidth: 20, type: Integer, read : {it.numFiles()})
closureColumn(header: trans("COLLECTION_TOTAL_SIZE"), preferredWidth: 20, type: Long, read : {it.totalSize()})
closureColumn(header: trans("COMMENT"), preferredWidth: 20, type: Boolean, read: {it.comment != ""})
@ -224,10 +226,12 @@ class CollectionTabView {
def centerRenderer = new DefaultTableCellRenderer()
centerRenderer.setHorizontalAlignment(JLabel.CENTER)
collectionsTable.setDefaultRenderer(Integer.class, centerRenderer)
collectionsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
collectionsTable.columnModel.getColumn(3).setCellRenderer(new SizeRenderer())
collectionsTable.columnModel.getColumn(5).setCellRenderer(new DateRenderer())
collectionsTable.rowSorter.setComparator(1, new PersonaComparator())
collectionsTable.rowSorter.addRowSorterListener({evt -> lastCollectionsTableSortEvent = evt})
collectionsTable.rowSorter.setSortsOnUpdates(true)

View File

@ -1,5 +1,7 @@
package com.muwire.gui
import com.muwire.core.Persona
import static com.muwire.gui.Translator.trans
import java.awt.BorderLayout
@ -56,7 +58,7 @@ class CollectionsToolView {
scrollPane(constraints : BorderLayout.CENTER) {
hitsTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.hits) {
closureColumn(header : trans("SEARCHER"), preferredWidth : 100, type : String, read : {it.searcher.getHumanReadableName()})
closureColumn(header : trans("SEARCHER"), preferredWidth : 100, type : Persona, read : {it.searcher})
closureColumn(header : trans("TIMESTAMP"), preferredWidth : 100, type : Long, read : {it.timestamp})
}
}
@ -70,6 +72,8 @@ class CollectionsToolView {
void mvcGroupInit(Map<String,String> args) {
// hits table
hitsTable.setDefaultRenderer(Long.class, new DateRenderer())
hitsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
hitsTable.rowSorter.setComparator(0, new PersonaComparator())
dialog.getContentPane().add(mainPanel)
dialog.pack()

View File

@ -1,5 +1,6 @@
package com.muwire.gui
import com.muwire.core.Persona
import griffon.core.artifact.GriffonView
import static com.muwire.gui.Translator.trans
import griffon.inject.MVCMember
@ -71,7 +72,7 @@ class ContentPanelView {
scrollPane(constraints : BorderLayout.CENTER) {
hitsTable = table(id : "hits-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.hits) {
closureColumn(header : trans("SEARCHER"), type : String, read : {row -> row.persona.getHumanReadableName()})
closureColumn(header : trans("SEARCHER"), type : Persona, read : { row -> row.persona})
closureColumn(header : trans("KEYWORDS"), type : String, read : {row -> HTMLSanitizer.sanitize(row.keywords.join(" "))})
closureColumn(header : trans("DATE"), type : String, read : {row -> String.valueOf(new Date(row.timestamp))})
}
@ -129,6 +130,8 @@ class ContentPanelView {
}
})
hitsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
hitsTable.rowSorter.setComparator(0, new PersonaComparator())
hitsTable.rowSorter.addRowSorterListener({evt -> lastHitsSortEvent = evt})
hitsTable.rowSorter.setSortsOnUpdates(true)
selectionModel = hitsTable.getSelectionModel()

View File

@ -1,5 +1,6 @@
package com.muwire.gui
import com.muwire.core.Persona
import griffon.core.artifact.GriffonView
import static com.muwire.gui.Translator.trans
import griffon.inject.MVCMember
@ -52,7 +53,7 @@ class FetchCertificatesView {
scrollPane(constraints : BorderLayout.CENTER) {
certsTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.certificates) {
closureColumn(header : trans("ISSUER"), preferredWidth : 200, type : String, read : {it.issuer.getHumanReadableName()})
closureColumn(header : trans("ISSUER"), preferredWidth : 200, type : Persona, read : {it.issuer})
closureColumn(header : trans("TRUST_STATUS"), preferredWidth: 50, type : String, read : {trans(controller.core.trustService.getLevel(it.issuer.destination).name())})
closureColumn(header : trans("NAME"), preferredWidth : 200, type: String, read : {HTMLSanitizer.sanitize(it.name.name.toString())})
closureColumn(header : trans("ISSUED"), preferredWidth : 100, type : String, read : {
@ -70,6 +71,8 @@ class FetchCertificatesView {
}
}
certsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
certsTable.rowSorter.setComparator(0, new PersonaComparator())
certsTable.rowSorter.addRowSorterListener({evt -> lastSortEvent = evt})
certsTable.rowSorter.setSortsOnUpdates(true)

View File

@ -1,5 +1,6 @@
package com.muwire.gui
import com.muwire.core.Persona
import com.muwire.core.messenger.MWMessage
import com.muwire.core.messenger.Messenger
import com.muwire.core.messenger.UIMessageMovedEvent
@ -435,8 +436,8 @@ class MainFrameView {
int percent = row.uploader.getProgress()
trans("PERCENT_OF_PIECE", percent)
})
closureColumn(header : trans("DOWNLOADER"), type : String, read : { row ->
row.uploader.getDownloader()
closureColumn(header : trans("DOWNLOADER"), type : Persona, read : { row ->
row.uploader.getDownloaderPersona()
})
closureColumn(header : trans("REMOTE_PIECES"), type : String, read : { row ->
int pieces = row.uploader.getTotalPieces()
@ -478,7 +479,7 @@ class MainFrameView {
dragEnabled : true, transferHandler : collectionsTransferHandler) {
tableModel(list : model.localCollections) {
closureColumn(header : trans("NAME"), preferredWidth : 100, type : String, read : {HTMLSanitizer.sanitize(it.name)})
closureColumn(header : trans("AUTHOR"), preferredWidth : 100, type : String, read : {it.author.getHumanReadableName()})
closureColumn(header : trans("AUTHOR"), preferredWidth : 100, type : Persona, read : {it.author})
closureColumn(header : trans("FILES"), preferredWidth: 10, type : Integer, read : {it.numFiles()})
closureColumn(header : trans("SIZE"), preferredWidth : 10, type : Long, read : {it.totalSize()})
closureColumn(header : trans("COMMENT"), preferredWidth : 10, type : Boolean, read : {it.comment != ""})
@ -556,12 +557,8 @@ class MainFrameView {
closureColumn(header : trans("KEYWORDS"), type : String, read : {
HTMLSanitizer.sanitize(it.search)
})
closureColumn(header : trans("FROM"), type : String, read : {
if (it.originator != null) {
return it.originator.getHumanReadableName()
} else {
return it.replyTo.toBase32()
}
closureColumn(header : trans("FROM"), type : Persona, read : {
it.originator
})
closureColumn(header : trans("COUNT"), type : String, read : {
it.count.toString()
@ -586,7 +583,7 @@ class MainFrameView {
scrollPane(constraints : BorderLayout.CENTER) {
table(id : "feeds-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.feeds) {
closureColumn(header : trans("PUBLISHER"), preferredWidth: 350, type : String, read : {it.getPublisher().getHumanReadableName()})
closureColumn(header : trans("PUBLISHER"), preferredWidth: 350, type : Persona, read : {it.getPublisher()})
closureColumn(header : trans("FILES"), preferredWidth: 10, type : Integer, read : {model.core.feedManager.getFeedItems(it.getPublisher()).size()})
closureColumn(header : trans("LAST_UPDATED"), type : Long, read : {it.getLastUpdated()})
closureColumn(header : trans("STATUS"), preferredWidth: 10, type : String, read : {trans(it.getStatus().name())})
@ -651,7 +648,7 @@ class MainFrameView {
table(id: "contacts-table", autoCreateRowSorter: true, rowHeight: rowHeight,
dragEnabled: true, transferHandler: new PersonaTransferHandler()) {
tableModel(list: model.contacts) {
closureColumn(header: trans("CONTACTS"), preferredWidth: 250, type: String, read: { it.persona.getHumanReadableName() })
closureColumn(header: trans("CONTACTS"), preferredWidth: 250, type: Persona, read: { it.persona })
closureColumn(header: trans("REASON"), preferredWidth: 450, type: String, read: { it.reason })
closureColumn(header: trans("TRUST_STATUS"), preferredWidth: 60, type: String, read: { row ->
trans(model.core.trustService.getLevel(row.persona.destination).name())
@ -691,7 +688,7 @@ class MainFrameView {
scrollPane(constraints : BorderLayout.CENTER) {
table(id : "subscription-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.subscriptions) {
closureColumn(header : trans("NAME"), preferredWidth: 200, type: String, read : {it.persona.getHumanReadableName()})
closureColumn(header : trans("NAME"), preferredWidth: 200, type: Persona, read : {it.persona})
closureColumn(header : trans("TRUSTED"), preferredWidth : 20, type: Integer, read : {it.good.size()})
closureColumn(header : trans("DISTRUSTED"), preferredWidth: 20, type: Integer, read : {it.bad.size()})
closureColumn(header : trans("STATUS"), preferredWidth: 30, type: String, read : {trans(it.status.name())})
@ -1065,10 +1062,14 @@ class MainFrameView {
// collections table
def personaRenderer = new PersonaCellRenderer()
def personaComparator = new PersonaComparator()
collectionsTable.setDefaultRenderer(Integer.class, centerRenderer)
collectionsTable.setDefaultRenderer(Persona.class, personaRenderer)
collectionsTable.columnModel.getColumn(3).setCellRenderer(new SizeRenderer())
collectionsTable.columnModel.getColumn(6).setCellRenderer(new DateRenderer())
collectionsTable.rowSorter.setComparator(1, personaComparator)
collectionsTable.rowSorter.addRowSorterListener({ evt -> lastCollectionSortEvent = evt })
selectionModel = collectionsTable.getSelectionModel()
@ -1135,8 +1136,10 @@ class MainFrameView {
})
// uploadsTable
def uploadsTable = builder.getVariable("uploads-table")
JTable uploadsTable = builder.getVariable("uploads-table")
uploadsTable.setDefaultRenderer(Persona.class, personaRenderer)
uploadsTable.rowSorter.setComparator(2, personaComparator)
uploadsTable.rowSorter.addRowSorterListener({ evt -> lastUploadsSortEvent = evt })
uploadsTable.rowSorter.setSortsOnUpdates(true)
@ -1155,7 +1158,8 @@ class MainFrameView {
})
// searches table
def searchesTable = builder.getVariable("searches-table")
JTable searchesTable = builder.getVariable("searches-table")
searchesTable.setDefaultRenderer(Persona.class, personaRenderer)
JPopupMenu searchTableMenu = new JPopupMenu()
JMenuItem copySearchToClipboard = new JMenuItem(trans("COPY_SEARCH_TO_CLIPBOARD"))
@ -1184,9 +1188,11 @@ class MainFrameView {
})
// feeds table
def feedsTable = builder.getVariable("feeds-table")
JTable feedsTable = builder.getVariable("feeds-table")
feedsTable.rowSorter.addRowSorterListener({ evt -> lastFeedsSortEvent = evt })
feedsTable.rowSorter.setSortsOnUpdates(true)
feedsTable.rowSorter.setComparator(0, personaComparator)
feedsTable.setDefaultRenderer(Persona.class, personaRenderer)
feedsTable.setDefaultRenderer(Integer.class, centerRenderer)
feedsTable.setDefaultRenderer(Long.class, new DateRenderer())
selectionModel = feedsTable.getSelectionModel()
@ -1277,10 +1283,12 @@ class MainFrameView {
})
// subscription table
def subscriptionTable = builder.getVariable("subscription-table")
JTable subscriptionTable = builder.getVariable("subscription-table")
subscriptionTable.setDefaultRenderer(Integer.class, centerRenderer)
subscriptionTable.setDefaultRenderer(Persona.class, personaRenderer)
subscriptionTable.rowSorter.addRowSorterListener({ evt -> lastContactsSubscriptionSortEvent = evt })
subscriptionTable.rowSorter.setSortsOnUpdates(true)
subscriptionTable.rowSorter.setComparator(0, personaComparator)
selectionModel = subscriptionTable.getSelectionModel()
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
selectionModel.addListSelectionListener({
@ -1313,7 +1321,9 @@ class MainFrameView {
subscriptionTable.setDefaultRenderer(Long.class, new DateRenderer())
// contacts table
def contactsTable = builder.getVariable("contacts-table")
JTable contactsTable = builder.getVariable("contacts-table")
contactsTable.setDefaultRenderer(Persona.class, personaRenderer)
contactsTable.rowSorter.setComparator(0, personaComparator)
contactsTable.rowSorter.addRowSorterListener({ evt -> lastContactsSortEvent = evt })
contactsTable.rowSorter.setSortsOnUpdates(true)
selectionModel = contactsTable.getSelectionModel()

View File

@ -1,5 +1,6 @@
package com.muwire.gui
import com.muwire.core.Persona
import com.muwire.core.collections.FileCollection
import com.muwire.core.messenger.MWMessage
import com.muwire.core.messenger.MWMessageAttachment
@ -59,7 +60,7 @@ class MessageFolderView {
dragEnabled: true, transferHandler: new MessageExportTransferHandler()) {
if (!model.outgoing) {
tableModel(list: model.messageHeaders) {
closureColumn(header: trans("SENDER"), preferredWidth: 200, type: String, read: { it.message.sender.getHumanReadableName() })
closureColumn(header: trans("SENDER"), preferredWidth: 200, type: Persona, read: { it.message.sender })
closureColumn(header: trans("SUBJECT"), preferredWidth: 300, type: String, read: { HTMLSanitizer.sanitize(it.message.subject) })
closureColumn(header: trans("RECIPIENTS"), preferredWidth: 20, type: Integer, read: { it.message.recipients.size() })
closureColumn(header: trans("DATE"), preferredWidth: 50, type: Long, read: { it.message.timestamp })
@ -68,7 +69,14 @@ class MessageFolderView {
} else {
tableModel(list : model.messageHeaders) {
closureColumn(header: trans("RECIPIENTS"), preferredWidth: 400, type: String, read : {
it.message.recipients.stream().map({it.getHumanReadableName()}).collect(Collectors.joining(","))
StringBuilder sb = new StringBuilder()
sb.append("<html>")
String collected = it.message.recipients.stream().
map(PersonaCellRenderer::htmlize).
collect(Collectors.joining(","))
sb.append(collected)
sb.append("</html>")
return sb.toString()
})
closureColumn(header: trans("SUBJECT"), preferredWidth: 300, type: String, read: { it.message.subject })
closureColumn(header: trans("DATE"), preferredWidth: 50, type: Long, read: { it.message.timestamp })
@ -183,8 +191,11 @@ class MessageFolderView {
def centerRenderer = new DefaultTableCellRenderer()
centerRenderer.setHorizontalAlignment(JLabel.CENTER)
messageHeaderTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
messageHeaderTable.setDefaultRenderer(Integer.class, centerRenderer)
messageHeaderTable.setDefaultRenderer(Long.class, new DateRenderer())
if (!model.outgoing)
messageHeaderTable.rowSorter.setComparator(0, new PersonaComparator())
messageHeaderTable.rowSorter.addRowSorterListener({evt -> lastMessageHeaderTableSortEvent = evt})
messageHeaderTable.rowSorter.setSortsOnUpdates(true)
def sortKey = new RowSorter.SortKey(model.outgoing ? 2 : 3, SortOrder.ASCENDING)

View File

@ -270,7 +270,7 @@ class NewMessageView {
}
public String toString() {
persona.getHumanReadableName()
"<html>" + PersonaCellRenderer.htmlize(persona) + "</html>"
}
}
}

View File

@ -95,7 +95,7 @@ class SearchTabView {
scrollPane (constraints : BorderLayout.CENTER) {
sendersTable = table(id : "senders-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.senders) {
closureColumn(header : trans("SENDER"), preferredWidth : 500, type: String, read : { SenderBucket row -> row.sender.getHumanReadableName()})
closureColumn(header : trans("SENDER"), preferredWidth : 500, type: Persona, read : { SenderBucket row -> row.sender})
closureColumn(header : trans("RESULTS"), preferredWidth : 20, type: Integer, read : {SenderBucket row -> row.results.size()})
closureColumn(header : trans("BROWSE"), preferredWidth : 20, type: Boolean, read : {SenderBucket row -> row.results[0].browse})
closureColumn(header : trans("COLLECTIONS"), preferredWidth : 20, type: Boolean, read : {SenderBucket row -> row.results[0].browseCollections})
@ -394,8 +394,12 @@ class SearchTabView {
})
// senders table
def personaRenderer = new PersonaCellRenderer()
def personaComparator = new PersonaComparator()
sendersTable.addMouseListener(sendersMouseListener)
sendersTable.setDefaultRenderer(Integer.class, centerRenderer)
sendersTable.setDefaultRenderer(Persona.class, personaRenderer)
sendersTable.rowSorter.setComparator(0, personaComparator)
sendersTable.rowSorter.addRowSorterListener({evt -> lastSendersSortEvent = evt})
sendersTable.rowSorter.setSortsOnUpdates(true)
selectionModel = sendersTable.getSelectionModel()

View File

@ -1,5 +1,6 @@
package com.muwire.gui
import com.muwire.core.Persona
import griffon.core.artifact.GriffonView
import static com.muwire.gui.Translator.trans
import griffon.inject.MVCMember
@ -52,7 +53,7 @@ class SharedFileView {
scrollPane(constraints : BorderLayout.CENTER) {
searchersTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.searchers) {
closureColumn(header : trans("SEARCHER"), type : String, read : {it.searcher?.getHumanReadableName()})
closureColumn(header : trans("SEARCHER"), type : Persona, read : {it.searcher})
closureColumn(header : trans("QUERY"), type : String, read : {HTMLSanitizer.sanitize(it.query)})
closureColumn(header : trans("TIMESTAMP"), type : Long, read : {it.timestamp})
}
@ -76,7 +77,7 @@ class SharedFileView {
scrollPane(constraints : BorderLayout.CENTER) {
certificatesTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.certificates) {
closureColumn(header : trans("ISSUER"), type:String, read : {it.issuer.getHumanReadableName()})
closureColumn(header : trans("ISSUER"), type: Persona, read : {it.issuer})
closureColumn(header : trans("FILE_NAME"), type : String, read : {HTMLSanitizer.sanitize(it.name.name)})
closureColumn(header : trans("COMMENT"), type : Boolean, read : {it.comment != null})
closureColumn(header : trans("TIMESTAMP"), type : Long, read : {it.timestamp})
@ -91,6 +92,11 @@ class SharedFileView {
void mvcGroupInit(Map<String,String> args) {
def personaRenderer = new PersonaCellRenderer()
def personaComparator = new PersonaComparator()
certificatesTable.setDefaultRenderer(Persona.class, personaRenderer)
certificatesTable.rowSorter.setComparator(0, personaComparator)
certificatesTable.rowSorter.addRowSorterListener({evt -> lastCertificateSortEvent = evt})
def selectionModel = certificatesTable.getSelectionModel()
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
@ -113,6 +119,8 @@ class SharedFileView {
certificatesTable.setDefaultRenderer(Long.class, new DateRenderer())
searchersTable.rowSorter.setComparator(0, personaComparator)
searchersTable.setDefaultRenderer(Persona.class, personaRenderer)
searchersTable.setDefaultRenderer(Long.class, new DateRenderer())
def tabbedPane = new JTabbedPane()

View File

@ -1,8 +1,12 @@
package com.muwire.gui
import com.muwire.core.Persona
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
import javax.swing.JTable
import static com.muwire.gui.Translator.trans
import javax.swing.JDialog
import javax.swing.ListSelectionModel
@ -49,7 +53,7 @@ class TrustListView {
scrollPane (constraints : BorderLayout.CENTER){
table(id : "trusted-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.trusted) {
closureColumn(header: trans("TRUSTED_USERS"), type : String, read : {it.persona.getHumanReadableName()})
closureColumn(header: trans("TRUSTED_USERS"), type : Persona, read : {it.persona})
closureColumn(header: trans("REASON"), type : String, read : {HTMLSanitizer.sanitize(it.reason)})
closureColumn(header: trans("YOUR_TRUST"), type : String, read : {trans(model.trustService.getLevel(it.persona.destination).name())})
}
@ -66,7 +70,7 @@ class TrustListView {
scrollPane (constraints : BorderLayout.CENTER ){
table(id : "distrusted-table", autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.distrusted) {
closureColumn(header: trans("DISTRUSTED_USERS"), type : String, read : {it.persona.getHumanReadableName()})
closureColumn(header: trans("DISTRUSTED_USERS"), type : Persona, read : {it.persona})
closureColumn(header: trans("REASON"), type:String, read : {HTMLSanitizer.sanitize(it.reason)})
closureColumn(header: trans("YOUR_TRUST"), type : String, read : {trans(model.trustService.getLevel(it.persona.destination).name())})
}
@ -84,12 +88,19 @@ class TrustListView {
void mvcGroupInit(Map<String,String> args) {
def trustedTable = builder.getVariable("trusted-table")
def personaRenderer = new PersonaCellRenderer()
def personaComparator = new PersonaComparator()
JTable trustedTable = builder.getVariable("trusted-table")
trustedTable.setDefaultRenderer(Persona.class, personaRenderer)
trustedTable.rowSorter.setComparator(0, personaComparator)
trustedTable.rowSorter.addRowSorterListener({evt -> sortEvents["trusted-table"] = evt})
trustedTable.rowSorter.setSortsOnUpdates(true)
trustedTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
def distrustedTable = builder.getVariable("distrusted-table")
JTable distrustedTable = builder.getVariable("distrusted-table")
distrustedTable.setDefaultRenderer(Persona.class, personaRenderer)
distrustedTable.rowSorter.setComparator(0, personaComparator)
distrustedTable.rowSorter.addRowSorterListener({evt -> sortEvents["distrusted-table"] = evt})
distrustedTable.rowSorter.setSortsOnUpdates(true)
distrustedTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION)

View File

@ -1,5 +1,8 @@
package com.muwire.gui.chat
import com.muwire.core.Persona
import com.muwire.gui.PersonaCellRenderer
import com.muwire.gui.PersonaComparator
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
@ -42,8 +45,8 @@ class ChatFavoritesView {
scrollPane(constraints : BorderLayout.CENTER) {
favoritesTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list: model.chatFavorites.favorites) {
closureColumn(header: trans("SERVER"), type: String,
read : {ChatFavorite cf -> cf.address.getHumanReadableName()})
closureColumn(header: trans("SERVER"), type: Persona,
read : {ChatFavorite cf -> cf.address})
closureColumn(header: trans("CHAT_SERVERS_STARTUP_CONNECT"), preferredWidth: 50,
type: Boolean,
read : {ChatFavorite cf -> cf.autoConnect},
@ -83,6 +86,8 @@ class ChatFavoritesView {
void mvcGroupInit(Map<String, String> args) {
favoritesTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
favoritesTable.rowSorter.setComparator(0, new PersonaComparator())
favoritesTable.selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)
window.addWindowListener( new WindowAdapter() {

View File

@ -1,8 +1,11 @@
package com.muwire.gui.resultdetails
import com.muwire.core.Persona
import com.muwire.core.filecert.Certificate
import com.muwire.gui.DateRenderer
import com.muwire.gui.HTMLSanitizer
import com.muwire.gui.PersonaCellRenderer
import com.muwire.gui.PersonaComparator
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
@ -43,8 +46,8 @@ class CertificateTabView {
scrollPane(constraints: BorderLayout.CENTER) {
certsTable = table(autoCreateRowSorter: true, rowHeight: rowHeight) {
tableModel(list: model.certificates) {
closureColumn(header: trans("ISSUER"), preferredWidth: 150, type:String,
read:{it.issuer.getHumanReadableName()})
closureColumn(header: trans("ISSUER"), preferredWidth: 150, type: Persona,
read:{it.issuer})
closureColumn(header: trans("TRUST_STATUS"), preferredWidth: 30, type:String,
read:{trans(model.core.trustService.getLevel(it.issuer.destination).name())})
closureColumn(header: trans("NAME"), preferredWidth: 450,
@ -65,7 +68,9 @@ class CertificateTabView {
}
void mvcGroupInit(Map<String,String> args) {
certsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
certsTable.setDefaultRenderer(Long.class, new DateRenderer())
certsTable.rowSorter.setComparator(0, new PersonaComparator())
certsTable.rowSorter.setSortsOnUpdates(true)
def selectionModel = certsTable.getSelectionModel()

View File

@ -1,8 +1,11 @@
package com.muwire.gui.resultdetails
import com.muwire.core.Persona
import com.muwire.core.collections.FileCollection
import com.muwire.gui.DateRenderer
import com.muwire.gui.HTMLSanitizer
import com.muwire.gui.PersonaCellRenderer
import com.muwire.gui.PersonaComparator
import com.muwire.gui.SizeRenderer
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
@ -44,7 +47,7 @@ class MiniCollectionTabView {
collectionsTable = table(autoCreateRowSorter: true, rowHeight: rowHeight) {
tableModel(list : model.collections) {
closureColumn(header: trans("NAME"), preferredWidth: 300, type : String, read : { HTMLSanitizer.sanitize(it.name)})
closureColumn(header: trans("AUTHOR"), preferredWidth: 200, type : String, read : {it.author.getHumanReadableName()})
closureColumn(header: trans("AUTHOR"), preferredWidth: 200, type : Persona, read : {it.author})
closureColumn(header: trans("COLLECTION_TOTAL_FILES"), preferredWidth: 20, type: Integer, read : {it.numFiles()})
closureColumn(header: trans("COLLECTION_TOTAL_SIZE"), preferredWidth: 20, type: Long, read : {it.totalSize()})
closureColumn(header: trans("COMMENT"), preferredWidth: 20, type: Boolean, read: {it.comment != ""})
@ -61,8 +64,10 @@ class MiniCollectionTabView {
}
void mvcGroupInit(Map<String,String> args) {
collectionsTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
collectionsTable.columnModel.getColumn(3).setCellRenderer(new SizeRenderer())
collectionsTable.columnModel.getColumn(5).setCellRenderer(new DateRenderer())
collectionsTable.rowSorter.setComparator(1, new PersonaComparator())
collectionsTable.rowSorter.setSortsOnUpdates(true)
def selectionModel = collectionsTable.getSelectionModel()
selectionModel.setSelectionMode(ListSelectionModel.MULTIPLE_INTERVAL_SELECTION)

View File

@ -1,10 +1,14 @@
package com.muwire.gui.resultdetails
import com.muwire.core.Persona
import com.muwire.gui.PersonaCellRenderer
import com.muwire.gui.PersonaComparator
import griffon.core.GriffonApplication
import net.i2p.data.Destination
import javax.inject.Inject
import javax.swing.JPanel
import javax.swing.JTable
import javax.swing.border.Border
import java.awt.BorderLayout
import java.awt.Dimension
@ -81,9 +85,9 @@ class ResultDetailsFrameView {
constraints: gbc(gridx: 0, gridy: gridy++, fill: GridBagConstraints.BOTH, weightx: 100, weighty: 100)) {
gridLayout(rows: 1, cols: 1)
scrollPane {
table(autoCreateRowSorter: true, rowHeight: rowHeight) {
table(id: "senders-table", autoCreateRowSorter: true, rowHeight: rowHeight) {
tableModel(list: model.senders.toList()) {
closureColumn(header: trans("SENDER"), read: { it.getHumanReadableName() })
closureColumn(header: trans("SENDER"), type: Persona, read: { it })
closureColumn(header: trans("TRUST_NOUN"), read: {
Destination destination = it.destination
trans(model.core.trustService.getLevel(destination).name())
@ -117,6 +121,11 @@ class ResultDetailsFrameView {
}
void mvcGroupInit(Map<String, String> args) {
if (model.senders.size() > 1) {
JTable sendersTable = builder.getVariable("senders-table")
sendersTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
sendersTable.rowSorter.setComparator(0, new PersonaComparator())
}
if (certificatesPanel != null) {
String mvcId = mvcGroup.mvcId + "_certificates"
def params = [:]

View File

@ -3,6 +3,8 @@ package com.muwire.gui.resultdetails
import com.muwire.core.Persona
import com.muwire.core.search.UIResultEvent
import com.muwire.gui.HTMLSanitizer
import com.muwire.gui.PersonaCellRenderer
import com.muwire.gui.PersonaComparator
import com.muwire.gui.resultdetails.ResultListCellRenderer
import griffon.core.artifact.GriffonView
import griffon.core.mvc.MVCGroup
@ -61,7 +63,7 @@ class ResultDetailsTabsView {
scrollPane(constraints: BorderLayout.CENTER) {
sendersTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list: model.results) {
closureColumn(header: trans("SENDER"), preferredWidth: 150, type: String, read : {it.sender.getHumanReadableName()})
closureColumn(header: trans("SENDER"), preferredWidth: 150, type: Persona, read : {it.sender})
closureColumn(header: trans("TRUST_STATUS"), preferredWidth: 30, type:String, read : {
trans(model.core.trustService.getLevel(it.sender.destination).name())
})
@ -166,6 +168,8 @@ class ResultDetailsTabsView {
void mvcGroupInit(Map<String,String> args) {
// all senders table
sendersTable.setDefaultRenderer(Persona.class, new PersonaCellRenderer())
sendersTable.rowSorter.setComparator(0, new PersonaComparator())
def selectionModel = sendersTable.getSelectionModel()
selectionModel.setSelectionMode(ListSelectionModel.SINGLE_SELECTION)
selectionModel.addListSelectionListener({

View File

@ -0,0 +1,33 @@
package com.muwire.gui
import com.muwire.core.Persona
import javax.swing.JTable
import javax.swing.table.DefaultTableCellRenderer
import java.awt.Component
class PersonaCellRenderer extends DefaultTableCellRenderer {
@Override
Component getTableCellRendererComponent(JTable table, Object value,
boolean isSelected, boolean hasFocus, int row, int column) {
super.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column)
Persona persona = (Persona) value
setText("<html>${htmlize(persona)}</html>")
if (isSelected) {
setForeground(table.getSelectionForeground())
setBackground(table.getSelectionBackground())
} else {
setForeground(table.getForeground())
setBackground(table.getBackground())
}
this
}
static String htmlize(Persona persona) {
int atIdx = persona.getHumanReadableName().indexOf("@")
String nickname = persona.getHumanReadableName().substring(0, atIdx)
String hashPart = persona.getHumanReadableName().substring(atIdx)
"$nickname<font color='gray'>$hashPart</font>"
}
}

View File

@ -0,0 +1,10 @@
package com.muwire.gui
import com.muwire.core.Persona
class PersonaComparator implements Comparator<Persona>{
@Override
int compare(Persona a, Persona b) {
return String.compare(a.getHumanReadableName(), b.getHumanReadableName())
}
}

View File

@ -1,6 +1,7 @@
package com.muwire.gui.resultdetails
import com.muwire.core.search.UIResultEvent
import com.muwire.gui.PersonaCellRenderer
import javax.swing.JLabel
import javax.swing.JList
@ -13,7 +14,8 @@ class ResultListCellRenderer implements ListCellRenderer<UIResultEvent>{
UIResultEvent value, int index,
boolean isSelected, boolean cellHasFocus) {
JLabel rv = new JLabel()
rv.setText(value.sender.getHumanReadableName())
String text = "<html>" + PersonaCellRenderer.htmlize(value.sender) + "</html>"
rv.setText(text)
if (!isSelected) {
rv.setForeground(list.getForeground())
rv.setBackground(list.getSelectionBackground())