chat room monitor tool

pull/34/head
Zlatin Balevsky 2019-11-26 09:43:53 +00:00
parent 57d5b5f386
commit 5831b06842
6 changed files with 145 additions and 0 deletions

View File

@ -121,4 +121,9 @@ mvcGroups {
view = 'com.muwire.gui.ChatRoomView'
controller = 'com.muwire.gui.ChatRoomController'
}
'chat-monitor' {
model = 'com.muwire.gui.ChatMonitorModel'
view = 'com.muwire.gui.ChatMonitorView'
controller = 'com.muwire.gui.ChatMonitorController'
}
}

View File

@ -0,0 +1,13 @@
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 ChatMonitorController {
@MVCMember @Nonnull
ChatMonitorModel model
}

View File

@ -0,0 +1,46 @@
package com.muwire.gui
import javax.annotation.Nonnull
import griffon.core.artifact.GriffonModel
import griffon.inject.MVCMember
import griffon.transform.Observable
import griffon.metadata.ArtifactProviderFor
@ArtifactProviderFor(GriffonModel)
class ChatMonitorModel implements ChatNotificator.Listener {
@MVCMember @Nonnull
ChatMonitorView view
ChatNotificator chatNotificator
def rooms = []
void mvcGroupInit(Map<String,String> args) {
chatNotificator.listener = this
}
void mvcGroupDestroy() {
chatNotificator.listener = null
}
public void update() {
rooms.clear()
chatNotificator.roomsWithMessages.each { room, count ->
int dash = room.indexOf('-')
String server = room.substring(0, dash)
String roomName = room.substring(dash + 1)
rooms.add(new ChatRoomEntry(server, roomName, count))
}
view.updateView()
}
private static class ChatRoomEntry {
private final String server, room
private final int count
ChatRoomEntry(String server, String room, int count) {
this.server = server
this.room = room
this.count = count
}
}
}

View File

@ -0,0 +1,67 @@
package com.muwire.gui
import griffon.core.artifact.GriffonView
import griffon.inject.MVCMember
import griffon.metadata.ArtifactProviderFor
import javax.swing.JDialog
import javax.swing.SwingConstants
import java.awt.BorderLayout
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import javax.annotation.Nonnull
@ArtifactProviderFor(GriffonView)
class ChatMonitorView {
@MVCMember @Nonnull
FactoryBuilderSupport builder
@MVCMember @Nonnull
ChatMonitorModel model
def mainFrame
def dialog
def panel
def roomsTable
void initUI() {
mainFrame = application.windowManager.findWindow("main-frame")
int rowHeight = application.context.getAsInt("row-height")
dialog = new JDialog(mainFrame, "Chat Monitor", false)
dialog.setResizable(true)
panel = builder.panel {
borderLayout()
panel(constraints : BorderLayout.NORTH) {
label("Chat rooms with unread messages")
}
scrollPane(constraints : BorderLayout.CENTER) {
roomsTable = table(autoCreateRowSorter : true, rowHeight : rowHeight) {
tableModel(list : model.rooms) {
closureColumn(header : "Server", type: String, read : {it.server})
closureColumn(header : "Room", type : String, read : {it.room})
closureColumn(header : "Messages", type : Integer, read : {it.count})
}
}
}
}
}
void updateView() {
roomsTable.model.fireTableDataChanged()
}
void mvcGroupInit(Map<String,String> args) {
dialog.getContentPane().add(panel)
dialog.pack()
dialog.setLocationRelativeTo(mainFrame)
dialog.setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE)
dialog.addWindowListener(new WindowAdapter() {
public void windowClosed(WindowEvent e) {
mvcGroup.destroy()
}
})
dialog.show()
}
}

View File

@ -131,6 +131,13 @@ class MainFrameView {
env['core'] = model.core
mvcGroup.createMVCGroup("certificate-control",env)
})
menuItem("Chat Room Monitor", actionPerformed : {
if (!mvcGroup.getChildrenGroups().containsKey("chat-monitor")) {
def env = [:]
env['chatNotificator'] = chatNotificator
mvcGroup.createMVCGroup("chat-monitor","chat-monitor",env)
}
})
}
}
borderLayout()

View File

@ -10,6 +10,10 @@ import griffon.core.mvc.MVCGroupManager
class ChatNotificator {
public static interface Listener {
void update()
}
private final MVCGroupManager groupManager
private boolean chatInFocus
@ -18,6 +22,8 @@ class ChatNotificator {
private final Map<String, Integer> roomsWithMessages = new HashMap<>()
private Listener listener
ChatNotificator(MVCGroupManager groupManager) {
this.groupManager = groupManager
}
@ -83,6 +89,7 @@ class ChatNotificator {
}
private void updateBadge() {
listener?.update()
if (!Taskbar.isTaskbarSupported())
return
def taskBar = Taskbar.getTaskbar()