Serious bug-fixing, yo.

This commit is contained in:
Jonathan Bernard 2010-08-27 03:07:54 -05:00
parent 4d77789e78
commit 63d47d8d9c
46 changed files with 703 additions and 2205 deletions

View File

@ -3,3 +3,4 @@ build/
dist/ dist/
staging/ staging/
target/test-reports target/test-reports
pit-swing-old

View File

@ -1,62 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path="src/main"/>
<classpathentry kind="src" path="griffon-app/conf"/>
<classpathentry kind="src" path="griffon-app/models"/>
<classpathentry kind="src" path="griffon-app/views"/>
<classpathentry kind="src" path="griffon-app/controllers"/>
<classpathentry kind="src" path="griffon-app/resources"/>
<classpathentry kind="src" path="test/integration"/>
<classpathentry kind="src" path="test/unit"/>
<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
<classpathentry kind="var" path="GRIFFON_HOME/ant/lib/ant.jar"/>
<classpathentry kind="var" path="GRIFFON_HOME/lib/swingx-0.9.3.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/swing-worker.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/commons-lang-2.4.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/ant-launcher-1.7.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/gant_groovy1.6-1.6.0.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/asm-2.2.3.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/commons-cli-1.0.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/groovy-all-1.6.4.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/swingxbuilder-0.1.6-SNAPSHOT.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/jline-0.9.94.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/svnkit-1.2.0.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/log4j-1.2.15.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/ant-nodeps-1.7.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/ant-1.7.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/ant-trax-1.7.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/commons-logging-1.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/ant-junit-1.7.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/MultipleGradientPaint.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/spring-2.5.6.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/lib/junit-3.8.2.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/dist/griffon-rt-0.2.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/dist/griffon-resources-0.2.1.jar" />
<classpathentry kind="var" path="GRIFFON_HOME/dist/griffon-cli-0.2.1.jar" />
<classpathentry kind="output" path="staging/classes"/>
</classpath>

View File

@ -1,18 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<projectDescription>
<name>pit-swing</name>
<comment/>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
<natures>
<nature>org.eclipse.jdt.groovy.core.groovyNature</nature>
<nature>org.eclipse.jdt.core.javanature</nature>
</natures>
</projectDescription>

Binary file not shown.

View File

@ -1,5 +1,6 @@
#utf-8 #Griffon Metadata file
#Thu May 27 05:01:16 CDT 2010 #Thu Aug 05 10:29:59 CDT 2010
app.griffon.version=0.3 app.archetype=default
app.griffon.version=0.9
app.name=pit-swing app.name=pit-swing
app.version=2.5.0 app.version=0.1

View File

@ -1,97 +0,0 @@
<project name="pit-swing" default="test">
<!-- =================================
target: clean
================================= -->
<target name="clean" description="--> Cleans a Griffon application">
<griffon>
<arg value="clean"/>
</griffon>
</target>
<!-- =================================
target: package
================================= -->
<target name="package" description="--> Packages up Griffon artifacts">
<griffon>
<arg value="package"/>
</griffon>
</target>
<!-- =================================
target: run-app
================================= -->
<target name="run-app" description="--> Run a Griffon application in standalone mode">
<griffon>
<arg value="run-app"/>
</griffon>
</target>
<!-- =================================
target: debug-app
================================= -->
<target name="debug-app" description="--> Run a Griffon application in standalone mode with debugging turned on">
<griffon>
<arg value="run-app"/>
<arg value="-debug"/>
</griffon>
</target>
<!-- =================================
target: run-webstart
================================= -->
<target name="run-webstart" description="--> Run a Griffon application in webstart mode">
<griffon>
<arg value="run-webstart"/>
</griffon>
</target>
<!-- =================================
target: run-applet
================================= -->
<target name="run-applet" description="--> Run a Griffon application in applet mode">
<griffon>
<arg value="run-applet"/>
</griffon>
</target>
<!-- =================================
target: test
================================= -->
<target name="test" description="--> Run a Griffon applications unit tests">
<griffon>
<arg value="test-app"/>
</griffon>
</target>
<!-- =================================
target: dist
================================= -->
<target name="dist" description="--> Packages up Griffon artifacts in the Production Environment">
<griffon>
<arg value="prod"/>
<arg value="package"/>
</griffon>
</target>
<!-- set up the griffon macro -->
<property environment="env"/>
<property name="griffon.home" value="${env.GRIFFON_HOME}"/>
<property name="jdk.home" value="${env.JAVA_HOME}"/>
<condition property="griffon" value="griffon.bat">
<os family="windows"/>
</condition>
<property name="griffon" value="griffon" />
<macrodef name="griffon">
<element name="griffon-args" implicit="yes"/>
<sequential>
<exec executable="${griffon.home}/bin/${griffon}" failonerror="true">
<env key="JAVA_HOME" value="${jdk.home}"/>
<env key="GRIFFON_HOME" value="${griffon.home}"/>
<griffon-args/>
</exec>
</sequential>
</macrodef>
<!-- end set up the griffon macro -->
</project>

View File

@ -1,22 +1,33 @@
application { application {
title="PitSwing" title = 'PitSwing'
startupGroups=["PIT"] startupGroups = ['PIT']
autoShutdown=true
// 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 { mvcGroups {
NewIssueDialog { // MVC Group for "ProjectPanel"
model="com.jdbernard.pit.swing.NewIssueDialogModel" 'ProjectPanel' {
controller="com.jdbernard.pit.swing.NewIssueDialogController" model = 'com.jdbernard.pit.swing.ProjectPanelModel'
view="com.jdbernard.pit.swing.NewIssueDialogView" view = 'com.jdbernard.pit.swing.ProjectPanelView'
} controller = 'com.jdbernard.pit.swing.ProjectPanelController'
ProjectPanel { }
model="com.jdbernard.pit.swing.ProjectPanelModel"
view="com.jdbernard.pit.swing.ProjectPanelView" // MVC Group for "NewIssueDialog"
controller="com.jdbernard.pit.swing.ProjectPanelController" 'NewIssueDialog' {
} model = 'com.jdbernard.pit.swing.NewIssueDialogModel'
PIT { view = 'com.jdbernard.pit.swing.NewIssueDialogView'
model="com.jdbernard.pit.swing.PITModel" controller = 'com.jdbernard.pit.swing.NewIssueDialogController'
view="com.jdbernard.pit.swing.PITView" }
controller="com.jdbernard.pit.swing.PITController"
} // MVC Group for "PIT"
'PIT' {
model = 'com.jdbernard.pit.swing.PITModel'
view = 'com.jdbernard.pit.swing.PITView'
controller = 'com.jdbernard.pit.swing.PITController'
}
} }

