show a progress bar while the core loads
This commit is contained in:
@@ -1,7 +1,7 @@
|
|||||||
|
|
||||||
application {
|
application {
|
||||||
title = 'MuWire'
|
title = 'MuWire'
|
||||||
startupGroups = ['EventList']
|
startupGroups = ['EventList', 'MainFrame']
|
||||||
autoShutdown = true
|
autoShutdown = true
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -11,4 +11,9 @@ mvcGroups {
|
|||||||
view = 'com.muwire.gui.EventListView'
|
view = 'com.muwire.gui.EventListView'
|
||||||
controller = 'com.muwire.gui.EventListController'
|
controller = 'com.muwire.gui.EventListController'
|
||||||
}
|
}
|
||||||
|
'MainFrame' {
|
||||||
|
model = 'com.muwire.gui.MainFrameModel'
|
||||||
|
view = 'com.muwire.gui.MainFrameView'
|
||||||
|
controller = 'com.muwire.gui.MainFrameController'
|
||||||
|
}
|
||||||
}
|
}
|
@@ -0,0 +1,18 @@
|
|||||||
|
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 MainFrameController {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
MainFrameModel model
|
||||||
|
|
||||||
|
@ControllerAction
|
||||||
|
void click() {
|
||||||
|
model.clickCount++
|
||||||
|
}
|
||||||
|
}
|
@@ -16,7 +16,6 @@ import griffon.metadata.ArtifactProviderFor
|
|||||||
@ArtifactProviderFor(GriffonModel)
|
@ArtifactProviderFor(GriffonModel)
|
||||||
class EventListModel {
|
class EventListModel {
|
||||||
@Inject @Nonnull GriffonApplication application
|
@Inject @Nonnull GriffonApplication application
|
||||||
@Observable int clickCount = 0
|
|
||||||
@Observable boolean coreInitialized = false
|
@Observable boolean coreInitialized = false
|
||||||
|
|
||||||
void mvcGroupInit(Map<String, Object> args) {
|
void mvcGroupInit(Map<String, Object> args) {
|
||||||
|
21
gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy
Normal file
21
gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
import javax.inject.Inject
|
||||||
|
|
||||||
|
import griffon.core.GriffonApplication
|
||||||
|
import griffon.core.artifact.GriffonModel
|
||||||
|
import griffon.transform.Observable
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonModel)
|
||||||
|
class MainFrameModel {
|
||||||
|
@Inject @Nonnull GriffonApplication application
|
||||||
|
@Observable boolean coreInitialized = false
|
||||||
|
|
||||||
|
void mvcGroupInit(Map<String, Object> args) {
|
||||||
|
application.addPropertyChangeListener("core", {e ->
|
||||||
|
coreInitialized = (e.getNewValue() != null)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
@@ -3,6 +3,9 @@ package com.muwire.gui
|
|||||||
import griffon.core.artifact.GriffonView
|
import griffon.core.artifact.GriffonView
|
||||||
import griffon.inject.MVCMember
|
import griffon.inject.MVCMember
|
||||||
import griffon.metadata.ArtifactProviderFor
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
|
||||||
|
import javax.swing.Box
|
||||||
|
import javax.swing.BoxLayout
|
||||||
import javax.swing.SwingConstants
|
import javax.swing.SwingConstants
|
||||||
import javax.annotation.Nonnull
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
@@ -15,16 +18,20 @@ class EventListView {
|
|||||||
|
|
||||||
void initUI() {
|
void initUI() {
|
||||||
builder.with {
|
builder.with {
|
||||||
application(size: [320, 160], id: 'event-list',
|
application(size: [320, 80], id: 'event-list',
|
||||||
title: application.configuration['application.title'],
|
title: application.configuration['application.title'],
|
||||||
iconImage: imageIcon('/griffon-icon-48x48.png').image,
|
iconImage: imageIcon('/griffon-icon-48x48.png').image,
|
||||||
iconImages: [imageIcon('/griffon-icon-48x48.png').image,
|
iconImages: [imageIcon('/griffon-icon-48x48.png').image,
|
||||||
imageIcon('/griffon-icon-32x32.png').image,
|
imageIcon('/griffon-icon-32x32.png').image,
|
||||||
imageIcon('/griffon-icon-16x16.png').image]) {
|
imageIcon('/griffon-icon-16x16.png').image],
|
||||||
gridLayout(rows: 2, cols: 1)
|
visible: bind { !model.coreInitialized} ) {
|
||||||
label(id: 'clickLabel', text: bind { model.clickCount },
|
panel {
|
||||||
horizontalAlignment: SwingConstants.CENTER)
|
vbox {
|
||||||
button(id: 'clickButton', clickAction, enabled: bind {model.coreInitialized})
|
label("MuWire is loading, please wait...")
|
||||||
|
Box.createVerticalGlue()
|
||||||
|
progressBar(indeterminate : true)
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
32
gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy
Normal file
32
gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.artifact.GriffonView
|
||||||
|
import griffon.inject.MVCMember
|
||||||
|
import griffon.metadata.ArtifactProviderFor
|
||||||
|
import javax.swing.SwingConstants
|
||||||
|
import javax.annotation.Nonnull
|
||||||
|
|
||||||
|
@ArtifactProviderFor(GriffonView)
|
||||||
|
class MainFrameView {
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
FactoryBuilderSupport builder
|
||||||
|
@MVCMember @Nonnull
|
||||||
|
MainFrameModel model
|
||||||
|
|
||||||
|
void initUI() {
|
||||||
|
builder.with {
|
||||||
|
application(size: [1024, 768], id: 'main-frame',
|
||||||
|
title: application.configuration['application.title'],
|
||||||
|
iconImage: imageIcon('/griffon-icon-48x48.png').image,
|
||||||
|
iconImages: [imageIcon('/griffon-icon-48x48.png').image,
|
||||||
|
imageIcon('/griffon-icon-32x32.png').image,
|
||||||
|
imageIcon('/griffon-icon-16x16.png').image],
|
||||||
|
visible : bind { model.coreInitialized }) {
|
||||||
|
gridLayout(rows: 2, cols: 1)
|
||||||
|
label(id: 'clickLabel', text: bind { model.clickCount },
|
||||||
|
horizontalAlignment: SwingConstants.CENTER)
|
||||||
|
button(id: 'clickButton', clickAction)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,25 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.test.GriffonFestRule
|
||||||
|
import org.fest.swing.fixture.FrameFixture
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail
|
||||||
|
|
||||||
|
class MainFrameIntegrationTest {
|
||||||
|
static {
|
||||||
|
System.setProperty('griffon.swing.edt.violations.check', 'true')
|
||||||
|
System.setProperty('griffon.swing.edt.hang.monitor', 'true')
|
||||||
|
}
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final GriffonFestRule fest = new GriffonFestRule()
|
||||||
|
|
||||||
|
private FrameFixture window
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void smokeTest() {
|
||||||
|
fail('Not implemented yet!')
|
||||||
|
}
|
||||||
|
}
|
@@ -0,0 +1,21 @@
|
|||||||
|
package com.muwire.gui
|
||||||
|
|
||||||
|
import griffon.core.test.GriffonUnitRule
|
||||||
|
import griffon.core.test.TestFor
|
||||||
|
import org.junit.Rule
|
||||||
|
import org.junit.Test
|
||||||
|
|
||||||
|
import static org.junit.Assert.fail
|
||||||
|
|
||||||
|
@TestFor(MainFrameController)
|
||||||
|
class MainFrameControllerTest {
|
||||||
|
private MainFrameController controller
|
||||||
|
|
||||||
|
@Rule
|
||||||
|
public final GriffonUnitRule griffon = new GriffonUnitRule()
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void smokeTest() {
|
||||||
|
fail('Not yet implemented!')
|
||||||
|
}
|
||||||
|
}
|
Reference in New Issue
Block a user