diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy index 70d2f3a6..0e6539b1 100644 --- a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -9,6 +9,8 @@ import javax.annotation.Nonnull import javax.inject.Inject import com.muwire.core.Core +import com.muwire.core.search.QueryEvent +import com.muwire.core.search.SearchEvent @ArtifactProviderFor(GriffonController) class MainFrameController { @@ -21,15 +23,15 @@ class MainFrameController { private volatile Core core - private initCore() { - if (core == null) - core = application.getContext().get("core") - } - @ControllerAction void search() { - initCore() def search = builder.getVariable("search-field").text - println "searching $search" + def searchEvent = new SearchEvent(searchTerms : [search], uuid : UUID.randomUUID()) + core.eventBus.publish(new QueryEvent(searchEvent : searchEvent, firstHop : true, + replyTo: core.me.destination, receivedOn: core.me.destination)) + } + + void mvcGroupInit(Map args) { + application.addPropertyChangeListener("core", {e-> core = e.getNewValue()}) } } \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy index 40c2e846..8b1dcc4b 100644 --- a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -2,25 +2,43 @@ package com.muwire.gui import javax.annotation.Nonnull import javax.inject.Inject +import javax.swing.JTable + +import com.muwire.core.Core +import com.muwire.core.search.UIResultEvent import griffon.core.GriffonApplication import griffon.core.artifact.GriffonModel +import griffon.inject.MVCMember +import griffon.transform.FXObservable import griffon.transform.Observable import griffon.metadata.ArtifactProviderFor @ArtifactProviderFor(GriffonModel) class MainFrameModel { + @MVCMember @Nonnull + FactoryBuilderSupport builder @Inject @Nonnull GriffonApplication application @Observable boolean coreInitialized = false @Observable def results = [] @Observable def downloads = [] - - String currentSearch + + private volatile Core core void mvcGroupInit(Map args) { application.addPropertyChangeListener("core", {e -> coreInitialized = (e.getNewValue() != null) + core = e.getNewValue() + core.eventBus.register(UIResultEvent.class, this) }) } + + void onUIResultEvent(UIResultEvent e) { + runInsideUIAsync { + results << e + JTable table = builder.getVariable("results-table") + table.model.fireTableDataChanged() + } + } } \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy index 9c719450..76a249db 100644 --- a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -64,7 +64,7 @@ class MainFrameView { panel (constraints : JSplitPane.TOP) { borderLayout() scrollPane (constraints : BorderLayout.CENTER){ - table() { + table(id : "results-table") { tableModel(list: model.results) { closureColumn(header: "Name", type: String, read : {row -> row.name}) closureColumn(header: "Size", preferredWidth: 150, type: Long, read : {row -> row.size})