diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index 2898c55d..d9c179fb 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -232,7 +232,10 @@ class MainFrameController { return Map env = new HashMap<>() env["trustList"] = list + env["trustService"] = core.trustService + env["eventBus"] = core.eventBus mvcGroup.createMVCGroup("trust-list", env) + } @ControllerAction diff --git a/gui/griffon-app/controllers/com/muwire/gui/TrustListController.groovy b/gui/griffon-app/controllers/com/muwire/gui/TrustListController.groovy index 1dbc19b2..db9fb794 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/TrustListController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/TrustListController.groovy @@ -6,8 +6,53 @@ import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor import javax.annotation.Nonnull +import com.muwire.core.EventBus +import com.muwire.core.Persona +import com.muwire.core.trust.TrustEvent +import com.muwire.core.trust.TrustLevel + @ArtifactProviderFor(GriffonController) class TrustListController { @MVCMember @Nonnull TrustListModel model + @MVCMember @Nonnull + TrustListView view + + EventBus eventBus + + @ControllerAction + void trustFromTrusted() { + int selectedRow = view.getSelectedRow("trusted-table") + if (selectedRow < 0) + return + Persona p = model.trusted[selectedRow] + eventBus.publish(new TrustEvent(persona : p, level : TrustLevel.TRUSTED)) + } + + @ControllerAction + void trustFromDistrusted() { + int selectedRow = view.getSelectedRow("distrusted-table") + if (selectedRow < 0) + return + Persona p = model.distrusted[selectedRow] + eventBus.publish(new TrustEvent(persona : p, level : TrustLevel.TRUSTED)) + } + + @ControllerAction + void distrustFromTrusted() { + int selectedRow = view.getSelectedRow("trusted-table") + if (selectedRow < 0) + return + Persona p = model.trusted[selectedRow] + eventBus.publish(new TrustEvent(persona : p, level : TrustLevel.DISTRUSTED)) + } + + @ControllerAction + void distrustFromDistrusted() { + int selectedRow = view.getSelectedRow("distrusted-table") + if (selectedRow < 0) + return + Persona p = model.distrusted[selectedRow] + eventBus.publish(new TrustEvent(persona : p, level : TrustLevel.DISTRUSTED)) + } } \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/TrustListModel.groovy b/gui/griffon-app/models/com/muwire/gui/TrustListModel.groovy index f4f1f302..bbd6bb40 100644 --- a/gui/griffon-app/models/com/muwire/gui/TrustListModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/TrustListModel.groovy @@ -1,6 +1,7 @@ package com.muwire.gui import com.muwire.core.trust.RemoteTrustList +import com.muwire.core.trust.TrustService import griffon.core.artifact.GriffonModel import griffon.transform.Observable @@ -9,4 +10,13 @@ import griffon.metadata.ArtifactProviderFor @ArtifactProviderFor(GriffonModel) class TrustListModel { RemoteTrustList trustList + TrustService trustService + + def trusted + def distrusted + + void mvcGroupInit(Map args) { + trusted = new ArrayList<>(trustList.good) + distrusted = new ArrayList<>(trustList.bad) + } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/TrustListView.groovy b/gui/griffon-app/views/com/muwire/gui/TrustListView.groovy index 00a23423..53cb01c6 100644 --- a/gui/griffon-app/views/com/muwire/gui/TrustListView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/TrustListView.groovy @@ -5,6 +5,7 @@ import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor import javax.swing.JDialog +import javax.swing.ListSelectionModel import javax.swing.SwingConstants import java.awt.BorderLayout @@ -22,19 +23,73 @@ class TrustListView { def dialog def mainFrame - def panel + def mainPanel + + def sortEvents = [:] void initUI() { mainFrame = application.windowManager.findWindow("main-frame") dialog = new JDialog(mainFrame, model.trustList.persona.getHumanReadableName(), true) - panel = builder.panel { + mainPanel = builder.panel { borderLayout() - label(text : "Last updated "+ model.trustList.timestamp, constraints : BorderLayout.CENTER) + panel(constraints : BorderLayout.NORTH) { + borderLayout() + panel (constraints : BorderLayout.NORTH) { + label(text: "Trust List of "+model.trustList.persona.getHumanReadableName()) + } + panel (constraints: BorderLayout.SOUTH) { + label(text : "Last updated "+ new Date(model.trustList.timestamp)) + } + } + panel(constraints : BorderLayout.CENTER) { + gridLayout(rows : 1, cols : 2) + panel { + borderLayout() + scrollPane (constraints : BorderLayout.CENTER){ + table(id : "trusted-table", autoCreateRowSorter : true) { + tableModel(list : model.trusted) { + closureColumn(header: "Trusted Users", type : String, read : {it.getHumanReadableName()}) + closureColumn(header: "Your Trust", type : String, read : {model.trustService.getLevel(it.destination).toString()}) + } + } + } + panel (constraints : BorderLayout.SOUTH) { + gridBagLayout() + button(text : "Trust", constraints : gbc(gridx : 0, gridy : 0), trustFromTrustedAction) + button(text : "Distrust", constraints : gbc(gridx : 1, gridy : 0), distrustFromTrustedAction) + } + } + panel { + borderLayout() + scrollPane (constraints : BorderLayout.CENTER ){ + table(id : "distrusted-table", autoCreateRowSorter : true) { + tableModel(list : model.distrusted) { + closureColumn(header: "Distrusted Users", type : String, read : {it.getHumanReadableName()}) + closureColumn(header: "Your Trust", type : String, read : {model.trustService.getLevel(it.destination).toString()}) + } + } + } + panel(constraints : BorderLayout.SOUTH) { + gridBagLayout() + button(text : "Trust", constraints : gbc(gridx : 0, gridy : 0), trustFromDistrustedAction) + button(text : "Distrust", constraints : gbc(gridx : 1, gridy : 0), distrustFromDistrustedAction) + } + } + } } } void mvcGroupInit(Map args) { - dialog.getContentPane().add(panel) + + def trustedTable = builder.getVariable("trusted-table") + trustedTable.rowSorter.addRowSorterListener({evt -> sortEvents["trusted-table"] = evt}) + trustedTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION) + + def distrustedTable = builder.getVariable("distrusted-table") + distrustedTable.rowSorter.addRowSorterListener({evt -> sortEvents["distrusted-table"] = evt}) + distrustedTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION) + + dialog.getContentPane().add(mainPanel) dialog.pack() dialog.setLocationRelativeTo(mainFrame) dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE) @@ -45,4 +100,14 @@ class TrustListView { }) dialog.show() } + + int getSelectedRow(String tableName) { + def table = builder.getVariable(tableName) + int selectedRow = table.getSelectedRow() + if (selectedRow < 0) + return -1 + if (sortEvents.get(tableName) != null) + selectedRow = table.rowSorter.convertRowIndexToModel(selectedRow) + selectedRow + } } \ No newline at end of file