diff --git a/gui/griffon-app/conf/Config.groovy b/gui/griffon-app/conf/Config.groovy index df0d3867..4e7d2d42 100644 --- a/gui/griffon-app/conf/Config.groovy +++ b/gui/griffon-app/conf/Config.groovy @@ -1,7 +1,7 @@ application { title = 'MuWire' - startupGroups = ['EventList'] + startupGroups = ['EventList', 'MainFrame'] autoShutdown = true } @@ -11,4 +11,9 @@ mvcGroups { view = 'com.muwire.gui.EventListView' controller = 'com.muwire.gui.EventListController' } + 'MainFrame' { + model = 'com.muwire.gui.MainFrameModel' + view = 'com.muwire.gui.MainFrameView' + controller = 'com.muwire.gui.MainFrameController' + } } \ No newline at end of file diff --git a/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy new file mode 100644 index 00000000..947cc85b --- /dev/null +++ b/gui/griffon-app/controllers/com/muwire/gui/MainFrameController.groovy @@ -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++ + } +} \ No newline at end of file diff --git a/gui/griffon-app/models/com/muwire/gui/EventListModel.groovy b/gui/griffon-app/models/com/muwire/gui/EventListModel.groovy index ceab1f8c..3d271894 100644 --- a/gui/griffon-app/models/com/muwire/gui/EventListModel.groovy +++ b/gui/griffon-app/models/com/muwire/gui/EventListModel.groovy @@ -16,7 +16,6 @@ import griffon.metadata.ArtifactProviderFor @ArtifactProviderFor(GriffonModel) class EventListModel { @Inject @Nonnull GriffonApplication application - @Observable int clickCount = 0 @Observable boolean coreInitialized = false void mvcGroupInit(Map args) { diff --git a/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy new file mode 100644 index 00000000..8369a40b --- /dev/null +++ b/gui/griffon-app/models/com/muwire/gui/MainFrameModel.groovy @@ -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 args) { + application.addPropertyChangeListener("core", {e -> + coreInitialized = (e.getNewValue() != null) + }) + } +} \ No newline at end of file diff --git a/gui/griffon-app/views/com/muwire/gui/EventListView.groovy b/gui/griffon-app/views/com/muwire/gui/EventListView.groovy index 7a36b083..09810d52 100644 --- a/gui/griffon-app/views/com/muwire/gui/EventListView.groovy +++ b/gui/griffon-app/views/com/muwire/gui/EventListView.groovy @@ -3,6 +3,9 @@ package com.muwire.gui import griffon.core.artifact.GriffonView import griffon.inject.MVCMember import griffon.metadata.ArtifactProviderFor + +import javax.swing.Box +import javax.swing.BoxLayout import javax.swing.SwingConstants import javax.annotation.Nonnull @@ -15,16 +18,20 @@ class EventListView { void initUI() { builder.with { - application(size: [320, 160], id: 'event-list', + application(size: [320, 80], id: 'event-list', 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]) { - gridLayout(rows: 2, cols: 1) - label(id: 'clickLabel', text: bind { model.clickCount }, - horizontalAlignment: SwingConstants.CENTER) - button(id: 'clickButton', clickAction, enabled: bind {model.coreInitialized}) + imageIcon('/griffon-icon-16x16.png').image], + visible: bind { !model.coreInitialized} ) { + panel { + vbox { + label("MuWire is loading, please wait...") + Box.createVerticalGlue() + progressBar(indeterminate : true) + } + } } } } diff --git a/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy new file mode 100644 index 00000000..a15e3049 --- /dev/null +++ b/gui/griffon-app/views/com/muwire/gui/MainFrameView.groovy @@ -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) + } + } + } +} \ No newline at end of file diff --git a/gui/src/integration-test/groovy/com/muwire/gui/MainFrameIntegrationTest.groovy b/gui/src/integration-test/groovy/com/muwire/gui/MainFrameIntegrationTest.groovy new file mode 100644 index 00000000..02ef4482 --- /dev/null +++ b/gui/src/integration-test/groovy/com/muwire/gui/MainFrameIntegrationTest.groovy @@ -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!') + } +} diff --git a/gui/src/test/groovy/com/muwire/gui/MainFrameControllerTest.groovy b/gui/src/test/groovy/com/muwire/gui/MainFrameControllerTest.groovy new file mode 100644 index 00000000..ab3a546e --- /dev/null +++ b/gui/src/test/groovy/com/muwire/gui/MainFrameControllerTest.groovy @@ -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!') + } +} \ No newline at end of file