diff --git a/gui/griffon-app/controllers/com/muwire/gui/ContentPanelController.groovy b/gui/griffon-app/controllers/com/muwire/gui/ContentPanelController.groovy index 5e27aeec..2758272e 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/ContentPanelController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/ContentPanelController.groovy @@ -6,13 +6,22 @@ import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor import javax.annotation.Nonnull +import com.muwire.core.EventBus +import com.muwire.core.content.ContentControlEvent + @ArtifactProviderFor(GriffonController) class ContentPanelController { @MVCMember @Nonnull ContentPanelModel model + @MVCMember @Nonnull + ContentPanelView view + + EventBus eventBus @ControllerAction void addRule() { + def term = view.ruleTextField.text + eventBus.publish(new ContentControlEvent(term : term, regex : model.regex, add:true)) } @ControllerAction diff --git a/gui/griffon-app/models/com/muwire/gui/ContentPanelModel.groovy b/gui/griffon-app/models/com/muwire/gui/ContentPanelModel.groovy index 9246c474..da2a66eb 100644 --- a/gui/griffon-app/models/com/muwire/gui/ContentPanelModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/ContentPanelModel.groovy @@ -1,14 +1,24 @@ package com.muwire.gui +import javax.annotation.Nonnull + +import com.muwire.core.EventBus +import com.muwire.core.content.ContentControlEvent import com.muwire.core.content.ContentManager import griffon.core.artifact.GriffonModel +import griffon.inject.MVCMember import griffon.transform.Observable import griffon.metadata.ArtifactProviderFor @ArtifactProviderFor(GriffonModel) class ContentPanelModel { + @MVCMember @Nonnull + ContentPanelView view + + EventBus eventBus + private ContentManager contentManager def rules = [] @@ -18,13 +28,24 @@ class ContentPanelModel { void mvcGroupInit(Map args) { contentManager = application.context.get("core").contentManager - refresh() + rules.addAll(contentManager.matchers) + eventBus.register(ContentControlEvent.class, this) + } + + void mvcGroupDestroy() { + eventBus.unregister(ContentControlEvent.class, this) } void refresh() { rules.clear() rules.addAll(contentManager.matchers) hits.clear() - // TODO: fire table data changed event + view.rulesTable.model.fireTableDataChanged() + } + + void onContentControlEvent(ContentControlEvent e) { + runInsideUIAsync { + refresh() + } } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/ContentPanelView.groovy b/gui/griffon-app/views/com/muwire/gui/ContentPanelView.groovy index 49cda555..6a75fd47 100644 --- a/gui/griffon-app/views/com/muwire/gui/ContentPanelView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/ContentPanelView.groovy @@ -47,12 +47,15 @@ class ContentPanelView { } } panel (constraints : BorderLayout.SOUTH) { - ruleTextField = textField(action: addRuleAction) - buttonGroup(id : "ruleType") - radioButton(text: "Keyword", selected : true, buttonGroup: ruleType, keywordAction) - radioButton(text: "Regex", selected : false, buttonGroup: ruleType, regexAction) - button(text : "Add Rule", addRuleAction) - button(text : "Delete Rule", deleteRuleAction) // TODO: enable/disable + borderLayout() + ruleTextField = textField(constraints: BorderLayout.CENTER, action: addRuleAction) + panel (constraints: BorderLayout.EAST) { + buttonGroup(id : "ruleType") + radioButton(text: "Keyword", selected : true, buttonGroup: ruleType, keywordAction) + radioButton(text: "Regex", selected : false, buttonGroup: ruleType, regexAction) + button(text : "Add Rule", addRuleAction) + button(text : "Delete Rule", deleteRuleAction) // TODO: enable/disable + } } } panel { diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index be51437f..42c3c131 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -72,7 +72,11 @@ class MainFrameView { menuBar { menu (text : "Options") { menuItem("Configuration", actionPerformed : {mvcGroup.createMVCGroup("Options")}) - menuItem("Content Control", actionPerformed : {mvcGroup.createMVCGroup("content-panel")}) + menuItem("Content Control", actionPerformed : { + def env = [:] + env["eventBus"] = model.core.eventBus + mvcGroup.createMVCGroup("content-panel", env) + }) } menu (text : "Status") { menuItem("MuWire", actionPerformed : {mvcGroup.createMVCGroup("mu-wire-status")})