From ec690f8a984df368b6f99cc5c3954cc2f4b50252 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Tue, 9 Mar 2010 10:17:26 -0600 Subject: [PATCH] Split pit-swing into multiple MVC components. Added the ability to open multiple issue repos simultaneously. Seperated the main split pane into its own MVC. Seperated out the new issue dialog into its own MVC Need to write testing code. --- issues/pit-swing/{0017fn4.rst => 0017fs4.rst} | 0 .../jdbernard/pit/swing/PITController.groovy | 6 ++++++ .../pit/swing/ProjectPanelController.groovy | 20 +++++++++++++++--- .../com/jdbernard/pit/swing/PITView.groovy | 21 +++++++------------ 4 files changed, 30 insertions(+), 17 deletions(-) rename issues/pit-swing/{0017fn4.rst => 0017fs4.rst} (100%) diff --git a/issues/pit-swing/0017fn4.rst b/issues/pit-swing/0017fs4.rst similarity index 100% rename from issues/pit-swing/0017fn4.rst rename to issues/pit-swing/0017fs4.rst diff --git a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy index aa603ff..8c1f995 100644 --- a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy +++ b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy @@ -44,6 +44,12 @@ class PITController { model.newIssueDialogMVC = buildMVCGroup('NewIssueDialog') } + void refreshIssues() { + model.projectPanelMVCs.each { title, mvc -> + mvc.controller.refreshIssues() + } + } + def openProject = { evt = null -> def projectDir def newMVC diff --git a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy index 803be7c..df67e7c 100644 --- a/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy +++ b/pit-swing/griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy @@ -16,9 +16,7 @@ class ProjectPanelController { def view void mvcGroupInit(Map args) { - //model.rootProject = args.rootProject - view.projectTree.model = new DefaultTreeModel( - makeNodes(model.rootProject)) + refreshProject() } /** @@ -56,6 +54,22 @@ class ProjectPanelController { view.issuePopupMenu.show(view.issueList, x, y) } + void refreshProject() { + if (model.rootProject) { + view.projectTree.rootVisible = model.rootProject.issues.size() + view.projectTree.model = new DefaultTreeModel( + makeNodes(model.rootProject)) + } else { + projectTree.rootVisible = false + view.projectTree.model = new DefaultTreeModel( + new DefaultMutableTreeNode()) + } + } + + void refreshIssues() { + model.projectListModels.clear() + displayProject(model.selectedProject) + } def makeNodes(Project project) { def rootNode = new DefaultMutableTreeNode(project) diff --git a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/PITView.groovy b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/PITView.groovy index fc27bbd..fefe423 100644 --- a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/PITView.groovy +++ b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/PITView.groovy @@ -87,8 +87,7 @@ frame = application(title:'Personal Issue Tracker', model.filter.categories.add(cat) evt.source.selected = true } - model.projectListModels.clear() - controller.displayProject(model.selectedProject) + controller.refreshIssues() }) } } @@ -105,8 +104,7 @@ frame = application(title:'Personal Issue Tracker', model.filter.status.add(st) evt.source.selected = true } - model.projectListModels.clear() - controller.displayProject(model.selectedProject) + controller.refreshIssues() }) } } @@ -119,36 +117,31 @@ frame = application(title:'Personal Issue Tracker', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.id } - model.projectListModels.clear() - controller.displayProject(selectedProject) + controller.refreshIssues() }) checkBoxMenuItem('By Category', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.category } - model.projectListModels.clear() - controller.displayProject(selectedProject) + controller.refreshIssues() }) checkBoxMenuItem('By Status', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.status } - model.projectListModels.clear() - controller.displayProject(selectedProject) + controller.refreshIssues() }) checkBoxMenuItem('By Priority', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.priority } - model.projectListModels.clear() - controller.displayProject(selectedProject) + controller.refreshIssues() }) checkBoxMenuItem('By Title', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.title } - model.projectListModels.clear() - controller.displayProject(selectedProject) + controller.refreshIssues() }) } }