From 63d47d8d9c282c31140952ec8a5b9dfbb1bdda32 Mon Sep 17 00:00:00 2001 From: Jonathan Bernard Date: Fri, 27 Aug 2010 03:07:54 -0500 Subject: [PATCH] Serious bug-fixing, yo. --- .hgignore | 1 + pit-swing/.classpath | 62 - pit-swing/.project | 18 - pit-swing/CHANGE ME | Bin 1240 -> 0 bytes pit-swing/application.properties | 9 +- pit-swing/build.xml | 97 -- pit-swing/griffon-app/conf/Application.groovy | 47 +- pit-swing/griffon-app/conf/BuildConfig.groovy | 135 ++ pit-swing/griffon-app/conf/Config.groovy | 75 - .../griffon-app/conf/webstart/applet.html | 7 +- .../griffon-app/conf/webstart/applet.jnlp | 8 +- .../conf/webstart/application.jnlp | 4 + .../jdbernard/pit/swing/PITController.groovy | 66 +- .../pit/swing/ProjectPanelController.groovy | 38 +- .../griffon-app/lifecycle/Initialize.groovy | 21 +- pit-swing/griffon-app/lifecycle/Ready.groovy | 19 +- .../griffon-app/lifecycle/Shutdown.groovy | 21 +- .../griffon-app/lifecycle/Startup.groovy | 21 +- pit-swing/griffon-app/lifecycle/Stop.groovy | 13 + .../pit/swing/NewIssueDialogModel.groovy | 1 - .../com/jdbernard/pit/swing/PITModel.groovy | 20 +- .../pit/swing/ProjectPanelModel.groovy | 2 +- .../pit/swing/NewIssueDialogView.groovy | 1 + .../com/jdbernard/pit/swing/PITView.groovy | 26 +- .../pit/swing/ProjectPanelView.groovy | 108 +- pit-swing/griffonw | 141 ++ pit-swing/griffonw.bat | 126 ++ pit-swing/pit-swing.iml | 43 - pit-swing/pit-swing.ipr | 59 - pit-swing/pit-swing.iws | 65 - pit-swing/pit-swing.launch | 20 - pit-swing/pit-swing.tmproj | 73 - pit-swing/session.vim | 1398 ----------------- pit-swing/stacktrace.log | 0 .../pit/swing/NewIssueDialogTestTests.groovy | 33 - .../integration/NewIssueDialogTests.groovy | 10 - pit-swing/test/integration/PITTests.groovy | 10 - .../test/integration/PitSwingTests.groovy | 10 - .../test/integration/ProjectPanelTests.groovy | 10 - .../pit/swing/NewIssueDialogTests.groovy | 20 + .../test/integration/pit/swing/PITests.groovy | 20 + .../pit/swing/PitSwingTests.groovy | 20 + .../pit/swing/ProjectPanelTests.groovy | 20 + pit-swing/wrapper/griffon-wrapper.jar | Bin 0 -> 13427 bytes pit-swing/wrapper/griffon-wrapper.properties | 8 + version.properties | 2 +- 46 files changed, 703 insertions(+), 2205 deletions(-) delete mode 100644 pit-swing/.classpath delete mode 100644 pit-swing/.project delete mode 100644 pit-swing/CHANGE ME delete mode 100644 pit-swing/build.xml create mode 100644 pit-swing/griffon-app/conf/BuildConfig.groovy create mode 100644 pit-swing/griffonw create mode 100644 pit-swing/griffonw.bat delete mode 100644 pit-swing/pit-swing.iml delete mode 100644 pit-swing/pit-swing.ipr delete mode 100644 pit-swing/pit-swing.iws delete mode 100644 pit-swing/pit-swing.launch delete mode 100644 pit-swing/pit-swing.tmproj delete mode 100644 pit-swing/session.vim delete mode 100644 pit-swing/stacktrace.log delete mode 100644 pit-swing/test/fest/com/jdbernard/pit/swing/NewIssueDialogTestTests.groovy delete mode 100644 pit-swing/test/integration/NewIssueDialogTests.groovy delete mode 100644 pit-swing/test/integration/PITTests.groovy delete mode 100644 pit-swing/test/integration/PitSwingTests.groovy delete mode 100644 pit-swing/test/integration/ProjectPanelTests.groovy create mode 100644 pit-swing/test/integration/pit/swing/NewIssueDialogTests.groovy create mode 100644 pit-swing/test/integration/pit/swing/PITests.groovy create mode 100644 pit-swing/test/integration/pit/swing/PitSwingTests.groovy create mode 100644 pit-swing/test/integration/pit/swing/ProjectPanelTests.groovy create mode 100644 pit-swing/wrapper/griffon-wrapper.jar create mode 100644 pit-swing/wrapper/griffon-wrapper.properties diff --git a/.hgignore b/.hgignore index d24d917..93c8481 100644 --- a/.hgignore +++ b/.hgignore @@ -3,3 +3,4 @@ build/ dist/ staging/ target/test-reports +pit-swing-old diff --git a/pit-swing/.classpath b/pit-swing/.classpath deleted file mode 100644 index d1b51d8..0000000 --- a/pit-swing/.classpath +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pit-swing/.project b/pit-swing/.project deleted file mode 100644 index e77c465..0000000 --- a/pit-swing/.project +++ /dev/null @@ -1,18 +0,0 @@ - - - pit-swing - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.groovy.core.groovyNature - org.eclipse.jdt.core.javanature - - diff --git a/pit-swing/CHANGE ME b/pit-swing/CHANGE ME deleted file mode 100644 index d3435ca7f029ee48e9f6c6395d48c2b31ce6b3b3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1240 zcmezO_TO6u1_mY|W&~r-m2`#U#kc z$jZRd#8|Exw0Ze@ffK)veEq>A61(dEZB`yd=WI3h1MJ&+=4e%?E&uh+NS6yYVvse8-cyIr#f6K~zHNG-ESt^y4X!ice z`<1)wCw(Z*`YFGC?UVTyhkH6b+L$kv?m3nId166C&8)P2$J+j^yPj)$!TbkXB*!=2 zsMO6?b@k3XaecX(#iv(W|E+wjn4;mlongY3V>z$Z%su3OCG+Io=X*;kl#cBkC2;|5!H8wK*tq*RLEfvxXy6-hd@6D6v-vqY@*}QjQI4o!1uq{w6(>2yXDe!ls zZEwV{{YSs_fFGE7eh=oeMy zKC@}k&Zb4LTev?&$b1Dk?fb(8t=DGT-aEZ#b&T1L@ST-Y*6;ph^{VM-xDU52dsBK~ zWO(1ME0O-s3fTo38@70g6)L~*(GU~fexB2)=ftvyHeyxXAvL`k4;HVJ)84$SbYkA( zdhTC}rb!=vCsi@3Sf5$)ao>u-37spN?>~%sI-hM)cUoLSb*O3zqmT8!^PXDFjV%mJ zjSX&oGox;noGxKx`o-gTx<%sGT#oIt0*xpCH#_B1-m*O9o9y~DwQFh~2Y)Xtl&X0Z zsBNxzweZ{7=-4|cn;TB`zp8%j|Elrx9af&g747!dm>xghRzVU!()cwbzS?B5}FWq}vu6NNnCTlN?c_^usS)ai`he^ajj$JWtp2n39 z(O;s^nO-<;2s-nSNyM(}z7LDatU9ZYX^uh91io;sd0lI=I774UG{Y- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/pit-swing/griffon-app/conf/Application.groovy b/pit-swing/griffon-app/conf/Application.groovy index c5d0675..6bd908b 100644 --- a/pit-swing/griffon-app/conf/Application.groovy +++ b/pit-swing/griffon-app/conf/Application.groovy @@ -1,22 +1,33 @@ application { - title="PitSwing" - startupGroups=["PIT"] - autoShutdown=true + title = 'PitSwing' + startupGroups = ['PIT'] + + // Should Griffon exit when no Griffon created frames are showing? + autoShutdown = true + + // If you want some non-standard application class, apply it here + //frameClass = 'javax.swing.JFrame' } mvcGroups { - NewIssueDialog { - model="com.jdbernard.pit.swing.NewIssueDialogModel" - controller="com.jdbernard.pit.swing.NewIssueDialogController" - view="com.jdbernard.pit.swing.NewIssueDialogView" - } - ProjectPanel { - model="com.jdbernard.pit.swing.ProjectPanelModel" - view="com.jdbernard.pit.swing.ProjectPanelView" - controller="com.jdbernard.pit.swing.ProjectPanelController" - } - PIT { - model="com.jdbernard.pit.swing.PITModel" - view="com.jdbernard.pit.swing.PITView" - controller="com.jdbernard.pit.swing.PITController" - } + // MVC Group for "ProjectPanel" + 'ProjectPanel' { + model = 'com.jdbernard.pit.swing.ProjectPanelModel' + view = 'com.jdbernard.pit.swing.ProjectPanelView' + controller = 'com.jdbernard.pit.swing.ProjectPanelController' + } + + // MVC Group for "NewIssueDialog" + 'NewIssueDialog' { + model = 'com.jdbernard.pit.swing.NewIssueDialogModel' + view = 'com.jdbernard.pit.swing.NewIssueDialogView' + controller = 'com.jdbernard.pit.swing.NewIssueDialogController' + } + + // MVC Group for "PIT" + 'PIT' { + model = 'com.jdbernard.pit.swing.PITModel' + view = 'com.jdbernard.pit.swing.PITView' + controller = 'com.jdbernard.pit.swing.PITController' + } + } diff --git a/pit-swing/griffon-app/conf/BuildConfig.groovy b/pit-swing/griffon-app/conf/BuildConfig.groovy new file mode 100644 index 0000000..6c5673b --- /dev/null +++ b/pit-swing/griffon-app/conf/BuildConfig.groovy @@ -0,0 +1,135 @@ +// key signing information +environments { + development { + signingkey { + params { + sigfile = 'GRIFFON' + keystore = "${basedir}/griffon-app/conf/keys/devKeystore" + alias = 'development' + storepass = 'BadStorePassword' + keypass = 'BadKeyPassword' + lazy = true // only sign when unsigned + } + } + + } + test { + griffon { + jars { + sign = false + pack = false + } + } + } + production { + signingkey { + params { + sigfile = 'GRIFFON' + keystore = 'CHANGE ME' + alias = 'CHANGE ME' + // NOTE: for production keys it is more secure to rely on key prompting + // no value means we will prompt //storepass = 'BadStorePassword' + // no value means we will prompt //keypass = 'BadKeyPassword' + lazy = false // sign, regardless of existing signatures + } + } + + griffon { + jars { + sign = true + pack = true + destDir = "${basedir}/staging" + } + webstart { + codebase = 'CHANGE ME' + } + } + } +} + +griffon { + memory { + //max = '64m' + //min = '2m' + //maxPermSize = '64m' + } + jars { + sign = false + pack = false + destDir = "${basedir}/staging" + jarName = "${appName}.jar" + } + extensions { + jarUrls = [] + jnlpUrls = [] + /* + props { + someProperty = 'someValue' + } + resources { + linux { // windows, macosx, solaris + jars = [] + nativelibs = [] + props { + someProperty = 'someValue' + } + } + } + */ + } + webstart { + codebase = "${new File(griffon.jars.destDir).toURI().toASCIIString()}" + jnlp = 'application.jnlp' + } + applet { + jnlp = 'applet.jnlp' + html = 'applet.html' + } +} + +// required for custom environments +signingkey { + params { + def env = griffon.util.Environment.current.name + sigfile = 'GRIFFON-' + env + keystore = "${basedir}/griffon-app/conf/keys/${env}Keystore" + alias = env + // storepass = 'BadStorePassword' + // keypass = 'BadKeyPassword' + lazy = true // only sign when unsigned + } +} + +griffon.project.dependency.resolution = { + // inherit Griffon' default dependencies + inherits("global") { + } + log "warn" // log level of Ivy resolver, either 'error', 'warn', 'info', 'debug' or 'verbose' + repositories { + griffonPlugins() + griffonHome() + griffonCentral() + + // uncomment the below to enable remote dependency resolution + // from public Maven repositories + //mavenLocal() + //mavenCentral() + //mavenRepo "http://snapshots.repository.codehaus.org" + //mavenRepo "http://repository.codehaus.org" + //mavenRepo "http://download.java.net/maven/2/" + //mavenRepo "http://repository.jboss.com/maven2/" + } + dependencies { + // specify dependencies here under either 'build', 'compile', 'runtime', 'test' or 'provided' scopes eg. + + // runtime 'mysql:mysql-connector-java:5.1.5' + } +} + +griffon { + doc { + logo = 'The Griffon Framework' + sponsorLogo = "
" + footer = "