View File

@ -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 = '<a href="http://griffon.codehaus.org" target="_blank"><img alt="The Griffon Framework" src="../img/griffon.png" border="0"/></a>'
sponsorLogo = "<br/>"
footer = "<br/><br/>Made with Griffon (0.9)"
}
}

View File

@ -17,78 +17,3 @@ log4j {
} }
additivity.StackTrace=false 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'
}
}

View File

@ -12,7 +12,7 @@
codebase:'@griffonAppCodebase@', codebase:'@griffonAppCodebase@',
code:'@griffonAppletClass@', code:'@griffonAppletClass@',
archive:'@appletJars@', archive:'@appletJars@',
width:'240', height:'320'} ; width:'@applet.width@', height:'@applet.height@'} ;
var parameters = {fontSize:16, var parameters = {fontSize:16,
java_arguments: "-Djnlp.packEnabled=true", java_arguments: "-Djnlp.packEnabled=true",
jnlp_href:'@griffonAppCodebase@/applet.jnlp', jnlp_href:'@griffonAppCodebase@/applet.jnlp',
@ -20,7 +20,7 @@
image:'griffon.png', image:'griffon.png',
boxmessage:'Loading @griffonAppName@', boxmessage:'Loading @griffonAppName@',
boxbgcolor:'#FFFFFF', boxfgcolor:'#000000', boxbgcolor:'#FFFFFF', boxfgcolor:'#000000',
codebase_lookup: 'false'} ; codebase_lookup: 'false'@applet.script.params@} ;
var version = '1.5.0' ; var version = '1.5.0' ;
deployJava.runApplet(attributes, parameters, version); deployJava.runApplet(attributes, parameters, version);
</script> </script>
@ -28,7 +28,7 @@
<APPLET CODEBASE='@griffonAppCodebase@' <APPLET CODEBASE='@griffonAppCodebase@'
CODE='@griffonAppletClass@' CODE='@griffonAppletClass@'
ARCHIVE='@appletJars@' ARCHIVE='@appletJars@'
WIDTH='240' HEIGHT='320'> WIDTH='@applet.width@' HEIGHT='@applet.height@'>
<PARAM NAME="java_arguments" VALUE="-Djnlp.packEnabled=true"> <PARAM NAME="java_arguments" VALUE="-Djnlp.packEnabled=true">
<PARAM NAME='jnlp_href' VALUE='@griffonAppCodebase@/applet.jnlp'> <PARAM NAME='jnlp_href' VALUE='@griffonAppCodebase@/applet.jnlp'>
<PARAM NAME='dragggable' VALUE='true'> <PARAM NAME='dragggable' VALUE='true'>
@ -37,6 +37,7 @@
<PARAM NAME='boxbgcolor' VALUE='#FFFFFF'> <PARAM NAME='boxbgcolor' VALUE='#FFFFFF'>
<PARAM NAME='boxfgcolor' VALUE='#000000'> <PARAM NAME='boxfgcolor' VALUE='#000000'>
<PARAM NAME='codebase_lookup' VALUE='false'> <PARAM NAME='codebase_lookup' VALUE='false'>
@applet.tag.params@
</APPLET> </APPLET>
--> -->
</body> </body>

View File

@ -35,21 +35,25 @@
<!--<j2ee-application-client-permissions/>--> <!--<j2ee-application-client-permissions/>-->
</security> </security>
<resources> <resources>
<property name="griffon.runmode" value="applet"/>
<property name="jnlp.packEnabled" value="true"/> <property name="jnlp.packEnabled" value="true"/>
<j2se version="1.5+" @memoryOptions@/> <j2se version="1.5+" @memoryOptions@/>
<!-- auto-added jars follow, griffon-rt, app, and groovy --> <!-- auto-added jars follow, griffon-rt, app, and groovy -->
@jnlpJars@ @jnlpJars@
<!-- Add all extra jars below here, or the app may break --> <!-- Add all extra jars below here, or the app may break -->
@jnlpExtensions@ @jnlpExtensions@
@jnlpProperties@
</resources> </resources>
@jnlpResources@
<applet-desc <applet-desc
documentbase="@griffonAppCodebase@" documentbase="@griffonAppCodebase@"
name="@griffonAppName@Applet" name="@griffonAppName@Applet"
main-class="@griffonAppletClass@" main-class="@griffonAppletClass@"
width="320" width="@applet.width@"
height="640"> height="@applet.height@">
<!-- params are ignored when referenced from web page for 6u10 --> <!-- params are ignored when referenced from web page for 6u10 -->
<!--<param name="key1" value="value1"/>--> <!--<param name="key1" value="value1"/>-->
<!--<param name="key2" value="value2"/>--> <!--<param name="key2" value="value2"/>-->
@applet.tag.params@
</applet-desc> </applet-desc>
</jnlp> </jnlp>

View File

@ -35,16 +35,20 @@
<!--<j2ee-application-client-permissions/>--> <!--<j2ee-application-client-permissions/>-->
</security> </security>
<resources> <resources>
<property name="griffon.runmode" value="webstart"/>
<property name="jnlp.packEnabled" value="true"/> <property name="jnlp.packEnabled" value="true"/>
<j2se version="1.5+" @memoryOptions@/> <j2se version="1.5+" @memoryOptions@/>
<!-- auto-added jars follow, griffon-rt, app, and groovy --> <!-- auto-added jars follow, griffon-rt, app, and groovy -->
@jnlpJars@ @jnlpJars@
<!-- Add all extra jars below here, or the app may break --> <!-- Add all extra jars below here, or the app may break -->
@jnlpExtensions@ @jnlpExtensions@
@jnlpProperties@
</resources> </resources>
@jnlpResources@
<application-desc main-class="@griffonApplicationClass@"> <application-desc main-class="@griffonApplicationClass@">
<!-- params are ignored when referenced from web page for 6u10 --> <!-- params are ignored when referenced from web page for 6u10 -->
<!--<param name="key1" value="value1"/>--> <!--<param name="key1" value="value1"/>-->
<!--<param name="key2" value="value2"/>--> <!--<param name="key2" value="value2"/>-->
@applet.tag.params@
</application-desc> </application-desc>
</jnlp> </jnlp>

View File

