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 392a885..dd26d66 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 @@ -1,5 +1,6 @@ package com.jdbernard.pit.swing +import com.jdbernard.pit.Category import com.jdbernard.pit.FileProject import javax.swing.JFileChooser import javax.swing.SwingUtilities @@ -15,55 +16,82 @@ class PITController { SwingUtilities.invokeAndWait { model.issueListRenderer = new IssueTableCellRenderer() - def config = new File(System.getProperty('user.home'), '.pit') - config = new File(config, 'pit_swing.groovy') + File pitHome, pitrcFile, pitswingrcFile + Properties config = new Properties() - // read and process configuration - if (config.exists() && config.isFile()) { - // load script - def loader = new GroovyClassLoader(PITController.classLoader) + // look for config directory + pitHome = new File(System.getProperty('user.home'), '.pit') + println "$pitHome is ${pitHome.exists() ? '' : 'not '} present." - // create binding for variables in the script - def configBinding = new Binding() + // look for general config options + pitrcFile = new File(pitHome, 'pitrc') + println "$pitrcFile is ${pitrcFile.exists() ? '' : 'not '} present." - // add default values for all configurable values - configBinding.templates = model.templates - configBinding.issueListRenderer = model.issueListRenderer - configBinding.initialRepositories = [] - configBinding.issueCSS = model.issueCSS - configBinding.PIT_HOME = config.parentFile - - def configScript = loader.parseClass(config) - .newInstance(configBinding) - - configScript.invokeMethod("run", null) - - // act on the results of the configuration script - - // use custom templates, if given - model.templates = configBinding.templates ?: [:] - - // check for customer issur list rendered - if (configBinding.issueListRenderer && - configBinding.issueListRenderer != model.issueListRenderer) - model.issueListRenderer = configBinding.issueListRenderer - - // open any initial repositories configured - if (configBinding.initialRepositories) { - configBinding.initialRepositories.each { repo -> - // try to create a file object if this is not one - if (!(repo instanceof File)) repo = new File(repo) - - loadProject(repo) - } - } - - // open any custom CSS for issue dsiplay - if (configBinding.issueCSS instanceof File) - model.issueCSS = configBinding.issueCSS.text - else - model.issueCSS = configBinding.issueCSS + // load general config (if present) + if (pitrcFile.exists()) { + pitrcFile.withInputStream() { config.load(it) } + println "Loaded pitrc" } + + // look for swing specific config + pitswingrcFile = new File(pitHome, 'pitswingrc') + println "$pitswingrcFile is " (pitswingrcFile.exists() ? + '' : 'not ') + "present." + + // load swing specific config (if present) + if (pitswingrcFile.exists()) { + pitswingrcFile.withInputStream() { config.load(it) } + println "Loaded pitswingrc" + } + + // Process Configurable Options + // ---------------------------- + + config.keySet().each { println it } + + // add custom category templates + Category.values().each { category -> + def expectedKey = "issue." + category.name().toLowerCase() + + ".template" + println "Looking for key: $expectedKey" + config.keySet().each { currentKey -> + if (currentKey == expectedKey) + model.templates[(category)] = + config.getProperty(expectedKey, "") + println "Template for category $category: '" + + model.templates[(category)] + "'" + } + } + + // load custom issueListRenderer + // TODO: not yet supported (maybe no need) + + // load initial repositories + if (config.containsKey('initial-repositories')) { + def initRepos = config.getProperty('initial-repositories', '') + initRepos = initRepos.split(/[;:,]/) + initRepos.each { repoPath -> loadProject(new File(repoPath)) } + println "Init repos: '$initRepos'" + } + + // load custom issue CSS + if (config.containsKey('issue.display.css')) { + def issueCSS = config.getProperty('issue.display.css', "") + + // look for a file relative to the pit home directory + def cssFile + + // use short-circuit logic to test several possible locations + // for a css file + if ((cssFile = new File(pitHome, issueCSS)).exists() || + (cssFile = new File(pitHome.parentFile(), issueCSS)).exists() || + (cssFile = new File(issueCSS).exists())) + issueCSS = cssFile.text + + println "CS for issue display: $issueCSS" + model.issueCSS = issueCSS + } + } // 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 af78a1e..714949c 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 @@ -173,7 +173,7 @@ class ProjectPanelController { view.issueTable.model.issues.remove(issue) issue.delete() - view.issueTable.invlidate() + view.issueTable.invalidate() } def getSelectedIssue() { @@ -215,7 +215,6 @@ class ProjectPanelController { // add in the CSS information to the head if (line =~//) result.append(model.issueCSS) } - println result.toString() return result.toString() } diff --git a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy index a4f5ae5..783e008 100644 --- a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy +++ b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy @@ -309,7 +309,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, issueTextDisplay = editorPane(contentType: "text/html", constraints: "display", editable: false, - preferredSize: [200, 200], + preferredSize: [10, 10], mouseClicked: { evt -> if (evt.clickCount > 1) issueTextPanelLayout.show(issueTextPanel, "editor")