Made with Griffon (0.9)" + } +} diff --git a/pit-swing/griffon-app/conf/Config.groovy b/pit-swing/griffon-app/conf/Config.groovy index 40d8bf7..f4318bf 100644 --- a/pit-swing/griffon-app/conf/Config.groovy +++ b/pit-swing/griffon-app/conf/Config.groovy @@ -17,78 +17,3 @@ log4j { } additivity.StackTrace=false } - -// key signing information -environments { - development { - signingkey { - params { - sigfile = 'GRIFFON' - keystore = "${basedir}/griffon-app/conf/keys/devKeystore" - alias = 'development' - storepass = 'BadStorePassword' - keypass = 'BadKeyPassword' - lazy = true // only sign when unsigned - } - } - - } - test { - griffon { - jars { - sign = false - pack = false - } - } - } - production { - signingkey { - params { - sigfile = 'GRIFFON' - keystore = 'CHANGE ME' - alias = 'CHANGE ME' - // NOTE: for production keys it is more secure to rely on key prompting - // no value means we will prompt //storepass = 'BadStorePassword' - // no value means we will prompt //keypass = 'BadKeyPassword' - lazy = false // sign, regardless of existing signatures - } - } - - griffon { - jars { - sign = true - pack = true - destDir = "${basedir}/staging" - } - webstart { - codebase = 'CHANGE ME' - } - } - } -} - -griffon { - memory { - //max = '64m' - //min = '2m' - //maxPermSize = '64m' - } - jars { - sign = false - pack = false - destDir = "${basedir}/staging" - jarName = "${appName}.jar" - } - extensions { - jarUrls = [] - jnlpUrls = [] - } - webstart { - codebase = "${new File(griffon.jars.destDir).toURI().toASCIIString()}" - jnlp = 'application.jnlp' - } - applet { - jnlp = 'applet.jnlp' - html = 'applet.html' - } -} diff --git a/pit-swing/griffon-app/conf/webstart/applet.html b/pit-swing/griffon-app/conf/webstart/applet.html index f616be6..1d3b0ec 100644 --- a/pit-swing/griffon-app/conf/webstart/applet.html +++ b/pit-swing/griffon-app/conf/webstart/applet.html @@ -12,7 +12,7 @@ codebase:'@griffonAppCodebase@', code:'@griffonAppletClass@', archive:'@appletJars@', - width:'240', height:'320'} ; + width:'@applet.width@', height:'@applet.height@'} ; var parameters = {fontSize:16, java_arguments: "-Djnlp.packEnabled=true", jnlp_href:'@griffonAppCodebase@/applet.jnlp', @@ -20,7 +20,7 @@ image:'griffon.png', boxmessage:'Loading @griffonAppName@', boxbgcolor:'#FFFFFF', boxfgcolor:'#000000', - codebase_lookup: 'false'} ; + codebase_lookup: 'false'@applet.script.params@} ; var version = '1.5.0' ; deployJava.runApplet(attributes, parameters, version); @@ -28,7 +28,7 @@ + WIDTH='@applet.width@' HEIGHT='@applet.height@'> @@ -37,6 +37,7 @@ +@applet.tag.params@ --> diff --git a/pit-swing/griffon-app/conf/webstart/applet.jnlp b/pit-swing/griffon-app/conf/webstart/applet.jnlp index 80d8fc6..d648c61 100644 --- a/pit-swing/griffon-app/conf/webstart/applet.jnlp +++ b/pit-swing/griffon-app/conf/webstart/applet.jnlp @@ -35,21 +35,25 @@ + @jnlpJars@ @jnlpExtensions@ +@jnlpProperties@ +@jnlpResources@ + width="@applet.width@" + height="@applet.height@"> +@applet.tag.params@ diff --git a/pit-swing/griffon-app/conf/webstart/application.jnlp b/pit-swing/griffon-app/conf/webstart/application.jnlp index ae7ede7..8635143 100644 --- a/pit-swing/griffon-app/conf/webstart/application.jnlp +++ b/pit-swing/griffon-app/conf/webstart/application.jnlp @@ -35,16 +35,20 @@ + @jnlpJars@ @jnlpExtensions@ +@jnlpProperties@ +@jnlpResources@ +@applet.tag.params@ 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 114d032..0eeb499 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 @@ -13,6 +13,8 @@ class PITController { void mvcGroupInit(Map args) { + model.newIssueDialogMVC = buildMVCGroup('NewIssueDialog') + SwingUtilities.invokeAndWait { model.issueListRenderer = new IssueTableCellRenderer() @@ -27,27 +29,27 @@ class PITController { // look for general config options pitrcFile = new File(pitHome, 'pitrc') - if(logDbg) logger.debug("$pitrcFile is " + + if (logDbg) logger.debug("$pitrcFile is " + (pitrcFile.exists() ? '' : 'not ') + "present.") // load general config (if present) - if (pitrcFile.exists()) { - pitrcFile.withInputStream() { config.load(it) } + if (pitrcFile.exists() && pitrcFile.canRead()) { + pitrcFile.withInputStream { config.load(it) } if (logDbg) logger.debug("Loaded pitrc") } // look for swing specific config pitswingrcFile = new File(pitHome, 'pitswingrc') - if (logDbg) logger.debug("$pitswingrcFile is " + - (pitswingrcFile.exists() ? '' : 'not ') + "present.") + if (logDbg) logger.debug("$pitswingrcFile is " + + (pitswingrcFile.exists() ? '' : 'not ') + "present.") // load swing specific config (if present) - if (pitswingrcFile.exists()) { - pitswingrcFile.withInputStream() { config.load(it) } - if(logDbg) logger.debug("Loaded pitswingrc") + if (pitswingrcFile.exists() && pitswingrcFile.canRead()) { + pitswingrcFile.withInputStream { config.load(it) } + if (logDbg) logger.debug("Loaded pitswingrc") } - // Process Configurable Options + // Process configurable options // ---------------------------- if (logDbg) { @@ -59,15 +61,16 @@ class PITController { Category.values().each { category -> def expectedKey = "issue." + category.name().toLowerCase() + ".template" - if(logDbg) logger.debug("Looking for key: $expectedKey") + if (logDbg) logger.debug("Looking for key: $expectedKey") config.keySet().each { currentKey -> - if (currentKey == expectedKey) - model.templates[(category)] = - config.getProperty(expectedKey, "") + if (currentKey == expectedKey) + model.templates[(category)] = + config.getProperty(expectedKey, "") if (logDbg) logger.debug("Template for category $category: '" + model.templates[(category)] + "'") } + } // load custom issueListRenderer @@ -76,12 +79,12 @@ class PITController { // load initial repositories if (config.containsKey('initial-repositories')) { def initRepos = config.getProperty('initial-repositories', '') - initRepos = initRepos.split(/[;:,]/) + initRepos = initRepos.split(/[:;,]/) initRepos.each { repoPath -> loadProject(new File(repoPath)) } - if(logDbg) logger.debug("Init repos: '$initRepos'") + if (logDbg) logger.debug("Init repos: '$initRepos'") } - // load custom issue CSS + // load custom issue css if (config.containsKey('issue.display.css')) { def issueCSS = config.getProperty('issue.display.css', "") @@ -89,20 +92,16 @@ class PITController { 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())) + (cssFile = new File(issueCSS)).exists()) issueCSS = cssFile.text - - if (logDbg) logger.debug("CS for issue display: $issueCSS") + + if (logDbg) logger.debug("CSS for issue display: $issueCSS") model.issueCSS = issueCSS } } - - // - model.newIssueDialogMVC = buildMVCGroup('NewIssueDialog') } void refreshIssues() { @@ -111,12 +110,11 @@ class PITController { } } - def openProject = { evt = null -> + def openProject = { evt = null -> if (view.openDialog.showOpenDialog(view.frame) != - JFileChooser.APPROVE_OPTION) return + JFileChooser.APPROVE_OPTIONS) return loadProject(view.openDialog.selectedFile) - } def loadProject = { File projectDir -> @@ -124,7 +122,7 @@ class PITController { // if this is not a valid directory, do nothing // TODO: log to the user that this is not a valid directory - if (!projectDir.exists() || !projectDir.isDirectory()) return; + if (!projectDir.exists() || !projectDir.isDirectory()) return // create new ProjectPanel MVC newMVC = buildMVCGroup('ProjectPanel', @@ -134,28 +132,30 @@ class PITController { issueCSS: model.issueCSS, rootProject: new FileProject(projectDir)) newMVC.model.id = projectDir.name - + // if we already have a tab with this id if (model.projectPanelMVCs[(newMVC.model.id)]) { + // try using the canonical path newMVC.model.id = projectDir.canonicalPath // still not unique? if (model.projectPanelMVCs[(newMVC.model.id)]) { - + // first time this has happened? - if (!model.projectIdMap[(newMVC.model.id)]) + if (!model.projectIdMap[(newMVC.model.id)]) model.projectIdMap[(newMVC.model.id)] = 0 + // no? increment - else model.projectIdMap[(newMVC.model.id)] = + else model.projectIdMap[(newMVC.model.id)] = model.projectIdMap[(newMVC.model.id)] + 1 // use our new, unique id - newMVC.model.id += "-" + model.projectIdMap[(newMVC.model.id)] + newMVC.model.id += "-" + model.projectIdMap[(newMVC.model.id)] } } - model.projectPanelMVCs[newMVC.model.id] = newMVC + model.projectPanelMVCs[(newMVC.model.id)] = newMVC view.mainTabbedPane.addTab(newMVC.model.id, newMVC.view.panel) } 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 3403380..9ede085 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 @@ -34,17 +34,18 @@ class ProjectPanelController { refreshProject() } - /** + /** * displayProject - * @param project Project to display. - * + * @param project Project to display */ - void displayProject(Project project) { - view.issueTextArea.text = "" - view.issueTextDisplay.text = "" - view.issueTextPanelLayout.show(view.issueTextPanel, "display") + void displayProject(Project project) { if (!project) return + view.issueTextArea.text = "" + view.issueTextDisplay.text = "" + view.issueTextPanelLayout.show(view.issueTextPanel, 'display') + + // build a new IssueTableModel if none cached if (!model.projectTableModels[(project.name)]) { def itm = new IssueTableModel(project, model.filter ?: model.mainMVC.model.filter) @@ -67,7 +68,7 @@ class ProjectPanelController { if (!issue) return // hack because binding view.issueTextArea.font to - // mainMVC.mode.issueDetailFont causes problems + // mainMVC.model.issueDetailFont causes problems if (view.issueTextArea.font != model.mainMVC.model.issueDetailFont) view.issueTextArea.font = model.mainMVC.model.issueDetailFont @@ -75,10 +76,10 @@ class ProjectPanelController { view.issueTextArea.caretPosition = 0 view.issueTextDisplay.text = rst2html(issue.text) view.issueTextDisplay.caretPosition = 0 - view.issueTextPanelLayout.show(view.issueTextPanel, "display") + view.issueTextPanelLayout.show(view.issueTextPanel, 'display') } - void showProjectPopup(Project project, def x, def y) { + void showProejctPopup(Project project, def x, def y) { model.popupProject = project view.projectPopupMenu.show(view.projectTree, x, y) } @@ -120,7 +121,7 @@ class ProjectPanelController { def project - if (evt.source == view.newProjectButton) + if (evt.source == view.newProjectButton) project = model.selectedProject ?: model.rootProject else project = model.popupProject ?: model.rootProject def newProject = project.createNewProject(name) @@ -134,7 +135,7 @@ class ProjectPanelController { if (evt.source == view.deleteProjectButton) project = model.selectedProject ?: model.rootProject - else project = model.popupProject ?: model.rootModel + else project = model.popupProject ?: model.rootProject project.delete() @@ -185,7 +186,7 @@ class ProjectPanelController { } String rst2html(String rst) { - Document doc // memory model of document + Document doc StringWriter outString StringBuilder result = new StringBuilder() @@ -201,19 +202,18 @@ class ProjectPanelController { // java's embeded html is primitive, we need to massage the results outString.toString().eachLine { line -> - - // remove the XML version and encoding, title element, - // meta elements + + // remove the XML version and encoding, title element, meta elems if (line =~ /<\?.*\?>/ || line =~ /.*)/) if (m) line = m[0][1] + m[0][4] result.append(line) - + // add in the CSS information to the head - if (line =~//) result.append('') } diff --git a/pit-swing/griffon-app/lifecycle/Initialize.groovy b/pit-swing/griffon-app/lifecycle/Initialize.groovy index e0d78bd..8245163 100644 --- a/pit-swing/griffon-app/lifecycle/Initialize.groovy +++ b/pit-swing/griffon-app/lifecycle/Initialize.groovy @@ -1,25 +1,20 @@ /* - * This script is executed inside the EDT, so be sure to - * call long running code in another thread. + * This script is executed inside the UI thread, so be sure to call + * long running code in another thread. * * You have the following options - * - SwingBuilder.doOutside { // your code } + * - execOutside { // your code } + * - execFuture { // your code } * - Thread.start { // your code } - * - SwingXBuilder.withWorker( start: true ) { - * onInit { // initialization (optional, runs in current thread) } - * work { // your code } - * onDone { // finish (runs inside EDT) } - * } * - * You have the following options to run code again inside EDT - * - SwingBuilder.doLater { // your code } - * - SwingBuilder.edt { // your code } - * - SwingUtilities.invokeLater { // your code } + * You have the following options to run code again inside the UI thread + * - execAsync { // your code } + * - execSync { // your code } */ import groovy.swing.SwingBuilder import griffon.util.GriffonPlatformHelper -import griffon.util.GriffonApplicationHelper +import static griffon.util.GriffonApplicationUtils.* GriffonPlatformHelper.tweakForNativePlatform(app) SwingBuilder.lookAndFeel('org.pushingpixels.substance.api.skin.SubstanceCremeCoffeeLookAndFeel', 'nimbus', ['metal', [boldFonts: false]]) diff --git a/pit-swing/griffon-app/lifecycle/Ready.groovy b/pit-swing/griffon-app/lifecycle/Ready.groovy index c326398..9b165e4 100644 --- a/pit-swing/griffon-app/lifecycle/Ready.groovy +++ b/pit-swing/griffon-app/lifecycle/Ready.groovy @@ -1,18 +1,13 @@ /* - * This script is executed inside the EDT, so be sure to - * call long running code in another thread. + * This script is executed inside the UI thread, so be sure to call + * long running code in another thread. * * You have the following options - * - SwingBuilder.doOutside { // your code } + * - execOutside { // your code } + * - execFuture { // your code } * - Thread.start { // your code } - * - SwingXBuilder.withWorker( start: true ) { - * onInit { // initialization (optional, runs in current thread) } - * work { // your code } - * onDone { // finish (runs inside EDT) } - * } * - * You have the following options to run code again inside EDT - * - SwingBuilder.doLater { // your code } - * - SwingBuilder.edt { // your code } - * - SwingUtilities.invokeLater { // your code } + * You have the following options to run code again inside the UI thread + * - execAsync { // your code } + * - execSync { // your code } */ diff --git a/pit-swing/griffon-app/lifecycle/Shutdown.groovy b/pit-swing/griffon-app/lifecycle/Shutdown.groovy index dd993de..9b165e4 100644 --- a/pit-swing/griffon-app/lifecycle/Shutdown.groovy +++ b/pit-swing/griffon-app/lifecycle/Shutdown.groovy @@ -1,18 +1,13 @@ /* - * This script is executed inside the EDT, so be sure to - * call long running code in another thread. + * This script is executed inside the UI thread, so be sure to call + * long running code in another thread. * * You have the following options - * - SwingBuilder.doOutside { // your code } + * - execOutside { // your code } + * - execFuture { // your code } * - Thread.start { // your code } - * - SwingXBuilder.withWorker( start: true ) { - * onInit { // initialization (optional, runs in current thread) } - * work { // your code } - * onDone { // finish (runs inside EDT) } - * } * - * You have the following options to run code again inside EDT - * - SwingBuilder.doLater { // your code } - * - SwingBuilder.edt { // your code } - * - SwingUtilities.invokeLater { // your code } - */ \ No newline at end of file + * You have the following options to run code again inside the UI thread + * - execAsync { // your code } + * - execSync { // your code } + */ diff --git a/pit-swing/griffon-app/lifecycle/Startup.groovy b/pit-swing/griffon-app/lifecycle/Startup.groovy index dd993de..9b165e4 100644 --- a/pit-swing/griffon-app/lifecycle/Startup.groovy +++ b/pit-swing/griffon-app/lifecycle/Startup.groovy @@ -1,18 +1,13 @@ /* - * This script is executed inside the EDT, so be sure to - * call long running code in another thread. + * This script is executed inside the UI thread, so be sure to call + * long running code in another thread. * * You have the following options - * - SwingBuilder.doOutside { // your code } + * - execOutside { // your code } + * - execFuture { // your code } * - Thread.start { // your code } - * - SwingXBuilder.withWorker( start: true ) { - * onInit { // initialization (optional, runs in current thread) } - * work { // your code } - * onDone { // finish (runs inside EDT) } - * } * - * You have the following options to run code again inside EDT - * - SwingBuilder.doLater { // your code } - * - SwingBuilder.edt { // your code } - * - SwingUtilities.invokeLater { // your code } - */ \ No newline at end of file + * You have the following options to run code again inside the UI thread + * - execAsync { // your code } + * - execSync { // your code } + */ diff --git a/pit-swing/griffon-app/lifecycle/Stop.groovy b/pit-swing/griffon-app/lifecycle/Stop.groovy index e69de29..9b165e4 100644 --- a/pit-swing/griffon-app/lifecycle/Stop.groovy +++ b/pit-swing/griffon-app/lifecycle/Stop.groovy @@ -0,0 +1,13 @@ +/* + * This script is executed inside the UI thread, so be sure to call + * long running code in another thread. + * + * You have the following options + * - execOutside { // your code } + * - execFuture { // your code } + * - Thread.start { // your code } + * + * You have the following options to run code again inside the UI thread + * - execAsync { // your code } + * - execSync { // your code } + */ diff --git a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy index 0c7b9bb..5c3eaaf 100644 --- a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy +++ b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy @@ -5,7 +5,6 @@ import com.jdbernard.pit.Status import groovy.beans.Bindable class NewIssueDialogModel { - @Bindable boolean accept String text Category category diff --git a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy index 241d521..6bd877a 100644 --- a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy +++ b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy @@ -7,26 +7,28 @@ import com.jdbernard.pit.Project import com.jdbernard.pit.Status import groovy.beans.Bindable import java.awt.Font +import javax.swing.ImageIcon class PITModel { - // filter for projects and issues + + // filter for projects and classes Filter filter = new Filter(categories: [], status: [Status.NEW, Status.VALIDATION_REQUIRED]) def issueListRenderer // map of category -> issue template - def templates = [:] + Map templates = [:] - def issueCSS = getClass().getResource("/default-issue.css").openStream().text - - def categoryIcons = [:] - def statusIcons = [:] + String issueCSS = getClass().getResourceAsStream("/default-issue.css").text + + Map categoryIcons = [:] + Map statusIcons = [:] def newIssueDialogMVC - def projectPanelMVCs = [:] + Map projectPanelMVCs = [:] - def projectIdMap = [:] + Map projectIdMap = [:] - @Bindable issueDetailFont = new Font(Font.MONOSPACED, Font.PLAIN, 10) + @Bindable Font issueDetailFont = new Font(Font.MONOSPACED, Font.PLAIN, 10) } diff --git a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy index 76af82d..048f90e 100644 --- a/pit-swing/griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy +++ b/pit-swing/griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy @@ -20,7 +20,7 @@ class ProjectPanelModel { String issueCSS = "" - // cache the ListModels + // cache the models def projectTableModels = [:] def issueCellRenderer diff --git a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy index 626cea7..30ccd5c 100644 --- a/pit-swing/griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy +++ b/pit-swing/griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy @@ -61,4 +61,5 @@ dialog = dialog(title: 'New Task...', modal: true, pack: true, }, constraints: gbc(gridx: 1, gridy: 5, insets: [5, 5, 5, 5], anchor: GBC.WEST)) + } 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 ab60633..b8114eb 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 @@ -8,6 +8,7 @@ import com.jdbernard.pit.Project import com.jdbernard.pit.FileProject import groovy.beans.Bindable import java.awt.BorderLayout as BL +import java.awt.Color import java.awt.GridBagConstraints as GBC import javax.swing.DefaultComboBoxModel import javax.swing.DefaultListModel @@ -16,7 +17,6 @@ import javax.swing.JFileChooser import javax.swing.JOptionPane import net.miginfocom.swing.MigLayout -import java.awt.Color actions { action( @@ -53,20 +53,17 @@ Status.values().each { model.statusIcons[(it)] = imageIcon("/${it.name().toLowerCase()}.png") } - -openDialog = fileChooser(fileSelectionMode: JFileChooser.DIRECTORIES_ONLY) - -frame = application(title:'Personal Issue Tracker', +frame = application(title: 'Personal Issue Tracker', minimumSize: [400, 200], preferredSize: [800, 500], - pack:true, + pack: true, locationRelativeTo: null, iconImage: imageIcon('/icon64x64.png').image, iconImages: [imageIcon('/icon64x64.png').image, imageIcon('/icon32x32.png').image, imageIcon('/icon16x16.png').image] ) { - + // main menu menuBar() { menu("File") { @@ -76,12 +73,12 @@ frame = application(title:'Personal Issue Tracker', menuItem(shutdown) } - menu('View') { + menu("View") { menu('Category') { Category.values().each { cat -> checkBoxMenuItem(cat.toString(), selected: model.filter.categories.contains(cat), - actionPerformed: { evt -> + actionPerformed: { if (model.filter.categories.contains(cat)) { model.filter.categories.remove(cat) evt.source.selected = false @@ -120,17 +117,17 @@ frame = application(title:'Personal Issue Tracker', JOptionPane.QUESTION_MESSAGE) if (newSize == null || !newSize.isFloat()) JOptionPane.showMessageDialog(frame, - "$newSize is not a valid size.", - 'Change Issue Detail Text Size...', + '$newSize is not a valid size.', + 'Change Issue Detail Size...', JOptionPane.ERROR_MESSAGE) else model.issueDetailFont = model.issueDetailFont .deriveFont(newSize.toFloat()) - }) + }) } - menu('Sort') { + menu("Sort") { sortMenuButtonGroup = buttonGroup() - checkBoxMenuItem('By ID', + checkBoxMenuItem('By ID', buttonGroup: sortMenuButtonGroup, actionPerformed: { model.filter.issueSorter = { it.id } @@ -160,6 +157,7 @@ frame = application(title:'Personal Issue Tracker', model.filter.issueSorter = { it.title } controller.refreshIssues() }) + } } 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 783e008..e2e151e 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 @@ -75,13 +75,13 @@ projectPopupMenu = popupMenu() { menuItem(deleteProjectPop) } -// popup menu for isses +// popup menu for issues issuePopupMenu = popupMenu() { menuItem(newIssue) menuItem(deleteIssuePop) separator() - menu('Change Category', enabled: bind { model.popupIssue != null }) { + menu('Change Category', enabled: bind { model.popupIssue != null }) { Category.values().each { category -> menuItem(category.toString(), icon: model.mainMVC.model.categoryIcons[(category)], @@ -91,15 +91,15 @@ issuePopupMenu = popupMenu() { model.popupIssue.category = category controller.refreshIssues() } catch (IOException ioe) { - JOptionPane.showMessageDialog(mainMVC.view.frame, - ioe.getLocalizedMessage(), 'Change Category', + JOptionPane.showMessage(mainMVC.view.frame, + ioe.getLocalizedMessage(), "Change Category", JOptionPane.ERROR_MESSAGE) } }) } } - menu('Change Status', enabled: bind { model.popupIssue != null }) { + menu('Change Status', enabled: bind { model.popupIssue != null}) { Status.values().each { status -> menuItem(status.toString(), icon: model.mainMVC.model.statusIcons[(status)], @@ -108,8 +108,8 @@ issuePopupMenu = popupMenu() { try { model.popupIssue.status = status controller.refreshIssues() - } catch (IOException ioe) { - JOptionPane.showMessageDialog(mainMVC.view.frame, + } catch (IOException ioe) { + JOptionPane.showMessage(model.mainMVC.view.frame, ioe.getLocalizedMessage(), 'Change Status', JOptionPane.ERROR_MESSAGE) } @@ -123,14 +123,14 @@ issuePopupMenu = popupMenu() { def newPriority = JOptionPane.showInputDialog(mainMVC.view.frame, 'New priority (0-9)', 'Change Priority...', JOptionPane.QUESTION_MESSAGE) - try { model.popupIssue.priority = newPriority.toInteger() } + try { model.popupIsse.priority = newPriority.toInteger() } catch (NumberFormatException nfe) { JOptionPane.showMessageDialog(mainMVC.view.frame, 'The priority value must be an integer in [0-9].', 'Change Priority...', JOptionPane.ERROR_MESSAGE) return } catch (IOException ioe) { - JOptionPane.showMessageDialog(mainMVC.view.fraw, + JOptionPane.showMessageDialog(model.mainMVC.view.frame, ioe.getLocalizedMessage(), 'Change Priority...', JOptionPane.ERROR_MESSAGE) } @@ -140,28 +140,28 @@ issuePopupMenu = popupMenu() { // main split view panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, - // dividerLocation: bind(source: model.mainModel, property: dividerLocation), + dividerLocation: 200, oneTouchExpandable: true, - constraints: gbc(fill: GBC.BOTH, insets: [10,10,10,10], + constraints: gbc(fill: GBC.BOTH, insets: [10, 10, 10, 10], weightx: 2, weighty: 2)) { - // left side (projects tree and buttons) - panel(constraints: "left") { + // left side (project tree and buttons + panel(constraints: 'left') { gridBagLayout() // tree view of projects - scrollPane(constraints: gbc(fill: GBC.BOTH, gridx: 0, gridy:0, + scrollPane(constraints: gbc(fill: GBC.BOTH, gridx: 0, gridy: 0, gridwidth: 2, weightx: 2, weighty: 2)) { treeCellRenderer = new DefaultTreeCellRenderer() treeCellRenderer.leafIcon = treeCellRenderer.closedIcon projectTree = tree(cellRenderer: treeCellRenderer, model: bind(source: model, sourceProperty: 'rootProject', - sourceValue: { + sourceValue: { if (model.rootProject) { def rootNode = new DefaultMutableTreeNode() def flatview = new FlatProjectView('All Issues') - flatviews.projects[(model.rootProject.name)] = + flatview.projects[(model.rootProject.name)] = model.rootProject rootNode.add(new DefaultMutableTreeNode(flatview)) rootNode.add(controller.makeNodes(model.rootProject)) @@ -178,18 +178,17 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, mouseClicked: { evt -> if (evt.button == MouseEvent.BUTTON3) { controller.showProjectPopup( - projectTree.getPathForLocation(evt.x, evt.y) - ?.lastPathComponent?.userObject, + projectTree.getPathForLocation(evt.x, evt.y)?. + lastPathComponent?.userObject, evt.x, evt.y) } }) projectTree.rootVisible = false - + projectTree.selectionModel.selectionMode = TreeSelectionModel.SINGLE_TREE_SELECTION } - // project buttons newProjectButton = button(newProject, constraints: gbc(fill: GBC.NONE, gridx: 0, gridy: 1, anchor: GBC.WEST)) @@ -198,7 +197,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, anchor: GBC.WEST)) } - // split between issue list and issue details + // split between issues list and issue details splitPane(orientation: JSplitPane.VERTICAL_SPLIT, dividerLocation: 200, constraints: "right") { @@ -206,7 +205,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, gridBagLayout() scrollPane(constraints: gbc(fill: GBC.BOTH, weightx: 2, - weighty: 2, gridx: 0, gridy: 0, gridwidth: 3)) { + weighty: 2, gridx: 0, gridy: 0, gridwidth: 3)) { issueTable = table( autoCreateRowSorter: true, @@ -223,7 +222,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, translatedPoint.translate(-issueTable.locationOnScreen.@x, -issueTable.locationOnScreen.@y) def row = issueTable.rowAtPoint(translatedPoint) - + issueTable.setRowSelectionInterval(row, row) controller.showIssuePopup( @@ -238,21 +237,6 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, controller.displayIssue(controller.getSelectedIssue()) } - /*issueList = list( - cellRenderer: model.issueCellRenderer, - selectionMode: ListSelectionModel.SINGLE_SELECTION, - valueChanged: { evt -> - controller.displayIssue(issueList.selectedValue) - }, - mouseClicked: { evt -> - if (evt.button == MouseEvent.BUTTON3) { - issueList.selectedIndex = issueList.locationToIndex( - [evt.x, evt.y] as Point) - - controller.showIssuePopup( - issueList.selectedValue, evt.x, evt.y) - } - })*/ } wordWrapCheckBox = checkBox('Word wrap', @@ -266,7 +250,6 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, enabled: bind(source: issueTable.selectionModel, sourceEvent: 'valueChanged', sourceValue: { !issueTable.selectionModel.isSelectionEmpty() })) - } scrollPane(constraints: "bottom", @@ -274,45 +257,38 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, issueTextPanel = panel { issueTextPanelLayout = cardLayout() + def leavingEditorClosure = { + def issue = controller.getSelectedIssue() + if (issue == null) return + if (issueTextArea.text != issue.text) { + issue.text = issueTextArea.text + issueTextDisplay.text = controller.rst2html( + issueTextArea.text) + } + issueTextPanelLayout.show(issueTextPanel, 'display') + } + issueTextArea = textArea( - constraints: "editor", + constraints: 'editor', wrapStyleWord: true, lineWrap: bind(source: wordWrapCheckBox, sourceProperty: 'selected'), - editable: bind( source: issueTable.selectionModel, + editable: bind(source: issueTable.selectionModel, sourceEvent: 'valueChanged', sourceValue: { !issueTable.selectionModel.isSelectionEmpty() }), font: model.mainMVC.model.issueDetailFont, focusGained: {}, - focusLost: { - def issue = controller.getSelectedIssue() - if (issue == null) return - if (issueTextArea.text != issue.text) { - issue.text = issueTextArea.text - issueTextDisplay.text = controller.rst2html( - issueTextArea.text) - } - issueTextPanelLayout.show(issueTextPanel, "display") - }, - mouseExited: { - def issue = controller.getSelectedIssue() - if (issue == null) return - if (issueTextArea.text != issue.text) { - issue.text = issueTextArea.text - issueTextDisplay.text = controller.rst2html( - issueTextArea.text) - } - issueTextPanelLayout.show(issueTextPanel, "display") - }) - - issueTextDisplay = editorPane(contentType: "text/html", - constraints: "display", + focusLost: leavingEditorClosure, + mouseExited: leavingEditorClosure) + + issueTextDisplay = editorPane(contentType: 'text/html', + constraints: 'display', editable: false, preferredSize: [10, 10], - mouseClicked: { evt -> + mouseClicked: {evt -> if (evt.clickCount > 1) - issueTextPanelLayout.show(issueTextPanel, "editor") + issueTextPanelLayout.show(issueTextPanel, 'editor') }) } diff --git a/pit-swing/griffonw b/pit-swing/griffonw new file mode 100644 index 0000000..81f7bab --- /dev/null +++ b/pit-swing/griffonw @@ -0,0 +1,141 @@ +#!/bin/bash + +############################################################################## +## ## +## Griffon wrapper script for UN*X ## +## ## +############################################################################## + +# Uncomment those lines to set JVM options. GRIFFON_OPTS and JAVA_OPTS can be used together. +# GRIFFON_OPTS="$GRIFFON_OPTS -Xmx512" +# JAVA_OPTS="$JAVA_OPTS -Xmx512" + +GRIFFON_APP_NAME=Griffon + +warn ( ) { + echo "${PROGNAME}: $*" +} + +die ( ) { + warn "$*" + exit 1 +} + +# OS specific support (must be 'true' or 'false'). +cygwin=false +msys=false +darwin=false +case "`uname`" in + CYGWIN* ) + cygwin=true + ;; + Darwin* ) + darwin=true + ;; + MINGW* ) + msys=true + ;; +esac + +# Attempt to set JAVA_HOME if it's not already set. +if [ -z "$JAVA_HOME" ] ; then + if $darwin ; then + [ -z "$JAVA_HOME" -a -d "/Library/Java/Home" ] && export JAVA_HOME="/Library/Java/Home" + [ -z "$JAVA_HOME" -a -d "/System/Library/Frameworks/JavaVM.framework/Home" ] && export JAVA_HOME="/System/Library/Frameworks/JavaVM.framework/Home" + else + javaExecutable="`which javac`" + [ -z "$javaExecutable" -o "`expr \"$javaExecutable\" : '\([^ ]*\)'`" = "no" ] && die "JAVA_HOME not set and cannot find javac to deduce location, please set JAVA_HOME." + # readlink(1) is not available as standard on Solaris 10. + readLink=`which readlink` + [ `expr "$readLink" : '\([^ ]*\)'` = "no" ] && die "JAVA_HOME not set and readlink not available, please set JAVA_HOME." + javaExecutable="`readlink -f \"$javaExecutable\"`" + javaHome="`dirname \"$javaExecutable\"`" + javaHome=`expr "$javaHome" : '\(.*\)/bin'` + export JAVA_HOME="$javaHome" + fi +fi + +# For Cygwin, ensure paths are in UNIX format before anything is touched. +if $cygwin ; then + [ -n "$JAVACMD" ] && JAVACMD=`cygpath --unix "$JAVACMD"` + [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"` +fi + +STARTER_MAIN_CLASS=org.gradle.wrapper.GriffonWrapperMain +CLASSPATH=`dirname "$0"`/wrapper/griffon-wrapper.jar +WRAPPER_PROPERTIES=`dirname "$0"`/wrapper/griffon-wrapper.properties +# Determine the Java command to use to start the JVM. +if [ -z "$JAVACMD" ] ; then + if [ -n "$JAVA_HOME" ] ; then + if [ -x "$JAVA_HOME/jre/sh/java" ] ; then + # IBM's JDK on AIX uses strange locations for the executables + JAVACMD="$JAVA_HOME/jre/sh/java" + else + JAVACMD="$JAVA_HOME/bin/java" + fi + else + JAVACMD="java" + fi +fi +if [ ! -x "$JAVACMD" ] ; then + die "JAVA_HOME is not defined correctly, can not execute: $JAVACMD" +fi +if [ -z "$JAVA_HOME" ] ; then + warn "JAVA_HOME environment variable is not set" +fi + +# For Darwin, add GRIFFON_APP_NAME to the JAVA_OPTS as -Xdock:name +if $darwin; then + JAVA_OPTS="$JAVA_OPTS -Xdock:name=$GRIFFON_APP_NAME" +# we may also want to set -Xdock:image +fi + +# For Cygwin, switch paths to Windows format before running java +if $cygwin ; then + JAVA_HOME=`cygpath --path --mixed "$JAVA_HOME"` + CLASSPATH=`cygpath --path --mixed "$CLASSPATH"` + + # We build the pattern for arguments to be converted via cygpath + ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null` + SEP="" + for dir in $ROOTDIRSRAW ; do + ROOTDIRS="$ROOTDIRS$SEP$dir" + SEP="|" + done + OURCYGPATTERN="(^($ROOTDIRS))" + # Add a user-defined pattern to the cygpath arguments + if [ "$GRIFFON_CYGPATTERN" != "" ] ; then + OURCYGPATTERN="$OURCYGPATTERN|($GRIFFON_CYGPATTERN)" + fi + # Now convert the arguments - kludge to limit ourselves to /bin/sh + i=0 + for arg in "$@" ; do + CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -` + CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option + + if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition + eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"` + else + eval `echo args$i`="\"$arg\"" + fi + i=$((i+1)) + done + case $i in + (0) set -- ;; + (1) set -- "$args0" ;; + (2) set -- "$args0" "$args1" ;; + (3) set -- "$args0" "$args1" "$args2" ;; + (4) set -- "$args0" "$args1" "$args2" "$args3" ;; + (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;; + (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;; + (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;; + (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;; + (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;; + esac +fi + +"$JAVACMD" $JAVA_OPTS $GRIFFON_OPTS \ + -classpath "$CLASSPATH" \ + -Dorg.gradle.wrapper.properties="$WRAPPER_PROPERTIES" \ + $STARTER_MAIN_CLASS \ + "$@" diff --git a/pit-swing/griffonw.bat b/pit-swing/griffonw.bat new file mode 100644 index 0000000..91d70fe --- /dev/null +++ b/pit-swing/griffonw.bat @@ -0,0 +1,126 @@ +@if "%DEBUG%" == "" @echo off +@rem ########################################################################## +@rem ## +@rem Griffon startup script for Windows ## +@rem ## +@rem ########################################################################## + +@rem +@rem $Revision: 10602 $ $Date: 2008-01-25 02:49:54 +0100 (ven., 25 janv. 2008) $ +@rem + +@rem Set local scope for the variables with windows NT shell +if "%OS%"=="Windows_NT" setlocal + +@rem Uncomment those lines to set JVM options. GRIFFON_OPTS and JAVA_OPTS can be used together. +@rem set GRIFFON_OPTS=%GRIFFON_OPTS% -Xmx512 +@rem set JAVA_OPTS=%JAVA_OPTS% -Xmx512 + +set DIRNAME=%~dp0 +if "%DIRNAME%" == "" set DIRNAME=.\ + +@rem Determine the command interpreter to execute the "CD" later +set COMMAND_COM="cmd.exe" +if exist "%SystemRoot%\system32\cmd.exe" set COMMAND_COM="%SystemRoot%\system32\cmd.exe" +if exist "%SystemRoot%\command.com" set COMMAND_COM="%SystemRoot%\command.com" + +@rem Use explicit find.exe to prevent cygwin and others find.exe from being used +set FIND_EXE="find.exe" +if exist "%SystemRoot%\system32\find.exe" set FIND_EXE="%SystemRoot%\system32\find.exe" +if exist "%SystemRoot%\command\find.exe" set FIND_EXE="%SystemRoot%\command\find.exe" + +:check_JAVA_HOME +@rem Make sure we have a valid JAVA_HOME +if not "%JAVA_HOME%" == "" goto have_JAVA_HOME + +echo. +echo ERROR: Environment variable JAVA_HOME has not been set. +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation. +echo. +goto end + +:have_JAVA_HOME +@rem Validate JAVA_HOME +%COMMAND_COM% /C DIR "%JAVA_HOME%" 2>&1 | %FIND_EXE% /I /C "%JAVA_HOME%" >nul +if not errorlevel 1 goto init + +echo. +echo ERROR: JAVA_HOME might be set to an invalid directory: %JAVA_HOME% +echo. +echo Please set the JAVA_HOME variable in your environment to match the +echo location of your Java installation if there are problems. +echo. + +:init +@rem get name of script to launch with full path +@rem Get command-line arguments, handling Windowz variants +SET _marker=%JAVA_HOME: =% +@rem IF NOT "%_marker%" == "%JAVA_HOME%" ECHO JAVA_HOME "%JAVA_HOME%" contains spaces. Please change to a location without spaces if this causes problems. + +if not "%OS%" == "Windows_NT" goto win9xME_args +if "%eval[2+2]" == "4" goto 4NT_args + +IF "%_marker%" == "%JAVA_HOME%" goto :win9xME_args + +set _FIXPATH= +call :fixpath "%JAVA_HOME%" +set JAVA_HOME=%_FIXPATH:~1% + +goto win9xME_args + +:fixpath +if not %1.==. ( +for /f "tokens=1* delims=;" %%a in (%1) do ( +call :shortfilename "%%a" & call :fixpath "%%b" +) +) +goto :EOF +:shortfilename +for %%i in (%1) do set _FIXPATH=%_FIXPATH%;%%~fsi +goto :EOF + + +:win9xME_args +@rem Slurp the command line arguments. +set CMD_LINE_ARGS= +set _SKIP=2 + +:win9xME_args_slurp +if "x%~1" == "x" goto execute + +set CMD_LINE_ARGS=%* +goto execute + +:4NT_args +@rem Get arguments from the 4NT Shell from JP Software +set CMD_LINE_ARGS=%$ + +:execute +@rem Setup the command line + +set STARTER_MAIN_CLASS=org.gradle.wrapper.GriffonWrapperMain +set CLASSPATH=%DIRNAME%\wrapper\griffon-wrapper.jar +set WRAPPER_PROPERTIES=%DIRNAME%\wrapper\griffon-wrapper.properties +set JAVA_EXE=%JAVA_HOME%\bin\java.exe + +set GRIFFON_OPTS=%JAVA_OPTS% %GRIFFON_OPTS% -Dorg.gradle.wrapper.properties="%WRAPPER_PROPERTIES%" + +"%JAVA_EXE%" %GRIFFON_OPTS% -classpath "%CLASSPATH%" %STARTER_MAIN_CLASS% %CMD_LINE_ARGS% + +:end +@rem End local scope for the variables with windows NT shell +if "%ERRORLEVEL%"=="0" goto mainEnd + +if not "%OS%"=="Windows_NT" echo 1 > nul | choice /n /c:1 + +rem Set variable GRIFFON_EXIT_CONSOLE if you need the _script_ return code instead of +rem the _cmd.exe /c_ return code! +if not "" == "%GRIFFON_EXIT_CONSOLE%" exit "%ERRORLEVEL%" +exit /b "%ERRORLEVEL%" + +:mainEnd +if "%OS%"=="Windows_NT" endlocal + +:omega diff --git a/pit-swing/pit-swing.iml b/pit-swing/pit-swing.iml deleted file mode 100644 index fcef4e2..0000000 --- a/pit-swing/pit-swing.iml +++ /dev/null @@ -1,43 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pit-swing/pit-swing.ipr b/pit-swing/pit-swing.ipr deleted file mode 100644 index 5715515..0000000 --- a/pit-swing/pit-swing.ipr +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pit-swing/pit-swing.iws b/pit-swing/pit-swing.iws deleted file mode 100644 index f4b45b3..0000000 --- a/pit-swing/pit-swing.iws +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/pit-swing/pit-swing.launch b/pit-swing/pit-swing.launch deleted file mode 100644 index 41876d3..0000000 --- a/pit-swing/pit-swing.launch +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/pit-swing/pit-swing.tmproj b/pit-swing/pit-swing.tmproj deleted file mode 100644 index eb657ca..0000000 --- a/pit-swing/pit-swing.tmproj +++ /dev/null @@ -1,73 +0,0 @@ - - - - - documents - - - filename - pit-swing.launch - - - filename - build.xml - - - name - griffon-app - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - griffon-app - - - name - test - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - test - - - name - lib - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - lib - - - name - scripts - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - scripts - - - name - src - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - src - - - name - web-app - regexFolderFilter - !.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$ - sourceDirectory - web-app - - - fileHierarchyDrawerWidth - 200 - metaData - - showFileHierarchyDrawer - - windowFrame - {{237, 127}, {742, 553}} - - diff --git a/pit-swing/session.vim b/pit-swing/session.vim deleted file mode 100644 index 1e33074..0000000 --- a/pit-swing/session.vim +++ /dev/null @@ -1,1398 +0,0 @@ -let SessionLoad = 1 -if &cp | set nocp | endif -let s:cpo_save=&cpo -set cpo&vim -noremap!  -noremap!  -noremap!  -noremap!  -inoremap  -nmap v :call Screen_Vars() -nmap  vip -vmap  "ry :call Send_to_Screen(@r) -vnoremap  :Hexmode -nnoremap  :Hexmode -nmap gx NetrwBrowseX -nnoremap NetrwBrowseX :call netrw#NetrwBrowseX(expand(""),0) -noremap "" -noremap "" -noremap "" -noremap "" -inoremap  :Hexmode -let &cpo=s:cpo_save -unlet s:cpo_save -set autoindent -set backspace=indent,eol,start -set expandtab -set fileencodings=ucs-bom,utf-8,default,latin1 -set helplang=en -set history=50 -set hlsearch -set incsearch -set nomodeline -set printoptions=paper:letter -set ruler -set runtimepath=~/.vim,/var/lib/vim/addons,/usr/share/vim/vimfiles,/usr/share/vim/vim72,/usr/share/vim/vimfiles/after,/var/lib/vim/addons/after,~/.vim/after -set shiftwidth=4 -set suffixes=.bak,~,.swp,.o,.info,.aux,.log,.dvi,.bbl,.blg,.brf,.cb,.ind,.idx,.ilg,.inx,.out,.toc -set tabstop=4 -let s:so_save = &so | let s:siso_save = &siso | set so=0 siso=0 -let v:this_session=expand(":p") -silent only -cd ~/projects/personal-issue-tracker/pit-swing -if expand('%') == '' && !&modified && line('$') <= 1 && getline(1) == '' - let s:wipebuf = bufnr('%') -endif -set shortmess=aoO -badd +1 griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy -badd +1 griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy -badd +18 griffon-app/views/com/jdbernard/pit/swing/PITView.groovy -badd +1 src/com/jdbernard/pit/IssueTreeCellRenderer.groovy -badd +1 griffon-app/conf/Application.groovy -badd +1 griffon-app/conf/Config.groovy -badd +3 src/com/jdbernard/pit/swing/IssueListCellRenderer.groovy -badd +15 src/main/com/jdbernard/pit/swing/IssueListCellRenderer.groovy -badd +1 griffon-app/lifecycle/Initialize.groovy -badd +1 griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy -badd +1 griffon-app/controllers/com/jdbernard/pit/swing/NewIssueDialogController.groovy -badd +1 griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy -badd +1 griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy -badd +1 griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy -badd +1 griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy -args griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy -edit griffon-app/models/com/jdbernard/pit/swing/PITModel.groovy -set splitbelow splitright -wincmd _ | wincmd | -vsplit -1wincmd h -wincmd _ | wincmd | -split -1wincmd k -wincmd w -wincmd w -set nosplitbelow -set nosplitright -wincmd t -set winheight=1 winwidth=1 -exe '1resize ' . ((&lines * 30 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 66 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -argglobal -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 2 - ((1 * winheight(0) + 15) / 30) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -2 -normal! 0 -wincmd w -argglobal -edit griffon-app/views/com/jdbernard/pit/swing/PITView.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 33) / 66) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -argglobal -edit griffon-app/controllers/com/jdbernard/pit/swing/PITController.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 48) / 97) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -exe '1resize ' . ((&lines * 30 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 66 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -tabedit griffon-app/models/com/jdbernard/pit/swing/ProjectPanelModel.groovy -set splitbelow splitright -wincmd _ | wincmd | -vsplit -1wincmd h -wincmd _ | wincmd | -split -1wincmd k -wincmd w -wincmd w -set nosplitbelow -set nosplitright -wincmd t -set winheight=1 winwidth=1 -exe '1resize ' . ((&lines * 36 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 60 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -argglobal -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 18) / 36) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -argglobal -edit griffon-app/views/com/jdbernard/pit/swing/ProjectPanelView.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 30) / 60) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -argglobal -edit griffon-app/controllers/com/jdbernard/pit/swing/ProjectPanelController.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 48) / 97) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -exe '1resize ' . ((&lines * 36 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 60 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -tabedit griffon-app/models/com/jdbernard/pit/swing/NewIssueDialogModel.groovy -set splitbelow splitright -wincmd _ | wincmd | -vsplit -1wincmd h -wincmd _ | wincmd | -split -1wincmd k -wincmd w -wincmd w -set nosplitbelow -set nosplitright -wincmd t -set winheight=1 winwidth=1 -exe '1resize ' . ((&lines * 31 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 65 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -argglobal -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 15) / 31) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -argglobal -edit griffon-app/views/com/jdbernard/pit/swing/NewIssueDialogView.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 32) / 65) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -argglobal -edit griffon-app/controllers/com/jdbernard/pit/swing/NewIssueDialogController.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 48) / 97) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -wincmd w -exe '1resize ' . ((&lines * 31 + 50) / 100) -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe '2resize ' . ((&lines * 65 + 50) / 100) -exe 'vert 2resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 3resize ' . ((&columns * 138 + 139) / 279) -tabedit griffon-app/conf/Application.groovy -set splitbelow splitright -wincmd _ | wincmd | -vsplit -1wincmd h -wincmd w -set nosplitbelow -set nosplitright -wincmd t -set winheight=1 winwidth=1 -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 2resize ' . ((&columns * 138 + 139) / 279) -argglobal -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 16 - ((15 * winheight(0) + 48) / 97) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -16 -normal! 01l -wincmd w -argglobal -edit griffon-app/conf/Config.groovy -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 56 - ((55 * winheight(0) + 48) / 97) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -56 -normal! 0 -wincmd w -exe 'vert 1resize ' . ((&columns * 140 + 139) / 279) -exe 'vert 2resize ' . ((&columns * 138 + 139) / 279) -tabedit griffon-app/lifecycle/Initialize.groovy -set splitbelow splitright -set nosplitbelow -set nosplitright -wincmd t -set winheight=1 winwidth=1 -argglobal -setlocal keymap= -setlocal noarabic -setlocal autoindent -setlocal nobinary -setlocal bufhidden= -setlocal buflisted -setlocal buftype= -setlocal nocindent -setlocal cinkeys=0{,0},0),:,0#,!^F,o,O,e -setlocal cinoptions= -setlocal cinwords=if,else,while,do,for,switch -setlocal comments=s1:/*,mb:*,ex:*/,://,b:#,:%,:XCOMM,n:>,fb:- -setlocal commentstring=/*%s*/ -setlocal complete=.,w,b,u,t,i -setlocal completefunc= -setlocal nocopyindent -setlocal nocursorcolumn -setlocal nocursorline -setlocal define= -setlocal dictionary= -setlocal nodiff -setlocal equalprg= -setlocal errorformat= -setlocal expandtab -if &filetype != 'groovy' -setlocal filetype=groovy -endif -setlocal foldcolumn=0 -setlocal foldenable -setlocal foldexpr=0 -setlocal foldignore=# -setlocal foldlevel=0 -setlocal foldmarker={{{,}}} -setlocal foldmethod=manual -setlocal foldminlines=1 -setlocal foldnestmax=20 -setlocal foldtext=foldtext() -setlocal formatexpr= -setlocal formatoptions=tcq -setlocal formatlistpat=^\\s*\\d\\+[\\]:.)}\\t\ ]\\s* -setlocal grepprg= -setlocal iminsert=0 -setlocal imsearch=0 -setlocal include= -setlocal includeexpr= -setlocal indentexpr= -setlocal indentkeys=0{,0},:,0#,!^F,o,O,e -setlocal noinfercase -setlocal iskeyword=@,48-57,_,192-255 -setlocal keywordprg= -setlocal nolinebreak -setlocal nolisp -setlocal nolist -setlocal makeprg= -setlocal matchpairs=(:),{:},[:] -setlocal nomodeline -setlocal modifiable -setlocal nrformats=octal,hex -set number -setlocal number -setlocal numberwidth=4 -setlocal omnifunc= -setlocal path= -setlocal nopreserveindent -setlocal nopreviewwindow -setlocal quoteescape=\\ -setlocal noreadonly -setlocal norightleft -setlocal rightleftcmd=search -setlocal noscrollbind -setlocal shiftwidth=4 -setlocal noshortname -setlocal nosmartindent -setlocal softtabstop=0 -setlocal nospell -setlocal spellcapcheck=[.?!]\\_[\\])'\"\ \ ]\\+ -setlocal spellfile= -setlocal spelllang=en -setlocal statusline= -setlocal suffixesadd= -setlocal swapfile -setlocal synmaxcol=3000 -if &syntax != 'groovy' -setlocal syntax=groovy -endif -setlocal tabstop=4 -setlocal tags= -setlocal textwidth=0 -setlocal thesaurus= -setlocal nowinfixheight -setlocal nowinfixwidth -setlocal wrap -setlocal wrapmargin=0 -silent! normal! zE -let s:l = 1 - ((0 * winheight(0) + 49) / 98) -if s:l < 1 | let s:l = 1 | endif -exe s:l -normal! zt -1 -normal! 0 -tabnext 1 -if exists('s:wipebuf') - silent exe 'bwipe ' . s:wipebuf -endif -unlet! s:wipebuf -set winheight=1 winwidth=20 shortmess=filnxtToO -let s:sx = expand(":p:r")."x.vim" -if file_readable(s:sx) - exe "source " . fnameescape(s:sx) -endif -let &so = s:so_save | let &siso = s:siso_save -doautoall SessionLoadPost -unlet SessionLoad -" vim: set ft=vim : diff --git a/pit-swing/stacktrace.log b/pit-swing/stacktrace.log deleted file mode 100644 index e69de29..0000000 diff --git a/pit-swing/test/fest/com/jdbernard/pit/swing/NewIssueDialogTestTests.groovy b/pit-swing/test/fest/com/jdbernard/pit/swing/NewIssueDialogTestTests.groovy deleted file mode 100644 index c865a7c..0000000 --- a/pit-swing/test/fest/com/jdbernard/pit/swing/NewIssueDialogTestTests.groovy +++ /dev/null @@ -1,33 +0,0 @@ -package com.jdbernard.pit.swing - - - -import org.fest.swing.fixture.* -import griffon.test.FestSwingTestCase - -import javax.swing.JDialog - -class NewIssueDialogTestTests extends FestSwingTestCase { - // instance variables: - // app - current application - // window - value returned from initWindow() - // defaults to app.appFrames[0] - - JDialog newIssueDialog - - void testSomething() { - - } - - protected void onSetUp() throws Exception { - println app.appFrames - } - - protected void onTearDown() throws Exception { } - - /* - protected FrameFixture initWindow() { - return new FrameFixture(app.appFrames[0]) - } - */ -} diff --git a/pit-swing/test/integration/NewIssueDialogTests.groovy b/pit-swing/test/integration/NewIssueDialogTests.groovy deleted file mode 100644 index 6dbfb11..0000000 --- a/pit-swing/test/integration/NewIssueDialogTests.groovy +++ /dev/null @@ -1,10 +0,0 @@ -import griffon.util.IGriffonApplication - -class NewIssueDialogTests extends GroovyTestCase { - - IGriffonApplication app - - void testSomething() { - - } -} diff --git a/pit-swing/test/integration/PITTests.groovy b/pit-swing/test/integration/PITTests.groovy deleted file mode 100644 index 67250cd..0000000 --- a/pit-swing/test/integration/PITTests.groovy +++ /dev/null @@ -1,10 +0,0 @@ -import griffon.util.IGriffonApplication - -class PITTests extends GroovyTestCase { - - IGriffonApplication app - - void testSomething() { - - } -} diff --git a/pit-swing/test/integration/PitSwingTests.groovy b/pit-swing/test/integration/PitSwingTests.groovy deleted file mode 100644 index a2a1f8c..0000000 --- a/pit-swing/test/integration/PitSwingTests.groovy +++ /dev/null @@ -1,10 +0,0 @@ -import griffon.util.IGriffonApplication - -class PitSwingTests extends GroovyTestCase { - - IGriffonApplication app - - void testSomething() { - - } -} diff --git a/pit-swing/test/integration/ProjectPanelTests.groovy b/pit-swing/test/integration/ProjectPanelTests.groovy deleted file mode 100644 index 5a71def..0000000 --- a/pit-swing/test/integration/ProjectPanelTests.groovy +++ /dev/null @@ -1,10 +0,0 @@ -import griffon.util.IGriffonApplication - -class ProjectPanelTests extends GroovyTestCase { - - IGriffonApplication app - - void testSomething() { - - } -} diff --git a/pit-swing/test/integration/pit/swing/NewIssueDialogTests.groovy b/pit-swing/test/integration/pit/swing/NewIssueDialogTests.groovy new file mode 100644 index 0000000..f80ceff --- /dev/null +++ b/pit-swing/test/integration/pit/swing/NewIssueDialogTests.groovy @@ -0,0 +1,20 @@ +package pit.swing + +import griffon.core.GriffonApplication +import griffon.test.* + +class NewIssueDialogTests extends GriffonUnitTestCase { + GriffonApplication app + + protected void setUp() { + super.setUp() + } + + protected void tearDown() { + super.tearDown() + } + + void testSomething() { + + } +} diff --git a/pit-swing/test/integration/pit/swing/PITests.groovy b/pit-swing/test/integration/pit/swing/PITests.groovy new file mode 100644 index 0000000..94994a6 --- /dev/null +++ b/pit-swing/test/integration/pit/swing/PITests.groovy @@ -0,0 +1,20 @@ +package pit.swing + +import griffon.core.GriffonApplication +import griffon.test.* + +class PITests extends GriffonUnitTestCase { + GriffonApplication app + + protected void setUp() { + super.setUp() + } + + protected void tearDown() { + super.tearDown() + } + + void testSomething() { + + } +} diff --git a/pit-swing/test/integration/pit/swing/PitSwingTests.groovy b/pit-swing/test/integration/pit/swing/PitSwingTests.groovy new file mode 100644 index 0000000..2744ef3 --- /dev/null +++ b/pit-swing/test/integration/pit/swing/PitSwingTests.groovy @@ -0,0 +1,20 @@ +package pit.swing + +import griffon.core.GriffonApplication +import griffon.test.* + +class PitSwingTests extends GriffonUnitTestCase { + GriffonApplication app + + protected void setUp() { + super.setUp() + } + + protected void tearDown() { + super.tearDown() + } + + void testSomething() { + + } +} diff --git a/pit-swing/test/integration/pit/swing/ProjectPanelTests.groovy b/pit-swing/test/integration/pit/swing/ProjectPanelTests.groovy new file mode 100644 index 0000000..2eb3471 --- /dev/null +++ b/pit-swing/test/integration/pit/swing/ProjectPanelTests.groovy @@ -0,0 +1,20 @@ +package pit.swing + +import griffon.core.GriffonApplication +import griffon.test.* + +class ProjectPanelTests extends GriffonUnitTestCase { + GriffonApplication app + + protected void setUp() { + super.setUp() + } + + protected void tearDown() { + super.tearDown() + } + + void testSomething() { + + } +} diff --git a/pit-swing/wrapper/griffon-wrapper.jar b/pit-swing/wrapper/griffon-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..93aa4fdd63f290e45a36b2cc60da2fe7be115093 GIT binary patch literal 13427 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