@ -13,6 +13,8 @@ class PITController {
void mvcGroupInit(Map args) { void mvcGroupInit(Map args) {
model.newIssueDialogMVC = buildMVCGroup('NewIssueDialog')
SwingUtilities.invokeAndWait { SwingUtilities.invokeAndWait {
model.issueListRenderer = new IssueTableCellRenderer() model.issueListRenderer = new IssueTableCellRenderer()
@ -27,27 +29,27 @@ class PITController {
// look for general config options // look for general config options
pitrcFile = new File(pitHome, 'pitrc') pitrcFile = new File(pitHome, 'pitrc')
if(logDbg) logger.debug("$pitrcFile is " + if (logDbg) logger.debug("$pitrcFile is " +
(pitrcFile.exists() ? '' : 'not ') + "present.") (pitrcFile.exists() ? '' : 'not ') + "present.")
// load general config (if present) // load general config (if present)
if (pitrcFile.exists()) { if (pitrcFile.exists() && pitrcFile.canRead()) {
pitrcFile.withInputStream() { config.load(it) } pitrcFile.withInputStream { config.load(it) }
if (logDbg) logger.debug("Loaded pitrc") if (logDbg) logger.debug("Loaded pitrc")
} }
// look for swing specific config // look for swing specific config
pitswingrcFile = new File(pitHome, 'pitswingrc') pitswingrcFile = new File(pitHome, 'pitswingrc')
if (logDbg) logger.debug("$pitswingrcFile is " + if (logDbg) logger.debug("$pitswingrcFile is " +
(pitswingrcFile.exists() ? '' : 'not ') + "present.") (pitswingrcFile.exists() ? '' : 'not ') + "present.")
// load swing specific config (if present) // load swing specific config (if present)
if (pitswingrcFile.exists()) { if (pitswingrcFile.exists() && pitswingrcFile.canRead()) {
pitswingrcFile.withInputStream() { config.load(it) } pitswingrcFile.withInputStream { config.load(it) }
if(logDbg) logger.debug("Loaded pitswingrc") if (logDbg) logger.debug("Loaded pitswingrc")
} }
// Process Configurable Options // Process configurable options
// ---------------------------- // ----------------------------
if (logDbg) { if (logDbg) {
@ -59,15 +61,16 @@ class PITController {
Category.values().each { category -> Category.values().each { category ->
def expectedKey = "issue." + category.name().toLowerCase() + def expectedKey = "issue." + category.name().toLowerCase() +
".template" ".template"
if(logDbg) logger.debug("Looking for key: $expectedKey") if (logDbg) logger.debug("Looking for key: $expectedKey")
config.keySet().each { currentKey -> config.keySet().each { currentKey ->
if (currentKey == expectedKey) if (currentKey == expectedKey)
model.templates[(category)] = model.templates[(category)] =
config.getProperty(expectedKey, "") config.getProperty(expectedKey, "")
if (logDbg) logger.debug("Template for category $category: '" + if (logDbg) logger.debug("Template for category $category: '" +
model.templates[(category)] + "'") model.templates[(category)] + "'")
} }
} }
// load custom issueListRenderer // load custom issueListRenderer
@ -76,12 +79,12 @@ class PITController {
// load initial repositories // load initial repositories
if (config.containsKey('initial-repositories')) { if (config.containsKey('initial-repositories')) {
def initRepos = config.getProperty('initial-repositories', '') def initRepos = config.getProperty('initial-repositories', '')
initRepos = initRepos.split(/[;:,]/) initRepos = initRepos.split(/[:;,]/)
initRepos.each { repoPath -> loadProject(new File(repoPath)) } 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')) { if (config.containsKey('issue.display.css')) {
def issueCSS = config.getProperty('issue.display.css', "") def issueCSS = config.getProperty('issue.display.css', "")
@ -89,20 +92,16 @@ class PITController {
def cssFile def cssFile
// use short-circuit logic to test several possible locations // use short-circuit logic to test several possible locations
// for a css file
if ((cssFile = new File(pitHome, issueCSS)).exists() || if ((cssFile = new File(pitHome, issueCSS)).exists() ||
(cssFile = new File(pitHome.parentFile(), issueCSS)).exists() || (cssFile = new File(pitHome.parentFile(), issueCSS)).exists() ||
(cssFile = new File(issueCSS).exists())) (cssFile = new File(issueCSS)).exists())
issueCSS = cssFile.text 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.issueCSS = issueCSS
} }
} }
//
model.newIssueDialogMVC = buildMVCGroup('NewIssueDialog')
} }
void refreshIssues() { void refreshIssues() {
@ -111,12 +110,11 @@ class PITController {
} }
} }
def openProject = { evt = null -> def openProject = { evt = null ->
if (view.openDialog.showOpenDialog(view.frame) != if (view.openDialog.showOpenDialog(view.frame) !=
JFileChooser.APPROVE_OPTION) return JFileChooser.APPROVE_OPTIONS) return
loadProject(view.openDialog.selectedFile) loadProject(view.openDialog.selectedFile)
} }
def loadProject = { File projectDir -> def loadProject = { File projectDir ->
@ -124,7 +122,7 @@ class PITController {
// if this is not a valid directory, do nothing // if this is not a valid directory, do nothing
// TODO: log to the user that this is not a valid directory // 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 // create new ProjectPanel MVC
newMVC = buildMVCGroup('ProjectPanel', newMVC = buildMVCGroup('ProjectPanel',
@ -134,28 +132,30 @@ class PITController {
issueCSS: model.issueCSS, issueCSS: model.issueCSS,
rootProject: new FileProject(projectDir)) rootProject: new FileProject(projectDir))
newMVC.model.id = projectDir.name newMVC.model.id = projectDir.name
// if we already have a tab with this id // if we already have a tab with this id
if (model.projectPanelMVCs[(newMVC.model.id)]) { if (model.projectPanelMVCs[(newMVC.model.id)]) {
// try using the canonical path // try using the canonical path
newMVC.model.id = projectDir.canonicalPath newMVC.model.id = projectDir.canonicalPath
// still not unique? // still not unique?
if (model.projectPanelMVCs[(newMVC.model.id)]) { if (model.projectPanelMVCs[(newMVC.model.id)]) {
// first time this has happened? // first time this has happened?
if (!model.projectIdMap[(newMVC.model.id)]) if (!model.projectIdMap[(newMVC.model.id)])
model.projectIdMap[(newMVC.model.id)] = 0 model.projectIdMap[(newMVC.model.id)] = 0
// no? increment // no? increment
else model.projectIdMap[(newMVC.model.id)] = else model.projectIdMap[(newMVC.model.id)] =
model.projectIdMap[(newMVC.model.id)] + 1 model.projectIdMap[(newMVC.model.id)] + 1
// use our new, unique id // 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) view.mainTabbedPane.addTab(newMVC.model.id, newMVC.view.panel)
} }

View File

@ -34,17 +34,18 @@ class ProjectPanelController {
refreshProject() refreshProject()
} }
/** /**
* displayProject * displayProject
* @param project Project to display. * @param project Project to display
*
*/ */
void displayProject(Project project) { void displayProject(Project project) {
view.issueTextArea.text = ""
view.issueTextDisplay.text = ""
view.issueTextPanelLayout.show(view.issueTextPanel, "display")
if (!project) return 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)]) { if (!model.projectTableModels[(project.name)]) {
def itm = new IssueTableModel(project, def itm = new IssueTableModel(project,
model.filter ?: model.mainMVC.model.filter) model.filter ?: model.mainMVC.model.filter)
@ -67,7 +68,7 @@ class ProjectPanelController {
if (!issue) return if (!issue) return
// hack because binding view.issueTextArea.font to // 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) if (view.issueTextArea.font != model.mainMVC.model.issueDetailFont)
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.issueTextArea.caretPosition = 0
view.issueTextDisplay.text = rst2html(issue.text) view.issueTextDisplay.text = rst2html(issue.text)
view.issueTextDisplay.caretPosition = 0 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 model.popupProject = project
view.projectPopupMenu.show(view.projectTree, x, y) view.projectPopupMenu.show(view.projectTree, x, y)
} }
@ -120,7 +121,7 @@ class ProjectPanelController {
def project def project
if (evt.source == view.newProjectButton) if (evt.source == view.newProjectButton)
project = model.selectedProject ?: model.rootProject project = model.selectedProject ?: model.rootProject
else project = model.popupProject ?: model.rootProject else project = model.popupProject ?: model.rootProject
def newProject = project.createNewProject(name) def newProject = project.createNewProject(name)
@ -134,7 +135,7 @@ class ProjectPanelController {
if (evt.source == view.deleteProjectButton) if (evt.source == view.deleteProjectButton)
project = model.selectedProject ?: model.rootProject project = model.selectedProject ?: model.rootProject
else project = model.popupProject ?: model.rootModel else project = model.popupProject ?: model.rootProject
project.delete() project.delete()
@ -185,7 +186,7 @@ class ProjectPanelController {
} }
String rst2html(String rst) { String rst2html(String rst) {
Document doc // memory model of document Document doc
StringWriter outString StringWriter outString
StringBuilder result = new StringBuilder() StringBuilder result = new StringBuilder()
@ -201,19 +202,18 @@ class ProjectPanelController {
// java's embeded html is primitive, we need to massage the results // java's embeded html is primitive, we need to massage the results
outString.toString().eachLine { line -> outString.toString().eachLine { line ->
// remove the XML version and encoding, title element, // remove the XML version and encoding, title element, meta elems
// meta elements
if (line =~ /<\?.*\?>/ || line =~ /<meta.*$/ || line =~ /<title.*$/) { return } if (line =~ /<\?.*\?>/ || line =~ /<meta.*$/ || line =~ /<title.*$/) { return }
// all other elements, remove all class,xmlns attributes // all other elements, remove all class, xmlns attributes
def m = (line =~ /(<\S+)(\s*(class|xmlns)=".*"\s*)*(\/?>.*)/) def m = (line =~ /(<\S+)(\s*(class|xmlns)=".*"\s*)*(\/?>.*)/)
if (m) line = m[0][1] + m[0][4] if (m) line = m[0][1] + m[0][4]
result.append(line) result.append(line)
// add in the CSS information to the head // add in the CSS information to the head
if (line =~/<head>/) result.append('<style type="text/css">' + if (line =~ /<head>/) result.append('<style type="text/css">' +
model.issueCSS + '</style>') model.issueCSS + '</style>')
} }

View File

@ -1,25 +1,20 @@
/* /*
* This script is executed inside the EDT, so be sure to * This script is executed inside the UI thread, so be sure to call
* call long running code in another thread. * long running code in another thread.
* *
* You have the following options * You have the following options
* - SwingBuilder.doOutside { // your code } * - execOutside { // your code }
* - execFuture { // your code }
* - Thread.start { // 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 * You have the following options to run code again inside the UI thread
* - SwingBuilder.doLater { // your code } * - execAsync { // your code }
* - SwingBuilder.edt { // your code } * - execSync { // your code }
* - SwingUtilities.invokeLater { // your code }
*/ */
import groovy.swing.SwingBuilder import groovy.swing.SwingBuilder
import griffon.util.GriffonPlatformHelper import griffon.util.GriffonPlatformHelper
import griffon.util.GriffonApplicationHelper import static griffon.util.GriffonApplicationUtils.*
GriffonPlatformHelper.tweakForNativePlatform(app) GriffonPlatformHelper.tweakForNativePlatform(app)
SwingBuilder.lookAndFeel('org.pushingpixels.substance.api.skin.SubstanceCremeCoffeeLookAndFeel', 'nimbus', ['metal', [boldFonts: false]]) SwingBuilder.lookAndFeel('org.pushingpixels.substance.api.skin.SubstanceCremeCoffeeLookAndFeel', 'nimbus', ['metal', [boldFonts: false]])

View File

@ -1,18 +1,13 @@
/* /*
* This script is executed inside the EDT, so be sure to * This script is executed inside the UI thread, so be sure to call
* call long running code in another thread. * long running code in another thread.
* *
* You have the following options * You have the following options
* - SwingBuilder.doOutside { // your code } * - execOutside { // your code }
* - execFuture { // your code }
* - Thread.start { // 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 * You have the following options to run code again inside the UI thread
* - SwingBuilder.doLater { // your code } * - execAsync { // your code }
* - SwingBuilder.edt { // your code } * - execSync { // your code }
* - SwingUtilities.invokeLater { // your code }
*/ */

View File

@ -1,18 +1,13 @@
/* /*
* This script is executed inside the EDT, so be sure to * This script is executed inside the UI thread, so be sure to call
* call long running code in another thread. * long running code in another thread.
* *
* You have the following options * You have the following options
* - SwingBuilder.doOutside { // your code } * - execOutside { // your code }
* - execFuture { // your code }
* - Thread.start { // 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 * You have the following options to run code again inside the UI thread
* - SwingBuilder.doLater { // your code } * - execAsync { // your code }
* - SwingBuilder.edt { // your code } * - execSync { // your code }
* - SwingUtilities.invokeLater { // your code } */
*/

View File

@ -1,18 +1,13 @@
/* /*
* This script is executed inside the EDT, so be sure to * This script is executed inside the UI thread, so be sure to call
* call long running code in another thread. * long running code in another thread.
* *
* You have the following options * You have the following options
* - SwingBuilder.doOutside { // your code } * - execOutside { // your code }
* - execFuture { // your code }
* - Thread.start { // 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 * You have the following options to run code again inside the UI thread
* - SwingBuilder.doLater { // your code } * - execAsync { // your code }
* - SwingBuilder.edt { // your code } * - execSync { // your code }
* - SwingUtilities.invokeLater { // your code } */
*/

View File

@ -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 }
*/

View File

@ -5,7 +5,6 @@ import com.jdbernard.pit.Status
import groovy.beans.Bindable import groovy.beans.Bindable
class NewIssueDialogModel { class NewIssueDialogModel {
@Bindable boolean accept @Bindable boolean accept
String text String text
Category category Category category

View File

@ -7,26 +7,28 @@ import com.jdbernard.pit.Project
import com.jdbernard.pit.Status import com.jdbernard.pit.Status
import groovy.beans.Bindable import groovy.beans.Bindable
import java.awt.Font import java.awt.Font
import javax.swing.ImageIcon
class PITModel { class PITModel {
// filter for projects and issues
// filter for projects and classes
Filter filter = new Filter(categories: [], Filter filter = new Filter(categories: [],
status: [Status.NEW, Status.VALIDATION_REQUIRED]) status: [Status.NEW, Status.VALIDATION_REQUIRED])
def issueListRenderer def issueListRenderer
// map of category -> issue template // map of category -> issue template
def templates = [:] Map<Category, String> templates = [:]
def issueCSS = getClass().getResource("/default-issue.css").openStream().text String issueCSS = getClass().getResourceAsStream("/default-issue.css").text
def categoryIcons = [:] Map<Category, ImageIcon> categoryIcons = [:]
def statusIcons = [:] Map<Category, ImageIcon> statusIcons = [:]
def newIssueDialogMVC 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)
} }

View File

@ -20,7 +20,7 @@ class ProjectPanelModel {
String issueCSS = "" String issueCSS = ""
// cache the ListModels // cache the models
def projectTableModels = [:] def projectTableModels = [:]
def issueCellRenderer def issueCellRenderer

View File

@ -61,4 +61,5 @@ dialog = dialog(title: 'New Task...', modal: true, pack: true,
}, },
constraints: gbc(gridx: 1, gridy: 5, insets: [5, 5, 5, 5], constraints: gbc(gridx: 1, gridy: 5, insets: [5, 5, 5, 5],
anchor: GBC.WEST)) anchor: GBC.WEST))
} }

View File

@ -8,6 +8,7 @@ import com.jdbernard.pit.Project
import com.jdbernard.pit.FileProject import com.jdbernard.pit.FileProject
import groovy.beans.Bindable import groovy.beans.Bindable
import java.awt.BorderLayout as BL import java.awt.BorderLayout as BL
import java.awt.Color
import java.awt.GridBagConstraints as GBC import java.awt.GridBagConstraints as GBC
import javax.swing.DefaultComboBoxModel import javax.swing.DefaultComboBoxModel
import javax.swing.DefaultListModel import javax.swing.DefaultListModel
@ -16,7 +17,6 @@ import javax.swing.JFileChooser
import javax.swing.JOptionPane import javax.swing.JOptionPane
import net.miginfocom.swing.MigLayout import net.miginfocom.swing.MigLayout
import java.awt.Color
actions { actions {
action( action(
@ -53,20 +53,17 @@ Status.values().each {
model.statusIcons[(it)] = imageIcon("/${it.name().toLowerCase()}.png") model.statusIcons[(it)] = imageIcon("/${it.name().toLowerCase()}.png")
} }
frame = application(title: 'Personal Issue Tracker',
openDialog = fileChooser(fileSelectionMode: JFileChooser.DIRECTORIES_ONLY)
frame = application(title:'Personal Issue Tracker',
minimumSize: [400, 200], minimumSize: [400, 200],
preferredSize: [800, 500], preferredSize: [800, 500],
pack:true, pack: true,
locationRelativeTo: null, locationRelativeTo: null,
iconImage: imageIcon('/icon64x64.png').image, iconImage: imageIcon('/icon64x64.png').image,
iconImages: [imageIcon('/icon64x64.png').image, iconImages: [imageIcon('/icon64x64.png').image,
imageIcon('/icon32x32.png').image, imageIcon('/icon32x32.png').image,
imageIcon('/icon16x16.png').image] imageIcon('/icon16x16.png').image]
) { ) {
// main menu // main menu
menuBar() { menuBar() {
menu("File") { menu("File") {
@ -76,12 +73,12 @@ frame = application(title:'Personal Issue Tracker',
menuItem(shutdown) menuItem(shutdown)
} }
menu('View') { menu("View") {
menu('Category') { menu('Category') {
Category.values().each { cat -> Category.values().each { cat ->
checkBoxMenuItem(cat.toString(), checkBoxMenuItem(cat.toString(),
selected: model.filter.categories.contains(cat), selected: model.filter.categories.contains(cat),
actionPerformed: { evt -> actionPerformed: {
if (model.filter.categories.contains(cat)) { if (model.filter.categories.contains(cat)) {
model.filter.categories.remove(cat) model.filter.categories.remove(cat)
evt.source.selected = false evt.source.selected = false
@ -120,17 +117,17 @@ frame = application(title:'Personal Issue Tracker',
JOptionPane.QUESTION_MESSAGE) JOptionPane.QUESTION_MESSAGE)
if (newSize == null || !newSize.isFloat()) if (newSize == null || !newSize.isFloat())
JOptionPane.showMessageDialog(frame, JOptionPane.showMessageDialog(frame,
"$newSize is not a valid size.", '$newSize is not a valid size.',
'Change Issue Detail Text Size...', 'Change Issue Detail Size...',
JOptionPane.ERROR_MESSAGE) JOptionPane.ERROR_MESSAGE)
else model.issueDetailFont = model.issueDetailFont else model.issueDetailFont = model.issueDetailFont
.deriveFont(newSize.toFloat()) .deriveFont(newSize.toFloat())
}) })
} }
menu('Sort') { menu("Sort") {
sortMenuButtonGroup = buttonGroup() sortMenuButtonGroup = buttonGroup()
checkBoxMenuItem('By ID', checkBoxMenuItem('By ID',
buttonGroup: sortMenuButtonGroup, buttonGroup: sortMenuButtonGroup,
actionPerformed: { actionPerformed: {
model.filter.issueSorter = { it.id } model.filter.issueSorter = { it.id }
@ -160,6 +157,7 @@ frame = application(title:'Personal Issue Tracker',
model.filter.issueSorter = { it.title } model.filter.issueSorter = { it.title }
controller.refreshIssues() controller.refreshIssues()
}) })
} }
} }

View File

@ -75,13 +75,13 @@ projectPopupMenu = popupMenu() {
menuItem(deleteProjectPop) menuItem(deleteProjectPop)
} }
// popup menu for isses // popup menu for issues
issuePopupMenu = popupMenu() { issuePopupMenu = popupMenu() {
menuItem(newIssue) menuItem(newIssue)
menuItem(deleteIssuePop) menuItem(deleteIssuePop)
separator() separator()
menu('Change Category', enabled: bind { model.popupIssue != null }) { menu('Change Category', enabled: bind { model.popupIssue != null }) {
Category.values().each { category -> Category.values().each { category ->
menuItem(category.toString(), menuItem(category.toString(),
icon: model.mainMVC.model.categoryIcons[(category)], icon: model.mainMVC.model.categoryIcons[(category)],
@ -91,15 +91,15 @@ issuePopupMenu = popupMenu() {
model.popupIssue.category = category model.popupIssue.category = category
controller.refreshIssues() controller.refreshIssues()
} catch (IOException ioe) { } catch (IOException ioe) {
JOptionPane.showMessageDialog(mainMVC.view.frame, JOptionPane.showMessage(mainMVC.view.frame,
ioe.getLocalizedMessage(), 'Change Category', ioe.getLocalizedMessage(), "Change Category",
JOptionPane.ERROR_MESSAGE) JOptionPane.ERROR_MESSAGE)
} }
}) })
} }
} }
menu('Change Status', enabled: bind { model.popupIssue != null }) { menu('Change Status', enabled: bind { model.popupIssue != null}) {
Status.values().each { status -> Status.values().each { status ->
menuItem(status.toString(), menuItem(status.toString(),
icon: model.mainMVC.model.statusIcons[(status)], icon: model.mainMVC.model.statusIcons[(status)],
@ -108,8 +108,8 @@ issuePopupMenu = popupMenu() {
try { try {
model.popupIssue.status = status model.popupIssue.status = status
controller.refreshIssues() controller.refreshIssues()
} catch (IOException ioe) { } catch (IOException ioe) {
JOptionPane.showMessageDialog(mainMVC.view.frame, JOptionPane.showMessage(model.mainMVC.view.frame,
ioe.getLocalizedMessage(), 'Change Status', ioe.getLocalizedMessage(), 'Change Status',
JOptionPane.ERROR_MESSAGE) JOptionPane.ERROR_MESSAGE)
} }
@ -123,14 +123,14 @@ issuePopupMenu = popupMenu() {
def newPriority = JOptionPane.showInputDialog(mainMVC.view.frame, def newPriority = JOptionPane.showInputDialog(mainMVC.view.frame,
'New priority (0-9)', 'Change Priority...', 'New priority (0-9)', 'Change Priority...',
JOptionPane.QUESTION_MESSAGE) JOptionPane.QUESTION_MESSAGE)
try { model.popupIssue.priority = newPriority.toInteger() } try { model.popupIsse.priority = newPriority.toInteger() }
catch (NumberFormatException nfe) { catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(mainMVC.view.frame, JOptionPane.showMessageDialog(mainMVC.view.frame,
'The priority value must be an integer in [0-9].', 'The priority value must be an integer in [0-9].',
'Change Priority...', JOptionPane.ERROR_MESSAGE) 'Change Priority...', JOptionPane.ERROR_MESSAGE)
return return
} catch (IOException ioe) { } catch (IOException ioe) {
JOptionPane.showMessageDialog(mainMVC.view.fraw, JOptionPane.showMessageDialog(model.mainMVC.view.frame,
ioe.getLocalizedMessage(), 'Change Priority...', ioe.getLocalizedMessage(), 'Change Priority...',
JOptionPane.ERROR_MESSAGE) JOptionPane.ERROR_MESSAGE)
} }
@ -140,28 +140,28 @@ issuePopupMenu = popupMenu() {
// main split view // main split view
panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT, panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
// dividerLocation: bind(source: model.mainModel, property: dividerLocation), dividerLocation: 200,
oneTouchExpandable: true, 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)) { weightx: 2, weighty: 2)) {
// left side (projects tree and buttons) // left side (project tree and buttons
panel(constraints: "left") { panel(constraints: 'left') {
gridBagLayout() gridBagLayout()
// tree view of projects // 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)) { gridwidth: 2, weightx: 2, weighty: 2)) {
treeCellRenderer = new DefaultTreeCellRenderer() treeCellRenderer = new DefaultTreeCellRenderer()
treeCellRenderer.leafIcon = treeCellRenderer.closedIcon treeCellRenderer.leafIcon = treeCellRenderer.closedIcon
projectTree = tree(cellRenderer: treeCellRenderer, projectTree = tree(cellRenderer: treeCellRenderer,
model: bind(source: model, sourceProperty: 'rootProject', model: bind(source: model, sourceProperty: 'rootProject',
sourceValue: { sourceValue: {
if (model.rootProject) { if (model.rootProject) {
def rootNode = new DefaultMutableTreeNode() def rootNode = new DefaultMutableTreeNode()
def flatview = new FlatProjectView('All Issues') def flatview = new FlatProjectView('All Issues')
flatviews.projects[(model.rootProject.name)] = flatview.projects[(model.rootProject.name)] =
model.rootProject model.rootProject
rootNode.add(new DefaultMutableTreeNode(flatview)) rootNode.add(new DefaultMutableTreeNode(flatview))
rootNode.add(controller.makeNodes(model.rootProject)) rootNode.add(controller.makeNodes(model.rootProject))
@ -178,18 +178,17 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
mouseClicked: { evt -> mouseClicked: { evt ->
if (evt.button == MouseEvent.BUTTON3) { if (evt.button == MouseEvent.BUTTON3) {
controller.showProjectPopup( controller.showProjectPopup(
projectTree.getPathForLocation(evt.x, evt.y) projectTree.getPathForLocation(evt.x, evt.y)?.
?.lastPathComponent?.userObject, lastPathComponent?.userObject,
evt.x, evt.y) evt.x, evt.y)
} }
}) })
projectTree.rootVisible = false projectTree.rootVisible = false
projectTree.selectionModel.selectionMode = projectTree.selectionModel.selectionMode =
TreeSelectionModel.SINGLE_TREE_SELECTION TreeSelectionModel.SINGLE_TREE_SELECTION
} }
// project buttons
newProjectButton = button(newProject, newProjectButton = button(newProject,
constraints: gbc(fill: GBC.NONE, gridx: 0, gridy: 1, constraints: gbc(fill: GBC.NONE, gridx: 0, gridy: 1,
anchor: GBC.WEST)) anchor: GBC.WEST))
@ -198,7 +197,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
anchor: GBC.WEST)) anchor: GBC.WEST))
} }
// split between issue list and issue details // split between issues list and issue details
splitPane(orientation: JSplitPane.VERTICAL_SPLIT, splitPane(orientation: JSplitPane.VERTICAL_SPLIT,
dividerLocation: 200, constraints: "right") { dividerLocation: 200, constraints: "right") {
@ -206,7 +205,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
gridBagLayout() gridBagLayout()
scrollPane(constraints: gbc(fill: GBC.BOTH, weightx: 2, 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( issueTable = table(
autoCreateRowSorter: true, autoCreateRowSorter: true,
@ -223,7 +222,7 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
translatedPoint.translate(-issueTable.locationOnScreen.@x, translatedPoint.translate(-issueTable.locationOnScreen.@x,
-issueTable.locationOnScreen.@y) -issueTable.locationOnScreen.@y)
def row = issueTable.rowAtPoint(translatedPoint) def row = issueTable.rowAtPoint(translatedPoint)
issueTable.setRowSelectionInterval(row, row) issueTable.setRowSelectionInterval(row, row)
controller.showIssuePopup( controller.showIssuePopup(
@ -238,21 +237,6 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
controller.displayIssue(controller.getSelectedIssue()) 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', wordWrapCheckBox = checkBox('Word wrap',
@ -266,7 +250,6 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
enabled: bind(source: issueTable.selectionModel, enabled: bind(source: issueTable.selectionModel,
sourceEvent: 'valueChanged', sourceEvent: 'valueChanged',
sourceValue: { !issueTable.selectionModel.isSelectionEmpty() })) sourceValue: { !issueTable.selectionModel.isSelectionEmpty() }))
} }
scrollPane(constraints: "bottom", scrollPane(constraints: "bottom",
@ -274,45 +257,38 @@ panel = splitPane(orientation: JSplitPane.HORIZONTAL_SPLIT,
issueTextPanel = panel { issueTextPanel = panel {
issueTextPanelLayout = cardLayout() 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( issueTextArea = textArea(
constraints: "editor", constraints: 'editor',
wrapStyleWord: true, wrapStyleWord: true,
lineWrap: bind(source: wordWrapCheckBox, lineWrap: bind(source: wordWrapCheckBox,
sourceProperty: 'selected'), sourceProperty: 'selected'),
editable: bind( source: issueTable.selectionModel, editable: bind(source: issueTable.selectionModel,
sourceEvent: 'valueChanged', sourceEvent: 'valueChanged',
sourceValue: sourceValue:
{ !issueTable.selectionModel.isSelectionEmpty() }), { !issueTable.selectionModel.isSelectionEmpty() }),
font: model.mainMVC.model.issueDetailFont, font: model.mainMVC.model.issueDetailFont,
focusGained: {}, focusGained: {},
focusLost: { focusLost: leavingEditorClosure,
def issue = controller.getSelectedIssue() mouseExited: leavingEditorClosure)
if (issue == null) return
if (issueTextArea.text != issue.text) { issueTextDisplay = editorPane(contentType: 'text/html',
issue.text = issueTextArea.text constraints: 'display',
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",
editable: false, editable: false,
preferredSize: [10, 10], preferredSize: [10, 10],
mouseClicked: { evt -> mouseClicked: {evt ->
if (evt.clickCount > 1) if (evt.clickCount > 1)
issueTextPanelLayout.show(issueTextPanel, "editor") issueTextPanelLayout.show(issueTextPanel, 'editor')
}) })
} }

141
pit-swing/griffonw Normal file
View File

@ -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 \
"$@"

126
pit-swing/griffonw.bat Normal file
View File

@ -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

View File

@ -1,43 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<module relativePaths="true" type="GRIFFON_MODULE" version="4">
<component name="FacetManager">
<facet type="Griffon" name="Griffon">
<configuration />
</facet>
<!--
<facet type="Spring" name="Spring">
<configuration>
<fileset id="Griffon" name="Griffon" removed="false">
<file>file://$MODULE_DIR$/web-app/WEB-INF/applicationContext.xml</file>
</fileset>
</configuration>
</facet>
-->
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">
<sourceFolder url="file://$MODULE_DIR$/griffon-app/conf" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/griffon-app/models" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/griffon-app/views" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/griffon-app/controllers" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/griffon-app/lifecycle" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/src/main" isTestSource="false" />
<sourceFolder url="file://$MODULE_DIR$/test/integration" isTestSource="true" />
<sourceFolder url="file://$MODULE_DIR$/test/unit" isTestSource="true" />
</content>
<orderEntry type="inheritedJdk" />
<orderEntry type="sourceFolder" forTests="false" />
<orderEntry type="library" name="Griffon 0.3" level="project" />
<orderEntry type="module-library">
<library name="Griffon User Library">
<CLASSES>
<root url="file://$MODULE_DIR$/lib" />
</CLASSES>
<JAVADOC />
<SOURCES />
<jarDirectory url="file://$MODULE_DIR$/lib" recursive="false" />
</library>
</orderEntry>
</component>
</module>

View File

@ -1,59 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project relativePaths="false" version="4">
<component name="ProjectFileVersion" converted="true" />
<component name="ProjectModuleManager">
<modules>
<module fileurl="file://$PROJECT_DIR$/pit-swing.iml" filepath="$PROJECT_DIR$/pit-swing.iml" />
</modules>
</component>
<component name="ProjectRootManager" version="2" languageLevel="JDK_1_5" assert-keyword="true" jdk-15="true" project-jdk-name="1.6" project-jdk-type="JavaSDK">
<output url="file://$PROJECT_DIR$/out" />
</component>
<component name="libraryTable">
<library name="Griffon 0.3">
<CLASSES>
<root url="jar:///home/jdbernard/programs/griffon/lib/svnkit-1.2.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/ant-junit-1.8.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/ant-launcher-1.8.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/ant-trax-1.8.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/ant-nodeps-1.8.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/ant-1.8.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/jline-0.9.94.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/commons-logging-1.1.1.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/spring-2.5.6.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/gant_groovy1.6-1.6.0.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/junit-4.8.1.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/log4j-1.2.15.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/asm-3.2.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/groovy-all-1.7.1.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/commons-cli-1.2.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/lib/commons-lang-2.4.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/dist/griffon-resources-0.3.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/dist/griffon-cli-0.3.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/dist/griffon-scripts-0.3.jar!/" />
<root url="jar:///home/jdbernard/programs/griffon/dist/griffon-rt-0.3.jar!/" />
</CLASSES>
</library>
</component>
</project>

View File

@ -1,65 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<project relativePaths="false" version="4">
<component name="ProjectPane">
<subPane>
<PATH>
<PATH_ELEMENT>
<option name="myItemId" value="pit-swing" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="pit-swing" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewModuleNode" />
</PATH_ELEMENT>
<PATH_ELEMENT>
<option name="myItemId" value="pit-swing" />
<option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
</PATH_ELEMENT>
</PATH>
</subPane>
</component>
<component name="ProjectView">
<navigator currentView="ProjectPane" proportions="0.5" version="1" splitterProportion="0.5">
<flattenPackages />
<showMembers />
<showModules />
<showLibraryContents />
<hideEmptyPackages />
<abbreviatePackageNames />
<showStructure ProjectPane="false" />
<autoscrollToSource />
<autoscrollFromSource />
<sortByType />
</navigator>
</component>
<!--
<component name="RunManager" selected="Griffon Application.Griffon:pit-swing">
<configuration default="false" name="Griffon:pit-swing" type="GriffonRunConfigurationType" factoryName="Griffon Application">
<module name="pit-swing" />
<setting name="vmparams" value="" />
<setting name="griffonparams" value="" />
<setting name="hostik" value="localhost" />
<setting name="port" value="8080" />
<setting name="jndi" value="false" />
<setting name="recomp" value="false" />
<setting name="recompileFreq" value="3" />
<setting name="launchBrowser" value="true" />
<RunnerSettings RunnerId="Run" />
<ConfigurationWrapper RunnerId="Run" />
<method>
<option name="Make" value="true" />
</method>
</configuration>
<list size="1">
<item index="0" class="java.lang.String" itemvalue="Griffon Application.Griffon:pit-swing" />
</list>
</component>
-->
<component name="ToolWindowManager">
<frame x="10" y="10" width="1260" height="984" extended-state="0" />
<editor active="false" />
<layout>
<window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.25" sideWeight="0.6623068" order="0" side_tool="false" />
</layout>
</component>
</project>

View File

@ -1,20 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<launchConfiguration type="org.eclipse.jdt.launching.localJavaApplication">
<booleanAttribute key="org.eclipse.jdt.launching.DEFAULT_CLASSPATH" value="false"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.codehaus.griffon.GriffonMain"/>
<booleanAttribute key="org.eclipse.jdt.debug.ui.INCLUDE_EXTERNAL_JARS" value="true"/>
<listAttribute key="org.eclipse.jdt.launching.CLASSPATH">
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry containerPath=&quot;org.eclipse.jdt.launching.JRE_CONTAINER&quot; javaProject=&quot;pit-swing&quot; path=&quot;1&quot; type=&quot;4&quot;/&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry id=&quot;org.eclipse.jdt.launching.classpathentry.defaultClasspath&quot;&gt;&#10;&lt;memento exportedEntriesOnly=&quot;false&quot; project=&quot;pit-swing&quot;/&gt;&#10;&lt;/runtimeClasspathEntry&gt;&#10;"/>
<listEntry value="&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;runtimeClasspathEntry internalArchive=&quot;/pit-swing&quot; path=&quot;3&quot; type=&quot;2&quot;/&gt;&#10;"/>
</listAttribute>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
<listEntry value="4"/>
</listAttribute>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="pit-swing"/>
<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Dbase.dir=${project_loc} -Dgriffon.env=development"/>
<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
<listEntry value="/pit-swing"/>
</listAttribute>
<booleanAttribute key="org.eclipse.debug.core.appendEnvironmentVariables" value="true"/>
</launchConfiguration>

View File

@ -1,73 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>documents</key>
<array>
<dict>
<key>filename</key>
<string>pit-swing.launch</string>
</dict>
<dict>
<key>filename</key>
<string>build.xml</string>
</dict>
<dict>
<key>name</key>
<string>griffon-app</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>griffon-app</string>
</dict>
<dict>
<key>name</key>
<string>test</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>test</string>
</dict>
<dict>
<key>name</key>
<string>lib</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>lib</string>
</dict>
<dict>
<key>name</key>
<string>scripts</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>scripts</string>
</dict>
<dict>
<key>name</key>
<string>src</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>src</string>
</dict>
<dict>
<key>name</key>
<string>web-app</string>
<key>regexFolderFilter</key>
<string>!.*/(\.[^/]*|CVS|_darcs|_MTN|\{arch\}|blib|.*~\.nib|.*\.(framework|app|pbproj|pbxproj|xcode(proj)?|bundle))$</string>
<key>sourceDirectory</key>
<string>web-app</string>
</dict>
</array>
<key>fileHierarchyDrawerWidth</key>
<integer>200</integer>
<key>metaData</key>
<dict/>
<key>showFileHierarchyDrawer</key>
<true/>
<key>windowFrame</key>
<string>{{237, 127}, {742, 553}}</string>
</dict>
</plist>

File diff suppressed because it is too large Load Diff

View File

@ -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])
}
*/
}

View File

@ -1,10 +0,0 @@
import griffon.util.IGriffonApplication
class NewIssueDialogTests extends GroovyTestCase {
IGriffonApplication app
void testSomething() {
}
}

View File

@ -1,10 +0,0 @@
import griffon.util.IGriffonApplication
class PITTests extends GroovyTestCase {
IGriffonApplication app
void testSomething() {
}
}

View File

@ -1,10 +0,0 @@
import griffon.util.IGriffonApplication
class PitSwingTests extends GroovyTestCase {
IGriffonApplication app
void testSomething() {
}
}

View File

@ -1,10 +0,0 @@
import griffon.util.IGriffonApplication
class ProjectPanelTests extends GroovyTestCase {
IGriffonApplication app
void testSomething() {
}
}

View File

@ -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() {
}
}

View File

@ -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() {
}
}

View File

@ -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() {
}
}

View File

@ -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() {
}
}

Binary file not shown.

View File

@ -0,0 +1,8 @@
distributionBase=GRIFFON_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRIFFON_USER_HOME
distributionVersion=0.9
zipStorePath=wrapper/dists
urlRoot=http\://dist.codehaus.org/griffon
distributionName=griffon
distributionClassifier=bin

View File

@ -1 +1 @@
application.version=2.5.0 application.version=2.5.1