mirror of https://github.com/zlatinb/muwire
chat room monitor tool
parent
57d5b5f386
commit
5831b06842
|
@ -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'
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
}
|
||||
}
|
|
@ -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()
|
||||
|
|
|
@ -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()
|
||||
|
|
Loading…
Reference in New Issue