hook up search results to table

This commit is contained in:
Zlatin Balevsky
2019-05-31 04:45:24 +01:00
parent 2539461c0e
commit 44735d96ce
3 changed files with 30 additions and 10 deletions

View File

@@ -9,6 +9,8 @@ import javax.annotation.Nonnull
import javax.inject.Inject import javax.inject.Inject
import com.muwire.core.Core import com.muwire.core.Core
import com.muwire.core.search.QueryEvent
import com.muwire.core.search.SearchEvent
@ArtifactProviderFor(GriffonController) @ArtifactProviderFor(GriffonController)
class MainFrameController { class MainFrameController {
@@ -21,15 +23,15 @@ class MainFrameController {
private volatile Core core private volatile Core core
private initCore() {
if (core == null)
core = application.getContext().get("core")
}
@ControllerAction @ControllerAction
void search() { void search() {
initCore()
def search = builder.getVariable("search-field").text 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<String, String> args) {
application.addPropertyChangeListener("core", {e-> core = e.getNewValue()})
} }
} }

View File

@@ -2,25 +2,43 @@ package com.muwire.gui
import javax.annotation.Nonnull import javax.annotation.Nonnull
import javax.inject.Inject 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.GriffonApplication
import griffon.core.artifact.GriffonModel import griffon.core.artifact.GriffonModel
import griffon.inject.MVCMember
import griffon.transform.FXObservable
import griffon.transform.Observable import griffon.transform.Observable
import griffon.metadata.ArtifactProviderFor import griffon.metadata.ArtifactProviderFor
@ArtifactProviderFor(GriffonModel) @ArtifactProviderFor(GriffonModel)
class MainFrameModel { class MainFrameModel {
@MVCMember @Nonnull
FactoryBuilderSupport builder
@Inject @Nonnull GriffonApplication application @Inject @Nonnull GriffonApplication application
@Observable boolean coreInitialized = false @Observable boolean coreInitialized = false
@Observable def results = [] @Observable def results = []
@Observable def downloads = [] @Observable def downloads = []
String currentSearch private volatile Core core
void mvcGroupInit(Map<String, Object> args) { void mvcGroupInit(Map<String, Object> args) {
application.addPropertyChangeListener("core", {e -> application.addPropertyChangeListener("core", {e ->
coreInitialized = (e.getNewValue() != null) 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()
}
}
} }

View File

@@ -64,7 +64,7 @@ class MainFrameView {
panel (constraints : JSplitPane.TOP) { panel (constraints : JSplitPane.TOP) {
borderLayout() borderLayout()
scrollPane (constraints : BorderLayout.CENTER){ scrollPane (constraints : BorderLayout.CENTER){
table() { table(id : "results-table") {
tableModel(list: model.results) { tableModel(list: model.results) {
closureColumn(header: "Name", type: String, read : {row -> row.name}) closureColumn(header: "Name", type: String, read : {row -> row.name})
closureColumn(header: "Size", preferredWidth: 150, type: Long, read : {row -> row.size}) closureColumn(header: "Size", preferredWidth: 150, type: Long, read : {row -> row.size})