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 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<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.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<String, Object> 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()
}
}
}

View File

@@ -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})