Jaxx-commits
Threads by month
- ----- 2026 -----
- June
- May
- April
- March
- February
- January
- ----- 2025 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2024 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2023 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2022 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2021 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2020 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2019 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2018 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2017 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2016 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2015 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2014 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2013 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2012 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2011 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2010 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2009 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2008 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2007 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2006 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2005 -----
- December
- November
- October
- September
- August
- July
- June
- May
- April
- March
- February
- January
- ----- 2004 -----
- December
- November
- October
- September
- August
- 3898 discussions
[Buix-commits] r1393 - in jaxx/tags: . jaxx-1.5/jaxx-runtime-swing-widget/src/main/resources/i18n
by sletellier@users.labs.libre-entreprise.org 06 May '09
by sletellier@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: sletellier
Date: 2009-05-06 16:33:33 +0000 (Wed, 06 May 2009)
New Revision: 1393
Added:
jaxx/tags/jaxx-1.5/
Modified:
jaxx/tags/jaxx-1.5/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
Log:
[maven-release-plugin] copy for tag jaxx-1.5
Copied: jaxx/tags/jaxx-1.5 (from rev 1392, jaxx/trunk)
Modified: jaxx/tags/jaxx-1.5/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-06 15:36:03 UTC (rev 1392)
+++ jaxx/tags/jaxx-1.5/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-06 16:33:33 UTC (rev 1393)
@@ -24,4 +24,4 @@
numbereditor.action.show.tip=Afficher le pav\u00E9 num\u00E9rique
numbereditor.clearAll=C
numbereditor.clearOne=CE
-numbereditor.toggleSign=+/-
\ No newline at end of file
+numbereditor.toggleSign=+/-
1
0
[Buix-commits] r1392 - in jaxx/trunk: . jaxx-compiler-api jaxx-compiler-swing jaxx-compiler-validator jaxx-example jaxx-runtime-api jaxx-runtime-swing jaxx-runtime-swing-widget jaxx-runtime-validator jaxx-runtime-validator-swing jaxx-swing-action maven-jaxx-plugin
by sletellier@users.labs.libre-entreprise.org 06 May '09
by sletellier@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: sletellier
Date: 2009-05-06 15:36:03 +0000 (Wed, 06 May 2009)
New Revision: 1392
Modified:
jaxx/trunk/jaxx-compiler-api/pom.xml
jaxx/trunk/jaxx-compiler-swing/pom.xml
jaxx/trunk/jaxx-compiler-validator/pom.xml
jaxx/trunk/jaxx-example/pom.xml
jaxx/trunk/jaxx-runtime-api/pom.xml
jaxx/trunk/jaxx-runtime-swing-widget/pom.xml
jaxx/trunk/jaxx-runtime-swing/pom.xml
jaxx/trunk/jaxx-runtime-validator-swing/pom.xml
jaxx/trunk/jaxx-runtime-validator/pom.xml
jaxx/trunk/jaxx-swing-action/pom.xml
jaxx/trunk/maven-jaxx-plugin/pom.xml
jaxx/trunk/pom.xml
Log:
[maven-release-plugin] prepare release jaxx-1.5
Modified: jaxx/trunk/jaxx-compiler-api/pom.xml
===================================================================
--- jaxx/trunk/jaxx-compiler-api/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-compiler-api/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -44,8 +44,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-api</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-api</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-compiler-swing/pom.xml
===================================================================
--- jaxx/trunk/jaxx-compiler-swing/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-compiler-swing/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -50,8 +50,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-swing</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-swing</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-compiler-validator/pom.xml
===================================================================
--- jaxx/trunk/jaxx-compiler-validator/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-compiler-validator/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -62,8 +62,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-validator</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-compiler-validator</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-example/pom.xml
===================================================================
--- jaxx/trunk/jaxx-example/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-example/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -156,9 +156,9 @@
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-example</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-example</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
<profiles>
Modified: jaxx/trunk/jaxx-runtime-api/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-api/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-runtime-api/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -62,8 +62,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-api</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-api</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-runtime-swing/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-runtime-swing/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -44,8 +44,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-swing</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-swing</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-runtime-swing-widget/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-runtime-swing-widget/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -114,9 +114,9 @@
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-swing-widget</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-swing-widget</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
\ No newline at end of file
Modified: jaxx/trunk/jaxx-runtime-validator/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-validator/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-runtime-validator/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -67,8 +67,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-validator</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-validator</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-runtime-validator-swing/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-validator-swing/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-runtime-validator-swing/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -65,8 +65,8 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-validator-swing</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-runtime-validator-swing</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/jaxx-swing-action/pom.xml
===================================================================
--- jaxx/trunk/jaxx-swing-action/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/jaxx-swing-action/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -11,7 +11,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -81,9 +81,9 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-swing-action</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/jaxx-swing-action</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
Modified: jaxx/trunk/maven-jaxx-plugin/pom.xml
===================================================================
--- jaxx/trunk/maven-jaxx-plugin/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/maven-jaxx-plugin/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -10,7 +10,7 @@
<parent>
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
</parent>
<groupId>org.codelutin.jaxx</groupId>
@@ -144,9 +144,9 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection.child}</connection>
- <developerConnection>${maven.scm.developerConnection.child}</developerConnection>
- <url>${maven.scm.url.child}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/maven-jaxx-plugin</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5/maven-jaxx-plugin</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
</project>
\ No newline at end of file
Modified: jaxx/trunk/pom.xml
===================================================================
--- jaxx/trunk/pom.xml 2009-05-06 15:01:17 UTC (rev 1391)
+++ jaxx/trunk/pom.xml 2009-05-06 15:36:03 UTC (rev 1392)
@@ -14,7 +14,7 @@
<groupId>org.codelutin</groupId>
<artifactId>jaxx</artifactId>
- <version>1.5-SNAPSHOT</version>
+ <version>1.5</version>
<modules>
<module>jaxx-runtime-api</module>
@@ -212,9 +212,9 @@
<!-- *** Build Environment ************************************** -->
<!-- ************************************************************* -->
<scm>
- <connection>${maven.scm.connection}</connection>
- <developerConnection>${maven.scm.developerConnection}</developerConnection>
- <url>${maven.scm.url}</url>
+ <connection>scm:svn:svn://anonymous@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5</connection>
+ <developerConnection>scm:svn:svn+ssh://${username}@labs.libre-entreprise.org/svnroot/buix/jaxx/tags/jaxx-1.5</developerConnection>
+ <url>http://labs.libre-entreprise.org/plugins/scmsvn/viewcvs.php/jaxx/tags/jaxx-…</url>
</scm>
<!-- Maven Environment : Repositories -->
1
0
[Buix-commits] r1391 - in jaxx/trunk: jaxx-example/src/main/java/jaxx/demo jaxx-runtime-swing/src/main/java/jaxx/runtime jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor jaxx-runtime-swing-widget/src/main/resources/i18n
by sletellier@users.labs.libre-entreprise.org 06 May '09
by sletellier@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: sletellier
Date: 2009-05-06 15:01:17 +0000 (Wed, 06 May 2009)
New Revision: 1391
Removed:
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/
Modified:
jaxx/trunk/jaxx-example/src/main/java/jaxx/demo/NumberEditorDemo.jaxx
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java
jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java
Log:
Updating NumberEditor model automatiquely
Modified: jaxx/trunk/jaxx-example/src/main/java/jaxx/demo/NumberEditorDemo.jaxx
===================================================================
--- jaxx/trunk/jaxx-example/src/main/java/jaxx/demo/NumberEditorDemo.jaxx 2009-05-06 14:43:09 UTC (rev 1390)
+++ jaxx/trunk/jaxx-example/src/main/java/jaxx/demo/NumberEditorDemo.jaxx 2009-05-06 15:01:17 UTC (rev 1391)
@@ -40,7 +40,6 @@
property='positifInteger'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getPositifInteger()}'
autoPopup='false'
showPopupButton='true'
showReset='true'/>
@@ -50,7 +49,6 @@
property='positifInteger'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getPositifInteger()}'
autoPopup='true'
showPopupButton='true'
showReset='true'/>
@@ -65,7 +63,6 @@
property='normalInteger'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getNormalInteger()}'
autoPopup='false'
showPopupButton='true'
showReset='true'
@@ -76,7 +73,6 @@
property='normalInteger'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getNormalInteger()}'
autoPopup='true'
showPopupButton='true'
showReset='true'
@@ -92,7 +88,6 @@
property='positifFloat'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getPositifFloat()}'
autoPopup='false'
showPopupButton='true'
showReset='true'/>
@@ -102,7 +97,6 @@
property='positifFloat'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getPositifFloat()}'
autoPopup='true'
showPopupButton='true'
showReset='true'/>
@@ -117,7 +111,6 @@
property='normalFloat'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getNormalFloat()}'
autoPopup='false'
showPopupButton='true'
showReset='true'
@@ -128,7 +121,6 @@
property='normalFloat'
constructorParams='this'
bean='{demoModel}'
- model='{demoModel.getNormalFloat()}'
autoPopup='true'
showPopupButton='true'
showReset='true'
Modified: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-05-06 14:43:09 UTC (rev 1390)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-05-06 15:01:17 UTC (rev 1391)
@@ -149,8 +149,10 @@
// evince the model
model.removeListDataListener(combo);
model.removeAllElements();
- for (Object o : data) {
- model.addElement(o);
+ if (data != null){
+ for (Object o : data) {
+ model.addElement(o);
+ }
}
// attach the model
model.addListDataListener(combo);
@@ -170,8 +172,10 @@
if (firstNull) {
items.add(new Item("null", " ", null, false));
}
- for (Object d : data) {
- items.add(new Item(d.toString(), d.toString(), d, d.equals(select)));
+ if (data != null){
+ for (Object d : data) {
+ items.add(new Item(d.toString(), d.toString(), d, d.equals(select)));
+ }
}
combo.setItems(items);
}
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2009-05-06 14:43:09 UTC (rev 1390)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2009-05-06 15:01:17 UTC (rev 1391)
@@ -25,7 +25,7 @@
<Boolean id='autoPopup' javaBean='false'/>
<!-- showPopupButton property -->
- <Boolean id='showPopupButton' javaBean='true'/>
+ <Boolean id='showPopupButton' javaBean='false'/>
<!-- show reset property -->
<Boolean id='showReset' javaBean='false'/>
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-05-06 14:43:09 UTC (rev 1390)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-05-06 15:01:17 UTC (rev 1391)
@@ -1,6 +1,7 @@
package jaxx.runtime.swing.editor;
import java.awt.Dimension;
+import java.lang.reflect.InvocationTargetException;
import javax.swing.JTextField;
import org.apache.commons.beanutils.PropertyUtils;
import org.apache.commons.lang.math.NumberUtils;
@@ -51,34 +52,52 @@
/** initialise l'ui et les listeners d'évènements. */
public void init() {
+ try {
+ if (editor.getBean() == null) {
+ throw new NullPointerException("can not have a null bean in ui " + editor);
+ }
+ editor.addPropertyChangeListener(MODEL_PROPERTY, new PropertyChangeListener() {
- if (editor.getBean() == null) {
- throw new NullPointerException("can not have a null bean in ui " + editor);
- }
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ if (log.isDebugEnabled()) {
+ log.debug("set new model " + evt.getNewValue() + " for " + editor.getProperty());
+ }
+ setModel((Number) evt.getOldValue(), (Number) evt.getNewValue());
+ }
+ });
+ editor.addPropertyChangeListener(POPUP_VISIBLE_PROPERTY, new PropertyChangeListener() {
- editor.addPropertyChangeListener(MODEL_PROPERTY, new PropertyChangeListener() {
-
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- if (log.isDebugEnabled()) {
- log.debug("set new model " + evt.getNewValue() + " for " + editor.getProperty());
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ setPopupVisible((Boolean) evt.getNewValue());
}
- setModel((Number) evt.getOldValue(), (Number) evt.getNewValue());
- }
- });
- editor.addPropertyChangeListener(POPUP_VISIBLE_PROPERTY, new PropertyChangeListener() {
+ });
+ editor.getTextField().addMouseListener(new PopupListener());
+
+ // Determine si c'est un float
+ Class type = getGetter().getReturnType();
+ editor.setUseFloat(!type.equals(Integer.class) && !type.equals(int.class));
- @Override
- public void propertyChange(PropertyChangeEvent evt) {
- setPopupVisible((Boolean) evt.getNewValue());
+ // Initialise le model
+ if (editor.getModel() == null){
+ Number num = (Number)getGetter().invoke(editor.getBean(), null);
+ editor.setModel(num);
}
- });
- editor.getTextField().addMouseListener(new PopupListener());
-
- // Determine si c'est un float
- Class type = getGetter().getReturnType();
- editor.setUseFloat(!type.equals(Integer.class) && !type.equals(int.class));
-
+
+ /*if (editor.getResetButton().getIcon() == null) {
+ editor.getResetButton().setIcon(SwingUtil.createActionIcon("numbereditor-reset"));
+ }
+ if (editor.getButton().getIcon() == null) {
+ editor.getButton().setIcon(SwingUtil.createActionIcon("numbereditor-calculator"));
+ }*/
+ } catch (IllegalAccessException ex) {
+ log.error(ex);
+ } catch (IllegalArgumentException ex) {
+ log.error(ex);
+ } catch (InvocationTargetException ex) {
+ log.error(ex);
+ }
/*if (editor.getResetButton().getIcon() == null) {
editor.getResetButton().setIcon(SwingUtil.createActionIcon("numbereditor-reset"));
}
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-06 14:43:09 UTC (rev 1390)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-06 15:01:17 UTC (rev 1391)
@@ -24,4 +24,4 @@
numbereditor.action.show.tip=Afficher le pav\u00E9 num\u00E9rique
numbereditor.clearAll=C
numbereditor.clearOne=CE
-numbereditor.toggleSign=+/-
+numbereditor.toggleSign=+/-
\ No newline at end of file
1
0
06 May '09
Author: kmorin
Date: 2009-05-06 14:43:09 +0000 (Wed, 06 May 2009)
New Revision: 1390
Modified:
guix/trunk/guix-test/pom.xml
Log:
Modified: guix/trunk/guix-test/pom.xml
===================================================================
--- guix/trunk/guix-test/pom.xml 2009-05-06 14:42:53 UTC (rev 1389)
+++ guix/trunk/guix-test/pom.xml 2009-05-06 14:43:09 UTC (rev 1390)
@@ -1,19 +1,29 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
- <modelVersion>4.0.0</modelVersion>
+ <modelVersion>4.0.0</modelVersion>
<!-- ************************************************************* -->
<!-- *** POM Relationships *************************************** -->
<!-- ************************************************************* -->
- <parent>
+ <parent>
<groupId>org.nuiton.guix</groupId>
<artifactId>guix</artifactId>
<version>1.0-SNAPSHOT</version>
</parent>
- <artifactId>guix-test</artifactId>
+ <artifactId>guix-test</artifactId>
+ <dependencies>
+ <dependency>
+ <groupId>org.springframework</groupId>
+ <artifactId>spring</artifactId>
+ <version>2.0.5</version>
+ <scope>runtime</scope>
+ </dependency>
+ </dependencies>
+
+
<!-- ************************************************************* -->
<!-- *** Project Information ************************************* -->
<!-- ************************************************************* -->
1
0
[Buix-commits] r1389 - guix/trunk/guix-compiler/src/main/java/org/nuiton/guix
by kmorin@users.labs.libre-entreprise.org 06 May '09
by kmorin@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: kmorin
Date: 2009-05-06 14:42:53 +0000 (Wed, 06 May 2009)
New Revision: 1389
Modified:
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
Log:
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-05-06 07:29:23 UTC (rev 1388)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-05-06 14:42:53 UTC (rev 1389)
@@ -4,6 +4,7 @@
import org.nuiton.guix.compiler.GuixCompiler;
import java.io.File;
import java.io.FileWriter;
+import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -65,7 +66,8 @@
this.targetDirectory = targetDirectory;
if (rootPackage != null) {
this.rootPackage = rootPackage;
- } else {
+ }
+ else {
this.rootPackage = "";
}
if (files != null) {
@@ -75,11 +77,13 @@
if (baseDir != null) {
classNames[i] = rootPackage + "." + path.substring(baseDir.getAbsolutePath().length() + 1,
path.lastIndexOf('.')).replace(File.separatorChar, '.');
- } else {
+ }
+ else {
classNames[i] = path.substring(0, path.lastIndexOf('.'));
}
}
- } else {
+ }
+ else {
classNames = null;
}
}
@@ -118,7 +122,8 @@
if (dotPos != -1) {
destDir = new File(targetDirectory, className.substring(0, dotPos).replace('.', File.separatorChar));
classPackage = className.substring(0, dotPos);
- } else {
+ }
+ else {
destDir = new File(targetDirectory, className);
classPackage = className;
}
@@ -128,7 +133,8 @@
}
continue;
}
- } else {
+ }
+ else {
destDir = file.getParentFile();
classPackage = destDir.getAbsolutePath().replace(File.separatorChar, '.');
}
@@ -141,7 +147,8 @@
if (compiler.isFailed()) {
success = false;
}
- } else {
+ }
+ else {
if (log.isWarnEnabled()) {
log.warn(file.getName() + " has already been compiled.");
}
@@ -160,11 +167,23 @@
}
}
if (success || true) {
- /*XmlPullParserFactory factory =
- XmlPullParserFactory.newInstance(
- System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
- null);*/
+ XmlPullParserFactory factory =
+ XmlPullParserFactory.newInstance(
+ System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
+ null);
+ XmlSerializer serializer = factory.newSerializer();
+ File config = new File(targetDirectory,"config.xml");
+
+ serializer.setOutput(new PrintWriter(config));
+ serializer.startDocument("UTF-8", null);
+ serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-line-separator", "\n");
+ serializer.setProperty("http://xmlpull.org/v1/doc/properties.html#serializer-indentation", "\t");
+ serializer.text("\n");
+ serializer.docdecl(" beans SYSTEM \"http://www.springframework.org/dtd/spring-beans.dtd\"");
+ serializer.text("\n");
+ serializer.startTag("", "beans");
+
for (GuixModelObject mo : rootModelObjects.keySet()) {
//File f = new File(destDir, mo.getClassDescriptor().getName() + "ModelTree.xml");
File out = new File(destDir, mo.getClassDescriptor().getName() + ".java");
@@ -174,6 +193,7 @@
if (log.isInfoEnabled()) {
log.info(mo.getClassDescriptor().getName() + " last modification : " + new Date(rootModelObjects.get(mo).getLastModification()));
}
+
if (rootModelObjects.get(mo).getLastModification() > out.lastModified()) {
if (log.isInfoEnabled()) {
log.info("Generation of " + mo.getClassDescriptor().getName());
@@ -210,10 +230,38 @@
ImplementationGenerator img = new ImplementationGenerator(mo);
img.generate(outImpl);
- } else if (log.isWarnEnabled()) {
+ serializer.startTag("", "bean");
+ serializer.attribute("", "id", out.getName().replace(out.getName().charAt(0),
+ Character.toLowerCase(out.getName().charAt(0))));
+ serializer.attribute("", "class", out.getName() + "Impl");
+ serializer.attribute("", "singleton", "false");
+
+ /*<bean id = "articlesDao" class
+
+ ="istia.st.articles.dao.ArticlesDaoPlainJdbc">
+ <constructor-arg index="0">
+ <value>org.firebirdsql.jdbc.FBDriver</value>
+ </constructor-arg>
+ <constructor-arg index="1">
+ <value>jdbc:firebirdsql:localhost/3050:d:/databases/dbarticles.gdb</value>
+ </constructor-arg>
+ <constructor-arg index="2">
+ <value>someone</value>
+ </constructor-arg>
+ <constructor-arg index="3">
+ <value>somepassword</value>
+ </constructor-arg>
+ </bean>*/
+
+
+ }
+ else
+ if (log.isWarnEnabled()) {
log.warn(mo.getClassDescriptor().getName() + " has already been generated and is up to date.");
}
}
+ serializer.endTag("", "beans");
+ serializer.endDocument();
/*// pass 2
if (!nextStep(LifeCycle.compile_second_pass, success)) {
@@ -299,12 +347,14 @@
e.printStackTrace();
return false;*/
}
- } catch (Throwable e) {
+ }
+ catch (Throwable e) {
e.printStackTrace();
return false;
}
return success;
- } else {
+ }
+ else {
if (log.isWarnEnabled()) {
log.warn("No file to compile");
}
@@ -438,7 +488,8 @@
if (log.isDebugEnabled()) {
log.debug("add script to ClassDescriptor " + classDescriptor);
}
- } else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript())) {
+ }
+ else if (!classDescriptors.get(i).getScript().equals(classDescriptor.getScript())) {
if (log.isDebugEnabled()) {
log.error("ClassDescriptor " + classDescriptor + " script already defined and different !");
}
@@ -451,7 +502,8 @@
if (log.isDebugEnabled()) {
log.debug("add superclass to ClassDescriptor " + classDescriptor);
}
- } else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass())) {
+ }
+ else if (!classDescriptors.get(i).getSuperClass().equals(classDescriptor.getSuperClass())) {
if (log.isErrorEnabled()) {
log.error("ClassDescriptor " + classDescriptor + " superclass already defined and different !");
}
1
0
[Buix-commits] r1388 - in guix/trunk/guix-compiler/src/main/java/org/nuiton/guix: . compiler generator
by kmorin@users.labs.libre-entreprise.org 06 May '09
by kmorin@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: kmorin
Date: 2009-05-06 07:29:23 +0000 (Wed, 06 May 2009)
New Revision: 1388
Added:
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/AbstractClassGenerator.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/GuixGenerator.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/ImplementationGenerator.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/InterfaceGenerator.java
Modified:
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java
Log:
Site
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-05-06 07:28:41 UTC (rev 1387)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/GuixLauncher.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -4,7 +4,6 @@
import org.nuiton.guix.compiler.GuixCompiler;
import java.io.File;
import java.io.FileWriter;
-import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
@@ -14,6 +13,9 @@
import java.util.Map.Entry;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
+import org.nuiton.guix.generator.AbstractClassGenerator;
+import org.nuiton.guix.generator.ImplementationGenerator;
+import org.nuiton.guix.generator.InterfaceGenerator;
import org.nuiton.guix.model.ClassDescriptor;
import org.nuiton.guix.model.GuixModelObject;
import org.nuiton.guix.model.Rule;
@@ -61,19 +63,21 @@
// Set up a simple configuration that logs on the console.
this.files = files;
this.targetDirectory = targetDirectory;
- if(rootPackage != null)
+ if (rootPackage != null) {
this.rootPackage = rootPackage;
- else
+ } else {
this.rootPackage = "";
+ }
if (files != null) {
classNames = new String[files.length];
for (int i = 0; i < files.length; i++) {
String path = files[i].getAbsolutePath();
- if(baseDir != null)
+ if (baseDir != null) {
classNames[i] = rootPackage + "." + path.substring(baseDir.getAbsolutePath().length() + 1,
- path.lastIndexOf('.')).replace(File.separatorChar,'.');
- else
- classNames[i] = path.substring(0,path.lastIndexOf('.'));
+ path.lastIndexOf('.')).replace(File.separatorChar, '.');
+ } else {
+ classNames[i] = path.substring(0, path.lastIndexOf('.'));
+ }
}
} else {
classNames = null;
@@ -93,7 +97,7 @@
guixFiles.addAll(Arrays.asList(files));
guixFileClassNames.addAll(Arrays.asList(classNames));
boolean success = true;
-
+
try {
assert guixFiles.size() == guixFileClassNames.size();
@@ -126,7 +130,7 @@
}
} else {
destDir = file.getParentFile();
- classPackage = destDir.getAbsolutePath().replace(File.separatorChar,'.');
+ classPackage = destDir.getAbsolutePath().replace(File.separatorChar, '.');
}
//compile the file
GuixCompiler compiler = new GuixCompiler(file, this, classPackage);
@@ -156,24 +160,34 @@
}
}
if (success || true) {
- XmlPullParserFactory factory =
- XmlPullParserFactory.newInstance(
- System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
- null);
+ /*XmlPullParserFactory factory =
+ XmlPullParserFactory.newInstance(
+ System.getProperty(XmlPullParserFactory.PROPERTY_NAME),
+ null);*/
for (GuixModelObject mo : rootModelObjects.keySet()) {
- File f = new File(destDir, mo.getClassDescriptor().getName() + "ModelTree.xml");
+ //File f = new File(destDir, mo.getClassDescriptor().getName() + "ModelTree.xml");
+ File out = new File(destDir, mo.getClassDescriptor().getName() + ".java");
+ File outAbstract = new File(destDir, mo.getClassDescriptor().getName() + "Abstract.java");
+ File outImpl = new File(destDir, mo.getClassDescriptor().getName() + "Impl.java");
+
if (log.isInfoEnabled()) {
log.info(mo.getClassDescriptor().getName() + " last modification : " + new Date(rootModelObjects.get(mo).getLastModification()));
}
- if (rootModelObjects.get(mo).getLastModification() > f.lastModified()) {
+ if (rootModelObjects.get(mo).getLastModification() > out.lastModified()) {
if (log.isInfoEnabled()) {
log.info("Generation of " + mo.getClassDescriptor().getName());
}
- if (!f.exists()) {
- f.createNewFile();
+ if (!out.exists()) {
+ out.createNewFile();
}
- XmlSerializer serializer = factory.newSerializer();
+ if (!outAbstract.exists()) {
+ outAbstract.createNewFile();
+ }
+ if (!outImpl.exists()) {
+ outImpl.createNewFile();
+ }
+ /*XmlSerializer serializer = factory.newSerializer();
XmlSerializer cssSerializer = factory.newSerializer();
serializer.setOutput(new PrintWriter(f));
@@ -185,7 +199,17 @@
writeModelTree(serializer, mo, cssSerializer, destDir);
- serializer.endDocument();
+ serializer.endDocument();*/
+
+ InterfaceGenerator ing = new InterfaceGenerator(mo);
+ ing.generate(out);
+
+ AbstractClassGenerator acg = new AbstractClassGenerator(mo);
+ acg.generate(outAbstract);
+
+ ImplementationGenerator img = new ImplementationGenerator(mo);
+ img.generate(outImpl);
+
} else if (log.isWarnEnabled()) {
log.warn(mo.getClassDescriptor().getName() + " has already been generated and is up to date.");
}
@@ -393,14 +417,11 @@
* and package has a different script or superclass
*/
public boolean registerClassDescriptor(ClassDescriptor classDescriptor) {
- if(classDescriptor == null || classDescriptor.getName() == null)
+ if (classDescriptor == null || classDescriptor.getName() == null) {
return false;
+ }
int i = 0;
- while (i < classDescriptors.size()
- && (!classDescriptors.get(i).getName().equals(classDescriptor.getName())
- || (classDescriptors.get(i).getPackageName() != null
- && classDescriptor.getPackageName() != null
- && !classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName())))) {
+ while (i < classDescriptors.size() && (!classDescriptors.get(i).getName().equals(classDescriptor.getName()) || (classDescriptors.get(i).getPackageName() != null && classDescriptor.getPackageName() != null && !classDescriptors.get(i).getPackageName().equals(classDescriptor.getPackageName())))) {
i++;
}
//if the ClassDescriptor does not exist
Modified: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-05-06 07:28:41 UTC (rev 1387)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/compiler/GuixCompiler.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -41,8 +41,12 @@
private ScriptHandler scriptHandler = new ScriptHandler();
/** Root of the model */
private GuixModelObject rootMO;
- /** */
+ /** Long representing the date and time of the last modification of any file
+ * used during compilation */
private long lastModification;
+ /** Integer used to give an id to the objects which don't have one specified
+ * by the user */
+ private int index = 1;
/*------------------------------------------------------------------------*/
/*-- Constructor methods -------------------------------------------------*/
@@ -216,9 +220,12 @@
tagName = xpp.getName();
}
+ String id = (xpp.getAttributeValue("", "id") != null ?
+ xpp.getAttributeValue("", "id")
+ : "$" + tagName + index++);
//create the GuixModelObject representing the tag
- GuixModelObject mo = new GuixModelObject(xpp.getAttributeValue("", "id"),
- javaDoc, xpp.getAttributeValue("", "styleClass"));
+ GuixModelObject mo = new GuixModelObject(id, javaDoc,
+ xpp.getAttributeValue("", "styleClass"));
mo.setParent(previousMO);
mo.setClassDescriptor(new ClassDescriptor(tagName, tagPackageName));
mo.setChildren(new ArrayList<GuixModelObject>());
Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/AbstractClassGenerator.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/AbstractClassGenerator.java (rev 0)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/AbstractClassGenerator.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -0,0 +1,81 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.guix.generator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import org.nuiton.guix.model.GuixModelObject;
+
+/**
+ *
+ * @author morin
+ */
+public class AbstractClassGenerator extends GuixGenerator {
+
+ public AbstractClassGenerator(GuixModelObject gmo) {
+ super(gmo);
+ }
+
+ @Override
+ public void generate(File out) {
+ super.generate();
+
+ sb.append("\npublic abstract class ");
+ sb.append(gmo.getClassDescriptor().getName());
+ sb.append("Abstract {\n");
+
+ addAttributes(gmo);
+
+ addGettersAndSetters(gmo);
+
+ sb.append("\n\n}");
+
+ saveFile(out);
+ }
+
+ @Override
+ protected void addGettersAndSetters(GuixModelObject gmo) {
+ for (GuixModelObject child : gmo.getChildren()) {
+ sb.append(child.getId().startsWith("$") ? "\n\n\tprotected " : "\n\n\tpublic ");
+ sb.append(child.getClassDescriptor().getName());
+ sb.append(" get");
+ sb.append(child.getId().replace(child.getId().charAt(0),
+ Character.toUpperCase(child.getId().charAt(0))));
+ sb.append("() {\n\t\treturn this.");
+ sb.append((child.getId() != null && !child.getId().equals("")) ? child.getId() : "test");
+ sb.append(";\n\t}");
+
+ sb.append(child.getId().startsWith("$") ? "\n\n\tprotected " : "\n\n\tpublic ");
+ sb.append("void set");
+ sb.append(child.getId().replace(child.getId().charAt(0),
+ Character.toUpperCase(child.getId().charAt(0))));
+ sb.append("(");
+ sb.append(child.getClassDescriptor().getName());
+ sb.append(" ");
+ sb.append(child.getId());
+ sb.append("){\n\t\tthis.");
+ sb.append(child.getId());
+ sb.append(" = ");
+ sb.append(child.getId());
+ sb.append(";\n\t}");
+
+ addGettersAndSetters(child);
+ }
+ }
+
+ private void addAttributes(GuixModelObject gmo) {
+ for (GuixModelObject child : gmo.getChildren()) {
+ sb.append("\tprivate ");
+ sb.append(child.getClassDescriptor().getName());
+ sb.append(" ");
+ sb.append(child.getId());
+ sb.append(";\n");
+ addAttributes(child);
+ }
+ }
+
+}
Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/GuixGenerator.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/GuixGenerator.java (rev 0)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/GuixGenerator.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -0,0 +1,70 @@
+package org.nuiton.guix.generator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.nuiton.guix.model.GuixModelObject;
+
+/**
+ * GuixGenerator
+ *
+ */
+public abstract class GuixGenerator {
+
+ /** log */
+ protected Log log = LogFactory.getLog(GuixGenerator.class);
+ protected GuixModelObject gmo;
+ protected StringBuffer sb = new StringBuffer();
+ protected List<String> classes = new ArrayList<String>();
+
+ public GuixGenerator(GuixModelObject gmo) {
+ this.gmo = gmo;
+ }
+
+ public abstract void generate(File out);
+
+ protected void generate() {
+ sb.append("package ");
+ sb.append(gmo.getClassDescriptor().getPackageName());
+ sb.append(";\n\n");
+
+ addImports(gmo);
+ }
+
+ protected abstract void addGettersAndSetters(GuixModelObject gmo);
+
+ protected void addImports(GuixModelObject gmo) {
+ for (GuixModelObject child : gmo.getChildren()) {
+ String fqn = child.getClassDescriptor().getPackageName() + "." + child.getClassDescriptor().getName();
+ if (!classes.contains(fqn)) {
+ classes.add(fqn);
+ sb.append("import " + fqn + ";\n");
+ }
+ addImports(child);
+ }
+ }
+
+ protected void saveFile(File out) {
+ FileWriter fw = null;
+ try {
+ fw = new FileWriter(out);
+ fw.write(sb.toString());
+ fw.close();
+ } catch (IOException ex) {
+ if(log.isErrorEnabled())
+ log.error(ex);
+ } finally {
+ try {
+ fw.close();
+ } catch (IOException ex) {
+ Logger.getLogger(GuixGenerator.class.getName()).log(Level.SEVERE, null, ex);
+ }
+ }
+ }
+}
Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/ImplementationGenerator.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/ImplementationGenerator.java (rev 0)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/ImplementationGenerator.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -0,0 +1,41 @@
+/*
+ * To change this template, choose Tools | Templates
+ * and open the template in the editor.
+ */
+
+package org.nuiton.guix.generator;
+
+import java.io.File;
+import java.io.IOException;
+import org.nuiton.guix.model.GuixModelObject;
+
+/**
+ *
+ * @author morin
+ */
+public class ImplementationGenerator extends GuixGenerator {
+
+ public ImplementationGenerator(GuixModelObject gmo) {
+ super(gmo);
+ }
+
+ @Override
+ public void generate(File out) {
+ super.generate();
+
+ sb.append("\npublic class ");
+ sb.append(gmo.getClassDescriptor().getName());
+ sb.append("Impl extends ");
+ sb.append(gmo.getClassDescriptor().getName());
+ sb.append("Abstract {\n");
+
+ sb.append("\n\n}");
+
+ saveFile(out);
+ }
+
+ @Override
+ protected void addGettersAndSetters(GuixModelObject gmo) {
+ }
+
+}
Added: guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/InterfaceGenerator.java
===================================================================
--- guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/InterfaceGenerator.java (rev 0)
+++ guix/trunk/guix-compiler/src/main/java/org/nuiton/guix/generator/InterfaceGenerator.java 2009-05-06 07:29:23 UTC (rev 1388)
@@ -0,0 +1,62 @@
+package org.nuiton.guix.generator;
+
+import java.io.File;
+import java.io.FileWriter;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+import org.nuiton.guix.model.GuixModelObject;
+
+/**
+ * Generator of interfaces
+ *
+ * @author morin
+ */
+public class InterfaceGenerator extends GuixGenerator {
+
+ public InterfaceGenerator(GuixModelObject gmo) {
+ super(gmo);
+ }
+
+ @Override
+ public void generate(File out) {
+ super.generate();
+
+ sb.append("\npublic interface ");
+ sb.append(gmo.getClassDescriptor().getName());
+ sb.append(" {\n");
+
+ addGettersAndSetters(gmo);
+
+ sb.append("\n\n}");
+
+ saveFile(out);
+ }
+
+ @Override
+ protected void addGettersAndSetters(GuixModelObject gmo) {
+ for (GuixModelObject child : gmo.getChildren()) {
+ sb.append(child.getId().startsWith("$") ? "\n\n\tprotected " : "\n\n\tpublic ");
+ sb.append(child.getClassDescriptor().getName());
+ sb.append(" get");
+ sb.append(child.getId().replace(child.getId().charAt(0),
+ Character.toUpperCase(child.getId().charAt(0))));
+ sb.append("();");
+
+ sb.append(child.getId().startsWith("$") ? "\n\n\tprotected " : "\n\n\tpublic ");
+ sb.append("void set");
+ sb.append(child.getId().replace(child.getId().charAt(0),
+ Character.toUpperCase(child.getId().charAt(0))));
+ sb.append("(");
+ sb.append(child.getClassDescriptor().getName());
+ sb.append(" ");
+ sb.append(child.getId());
+ sb.append(");");
+
+ addGettersAndSetters(child);
+ }
+ }
+
+}
1
0
Author: kmorin
Date: 2009-05-06 07:28:41 +0000 (Wed, 06 May 2009)
New Revision: 1387
Modified:
guix/trunk/pom.xml
Log:
Site
Modified: guix/trunk/pom.xml
===================================================================
--- guix/trunk/pom.xml 2009-05-06 05:44:44 UTC (rev 1386)
+++ guix/trunk/pom.xml 2009-05-06 07:28:41 UTC (rev 1387)
@@ -21,15 +21,9 @@
<module>guix-compiler</module>
<module>guix-maven-plugin</module>
<module>guix-test</module>
- </modules>
+
+ </modules>
- <!--dependencies>
- <dependency>
- <groupId>org.codelutin</groupId>
- <artifactId>lutinutil</artifactId>
- </dependency>
- </dependencies-->
-
<dependencyManagement>
<dependencies>
@@ -178,10 +172,6 @@
</plugins>
</pluginManagement>
- <plugins>
-
- </plugins>
-
</build>
<!-- ************************************************************* -->
@@ -246,4 +236,4 @@
</profile>
</profiles>
-</project>
\ No newline at end of file
+</project>
1
0
[Buix-commits] r1383 - jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor
by sletellier@users.labs.libre-entreprise.org 06 May '09
by sletellier@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: sletellier
Date: 2009-05-04 23:09:13 +0000 (Mon, 04 May 2009)
New Revision: 1383
Modified:
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java
Log:
Bug input start with "-" fixed
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-05-04 19:39:58 UTC (rev 1382)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2009-05-04 23:09:13 UTC (rev 1383)
@@ -130,6 +130,8 @@
boolean endWithDot = false;
+ boolean isLess = false;
+
Number newValue = null;
if (s.trim().isEmpty()) {
@@ -139,6 +141,9 @@
} else if (s.endsWith(".")) {
s += "0";
endWithDot = true;
+ } else if (s.length() == 1 && s.startsWith("-")) {
+ s += "0";
+ isLess = true;
}
if (s != null && NumberUtils.isNumber(s)) {
@@ -181,8 +186,10 @@
if (log.isDebugEnabled()) {
log.debug("can apply new model value : " + newValue);
}
- // on peut mettre a jour le model
- editor.setModel(newValue);
+ if (!isLess){
+ // on peut mettre a jour le model
+ editor.setModel(newValue);
+ }
if (endWithDot) {
editor.setModelText(s.substring(0, s.length() - 1));
field.setCaretPosition(oldPosition);
2
1
[Buix-commits] r1385 - in jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing: . widget
by sletellier@users.labs.libre-entreprise.org 06 May '09
by sletellier@users.labs.libre-entreprise.org 06 May '09
06 May '09
Author: sletellier
Date: 2009-05-05 00:02:46 +0000 (Tue, 05 May 2009)
New Revision: 1385
Added:
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/ErrorDialogUI.jaxx
Log:
Adding ErrorDialog widget
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/ErrorDialogUI.jaxx
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/ErrorDialogUI.jaxx (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/widget/ErrorDialogUI.jaxx 2009-05-05 00:02:46 UTC (rev 1385)
@@ -0,0 +1,66 @@
+<JDialog title='observe.title.error.dialog' modal='true'>
+ <script><![CDATA[
+protected static ErrorDialogUI instance;
+public static void init(Frame frame) {
+ disposeUI();
+ instance = new ErrorDialogUI(frame);
+ instance.setModalityType(ModalityType.TOOLKIT_MODAL);
+}
+public static void showError(Exception e) {
+ if (instance == null) {
+ instance = new ErrorDialogUI();
+ }
+ instance.getErrorMessage().setText(e.getMessage());
+ StringWriter w = new StringWriter();
+ e.printStackTrace(new PrintWriter(w));
+ instance.getErrorStack().setText(w.toString());
+ instance.getErrorStack().setCaretPosition(0);
+ instance.pack();
+ jaxx.runtime.SwingUtil.center(instance.getContextValue(JFrame.class,"parent"), instance);
+ instance.setVisible(true);
+}
+public static void disposeUI() {
+ instance=null;
+}
+
+public ErrorDialogUI(Frame frame) {
+ super(frame);
+ if (frame!=null) {
+ setContextValue(frame);
+ setContextValue(frame,"parent");
+ }
+
+}
+
+JRootPane rootPane = getRootPane();
+rootPane.setDefaultButton(close);
+rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close");
+rootPane.getActionMap().put("close", close.getAction());
+ ]]></script>
+ <Table>
+ <row fill='both'>
+ <cell>
+ <JPanel>
+ <JLabel text='observe.message.error.dialog'/>
+ </JPanel>
+ </cell>
+ </row>
+ <row fill='both'>
+ <cell>
+ <JLabel id='errorMessage'/>
+ </cell>
+ </row>
+ <row fill='both' weightx='1' weighty='1'>
+ <cell>
+ <JScrollPane width='600' height='200'>
+ <JTextArea id='errorStack' editable='false' font-size='9'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row fill='horizontal'>
+ <cell>
+ <JButton id='close' text='observe.action.close' onActionPerformed='dispose()'/>
+ </cell>
+ </row>
+ </Table>
+</JDialog>
2
1
06 May '09
Author: tchemit
Date: 2009-05-06 05:44:44 +0000 (Wed, 06 May 2009)
New Revision: 1386
Added:
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler.java
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/ErrorDialogUI.jaxx
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.css
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.jaxx
jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditorHandler.java
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/BooleanCellRenderer.java
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EmptyNumberTableCellRenderer.java
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EnumTableCellRenderer.java
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/MyDefaultCellEditor.java
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/OneClicListSelectionModel.java
jaxx/trunk/jaxx-runtime-swing/src/main/resources/icons/action-delete.png
Modified:
jaxx/trunk/changelog.txt
jaxx/trunk/jaxx-runtime-api/changelog.txt
jaxx/trunk/jaxx-runtime-api/pom.xml
jaxx/trunk/jaxx-runtime-swing-widget/pom.xml
jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties
jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
jaxx/trunk/jaxx-runtime-swing/changelog.txt
jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java
jaxx/trunk/jaxx-runtime-validator/changelog.txt
jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/BeanValidator.java
jaxx/trunk/pom.xml
Log:
add some stuff from ObServe + more (see in changelogs...)
TODO : make an example for new editors
Modified: jaxx/trunk/changelog.txt
===================================================================
--- jaxx/trunk/changelog.txt 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/changelog.txt 2009-05-06 05:44:44 UTC (rev 1386)
@@ -1,4 +1,5 @@
1.5
+ * 20090506 [chemit] - super-pom has no dependencies, use lutinutil 1.0.5
* 20090404 [chemit] - introduce module jaxx-runtime-swing-widget for swing widgets designed with jaxx.
1.4
Modified: jaxx/trunk/jaxx-runtime-api/changelog.txt
===================================================================
--- jaxx/trunk/jaxx-runtime-api/changelog.txt 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-api/changelog.txt 2009-05-06 05:44:44 UTC (rev 1386)
@@ -1,3 +1,6 @@
+1.5
+ * 20090506 [chemit] - super-pom has no dependencies
+
1.3 chemit 20090409
* 20090404 [chemit] - introduce DataContext class
* 20090331 [chemit] - introduce DecoratorUtils class
Modified: jaxx/trunk/jaxx-runtime-api/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-api/pom.xml 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-api/pom.xml 2009-05-06 05:44:44 UTC (rev 1386)
@@ -19,6 +19,11 @@
<dependencies>
<dependency>
+ <groupId>org.codelutin</groupId>
+ <artifactId>lutinutil</artifactId>
+ </dependency>
+
+ <dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
</dependency>
Modified: jaxx/trunk/jaxx-runtime-swing/changelog.txt
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/changelog.txt 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-swing/changelog.txt 2009-05-06 05:44:44 UTC (rev 1386)
@@ -1,3 +1,6 @@
+1.5
+ * 20090506 [chemit] - add some usefull renderer and other stuffs
+
1.3 chemit 20090409
* 20090404 [chemit] - introduce dimension factory in SwingUtil for min and max dimensions
* 20090327 [chemit] - add javax help mecanism
Modified: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/SwingUtil.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -32,15 +32,22 @@
import java.util.Map.Entry;
import java.util.NoSuchElementException;
import java.util.Properties;
+import javax.swing.DefaultListCellRenderer;
import javax.swing.Icon;
import javax.swing.ImageIcon;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
+import javax.swing.JList;
import javax.swing.JRootPane;
import javax.swing.JTabbedPane;
import javax.swing.UIManager;
import javax.swing.UnsupportedLookAndFeelException;
+import javax.swing.table.DefaultTableCellRenderer;
+import jaxx.runtime.swing.BooleanCellRenderer;
+import jaxx.runtime.swing.DecoratorTableCellRenderer;
+import jaxx.runtime.swing.EmptyNumberTableCellRenderer;
+import jaxx.runtime.swing.EnumTableCellRenderer;
import jaxx.runtime.swing.I18nTableCellRenderer;
import jaxx.runtime.swing.Item;
import jaxx.runtime.swing.JAXXComboBox;
@@ -197,12 +204,12 @@
* @param component the component to box
* @return the {@link org.jdesktop.jxlayer.JXLayer} boxing the component
*/
- public static JXLayer boxComponentWithJxLayer(JComponent component) {
- JXLayer layer = getLayer(component);
+ public static JXLayer<?> boxComponentWithJxLayer(JComponent component) {
+ JXLayer<?> layer = getLayer(component);
if (layer != null) {
return layer;
}
- layer = new org.jdesktop.jxlayer.JXLayer();
+ layer = new org.jdesktop.jxlayer.JXLayer<JComponent>();
layer.add(component);
return layer;
}
@@ -234,7 +241,7 @@
public static boolean isLayered(JComponent comp) {
Container parent = comp.getParent();
- return parent != null && parent instanceof JXLayer;
+ return parent != null && parent instanceof JXLayer<?>;
}
/**
@@ -250,7 +257,7 @@
* @param container le container ou rechercher les composants d'edition
* @return le dictionnaire des composants recherches.
*/
- public static Map<String, JComponent> lookingForEditor(Class clazz, Container container) {
+ public static Map<String, JComponent> lookingForEditor(Class<?> clazz, Container container) {
Map<String, JComponent> result = new HashMap<String, JComponent>();
try {
// looking for all component with name set
@@ -552,8 +559,8 @@
if (rect == null || rect.width == 0 || rect.height == 0) {
rect = comp.getBounds();
}
- if (comp instanceof JXLayer) {
- JXLayer layer = (JXLayer) comp;
+ if (comp instanceof JXLayer<?>) {
+ JXLayer<?> layer = (JXLayer<?>) comp;
comp = layer.getView();
}
if (comp instanceof Container) {
@@ -575,8 +582,8 @@
if (rect == null || rect.width == 0 || rect.height == 0) {
rect = comp.getBounds();
}
- if (comp instanceof JXLayer) {
- JXLayer layer = (JXLayer) comp;
+ if (comp instanceof JXLayer<?>) {
+ JXLayer<?> layer = (JXLayer<?>) comp;
comp = layer.getView();
}
if (comp instanceof Container) {
@@ -592,4 +599,56 @@
return cont;
}
}
+
+ /**
+ * Génère un renderer de liste graphique basée sur un décorateur donné.
+ *
+ * @param <O> le type des données gérées par le décorateur
+ * @param decorator le décorateur à encapsuler
+ * @return le nouveau renderer
+ * @see Decorator
+ */
+ public static <O> DefaultListCellRenderer newDecoratedListCellRenderer(final Decorator<O> decorator) {
+ return new DefaultListCellRenderer() {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Component getListCellRendererComponent(JList list, Object value, int index, boolean isSelected, boolean cellHasFocus) {
+ String decorated;
+ if (value instanceof String) {
+ decorated = (String) value;
+ } else {
+ decorated = decorator.toString(value);
+ }
+ JComponent component = (JComponent) super.getListCellRendererComponent(list, decorated, index, isSelected, cellHasFocus);
+ return component;
+ }
+ };
+ }
+
+ public static TableCellRenderer newDeleteCellRenderer(DefaultTableCellRenderer renderer) {
+ Icon icon = UIManager.getIcon("Table.removeIcon");
+ if (icon == null) {
+ // try with default icon
+ icon = createActionIcon("delete");
+ }
+ return new BooleanCellRenderer(renderer, icon);
+ }
+
+ public static TableCellRenderer newBooleanTableCellRenderer(DefaultTableCellRenderer renderer) {
+ return new BooleanCellRenderer(renderer);
+ }
+
+ public static DecoratorTableCellRenderer newDecorateTableCellRenderer(TableCellRenderer renderer, Decorator<?> decorator) {
+ return new DecoratorTableCellRenderer(renderer, decorator);
+ }
+
+ public static EmptyNumberTableCellRenderer newEmptyNumberTableCellRenderer(TableCellRenderer renderer) {
+ return new EmptyNumberTableCellRenderer(renderer);
+ }
+
+ public static <E extends Enum<E>> EnumTableCellRenderer<E> newEnumTableCellRenderer(TableCellRenderer renderer,Class<E> enumClass) {
+ return new EnumTableCellRenderer<E>(renderer,enumClass);
+ }
}
Added: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/BooleanCellRenderer.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/BooleanCellRenderer.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/BooleanCellRenderer.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,61 @@
+package jaxx.runtime.swing;
+
+import javax.swing.Icon;
+import javax.swing.JCheckBox;
+import javax.swing.JComponent;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Component;
+
+/** @author chemit
+ * @since 1.5
+ */
+public class BooleanCellRenderer extends JPanel implements TableCellRenderer {
+
+ private static final long serialVersionUID = 1L;
+ protected TableCellRenderer defaultDelegate;
+ protected JCheckBox checkBox;
+
+ public BooleanCellRenderer(TableCellRenderer delegate) {
+ //super(new BorderLayout());
+ this.checkBox = new JCheckBox();
+ add(checkBox, BorderLayout.CENTER);
+ checkBox.setHorizontalAlignment(JLabel.CENTER);
+ checkBox.setBorderPainted(true);
+ this.defaultDelegate = delegate;
+ }
+
+ public BooleanCellRenderer(TableCellRenderer delegate, Icon icon) {
+ //super(new BorderLayout());
+ this.checkBox = new JCheckBox(icon);
+ add(checkBox, BorderLayout.NORTH);
+ checkBox.setHorizontalAlignment(JLabel.CENTER);
+ checkBox.setVerticalTextPosition(JLabel.TOP);
+ checkBox.setBorderPainted(true);
+ this.defaultDelegate = delegate;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ ((JComponent) defaultDelegate).setBackground(null);
+ JComponent render = (JComponent) defaultDelegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ if (isSelected) {
+ setForeground(table.getSelectionForeground());
+ setBackground(table.getSelectionBackground());
+ } else {
+ setForeground(render.getForeground());
+ setBackground(render.getBackground());
+ //fixme make this works... and remove the test
+ if (row % 2 == 1) {
+ setBackground(Color.WHITE);
+ }
+ }
+ checkBox.setSelected((value != null && (Boolean) value));
+ setBorder(render.getBorder());
+ return this;
+ }
+}
Added: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EmptyNumberTableCellRenderer.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EmptyNumberTableCellRenderer.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EmptyNumberTableCellRenderer.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,37 @@
+package jaxx.runtime.swing;
+
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import java.awt.Component;
+import javax.swing.table.DefaultTableCellRenderer;
+
+/**
+ * A {@link TableCellRenderer} which does not display numbers when they are
+ * equals to 0.
+ *
+ * @author chemit
+ * @since 1.5
+ */
+public class EmptyNumberTableCellRenderer implements TableCellRenderer {
+
+ protected final Integer ZERO = 0;
+ protected final Float ZEROF = 0F;
+ protected final Double ZEROD = 0D;
+ private TableCellRenderer delegate;
+
+ public EmptyNumberTableCellRenderer() {
+ this(new DefaultTableCellRenderer());
+ }
+
+ public EmptyNumberTableCellRenderer(TableCellRenderer delegate) {
+ this.delegate = delegate;
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+ if (value == null || ZERO.equals(value) || ZEROF.equals(value) || ZEROD.equals(value)) {
+ value = null;
+ }
+ return delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ }
+}
Added: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EnumTableCellRenderer.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EnumTableCellRenderer.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/EnumTableCellRenderer.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,47 @@
+package jaxx.runtime.swing;
+
+import javax.swing.JTable;
+import javax.swing.table.TableCellRenderer;
+import java.awt.Component;
+import java.util.EnumSet;
+
+/**
+ *
+ *
+ * A {@link TableCellRenderer} which displays enum values from their ordinal value.
+ *
+ * @param <E> le type de l'énumération.
+ *
+ * @author chemit
+ * @since 1.5
+ */
+public class EnumTableCellRenderer<E extends Enum<E>> implements TableCellRenderer {
+
+ private TableCellRenderer delegate;
+ private EnumSet<E> enumValues;
+
+ public EnumTableCellRenderer(TableCellRenderer delegate, Class<E> enumClass) {
+ this.delegate = delegate;
+ this.enumValues = EnumSet.allOf(enumClass);
+ }
+
+ @Override
+ public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
+
+ if (value != null) {
+ //FIXME : should be also able to read it by name ?
+ Integer ordinal = Integer.valueOf(value + "");
+ if (ordinal == -1) {
+ value = null;
+ } else {
+ for (E enumValue : enumValues) {
+ if (ordinal == enumValue.ordinal()) {
+ value = enumValue;
+ break;
+ }
+ }
+ }
+ }
+ return delegate.getTableCellRendererComponent(table, value, isSelected, hasFocus, row, column);
+ }
+}
\ No newline at end of file
Added: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/MyDefaultCellEditor.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/MyDefaultCellEditor.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/MyDefaultCellEditor.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,104 @@
+package jaxx.runtime.swing;
+
+import org.codelutin.util.EnumEditor;
+
+import javax.swing.DefaultCellEditor;
+import javax.swing.Icon;
+import javax.swing.JCheckBox;
+import javax.swing.JComboBox;
+import javax.swing.JTable;
+import javax.swing.JTextField;
+import javax.swing.table.TableCellEditor;
+import java.awt.Component;
+
+/**
+ * @author chemit
+ * @since 1.5
+ */
+public class MyDefaultCellEditor extends DefaultCellEditor {
+
+ private static final long serialVersionUID = 1L;
+
+ public static TableCellEditor newTextEditor() {
+ return new MyDefaultCellEditor(new JTextField());
+ }
+
+ public static TableCellEditor newBooleanEditor() {
+ return new MyDefaultCellEditor(new JCheckBox());
+ }
+
+ public static TableCellEditor newListEditor() {
+ return newListEditor(new JComboBox());
+ }
+
+ public static TableCellEditor newListEditor(JComboBox editor) {
+ return new MyDefaultCellEditor(editor);
+ }
+
+ public static TableCellEditor newEnumEditor(EnumEditor editor) {
+ return new MyDefaultCellEditor(editor) {
+
+ private static final long serialVersionUID = 1L;
+
+ @Override
+ public Object getCellEditorValue() {
+ Object value = super.getCellEditorValue();
+ if (value != null) {
+ value = ((Enum) value).ordinal();
+ } else {
+ value = -1;
+ }
+ return value;
+ }
+ };
+ }
+
+ public static TableCellEditor newBooleanEditor(Icon icon) {
+ return new MyDefaultCellEditor(new JCheckBox(icon));
+ }
+
+ public static TableCellEditor newBooleanEditor(Icon icon, boolean requireSelect) {
+ TableCellEditor cellEditor = newBooleanEditor(icon);
+ ((MyDefaultCellEditor) cellEditor).setRequireSelect(requireSelect);
+ return cellEditor;
+ }
+
+ public static TableCellEditor newBooleanEditor(boolean requireSelect) {
+ TableCellEditor cellEditor = newBooleanEditor();
+ ((MyDefaultCellEditor) cellEditor).setRequireSelect(requireSelect);
+ return cellEditor;
+ }
+ protected boolean requireSelect = true;
+
+ @Override
+ public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
+ if (!isSelected && requireSelect) {
+ // force to have select the cell before editing, a way to not modify edition for nothing...
+ return null;
+ }
+ return super.getTableCellEditorComponent(table, value, isSelected, row, column);
+ }
+
+ public boolean isRequireSelect() {
+ return requireSelect;
+ }
+
+ public void setRequireSelect(boolean requireSelect) {
+ this.requireSelect = requireSelect;
+ }
+
+ protected MyDefaultCellEditor(JTextField textField) {
+ super(textField);
+ setClickCountToStart(1);
+ }
+
+ protected MyDefaultCellEditor(JCheckBox checkBox) {
+ super(checkBox);
+ setClickCountToStart(1);
+ }
+
+ protected MyDefaultCellEditor(JComboBox comboBox) {
+ super(comboBox);
+ setClickCountToStart(1);
+ }
+}
Added: jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/OneClicListSelectionModel.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/OneClicListSelectionModel.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing/src/main/java/jaxx/runtime/swing/OneClicListSelectionModel.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,181 @@
+package jaxx.runtime.swing;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.ListModel;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.ListSelectionListener;
+import java.util.Arrays;
+
+/**
+ * @author chemit
+ * @since 1.5
+ */
+public class OneClicListSelectionModel implements ListSelectionModel {
+
+ /** to use log facility, just put in your code: log.info("..."); */
+ static private Log log = LogFactory.getLog(OneClicListSelectionModel.class);
+ protected ListSelectionModel delegate;
+ protected final ListModel model;
+ private boolean[] _states;
+
+ public OneClicListSelectionModel(ListSelectionModel delegate, ListModel model) {
+ this.delegate = delegate;
+ this.model = model;
+ delegate.clearSelection();
+ }
+
+ protected boolean[] getStates(int selectedIndex) {
+ int max = model.getSize();
+ if (_states == null || _states.length != max) {
+ _states = new boolean[max];
+ } else {
+ Arrays.fill(_states, false);
+ }
+ for (int i = 0; i < max; i++) {
+ _states[i] = i != selectedIndex && delegate.isSelectedIndex(i);
+ }
+ return _states;
+ }
+
+ @Override
+ public void setSelectionInterval(int index0, int index1) {
+ if (index0 != index1) {
+ // not a single selection (come from a click)
+ // use default behaviour
+ delegate.setSelectionInterval(index0, index1);
+ return;
+ }
+ delegate.setValueIsAdjusting(true);
+
+ try {
+ int max = model.getSize();
+
+ if (log.isDebugEnabled()) {
+ log.debug("single [index:" + index0 + "] [selected:" + isSelectedIndex(index0) + "] [size:" + max + "] [anchor:" + delegate.getAnchorSelectionIndex() + "] [lead:" + delegate.getLeadSelectionIndex() + "]");
+ }
+
+ if (!isSelectedIndex(index0)) {
+ // select it
+ delegate.addSelectionInterval(index0, index1);
+ return;
+ }
+ if (max == index0) {
+ // last selected index, so can directly remove it
+ delegate.removeIndexInterval(index0, index0);
+ return;
+ }
+
+ // must recompute the selection removing only the index0 item
+ boolean[] state = getStates(index0);
+
+ if (log.isDebugEnabled()) {
+ log.debug("state : " + Arrays.toString(state));
+ }
+ delegate.clearSelection();
+ for (int i = 0; i < max; i++) {
+ if (state[i]) {
+ delegate.addSelectionInterval(i, i);
+ }
+ }
+ } finally {
+ delegate.setValueIsAdjusting(false);
+ }
+ }
+
+ @Override
+ public void addSelectionInterval(int index0, int index1) {
+ delegate.addSelectionInterval(index0, index1);
+ }
+
+ @Override
+ public void removeSelectionInterval(int index0, int index1) {
+ delegate.removeSelectionInterval(index0, index1);
+ }
+
+ @Override
+ public int getMinSelectionIndex() {
+ return delegate.getMinSelectionIndex();
+ }
+
+ @Override
+ public int getMaxSelectionIndex() {
+ return delegate.getMaxSelectionIndex();
+ }
+
+ @Override
+ public boolean isSelectedIndex(int index) {
+ return delegate.isSelectedIndex(index);
+ }
+
+ @Override
+ public int getAnchorSelectionIndex() {
+ return delegate.getAnchorSelectionIndex();
+ }
+
+ @Override
+ public void setAnchorSelectionIndex(int index) {
+ delegate.setAnchorSelectionIndex(index);
+ }
+
+ @Override
+ public int getLeadSelectionIndex() {
+ return delegate.getLeadSelectionIndex();
+ }
+
+ @Override
+ public void setLeadSelectionIndex(int index) {
+ delegate.setLeadSelectionIndex(index);
+ }
+
+ @Override
+ public void clearSelection() {
+ delegate.clearSelection();
+ }
+
+ @Override
+ public boolean isSelectionEmpty() {
+ return delegate.isSelectionEmpty();
+ }
+
+ @Override
+ public void insertIndexInterval(int index, int length, boolean before) {
+ delegate.insertIndexInterval(index, length, before);
+ }
+
+ @Override
+ public void removeIndexInterval(int index0, int index1) {
+ delegate.removeIndexInterval(index0, index1);
+ }
+
+ @Override
+ public void setValueIsAdjusting(boolean valueIsAdjusting) {
+ delegate.setValueIsAdjusting(valueIsAdjusting);
+ }
+
+ @Override
+ public boolean getValueIsAdjusting() {
+ return delegate.getValueIsAdjusting();
+ }
+
+ @Override
+ public void setSelectionMode(int selectionMode) {
+ delegate.setSelectionMode(selectionMode);
+ }
+
+ @Override
+ public int getSelectionMode() {
+ return delegate.getSelectionMode();
+ }
+
+ @Override
+ public void addListSelectionListener(ListSelectionListener x) {
+ delegate.addListSelectionListener(x);
+ }
+
+ @Override
+ public void removeListSelectionListener(ListSelectionListener x) {
+ delegate.removeListSelectionListener(x);
+ }
+}
Added: jaxx/trunk/jaxx-runtime-swing/src/main/resources/icons/action-delete.png
===================================================================
(Binary files differ)
Property changes on: jaxx/trunk/jaxx-runtime-swing/src/main/resources/icons/action-delete.png
___________________________________________________________________
Name: svn:mime-type
+ application/octet-stream
Modified: jaxx/trunk/jaxx-runtime-swing-widget/pom.xml
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/pom.xml 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-swing-widget/pom.xml 2009-05-06 05:44:44 UTC (rev 1386)
@@ -1,3 +1,4 @@
+
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
@@ -25,6 +26,16 @@
<version>${project.version}</version>
</dependency>
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swingx</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swing-worker</artifactId>
+ </dependency>
+
</dependencies>
<!-- ************************************************************* -->
@@ -93,7 +104,7 @@
</goals>
</execution>
</executions>
- </plugin>
+ </plugin>
</plugins>
</build>
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBox.jaxx 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,110 @@
+<Table fill='both' insets='0'
+ onFocusGained='combobox.requestFocus()'
+ onFocusLost='hidePopup()'>
+
+<!--fill='both' insets='0'-->
+ <!-- auto complete property -->
+ <Boolean id='autoComplete' javaBean='false'/>
+
+ <!-- show reset property -->
+ <Boolean id='showReset' javaBean='false'/>
+
+ <!-- show decorator property -->
+ <Boolean id='showDecorator' javaBean='true'/>
+
+ <Boolean id='editable' javaBean='true'/>
+
+ <!-- bean property linked state -->
+ <String id='property' javaBean='""'/>
+
+ <!-- bean property -->
+ <Object id='bean' javaBean='null'/>
+
+ <!-- selectedItem property -->
+ <Object id='selectedItem' javaBean='null'/>
+
+ <!-- sort index property -->
+ <Integer id='index' javaBean='0'/>
+
+ <!-- datas of the combo-box -->
+ <java.util.List id='data' javaBean='null'/>
+
+ <!-- model of sorted property -->
+ <ButtonGroup id='indexes' useToolTipText='true'
+ onStateChanged='setIndex((Integer)indexes.getSelectedValue())'/>
+
+ <!-- ui handler -->
+ <EntityComboBoxHandler id='handler' constructorParams='this'/>
+
+ <String id='selectedToolTipText' javaBean='null'/>
+
+ <String id='notSelectedToolTipText' javaBean='null'/>
+
+ <String id='popupTitleText' javaBean='null'/>
+
+ <String id='i18nPrefix' javaBean='"observe.common."'/>
+
+ <!-- popup to change sorted property-->
+ <JPopupMenu id='popup'
+ border='{new TitledBorder(_("entitycombobox.popup.title"))}'
+ onPopupMenuWillBecomeInvisible='getChangeDecorator().setSelected(false)'
+ onPopupMenuCanceled='getChangeDecorator().setSelected(false)'>
+ <JLabel id='popupLabel'/>
+ <JSeparator/>
+ </JPopupMenu>
+
+ <script><![CDATA[
+import static org.codelutin.i18n.I18n.n_;
+
+public static final String DEFAULT_POPUP_LABEL = n_("entitycombobox.popup.label");
+
+public static final String DEFAULT_SELECTED_TOOLTIP = n_("entitycombobox.sort.on");
+
+public static final String DEFAULT_NOT_SELECTED_TOOLTIP = n_("entitycombobox.sort.off");
+
+public <O> void init(jaxx.runtime.JXPathDecorator<O> decorator, java.util.List<O> data) {
+ handler.init(decorator, data);
+}
+
+protected void hidePopup() {
+ if (popup.isVisible()) {
+ popup.setVisible(false);
+ }
+}
+]]>
+ </script>
+ <row>
+ <cell anchor='west'>
+ <!-- le boutton pour reinitialiser la valeur sélectionnée -->
+ <JToolBar floatable='false' borderPainted='false' visible='{isShowReset()}'>
+ <JButton actionIcon='combobox-reset'
+ toolTipText='entitycombobox.action.reset.tip'
+ focusable='false'
+ focusPainted='false'
+ enabled='{isEnabled()}'
+ onActionPerformed='setSelectedItem(null)'/>
+ </JToolBar>
+
+ </cell>
+ <cell weightx='1'>
+ <!-- la liste déroulante -->
+ <JComboBox id='combobox'
+ selectedItem='{getSelectedItem()}'
+ enabled='{isEnabled()}'
+ editable='{isEditable()}'
+ onFocusGained='hidePopup()'
+ onItemStateChanged='setSelectedItem(combobox.getSelectedItem())'/>
+ </cell>
+ <cell anchor='east' fill='both' insets='0'>
+ <!-- le boutton pour changer le tri -->
+ <JToolBar floatable='false' borderPainted='false' visible='{isShowDecorator()}'>
+ <JToggleButton id='changeDecorator'
+ actionIcon='combobox-sort'
+ toolTipText='entitycombobox.action.sort.tip'
+ focusable='false'
+ focusPainted='false'
+ onActionPerformed='getHandler().togglePopup()'/>
+ </JToolBar>
+ </cell>
+ </row>
+</Table>
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/EntityComboBoxHandler.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,454 @@
+package jaxx.runtime.swing;
+
+import java.awt.Component;
+import jaxx.runtime.JXPathDecorator;
+import jaxx.runtime.MultiJXPathDecorator;
+import jaxx.runtime.Util;
+import jaxx.runtime.SwingUtil;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import static org.codelutin.i18n.I18n._;
+import static org.codelutin.i18n.I18n.n_;
+import org.jdesktop.swingx.autocomplete.ObjectToStringConverter;
+
+import javax.swing.JPopupMenu;
+import javax.swing.JRadioButtonMenuItem;
+import javax.swing.JToggleButton;
+import javax.swing.SwingUtilities;
+import javax.swing.text.Document;
+import javax.swing.text.JTextComponent;
+import java.awt.Dimension;
+import java.awt.event.FocusEvent;
+import java.awt.event.FocusListener;
+import java.beans.Introspector;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.List;
+import javax.swing.JComboBox;
+import jaxx.runtime.Decorator;
+import org.jdesktop.swingx.autocomplete.AutoCompletePropertyChangeListener;
+
+/**
+ * Le handler d'un {@link EntityComboBox}.
+ * <p/>
+ * Note: ce handler n'est pas staeless et n'est donc pas partageable entre plusieurs ui.
+ *
+ * @param <O> le type des objet contenus dans le modèle du composant.
+ *
+ * @author chemit
+ * @see EntityComboBox
+ */
+public class EntityComboBoxHandler<O> implements PropertyChangeListener {
+
+ public static final Log log = LogFactory.getLog(EntityComboBoxHandler.class);
+ public static final String SELECTED_ITEM_PROPERTY = "selectedItem";
+ public static final String INDEX_PROPERTY = "index";
+ public static final String AUTO_COMPLETE_PROPERTY = "autoComplete";
+ public static final String DATA_PROPERTY = "data";
+ /** ui if the handler */
+ protected EntityComboBox ui;
+ /** the mutator method on the property of boxed bean in the ui */
+ protected Method mutator;
+ /** the original document of the combbo box editor (keep it to make possible undecorate) */
+ protected Document originalDocument;
+ /** the convertor used to auto-complete */
+ protected ObjectToStringConverter convertor;
+ /** the decorator of data */
+ protected MultiJXPathDecorator<O> decorator;
+ protected boolean init;
+
+ public EntityComboBoxHandler(EntityComboBox ui) {
+ this.ui = ui;
+ }
+ protected final FocusListener EDITOR_TEXT_COMP0NENT_FOCUSLISTENER = new FocusListener() {
+
+ @Override
+ public void focusGained(FocusEvent e) {
+ if (log.isDebugEnabled()) {
+ log.debug("close popup from " + e);
+ }
+ ui.getPopup().setVisible(false);
+ }
+
+ @Override
+ public void focusLost(FocusEvent e) {
+ }
+ };
+
+ /**
+ * Initialise le handler de l'ui
+ *
+ * @param decorator le decorateur a utiliser
+ * @param data la liste des données a gérer
+ */
+ public void init(JXPathDecorator<O> decorator, List<O> data) {
+
+ if (init) {
+ throw new IllegalStateException("can not init the handler twice");
+ }
+ init = true;
+ if (decorator == null) {
+ throw new NullPointerException("can not have a null decorator as parameter");
+ }
+
+ JAXXButtonGroup indexes = ui.getIndexes();
+
+ MultiJXPathDecorator<O> d;
+ if (decorator instanceof MultiJXPathDecorator<?>) {
+ // should clone decorator ?
+ d = (MultiJXPathDecorator<O>) decorator;
+ } else {
+ d = MultiJXPathDecorator.newDecorator(decorator.getInternalClass(), decorator.getInitialExpression(), " - ");
+ }
+ this.decorator = d;
+
+ // init combobox renderer base on given decorator
+ ui.getCombobox().setRenderer(Util.newDecoratedListCellRenderer(d));
+
+ this.convertor = newDecoratedObjectToStringConverter(d);
+
+ // keep a trace of original document (to make possible reverse autom-complete)
+ JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent();
+ this.originalDocument = editorComponent.getDocument();
+
+ // build popup
+ preparePopup(d);
+
+ ui.autoComplete = true;
+
+ ui.addPropertyChangeListener(this);
+
+ // set datas
+ ui.setData(data);
+
+ // select sort button
+ indexes.setSelectedButton(ui.getIndex());
+ }
+
+ /** Toggle the popup visible state. */
+ public void togglePopup() {
+ boolean newValue = !ui.getPopup().isVisible();
+
+ if (log.isTraceEnabled()) {
+ log.trace(newValue);
+ }
+
+ if (!newValue) {
+ if (ui.getPopup() != null) {
+ ui.getPopup().setVisible(false);
+ }
+ return;
+ }
+ SwingUtilities.invokeLater(new Runnable() {
+
+ @Override
+ public void run() {
+ ui.getPopup().pack();
+ Dimension dim = ui.getPopup().getPreferredSize();
+ JToggleButton invoker = ui.getChangeDecorator();
+ ui.getPopup().show(invoker, (int) (invoker.getPreferredSize().getWidth() - dim.getWidth()), invoker.getHeight());
+ }
+ });
+ }
+
+ /**
+ * Modifie l'état autoComplete de l'ui.
+ *
+ * @param oldValue l'ancienne valeur
+ * @param newValue la nouvelle valeur
+ */
+ protected void setAutoComplete(Boolean oldValue, Boolean newValue) {
+ oldValue = oldValue != null && oldValue;
+ newValue = newValue != null && newValue;
+ if (oldValue == newValue) {
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("autocomplete state : <" + oldValue + " to " + newValue + ">");
+ }
+ if (!newValue) {
+ JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent();
+ editorComponent.removeFocusListener(EDITOR_TEXT_COMP0NENT_FOCUSLISTENER);
+ undecorate(ui.getCombobox(), originalDocument);
+ } else {
+ decorate(ui.getCombobox(), convertor);
+ JTextComponent editorComponent = (JTextComponent) ui.getCombobox().getEditor().getEditorComponent();
+ editorComponent.addFocusListener(EDITOR_TEXT_COMP0NENT_FOCUSLISTENER);
+ }
+ }
+
+ /**
+ * Modifie l'index du décorateur
+ *
+ * @param oldValue l'ancienne valeur
+ * @param newValue la nouvelle valeur
+ */
+ @SuppressWarnings({"unchecked"})
+ protected void setIndex(Integer oldValue, Integer newValue) {
+ if (newValue.equals(oldValue)) {
+ return;
+ }
+ if (log.isDebugEnabled()) {
+ log.debug("check state : <" + oldValue + " to " + newValue + ">");
+ }
+
+ // change decorator context
+ decorator.setContextIndex(newValue);
+
+ // keep selected item
+ Object previousSelectedItem = ui.getSelectedItem();
+ Boolean wasAutoComplete = ui.isAutoComplete();
+
+ if (wasAutoComplete) {
+ ui.setAutoComplete(false);
+ }
+
+ // remove autocomplete
+ if (previousSelectedItem != null) {
+ ui.getCombobox().setSelectedItem(null);
+ ui.selectedItem = null;
+ }
+
+
+ try {
+ // Sort data with the decorator jxpath tokens.
+ JXPathDecorator.sort(decorator, ui.getData(), newValue);
+ } catch (Exception e) {
+ log.warn(e.getMessage(), e);
+ //System.out.println("newValue :: "+decorator+" : "+newValue);
+ //System.out.println("datas :: "+ui.getData());
+ }
+
+ // reload the model
+ SwingUtil.fillComboBox(ui.getCombobox(), ui.getData(), null);
+
+ if (wasAutoComplete) {
+ ui.setAutoComplete(true);
+ }
+
+ if (previousSelectedItem != null) {
+ ui.setSelectedItem(previousSelectedItem);
+ }
+
+ ui.getCombobox().requestFocus();
+ }
+
+ /**
+ * Modifie la valeur sélectionnée dans la liste déroulante.
+ *
+ * @param oldValue l'ancienne valeur
+ * @param newValue la nouvelle valeur
+ */
+ protected void setSelectedItem(Object oldValue, Object newValue) {
+ if (ui.getBean() == null) {
+ return;
+ }
+
+ if (newValue == null) {
+ if (ui.getCombobox().getSelectedItem() == null) {
+ return;
+ }
+ ui.getCombobox().setSelectedItem(null);
+
+ if (ui.isAutoComplete()) {
+ ui.setAutoComplete(false);
+ ui.setAutoComplete(true);
+ }
+
+ if (oldValue == null) {
+ return;
+ }
+ }
+ if (log.isDebugEnabled()) {
+ log.debug(ui.getProperty() + " on " + ui.getBean().getClass() + " :: " + oldValue + " to " + newValue);
+ }
+
+ try {
+ Method mut = getMutator();
+ if (mut != null) {
+ mut.invoke(ui.getBean(), newValue);
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ /** @return le document de l'éditeur avant complétion. */
+ public Document getOriginalDocument() {
+ return originalDocument;
+ }
+
+ public MultiJXPathDecorator<O> getDecorator() {
+ return decorator;
+ }
+
+ /**
+ * Creation de l'ui pour modifier le décorateur.
+ *
+ * @param decorator le decorateur a utiliser
+ */
+ protected void preparePopup(MultiJXPathDecorator<?> decorator) {
+ String selectedTip = ui.getSelectedToolTipText();
+ if (selectedTip == null) {
+ // use default selected tip text
+ selectedTip = EntityComboBox.DEFAULT_SELECTED_TOOLTIP;
+ }
+ String notSelectedTip = ui.getNotSelectedToolTipText();
+ if (notSelectedTip == null) {
+ // use default selected tip text
+ notSelectedTip = EntityComboBox.DEFAULT_NOT_SELECTED_TOOLTIP;
+ }
+ JPopupMenu popup = ui.getPopup();
+
+ //Container container = ui.getIndexesContainer();
+ for (int i = 0, max = decorator.getNbContext(); i < max; i++) {
+ String property = ui.getI18nPrefix() + decorator.getProperty(i);
+// String property = "observe.common." + decorator.getProperty(i);
+ String propertyI18n = _(property);
+ JRadioButtonMenuItem button = new JRadioButtonMenuItem(propertyI18n);
+ button.putClientProperty(JAXXButtonGroup.BUTTON8GROUP_CLIENT_PROPERTY, ui.getIndexes());
+ button.putClientProperty(JAXXButtonGroup.VALUE_CLIENT_PROPERTY, i);
+ popup.add(button);
+ if (selectedTip != null) {
+ button.putClientProperty(JAXXButtonGroup.SELECTED_TIP_CLIENT_PROPERTY, _(selectedTip, propertyI18n));
+ }
+ if (notSelectedTip != null) {
+ button.putClientProperty(JAXXButtonGroup.NOT_SELECTED_TIP_CLIENT_PROPERTY, _(notSelectedTip, propertyI18n));
+ }
+ button.setSelected(false);
+ ui.getIndexes().add(button);
+ }
+ String title = ui.getPopupTitleText();
+ if (title == null) {
+ // use default popup title
+ title = EntityComboBox.DEFAULT_POPUP_LABEL;
+
+ Class<?> internalClass = decorator.getInternalClass();
+ String beanI18nKey;
+ if (internalClass == null) {
+ beanI18nKey = n_("entitycombobox.unknown.type");
+ } else {
+ beanI18nKey = ui.getI18nPrefix() + Introspector.decapitalize(internalClass.getSimpleName());
+ //beanI18nKey = "observe.common." + Introspector.decapitalize(internalClass.getSimpleName());
+ }
+ String beanI18n = _(beanI18nKey);
+ title = _(title, beanI18n);
+ } else {
+ title = _(title);
+ }
+ ui.getPopupLabel().setText(title);
+ ui.getPopup().setLabel(title);
+ ui.getPopup().invalidate();
+ }
+
+ public Class<?> getTargetClass() {
+ Method m = getMutator();
+ return m == null ? null : m.getParameterTypes()[0];
+ }
+
+ /** @return le mutateur a utiliser pour modifier le bean associé. */
+ protected Method getMutator() {
+ if (mutator == null) {
+ Object bean = ui.getBean();
+ if (bean == null) {
+ throw new NullPointerException("could not find bean in " + ui);
+ }
+ String property = ui.getProperty();
+ if (property == null) {
+ throw new NullPointerException("could not find property in " + ui);
+ }
+
+ try {
+ PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(bean, property);
+ if (descriptor != null) {
+ mutator = descriptor.getWriteMethod();
+ }
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return mutator;
+ }
+
+ /**
+ * Encapsule un {@link Decorator} dans un {@link ObjectToStringConverter}.
+ *
+ * @param decorator le decorateur a encapsuler.
+ * @return le converter encapsule dans un {@link ObjectToStringConverter}
+ */
+ public static ObjectToStringConverter newDecoratedObjectToStringConverter(final Decorator<?> decorator) {
+
+ return new ObjectToStringConverter() {
+
+ @Override
+ public String getPreferredStringForItem(Object item) {
+ return item instanceof String ? (String) item : (item == null ? "" : decorator.toString(item));
+ }
+ };
+ }
+
+ /**
+ * Ajout l'auto-complétion sur une liste déroulante, en utilisant le
+ * converteur donné pour afficher les données.
+ *
+ * @param combo la combo à décorer
+ * @param convertor le converter utilisé pour afficher les données.
+ */
+ public static void decorate(JComboBox combo, ObjectToStringConverter convertor) {
+
+ org.jdesktop.swingx.autocomplete.AutoCompleteDecorator.decorate(combo, convertor);
+ }
+
+ /**
+ * Désactive l'aut-complétion sur une liste déroulante, en y repositionnant
+ * le modèle du document d'édition d'avant auto-complétion.
+ *
+ * @param combo la liste déroulante à décorer
+ * @param originalDocument le document original de l'édtieur de la
+ * liste déroulante.
+ */
+ public static void undecorate(JComboBox combo, Document originalDocument) {
+
+ // has not to be editable
+ combo.setEditable(false);
+
+ // configure the text component=editor component
+ Component c = combo.getEditor().getEditorComponent();
+ JTextComponent editorComponent = (JTextComponent) c;
+ editorComponent.setDocument(originalDocument);
+ editorComponent.setText(null);
+ //remove old property change listener
+ for (PropertyChangeListener l : c.getPropertyChangeListeners("editor")) {
+ if (l instanceof AutoCompletePropertyChangeListener) {
+ c.removePropertyChangeListener("editor", l);
+ }
+ }
+ }
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ String propertyName = evt.getPropertyName();
+
+ if (SELECTED_ITEM_PROPERTY.equals(propertyName)) {
+ setSelectedItem(evt.getOldValue(), evt.getNewValue());
+ return;
+ }
+
+ if (INDEX_PROPERTY.equals(propertyName)) {
+ setIndex((Integer) evt.getOldValue(), (Integer) evt.getNewValue());
+ return;
+ }
+ if (AUTO_COMPLETE_PROPERTY.equals(propertyName)) {
+ setAutoComplete((Boolean) evt.getOldValue(), (Boolean) evt.getNewValue());
+ return;
+ }
+ if (DATA_PROPERTY.equals(propertyName)) {
+ // list has changed, force reload of index
+ setIndex(-1, ui.getIndex());
+ }
+
+ }
+}
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/ErrorDialogUI.jaxx
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/ErrorDialogUI.jaxx (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/ErrorDialogUI.jaxx 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,66 @@
+<JDialog title='errorUI.title' modal='true'>
+ <script><![CDATA[
+protected static ErrorDialogUI instance;
+public static void init(Frame frame) {
+ disposeUI();
+ instance = new ErrorDialogUI(frame);
+ instance.setModalityType(ModalityType.TOOLKIT_MODAL);
+}
+public static void showError(Exception e) {
+ if (instance == null) {
+ instance = new ErrorDialogUI();
+ }
+ instance.getErrorMessage().setText(e.getMessage());
+ StringWriter w = new StringWriter();
+ e.printStackTrace(new PrintWriter(w));
+ instance.getErrorStack().setText(w.toString());
+ instance.getErrorStack().setCaretPosition(0);
+ instance.pack();
+ jaxx.runtime.SwingUtil.center(instance.getContextValue(JFrame.class,"parent"), instance);
+ instance.setVisible(true);
+}
+public static void disposeUI() {
+ instance=null;
+}
+
+public ErrorDialogUI(Frame frame) {
+ super(frame);
+ if (frame!=null) {
+ setContextValue(frame);
+ setContextValue(frame,"parent");
+ }
+
+}
+
+JRootPane rootPane = getRootPane();
+rootPane.setDefaultButton(close);
+rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close");
+rootPane.getActionMap().put("close", close.getAction());
+ ]]></script>
+ <Table>
+ <row fill='both'>
+ <cell>
+ <JPanel>
+ <JLabel text='errorUI.message'/>
+ </JPanel>
+ </cell>
+ </row>
+ <row fill='both'>
+ <cell>
+ <JLabel id='errorMessage'/>
+ </cell>
+ </row>
+ <row fill='both' weightx='1' weighty='1'>
+ <cell>
+ <JScrollPane width='600' height='200'>
+ <JTextArea id='errorStack' editable='false' font-size='9'/>
+ </JScrollPane>
+ </cell>
+ </row>
+ <row fill='horizontal'>
+ <cell>
+ <JButton id='close' text='errorUI.action.close' onActionPerformed='dispose()'/>
+ </cell>
+ </row>
+ </Table>
+</JDialog>
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.css
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.css (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.css 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,31 @@
+#title{
+ text:{getLabel()};
+ horizontalAlignment:center;
+}
+
+#hour{
+ value:{getTimeModel()/60};
+ enabled:{isEnabled()};
+ model:{new SpinnerNumberModel(0,0,23,1)};
+}
+
+#labelH {
+ text:"H";
+ horizontalAlignment:center;
+}
+#minute{
+ value:{getTimeModel()%60};
+ enabled:{isEnabled()};
+ model:{new SpinnerNumberModel(0,0,59,1)};
+}
+
+#slider{
+ font-size: 11;
+ paintTicks:true;
+ paintLabels:true;
+ majorTickSpacing:60;
+ minorTickSpacing:30;
+ value:{getTimeModel()};
+ enabled:{isEnabled()};
+ model:{new DefaultBoundedRangeModel(0,1,0,60*24)};
+}
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.jaxx
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.jaxx (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditor.jaxx 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,56 @@
+
+<JPanel layout='{new BorderLayout()}'>
+
+ <style source='TimeEditor.css'/>
+
+ <!-- bean property -->
+ <String id='property' javaBean='""'/>
+
+ <!-- title -->
+ <String id='label' javaBean='""'/>
+
+ <!-- bean -->
+ <Object id='bean' javaBean='null'/>
+
+ <!-- time model -->
+ <Integer id="timeModel" javaBean='0'/>
+
+ <!-- the real date -->
+ <java.util.Date id="date" javaBean='null'/>
+
+ <!-- ui handler -->
+ <TimeEditorHandler id='handler' constructorParams='this'/>
+
+ <script><![CDATA[
+public void init() {
+ handler.init();
+}
+]]>
+ </script>
+
+ <Table constraints='BorderLayout.NORTH' fill='horizontal' insets='0'>
+ <row>
+ <cell>
+ <JLabel id='title'/>
+ </cell>
+ <cell weightx='1'>
+ <JLabel/>
+ </cell>
+ <cell>
+ <JSpinner id='hour'
+ onStateChanged='setTimeModel((Integer)hour.getValue()* 60 + timeModel % 60)'/>
+ </cell>
+ <cell>
+ <JLabel id='labelH'/>
+ </cell>
+ <cell>
+ <JSpinner id='minute'
+ onStateChanged='setTimeModel((timeModel / 60) * 60 + (Integer) minute.getValue())'/>
+ </cell>
+ </row>
+ </Table>
+
+ <JSlider id='slider' constraints='BorderLayout.SOUTH'
+ onStateChanged='if (!slider.getValueIsAdjusting()) setTimeModel(slider.getValue());'/>
+
+</JPanel>
Added: jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditorHandler.java
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditorHandler.java (rev 0)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/TimeEditorHandler.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -0,0 +1,204 @@
+package jaxx.runtime.swing.editor;
+
+import java.awt.event.MouseAdapter;
+import java.awt.event.MouseEvent;
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import javax.swing.JLabel;
+import java.beans.PropertyChangeEvent;
+import java.beans.PropertyChangeListener;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Method;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.Dictionary;
+import java.util.Hashtable;
+import java.util.Map;
+import javax.swing.JSlider;
+import javax.swing.plaf.basic.BasicSliderUI;
+
+/** @author chemit */
+public class TimeEditorHandler {
+
+ public static final Log log = LogFactory.getLog(TimeEditorHandler.class);
+ public static final String BEAN_PROPERTY = "bean";
+ public static final String PROPERTY_PROPERTY = "property";
+ public static final String DATE_PROPERTY = "date";
+ public static final String TIME_MODEL_PROPERTY = "timeModel";
+ /** editor ui */
+ protected TimeEditor editor;
+ /** the mutator method on the property of boxed bean in the editor */
+ protected Method mutator;
+ protected Calendar calendar;
+
+ public TimeEditorHandler(TimeEditor ui) {
+ this.editor = ui;
+ this.calendar = Calendar.getInstance();
+ }
+
+ public void init() {
+
+ if (editor.getBean() == null) {
+ throw new NullPointerException("can not have a null bean in ui " + editor);
+ }
+
+ // create slider labels
+ Map<Integer, JLabel> labelTable = new Hashtable<Integer, JLabel>();
+ for (int i = 0; i < 25; i += 2) {
+ labelTable.put(i * 60, new JLabel(i + ""));
+ }
+ JSlider slider = editor.getSlider();
+ slider.setLabelTable((Dictionary<?,?>) labelTable);
+
+ MouseAdapter m = new MouseAdapter() {
+
+ @Override
+ public void mouseClicked(MouseEvent e) {
+ // set the value
+ int value = getSliderValue(e);
+ JSlider slider = (JSlider) e.getComponent();
+ slider.setValueIsAdjusting(true);
+ slider.setValue(value);
+ slider.setValueIsAdjusting(false);
+ showToolTip(e);
+ e.consume();
+ }
+
+ @Override
+ public void mouseDragged(MouseEvent e) {
+ showToolTip(e);
+ }
+
+ @Override
+ public void mouseEntered(MouseEvent e) {
+ showToolTip(e);
+ }
+
+ @Override
+ public void mouseMoved(MouseEvent e) {
+ showToolTip(e);
+ }
+
+ @Override
+ public void mouseReleased(MouseEvent e) {
+ showToolTip(e);
+ }
+
+ int getSliderValue(MouseEvent e) {
+ JSlider slider = (JSlider) e.getSource();
+ int value = -1;
+ if (slider.getUI() instanceof BasicSliderUI) {
+ BasicSliderUI ui = (BasicSliderUI) slider.getUI();
+ value = slider.getOrientation() == JSlider.HORIZONTAL
+ ? ui.valueForXPosition(e.getX())
+ : ui.valueForYPosition(e.getY());
+ }
+ return value;
+ }
+
+ void showToolTip(MouseEvent e) {
+
+ int value = getSliderValue(e);
+ if (value == -1) {
+ return;
+ }
+ int h = value / 60;
+ int m = value % 60;
+
+ String text = "";
+ if (h < 10) {
+ text = "0";
+ }
+ text += h + " : ";
+ if (m < 10) {
+ text += "0";
+ }
+ text += m;
+
+ JSlider slider = (JSlider) e.getSource();
+ slider.setToolTipText(text);
+
+ }
+ };
+ slider.addMouseListener(m);
+ slider.addMouseMotionListener(m);
+
+ // listen when date changes (should come from outside)
+ editor.addPropertyChangeListener(DATE_PROPERTY, new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ Date date = (Date) evt.getNewValue();
+
+ if (date == null) {
+ return;
+ }
+ calendar.setTime(date);
+ int hours = calendar.get(Calendar.HOUR_OF_DAY);
+ int minutes = calendar.get(Calendar.MINUTE);
+ if (log.isDebugEnabled()) {
+ log.debug("date changed : new value " + hours + ":" + minutes);
+ }
+ getEditor().setTimeModel((hours * 60) + minutes);
+ }
+ });
+
+ // listen when time model changes (should come from editor)
+ editor.addPropertyChangeListener(TIME_MODEL_PROPERTY, new PropertyChangeListener() {
+
+ @Override
+ public void propertyChange(PropertyChangeEvent evt) {
+ Integer time = (Integer) evt.getNewValue();
+ int hours = time / 60;
+ int minutes = time % 60;
+ calendar.set(Calendar.HOUR_OF_DAY, hours);
+ calendar.set(Calendar.MINUTE, minutes);
+ setDate(null, calendar.getTime());
+ }
+ });
+ }
+
+ public TimeEditor getEditor() {
+ return editor;
+ }
+
+ protected void setDate(Date oldValue, Date newValue) {
+ if (editor.getBean() == null) {
+ return;
+ }
+
+ if (log.isDebugEnabled()) {
+ log.debug(editor.getProperty() + " on " + editor.getBean().getClass() + " :: " + oldValue + " to " + newValue);
+ }
+
+ try {
+ getMutator().invoke(editor.getBean(), newValue);
+
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+
+ protected Method getMutator() {
+ if (mutator == null) {
+ Object bean = editor.getBean();
+ if (bean == null) {
+ throw new NullPointerException("could not find bean in " + editor);
+ }
+ String property = editor.getProperty();
+ if (property == null) {
+ throw new NullPointerException("could not find property in " + editor);
+ }
+
+ try {
+ PropertyDescriptor descriptor = PropertyUtils.getPropertyDescriptor(bean, property);
+ mutator = descriptor.getWriteMethod();
+ } catch (Exception e) {
+ throw new RuntimeException(e);
+ }
+ }
+ return mutator;
+ }
+}
\ No newline at end of file
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties 2009-05-06 05:44:44 UTC (rev 1386)
@@ -10,8 +10,21 @@
8=
9=
H=
+entitycombobox.action.reset.tip=
+entitycombobox.action.sort.tip=
+entitycombobox.popup.label=
+entitycombobox.popup.title=
+entitycombobox.sort.off=
+entitycombobox.sort.on=
+entitycombobox.unknown.type=
+errorUI.action.close=
+errorUI.message=
+errorUI.title=
numbereditor.action.reset.tip=Reset
numbereditor.action.show.tip=Show numeric panel
numbereditor.clearAll=C
numbereditor.clearOne=CE
numbereditor.toggleSign=+/-
+observe.action.close=
+observe.message.error.dialog=
+observe.title.error.dialog=
Modified: jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties
===================================================================
--- jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-05-06 05:44:44 UTC (rev 1386)
@@ -10,6 +10,16 @@
8=
9=
H=
+entitycombobox.action.reset.tip=R\u00E9initialiser la valeur de la liste d\u00E9roulante
+entitycombobox.action.sort.tip=Modifier le tri de la liste d\u00E9roulante
+entitycombobox.popup.label=Objet '%1$s'
+entitycombobox.popup.title=Modifier le tri
+entitycombobox.sort.off=Cliquer pour activer le tri sur la propri\u00E9t\u00E9 '%1$s'
+entitycombobox.sort.on=Le tri est effectu\u00E9 sur la propri\u00E9t\u00E9 '%1$s'
+entitycombobox.unknown.type=Objet de type inconnu
+errorUI.action.close=Fermer
+errorUI.message=Une erreur est survenue \!
+errorUI.title=Erreur...
numbereditor.action.reset.tip=R\u00E9initialiser
numbereditor.action.show.tip=Afficher le pav\u00E9 num\u00E9rique
numbereditor.clearAll=C
Modified: jaxx/trunk/jaxx-runtime-validator/changelog.txt
===================================================================
--- jaxx/trunk/jaxx-runtime-validator/changelog.txt 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-validator/changelog.txt 2009-05-06 05:44:44 UTC (rev 1386)
@@ -1,4 +1,5 @@
1.5
+ * 20090506 [chemit] - on chained validation, do not changed parentValidator changed state
* 20090503 [chemit] - add a new property collectionFieldName on CollectionFieldExpression validator to be able to validate a collection but not for a collection field
- add doRevalidate on BeanValidator to validate and update internal states (validate method does not update internal state and should be used in outside...)
Modified: jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/BeanValidator.java
===================================================================
--- jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/BeanValidator.java 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/jaxx-runtime-validator/src/main/java/jaxx/runtime/validator/BeanValidator.java 2009-05-06 05:44:44 UTC (rev 1386)
@@ -380,7 +380,13 @@
if (parentValidator != null) {
// chained validation
- parentValidator.l.propertyChange(null);
+ // the parent validator should not be changed from this validation
+ boolean wasModified = parentValidator.isChanged();
+ parentValidator.doValidate();
+ if (!wasModified) {
+ // push back old state
+ parentValidator.setChanged(false);
+ }
}
}
Modified: jaxx/trunk/pom.xml
===================================================================
--- jaxx/trunk/pom.xml 2009-05-05 00:02:46 UTC (rev 1385)
+++ jaxx/trunk/pom.xml 2009-05-06 05:44:44 UTC (rev 1386)
@@ -34,12 +34,12 @@
<module>jaxx-example</module>
</modules>
- <dependencies>
+ <!--dependencies>
<dependency>
<groupId>org.codelutin</groupId>
<artifactId>lutinutil</artifactId>
</dependency>
- </dependencies>
+ </dependencies-->
<dependencyManagement>
<dependencies>
@@ -121,6 +121,18 @@
<version>3.0.1</version>
</dependency>
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swingx</artifactId>
+ <version>${swingx.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.swinglabs</groupId>
+ <artifactId>swing-worker</artifactId>
+ <version>1.1</version>
+ </dependency>
+
</dependencies>
</dependencyManagement>
@@ -147,10 +159,11 @@
<labs.project>buix</labs.project>
<!-- libs version -->
- <lutinutil.version>1.0.3</lutinutil.version>
+ <lutinutil.version>1.0.5</lutinutil.version>
<jaxx.version>${project.version}</jaxx.version>
<i18n.version>0.11</i18n.version>
<lutinpluginutil.version>0.4</lutinpluginutil.version>
+ <swingx.version>0.9.6</swingx.version>
<maven.version>2.0.10</maven.version>
</properties>
1
0