r567 - in trunk: . src/update tutti-ui-swing tutti-ui-swing/src/main tutti-ui-swing/src/main/assembly tutti-ui-swing/src/main/filtered-resources tutti-ui-swing/src/main/help tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation
Author: tchemit Date: 2013-03-09 14:59:14 +0100 (Sat, 09 Mar 2013) New Revision: 567 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/567 Log: fixes #1715: [AIDE] - Aide modifiable sans recompilation (socle technique mis en place) refs #1843: [AIDE] - Aide par champ (j'ai commenc?\195?\169, il faut passer sur tous les champs des ?\195?\169crans et fournit le fichier ?\195?\160 traduire ?\195?\160 l'ifremer) fixes #2110: [ERGO] Am?\195?\169lioration des actions sur les pi?\195?\168ces-jointes fixes #2111: [ERGO] Ajout d'une action pour fermer la fen?\195?\170tre de rapport des contr?\195?\180les Added: trunk/tutti-ui-swing/src/main/assembly/help.xml trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties trunk/tutti-ui-swing/src/main/help/ trunk/tutti-ui-swing/src/main/help/editCatchBatch.html trunk/tutti-ui-swing/src/main/help/editCruise.html trunk/tutti-ui-swing/src/main/help/editFishingOperation.html trunk/tutti-ui-swing/src/main/help/editProgram.html trunk/tutti-ui-swing/src/main/help/editProtocol.html trunk/tutti-ui-swing/src/main/help/editSpeciesBatch.html trunk/tutti-ui-swing/src/main/help/fishingOperations.html trunk/tutti-ui-swing/src/main/help/main.html trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachment.java trunk/tutti-ui-swing/src/main/resources/icons/action-close-dialog.png Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditor.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachmentEditor.java Modified: trunk/pom.xml trunk/src/update/update-tutti.properties trunk/tutti-ui-swing/pom.xml trunk/tutti-ui-swing/src/main/assembly/tutti-full-component.xml trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionException.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellEditor.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellRenderer.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/pom.xml 2013-03-09 13:59:14 UTC (rev 567) @@ -129,6 +129,7 @@ <hibernateVersion>3.6.10.Final</hibernateVersion> <h2Version>1.3.168</h2Version> <postgresqlVersion>9.1-901-1.jdbc4</postgresqlVersion> + <licensePluginVersion>1.4</licensePluginVersion> <jaxxVersion>2.5.12-SNAPSHOT</jaxxVersion> <swingXVersion>1.6.4</swingXVersion> @@ -163,10 +164,10 @@ <jMockVersion>2.5.1</jMockVersion> <!-- Last JRE version to use --> - <jreVersion>1.7.10</jreVersion> + <jreVersion>1.7.17</jreVersion> <!-- Last tutti db version --> - <!--<dbVersion>2013.02.02</dbVersion>--> + <!--<dbVersion>2013.02.27</dbVersion>--> </properties> @@ -712,5 +713,48 @@ </profile> + <profile> + <id>update-file-header</id> + <activation> + <property> + <name>performRelease</name> + <value>true</value> + </property> + </activation> + + <properties> + <license.descriptor>src/license/project.xml</license.descriptor> + </properties> + <build> + <defaultGoal>process-resources</defaultGoal> + <plugins> + <plugin> + <groupId>org.codehaus.mojo</groupId> + <artifactId>license-maven-plugin</artifactId> + <executions> + <execution> + <id>update-file-header</id> + <goals> + <goal>update-file-header</goal> + </goals> + <configuration> + <addSvnKeyWords>true</addSvnKeyWords> + <excludes> + <exclude>**/i18n/*.properties</exclude> + <exclude>**/help/*.properties</exclude> + <exclude>**/THIRD-PARTY.properties</exclude> + <!-- since sh scripts must begins by the line #!/bin/sh, + can not use the mojo for the mojo --> + <exclude>**/*.sh</exclude> + </excludes> + </configuration> + <phase>process-resources</phase> + </execution> + </executions> + </plugin> + </plugins> + </build> + </profile> + </profiles> </project> Modified: trunk/src/update/update-tutti.properties =================================================================== --- trunk/src/update/update-tutti.properties 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/src/update/update-tutti.properties 2013-03-09 13:59:14 UTC (rev 567) @@ -47,6 +47,13 @@ i18n.url=zip:http://nexus.nuiton.org/nexus/content/repositories/other-releases/fr/ifremer... ################################################################################ +### Help Updates ############################################################### +################################################################################ + +help.version=@projectVersion@ +help.url=zip:http://nexus.nuiton.org/nexus/content/repositories/other-releases/fr/ifremer... + +################################################################################ ### DB Updates ################################################################# ################################################################################ Modified: trunk/tutti-ui-swing/pom.xml =================================================================== --- trunk/tutti-ui-swing/pom.xml 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/pom.xml 2013-03-09 13:59:14 UTC (rev 567) @@ -21,7 +21,9 @@ #L% --> -<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"> +<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> @@ -49,12 +51,18 @@ <jaxx.generateSearch>false</jaxx.generateSearch> <jaxx.autoImportCss>true</jaxx.autoImportCss> <jaxx.autoRecurseInCss>false</jaxx.autoRecurseInCss> - <!--<jaxx.helpBrokerFQN>fr.ird.observe.ui.ObserveHelpBroker</jaxx.helpBrokerFQN>--> <!-- jaxx help configuration --> <jaxx.helpsetName>tutti</jaxx.helpsetName> <jaxx.locales>fr</jaxx.locales> - <!--<jaxx.helpTarget>src/main/help</jaxx.helpTarget>--> + <jaxx.mergeIdsToInput>true</jaxx.mergeIdsToInput> + <jaxx.inputHelpDirectory> + src/main/filtered-resources + </jaxx.inputHelpDirectory> + <jaxx.inputHelpFilenamePrefix>tutti-help</jaxx.inputHelpFilenamePrefix> + <jaxx.helpBrokerFQN> + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + </jaxx.helpBrokerFQN> <i18n.bundleOutputName>tutti-i18n</i18n.bundleOutputName> @@ -67,7 +75,9 @@ <bundlePrefix>tutti-${project.version}</bundlePrefix> - <tutti.log.file>\$\{java.io.tmpdir\}\tutti-${project.version}.log</tutti.log.file> + <tutti.log.file> + \$\{java.io.tmpdir\}\tutti-${project.version}.log + </tutti.log.file> </properties> @@ -83,6 +93,14 @@ </includes> </resource> <resource> + <directory>src/main/filtered-resources/help</directory> + <filtering>true</filtering> + <includes> + <include>*.config</include> + <include>*.properties</include> + </includes> + </resource> + <resource> <directory>src/main/resources</directory> <includes> <include>**/*</include> @@ -99,6 +117,7 @@ <execution> <goals> <goal>generate</goal> + <goal>generate-help-ids</goal> </goals> </execution> </executions> @@ -412,6 +431,9 @@ <descriptor> src/main/assembly/i18n.xml </descriptor> + <descriptor> + src/main/assembly/help.xml + </descriptor> </descriptors> </configuration> </execution> @@ -422,13 +444,13 @@ </profile> <profile> - <id>prepare-full-release</id> - <activation> - <property> - <name>performFullRelease</name> - <value>true</value> - </property> - </activation> + <id>prepare-full-release</id> + <activation> + <property> + <name>performFullRelease</name> + <value>true</value> + </property> + </activation> <properties> <redmine.releaseFiles> @@ -438,7 +460,7 @@ target/${bundlePrefix}-full-linux-x64.zip </redmine.releaseFiles> </properties> - <build> + <build> </build> </profile> Added: trunk/tutti-ui-swing/src/main/assembly/help.xml =================================================================== --- trunk/tutti-ui-swing/src/main/assembly/help.xml (rev 0) +++ trunk/tutti-ui-swing/src/main/assembly/help.xml 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,54 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> + +<assembly + xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> + <id>i18n</id> + <formats> + <format>zip</format> + </formats> + + <fileSets> + + <fileSet> + <directory>src/main/help</directory> + <outputDirectory/> + <includes> + <include>**/*</include> + </includes> + </fileSet> + + <fileSet> + <directory>src/main/assembly/min</directory> + <outputDirectory/> + <filtered>true</filtered> + <includes> + <include>version.appup</include> + </includes> + </fileSet> + + </fileSets> +</assembly> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/assembly/help.xml ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/assembly/tutti-full-component.xml =================================================================== --- trunk/tutti-ui-swing/src/main/assembly/tutti-full-component.xml 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/assembly/tutti-full-component.xml 2013-03-09 13:59:14 UTC (rev 567) @@ -31,6 +31,26 @@ <fileSets> <fileSet> + <directory>src/main/assembly/full</directory> + <outputDirectory/> + <filtered>true</filtered> + <fileMode>0755</fileMode> + <includes> + <include>tutti.sh</include> + <include>tutti.bat</include> + <include>README*</include> + </includes> + </fileSet> + + <fileSet> + <includes> + <include>LICENSE*</include> + </includes> + </fileSet> + + <!-- TUTTI component --> + + <fileSet> <directory>target</directory> <outputDirectory>tutti</outputDirectory> <includes> @@ -74,41 +94,41 @@ </excludes> </fileSet> + <!-- I18N component --> <fileSet> - <directory>src/main/assembly/full</directory> - <outputDirectory/> - <filtered>true</filtered> - <fileMode>0755</fileMode> + <directory>target/classes/META-INF</directory> + <outputDirectory>i18n</outputDirectory> <includes> - <include>tutti.sh</include> - <include>tutti.bat</include> - <include>README*</include> + <include>tutti-i18n*.properties</include> </includes> </fileSet> <fileSet> + <directory>src/main/assembly/min</directory> + <outputDirectory>i18n</outputDirectory> + <filtered>true</filtered> <includes> - <include>LICENSE*</include> + <include>version.appup</include> </includes> </fileSet> + <!-- HELP component --> <fileSet> - <directory>target/classes/META-INF</directory> - <outputDirectory>i18n</outputDirectory> + <directory>src/main/assembly/min</directory> + <outputDirectory>help</outputDirectory> + <filtered>true</filtered> <includes> - <include>tutti-i18n*.properties</include> + <include>version.appup</include> </includes> </fileSet> <fileSet> - <directory>src/main/assembly/min</directory> - <outputDirectory>i18n</outputDirectory> - <filtered>true</filtered> + <directory>src/main/help</directory> + <outputDirectory/> <includes> - <include>version.appup</include> + <include>**/*</include> </includes> </fileSet> - </fileSets> </component> Modified: trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/filtered-resources/log4j.properties 2013-03-09 13:59:14 UTC (rev 567) @@ -33,6 +33,7 @@ log4j.logger.fr.ifremer.tutti=INFO log4j.logger.fr.ifremer.tutti.ui.swing.util=WARN log4j.logger.fr.ifremer.tutti.ui.swing.util.action=INFO +log4j.logger.fr.ifremer.tutti.ui.swing.util.attachment=INFO log4j.appender.file=org.apache.log4j.RollingFileAppender log4j.appender.file.file=${tutti.log.file} Added: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties =================================================================== --- trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties (rev 0) +++ trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,92 @@ +#Generated by org.nuiton.jaxx.plugin.GenerateHelpIdsMojo +#Sat Mar 09 13:54:32 CET 2013 +tuttihelp.editCatchBatch.help=editCatchBatch.html +tuttihelp.editCruise.action.cancel.help=editCruise.html\#actions +tuttihelp.editCruise.action.generateName.help=editCruise.html\#actions +tuttihelp.editCruise.action.save.help=editCruise.html\#actions +tuttihelp.editCruise.field.beginDate.help=editCruise.html\#fields +tuttihelp.editCruise.field.comment.help=editCruise.html\#fields +tuttihelp.editCruise.field.country.help=editCruise.html\#fields +tuttihelp.editCruise.field.endDate.help=editCruise.html\#fields +tuttihelp.editCruise.field.multirigNumber.help=editCruise.html\#fields +tuttihelp.editCruise.field.name.help=editCruise.html\#fields +tuttihelp.editCruise.field.program.help=editCruise.html\#fields +tuttihelp.editCruise.field.surveyPart.help=editCruise.html\#fields +tuttihelp.editCruise.field.year.help=editCruise.html\#fields +tuttihelp.editCruise.filterVessel.help=editCruise.html\#fields +tuttihelp.editCruise.help=editCruise.html +tuttihelp.editCruise.list.gear.help=editCruise.html\#fields +tuttihelp.editCruise.list.headOfMission.help=editCruise.html\#fields +tuttihelp.editCruise.list.headOfSortRoom.help=editCruise.html\#fields +tuttihelp.editCruise.list.vessel.help=editCruise.html\#fields +tuttihelp.editFishingOperation.action.attachments.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.action.cancel.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.action.importCasino.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.action.save.help=editFishingOperation.html\#actions +tuttihelp.editFishingOperation.field.comment.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.duration.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.fishingOperationNumber.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.fishingOperationRectiligne.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.fishingOperationValid.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gear.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearDate.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearLatitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearLongitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearShootingEnd.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearShootingEndLatitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearShootingEndLongitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearShootingStart.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearShootingStartLatitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.gearTime.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.location.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.multirigAggregation.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.stationNumber.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.strata.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.subStrata.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.trawlDistance.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.field.vessel.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.gearShootingStartLongitude.help=editFishingOperation.html\#fields +tuttihelp.editFishingOperation.help=editFishingOperation.html +tuttihelp.editFishingOperation.list.recorderPerson.help=editFishingOperation.html\#fields +tuttihelp.editProgram.action.cancel.help=editProgram.html\#actions +tuttihelp.editProgram.action.save.help=editProgram.html\#actions +tuttihelp.editProgram.field.comment.help=editProgram.html\#fields +tuttihelp.editProgram.field.name.help=editProgram.html\#fields +tuttihelp.editProgram.field.zone.help=editProgram.html\#fields +tuttihelp.editProgram.help=editProgram.html +tuttihelp.editProtocol.action.addSpeciesProtocol.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.cancel.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.exportAllCaracteristic.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.exportCaracteristic.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.exportSpecies.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.importCaracteristic.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.importSpecies.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.removeSpeciesProtocol.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.save.help=editProtocol.html\#actions +tuttihelp.editProtocol.action.selectOtherSpecies.help=editProtocol.html\#actions +tuttihelp.editProtocol.field.comment.help=editProtocol.html\#fields +tuttihelp.editProtocol.field.name.help=editProtocol.html\#fields +tuttihelp.editProtocol.field.species.help=editProtocol.html\#fields +tuttihelp.editProtocol.help=editProtocol.html +tuttihelp.editProtocol.list.gearUseFeature.help=editProtocol.html\#fields +tuttihelp.editProtocol.list.lengthClasses.help=editProtocol.html\#fields +tuttihelp.editProtocol.list.vesselUseFeature.help=editProtocol.html\#fields +tuttihelp.editProtocol.pane.caracteristic.help=editProtocol.html\#fields +tuttihelp.editProtocol.table.species.help=editProtocol.html\#fields +tuttihelp.editSpeciesBatch.help=editSpeciesBatch.html +tuttihelp.fishingOperations.help=fishingOperations.html +tuttihelp.main.help=main.html +tuttihelp.main.menu.action.about.help=main.html\#menu_ +tuttihelp.main.menu.action.configuration.help=main.html\#menu_ +tuttihelp.main.menu.action.editCatches.help=main.html\#menu_ +tuttihelp.main.menu.action.editCruise.help=main.html\#menu_ +tuttihelp.main.menu.action.editProgram.help=main.html\#menu_ +tuttihelp.main.menu.action.editProtocol.help=main.html\#menu_ +tuttihelp.main.menu.action.exit.help=main.html\#menu_ +tuttihelp.main.menu.action.importTemporaryReferential.help=main.html\#menu_ +tuttihelp.main.menu.action.manageDb.help=main.html\#menu_ +tuttihelp.main.menu.action.selectCruise.help=main.html\#menu_ +tuttihelp.main.menu.action.showHelp.help=main.html\#menu_ +tuttihelp.main.menu.action.site.help=main.html\#menu_ +tuttihelp.main.menu.action.updateApplication.help=main.html\#menu_ +tuttihelp.main.menu.action.validateCatches.help=main.html\#menu_ Property changes on: trunk/tutti-ui-swing/src/main/filtered-resources/tutti-help-fr.properties ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editCatchBatch.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editCatchBatch.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editCatchBatch.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer une capture</title> +</head> +<body> + +<h1>Éditer une capture</h1> + +<p>Sur cette écran on peut éditer une capture...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editCatchBatch.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editCruise.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editCruise.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editCruise.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer une campagne</title> +</head> +<body> + +<h1>Éditer une campagne</h1> + +<p>Sur cette écran on peut éditer une campagne...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editCruise.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editFishingOperation.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editFishingOperation.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editFishingOperation.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer un trait</title> +</head> +<body> + +<h1>Éditer un trait</h1> + +<p>Sur cette écran on peut éditer un trait...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editFishingOperation.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editProgram.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editProgram.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editProgram.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,54 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer une série de campagne</title> +</head> +<body> + +<h1>Éditer une série de campagne</h1> + +<p>Sur cette écran on peut éditer une campagne...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Zone</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editProgram.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editProtocol.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editProtocol.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editProtocol.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer un protocole</title> +</head> +<body> + +<h1>Éditer un protocole</h1> + +<p>Sur cette écran on peut éditer un protocole...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editProtocol.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/editSpeciesBatch.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/editSpeciesBatch.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/editSpeciesBatch.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer les lots de poissons</title> +</head> +<body> + +<h1>Éditer les lots de poissons</h1> + +<p>Sur cette écran on peut éditer un lots de poissons...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/editSpeciesBatch.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/fishingOperations.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/fishingOperations.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/fishingOperations.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,53 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Éditer / Créer des traits</title> +</head> +<body> + +<h1>Éditer / Créer des traits</h1> + +<p>Sur cette écran on peut créer / éditer des traits...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Champs</h2> +<ul> + <li>Nom</li> + <li>Commentaire</li> +</ul> + +<h2>Actions</h2> +Actions possibles : + +<ul> + <li>Annuler</li> + <li>Enregister</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/fishingOperations.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/help/main.html =================================================================== --- trunk/tutti-ui-swing/src/main/help/main.html (rev 0) +++ trunk/tutti-ui-swing/src/main/help/main.html 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,48 @@ +<!-- + #%L + Tutti :: UI + $Id$ + $HeadURL$ + %% + Copyright (C) 2012 - 2013 Ifremer + %% + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as + published by the Free Software Foundation, either version 3 of the + License, or (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public + License along with this program. If not, see + <http://www.gnu.org/licenses/gpl-3.0.html>. + #L% + --> +<!DOCTYPE html> +<html lang="fr"> + +<head> + <meta charset="utf-8"/> + <title>Tutti - Écran principal</title> +</head> +<body> + +<h1>Écran principal</h1> + +<p>...</p> + +<strong>Documentation à rédiger</strong> + +<h2>Menu</h2> +Actions possibles depuis le menu : + +<ul> + <li>Configuration</li> + <li>Gérerles bases</li> + <li>Quitter l'application</li> +</ul> +</body> +</html> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/help/main.html ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiApplicationUpdaterCallBack.java 2013-03-09 13:59:14 UTC (rev 567) @@ -27,6 +27,7 @@ import com.google.common.base.Preconditions; import com.google.common.collect.Lists; import com.google.common.collect.Maps; +import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.ProgressionModel; import fr.ifremer.tutti.persistence.config.TuttiPersistenceConfig; @@ -64,7 +65,8 @@ JRE, TUTTI, I18N, - DB; + HELP, + DB } protected final TuttiUIContext context; @@ -152,6 +154,7 @@ doRestart |= updateTutti; doRestart |= updateDoneI18n(appToUpdate, appUpdateError); + doRestart |= updateDoneHelp(appToUpdate, appUpdateError); updateDoneDb(appToUpdate, appUpdateError); @@ -161,19 +164,22 @@ if (updateTutti) { - TuttiPersistenceConfig persistenceConfig = context.getConfig().getServiceConfig().getPersistenceConfig(); + TuttiPersistenceConfig persistenceConfig = + context.getConfig().getServiceConfig().getPersistenceConfig(); // must remove the enumeration file at exit - persistenceConfig.getDbEnumerationPath().deleteOnExit(); + File enumerationPath = persistenceConfig.getDbEnumerationPath(); + TuttiIOUtil.forceDeleteOnExit( + enumerationPath, + "Could not delete enumeration file " + enumerationPath + ); + //FIXME-check this is necessary: i18n is no more generated ? // must also remove i18n directory File i18nDirectory = context.getConfig().getI18nDirectory(); - try { - FileUtils.forceDeleteOnExit(i18nDirectory); - } catch (IOException e) { - throw new TuttiTechnicalException( - "could not delete i18n directory " + i18nDirectory, e); - } + TuttiIOUtil.forceDeleteOnExit( + i18nDirectory, + "Could not delete i18n directory " + i18nDirectory); } } } @@ -264,6 +270,31 @@ return doRestart; } + protected boolean updateDoneHelp(Map<String, ApplicationInfo> appToUpdate, + Map<String, Exception> appUpdateError) { + boolean doRestart = false; + Exception error = getError(UpdateType.HELP, appUpdateError); + if (error != null) { + + // something bad while updating i18n + if (log.isErrorEnabled()) { + log.error("Could not update help", error); + } + } else { + ApplicationInfo info = getInfo(UpdateType.HELP, appToUpdate); + if (info != null) { + + if (log.isInfoEnabled()) { + log.info(String.format( + "A help update was downloaded (oldVersion: %s, newVersion: %s), will restart application to use it", + info.oldVersion, info.newVersion)); + } + doRestart = true; + } + } + return doRestart; + } + protected void updateDoneDb(Map<String, ApplicationInfo> appToUpdate, Map<String, Exception> appUpdateError) { Exception error = getError(UpdateType.DB, appUpdateError); Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,82 @@ +package fr.ifremer.tutti.ui.swing; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import jaxx.runtime.JAXXObject; +import jaxx.runtime.swing.help.JAXXHelpBroker; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.AbstractButton; +import java.awt.event.ActionListener; + +/** + * Help broker. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class TuttiHelpBroker extends JAXXHelpBroker { + + /** Logger */ + private static final Log log = LogFactory.getLog(TuttiHelpBroker.class); + + public TuttiHelpBroker(String defaultID) { + super("tutti", "help", + defaultID, + TuttiUIContext.getApplicationContext()); + } + + @Override + public void prepareUI(JAXXObject c) { + + if (c == null) { + throw new NullPointerException("parameter c can not be null!"); + } + + // l'ui doit avoir un boutton showHelp + AbstractButton help = getShowHelpButton(c); + + if (help != null) { + + // attach context to button + if (log.isDebugEnabled()) { + log.debug("attach context to showhelp button " + c); + } + help.putClientProperty(JAXX_CONTEXT_ENTRY, c); + + // add tracking action + ActionListener listener = getShowHelpAction(); + if (log.isDebugEnabled()) { + log.debug("adding tracking action " + listener); + } + help.addActionListener(listener); + + if (log.isDebugEnabled()) { + log.debug("done for " + c); + } + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiHelpBroker.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIContext.java 2013-03-09 13:59:14 UTC (rev 567) @@ -25,8 +25,8 @@ */ import com.google.common.base.Preconditions; -import com.google.common.base.Throwables; import com.google.common.collect.Sets; +import fr.ifremer.tutti.TuttiIOUtil; import fr.ifremer.tutti.TuttiTechnicalException; import fr.ifremer.tutti.persistence.RessourceClassLoader; import fr.ifremer.tutti.persistence.entities.data.Cruise; @@ -43,7 +43,9 @@ import fr.ifremer.tutti.ui.swing.util.TuttiErrorHelper; import fr.ifremer.tutti.ui.swing.util.UIMessageNotifier; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; -import org.apache.commons.io.FileUtils; +import jaxx.runtime.JAXXContext; +import jaxx.runtime.swing.help.JAXXHelpBroker; +import jaxx.runtime.swing.help.JAXXHelpUIHandler; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; @@ -54,12 +56,16 @@ import org.nuiton.i18n.init.UserI18nInitializer; import org.nuiton.widget.SwingSession; +import java.awt.Desktop; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import java.io.Closeable; import java.io.File; import java.io.IOException; +import java.io.InputStream; +import java.net.URI; import java.util.Locale; +import java.util.Properties; import java.util.Set; /** @@ -68,7 +74,7 @@ * @author tchemit <chemit@codelutin.com> * @since 0.1 */ -public class TuttiUIContext extends AbstractBean implements Closeable, UIMessageNotifier { +public class TuttiUIContext extends AbstractBean implements Closeable, UIMessageNotifier, JAXXHelpUIHandler { public static final String VALIDATION_CONTEXT_EDIT = "edit"; @@ -173,6 +179,13 @@ protected TuttiDataContext dataContext; /** + * Tutti help broker. + * + * @since 1.1 + */ + protected TuttiHelpBroker helpBroker; + + /** * Current screen displayed in ui. * * @since 0.1 @@ -211,6 +224,8 @@ */ private boolean dbLoaded; + private Properties helpMapping; + public static TuttiUIContext newContext(TuttiApplicationConfig config) { Preconditions.checkNotNull(config); Preconditions.checkState(applicationContext == null, @@ -407,11 +422,7 @@ public void init() { - try { - config.getServiceConfig().prepareDirectories(); - } catch (IOException e) { - throw Throwables.propagate(e); - } + config.getServiceConfig().prepareDirectories(); // use our special classLoader (which will read some files from resources from a configuration directory) Thread.currentThread().setContextClassLoader(getResourceLoader()); @@ -435,7 +446,9 @@ throw new RuntimeException("Could not init persistence configuration", e); } - // Initialize i18n + //--------------------------------------------------------------------// + // init i18n + //--------------------------------------------------------------------// File i18nDirectory = config.getI18nDirectory(); if (!config.isFullLaunchMode()) { @@ -443,18 +456,17 @@ if (i18nDirectory.exists()) { // clean i18n cache - try { - FileUtils.cleanDirectory(i18nDirectory); - } catch (IOException e) { - throw new RuntimeException("Could not delete i18n cache at " + i18nDirectory, e); - } + TuttiIOUtil.cleanDirectory( + i18nDirectory, + "Could not delete i18n cache at " + i18nDirectory); } } - try { - FileUtils.forceMkdir(i18nDirectory); - } catch (IOException e) { - throw new RuntimeException("Could not create i18n at " + i18nDirectory, e); + TuttiIOUtil.forceMkdir(i18nDirectory, + "Could not create i18n at " + i18nDirectory); + + if (log.isDebugEnabled()) { + log.debug("I18N directory: " + i18nDirectory); } Locale i18nLocale = config.getI18nLocale(); @@ -467,6 +479,48 @@ i18nDirectory, new DefaultI18nInitializer("tutti-i18n")), i18nLocale); + //--------------------------------------------------------------------// + // init help + //--------------------------------------------------------------------// + + File helpDirectory = config.getHelpDirectory(); + + if (!config.isFullLaunchMode()) { + + if (!helpDirectory.exists()) { + helpDirectory = new File(config.getDataDirectory(), "help"); + } + } + + if (log.isDebugEnabled()) { + log.debug("Help directory: " + helpDirectory); + } + TuttiIOUtil.forceMkdir( + helpDirectory, + "Could not create helpDirectory at " + helpDirectory); + + // load help mapping + String mappingProperties = + "/tutti-help-" + i18nLocale.getLanguage() + ".properties"; + try { + + InputStream resourceAsStream = + getClass().getResourceAsStream(mappingProperties); + helpMapping = new Properties(); + helpMapping.load(resourceAsStream); + + } catch (Exception eee) { + log.error("Failed to load help mapping file at '" + + mappingProperties + "'", eee); + } + if (log.isInfoEnabled()) { + log.info(String.format("Starts help with locale at [%s]", + helpDirectory)); + } + + //--------------------------------------------------------------------// + // init action UI + //--------------------------------------------------------------------// setActionUI(new TuttiActionUI(null, this)); } @@ -674,4 +728,44 @@ saveContextToConfig(); } + + public TuttiHelpBroker getHelpBroker() { + return helpBroker; + } + + public void setHelpBroker(TuttiHelpBroker helpBroker) { + this.helpBroker = helpBroker; + } + + @Override + public void showHelp(JAXXContext context, + JAXXHelpBroker broker, + String helpId) { + if (helpId == null) { + helpId = broker.getDefaultID(); + } + + if (log.isInfoEnabled()) { + log.info("show help " + helpId); + } + + String value = (String) helpMapping.get(helpId); + + if (value == null) { + throw new TuttiTechnicalException("Could not find help page for " + helpId); + } + + URI resolvedUri = getConfig().getHelpDirectory().toURI().resolve(value); + try { + + if (log.isDebugEnabled()) { + log.debug("Opening uri " + resolvedUri); + } + + Desktop.getDesktop().browse(resolvedUri); + } catch (Exception eee) { + throw new TuttiTechnicalException("Could not open help page at " + helpId); + } + + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-09 13:59:14 UTC (rev 567) @@ -292,6 +292,11 @@ TuttiApplicationConfigOption.TUTTI_I18N_LOCALE.getKey()); } + public File getHelpDirectory() { + return applicationConfig.getOptionAsFile( + TuttiApplicationConfigOption.TUTTI_HELP_DIRECTORY.getKey()); + } + public void setProgramId(String programId) { if (programId == null) { programId = ""; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-03-09 13:59:14 UTC (rev 567) @@ -58,6 +58,13 @@ File.class ), + TUTTI_HELP_DIRECTORY( + "tutti.help.directory", + n_("tutti.option.help.directory.description"), + "${tutti.basedir}/help", + File.class + ), + TUTTI_I18N_LOCALE( "tutti.i18n.locale", n_("tutti.option.i18n.locale.description"), Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -42,19 +42,23 @@ toolTipText: "tutti.action.configuration.tip"; actionIcon: config; mnemonic: C; + _help: {"tuttihelp.main.menu.action.configuration.help"}; } #menuFileExit { _tuttiAction: {CloseApplicationAction.class}; + _help: {"tuttihelp.main.menu.action.exit.help"}; } #menuActionUpdate { _tuttiAction: {UpdateApplicationAction.class}; + _help: {"tuttihelp.main.menu.action.updateApplication.help"}; } #menuActionManageDb { enabled: {model.getScreen() != TuttiScreen.MANAGE_DB}; _tuttiAction: {ManageDbAction.class}; + _help: {"tuttihelp.main.menu.action.manageDb.help"}; } #menuActions { @@ -67,21 +71,25 @@ #menuActionSelectCruise { enabled: {model.getScreen() != TuttiScreen.SELECT_CRUISE}; _tuttiAction: {SelectCruiseAction.class}; + _help: {"tuttihelp.main.menu.action.selectCruise.help"}; } #menuActionEditProgram { enabled: {model.getScreen() != TuttiScreen.EDIT_PROGRAM && model.isProgramFilled()}; _tuttiAction: {EditSelectedProgramAction.class}; + _help: {"tuttihelp.main.menu.action.editProgram.help"}; } #menuActionEditCruise { enabled: {model.getScreen() != TuttiScreen.EDIT_CRUISE && model.isCruiseFilled()}; _tuttiAction: {EditSelectedCruiseAction.class}; + _help: {"tuttihelp.main.menu.action.editCruise.help"}; } #menuActionEditProtocol { enabled: {model.getScreen() != TuttiScreen.EDIT_PROTOCOL && model.isProtocolFilled()}; _tuttiAction: {EditSelectedProtocolAction.class}; + _help: {"tuttihelp.main.menu.action.editProtocol.help"}; } #menuActionEditCatches { @@ -90,6 +98,7 @@ || model.getScreen() != TuttiScreen.EDIT_FISHING_OPERATION ) && model.isCruiseFilled()}; _tuttiAction: {EditSelectedCruiseCatchesAction.class}; + _help: {"tuttihelp.main.menu.action.editCatches.help"}; } #menuActionValidateCatches { @@ -98,9 +107,10 @@ || model.getScreen() != TuttiScreen.EDIT_FISHING_OPERATION ) && model.isCruiseFilled()}; _tuttiAction: {ValidateSelectedCruiseCatchesAction.class}; + _help: {"tuttihelp.main.menu.action.validateCatches.help"}; } -#menuAdministration{ +#menuAdministration { enabled: {model.isDbLoaded()}; text: "tutti.menu.administration"; toolTipText: "tutti.menu.administration.tip"; @@ -110,39 +120,9 @@ #menuImportTemporaryReferential { enabled: {model.getScreen() != TuttiScreen.IMPORT_TEMPORARY_REFERENTIAL}; _tuttiAction: {ImportTemporaryReferentialAction.class}; + _help: {"tuttihelp.main.menu.action.importTemporaryReferential.help"}; } -#menuSynchronisations { - enabled: {model.isDbLoaded()}; - text: "tutti.menu.synchronisations"; - toolTipText: "tutti.menu.synchronisations.tip"; - mnemonic: S; -} - -#menuSynchronisationImport { - text: "tutti.menu.synchronisationImport"; - toolTipText: "tutti.menu.synchronisationImport.tip"; - mnemonic: I; - enabled: false; - actionIcon: import; -} - -#menuSynchronisationExport { - text: "tutti.menu.synchronisationExport"; - toolTipText: "tutti.menu.synchronisationExport.tip"; - mnemonic: E; - enabled: false; - actionIcon: export; -} - -#menuSynchronisationAllegro { - text: "tutti.menu.synchronisationAllegro"; - toolTipText: "tutti.menu.synchronisationAllegro.tip"; - mnemonic: A; - enabled: false; - actionIcon: allegro; -} - #menuHelp { text: "tutti.menu.help"; toolTipText: "tutti.menu.help.tip"; @@ -154,6 +134,7 @@ toolTipText: "tutti.action.site.tip"; actionIcon: site; mnemonic: S; + _help: {"tuttihelp.main.menu.action.site.help"}; } #menuHelpAbout { @@ -161,12 +142,9 @@ toolTipText: "tutti.action.about.tip"; actionIcon: about; mnemonic: A; + _help: {"tuttihelp.main.menu.action.about.help"}; } -#menuUpdateApplication { - _tuttiAction: {UpdateApplicationAction.class}; -} - #bottomBar { floatable: false; margin: {new java.awt.Insets(0, 0, 0, 5)}; @@ -176,3 +154,14 @@ #validatorMessageWidget { focusPainted: false; } + +#showHelp { + toolTipText:"tutti.action.showHelp.tip"; + actionIcon:"show-help"; + _help: {"tuttihelp.main.menu.action.showHelp.help"}; +} + +#body { + _help: {"tuttihelp.main.help"}; +} + Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -23,23 +23,29 @@ --> <JFrame id='mainFrame' onWindowClosing='menuFileExit.getAction().actionPerformed(null)' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<TuttiUIContext, MainUIHandler>' - width='800' height='600'> + width='800' height='600' decorator='help'> <import> - java.awt.BorderLayout - javax.swing.JFrame - org.jdesktop.swingx.JXTitledPanel - jaxx.runtime.validator.swing.SwingValidator - jaxx.runtime.validator.swing.SwingValidatorMessageWidget fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.TuttiScreen + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + + jaxx.runtime.validator.swing.SwingValidator + jaxx.runtime.validator.swing.SwingValidatorMessageWidget + + org.jdesktop.swingx.JXTitledPanel + + javax.swing.JFrame + javax.swing.border.EmptyBorder + java.awt.BorderLayout </import> <TuttiUIContext id='model' initializer='getContextValue(TuttiUIContext.class)'/> <MainUIHandler id='handler' initializer='getContextValue(MainUIHandler.class)'/> - + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.main.help"'/> <script><![CDATA[ public MainUI(TuttiUIContext context) { @@ -79,16 +85,6 @@ <JMenuItem id='menuImportTemporaryReferential'/> </JMenu> - <!--JMenu id='menuSynchronisations'> - - <JMenuItem id='menuSynchronisationImport' - onActionPerformed="getHandler().showImportScreen()"/> - <JMenuItem id='menuSynchronisationExport' - onActionPerformed="getHandler().showExportScreen()"/> - <JMenuItem id='menuSynchronisationAllegro' - onActionPerformed="getHandler().showAllegroScreen()"/> - </JMenu--> - <JMenu id='menuHelp'> <JMenuItem id='menuHelpSite' onActionPerformed='getHandler().gotoSite()'/> @@ -101,6 +97,9 @@ <SwingValidatorMessageWidget id='validatorMessageWidget'/> </JToolBar> + <!-- pour afficher l'aide contextuelle --> + <JButton id='showHelp'/> + <JXTitledPanel id='body' constraints='BorderLayout.CENTER'/> <!-- status message bar --> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -54,8 +54,10 @@ import org.nuiton.widget.SwingSession; import javax.swing.Icon; +import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JPanel; import javax.swing.JToolBar; import java.awt.Desktop; import java.beans.PropertyChangeEvent; @@ -318,7 +320,7 @@ // load new body JComponent screenUI; - JComponent rightDecoration = null; + JToolBar rightDecoration = null; String screenTitle; Icon icon; @@ -401,6 +403,16 @@ break; } + JButton showHelp = ui.getShowHelp(); + if (rightDecoration == null) { + rightDecoration = new JToolBar(); + rightDecoration.setFloatable(false); + rightDecoration.setOpaque(false); + rightDecoration.setBorderPainted(false); + } else { + rightDecoration.remove(showHelp); + } + rightDecoration.add(showHelp, 0); this.currentBody = screenUI; context.getSwingSession().add(currentBody); ui.getBody().setTitle(screenTitle); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -41,9 +41,15 @@ showReset: true; } +#editCruiseTopPanel { + _help: {"tuttihelp.editCruise.help"}; +} + #nameLabel { text: "tutti.label.cruise.name"; labelFor: {nameField}; + toolTipText: "tuttihelp.editCruise.field.name.tip"; + _help: {"tuttihelp.editCruise.field.name.help"}; } #nameField { @@ -54,6 +60,8 @@ #yearLabel { text: "tutti.label.cruise.year"; labelFor: {yearField}; + toolTipText: "tuttihelp.editCruise.field.year.tip"; + _help: {"tuttihelp.editCruise.field.year.help"}; } #yearField { @@ -67,6 +75,8 @@ #surveyPartLabel { text: "tutti.label.cruise.surveyPart"; labelFor: {surveyPartField}; + toolTipText: "tuttihelp.editCruise.field.surveyPart.tip"; + _help: {"tuttihelp.editCruise.field.surveyPart.help"}; } #surveyPartField { @@ -77,6 +87,8 @@ #countryLabel { text: "tutti.label.cruise.country"; labelFor: {countryComboBox}; + toolTipText: "tuttihelp.editCruise.field.country.tip"; + _help: {"tuttihelp.editCruise.field.country.help"}; } #countryComboBox { @@ -87,10 +99,12 @@ #programLabel { text: "tutti.label.cruise.program"; - labelFor: {surveyComboBox}; + labelFor: {programComboBox}; + toolTipText: "tuttihelp.editCruise.field.program.tip"; + _help: {"tuttihelp.editCruise.field.program.help"}; } -#surveyComboBox { +#programComboBox { property: program; selectedItem: {model.getProgram()}; _validatorLabel : {_("tutti.label.cruise.program")}; @@ -99,6 +113,8 @@ #beginDateLabel { text: "tutti.label.cruise.beginDate"; labelFor: {beginDateField}; + toolTipText: "tuttihelp.editCruise.field.beginDate.tip"; + _help: {"tuttihelp.editCruise.field.beginDate.help"}; } #beginDateField { @@ -109,6 +125,8 @@ #endDateLabel { text: "tutti.label.cruise.endDate"; labelFor: {endDateField}; + toolTipText: "tuttihelp.editCruise.field.endDate.tip"; + _help: {"tuttihelp.editCruise.field.endDate.help"}; } #endDateField { @@ -117,8 +135,10 @@ } #multirigNumberLabel { - text: "tutti.label.cruise.multirigNumber"; - labelFor: {multirigNumberField}; + text: "tutti.label.cruise.multirigNumber"; + labelFor: {multirigNumberField}; + toolTipText: "tuttihelp.editCruise.field.multirigNumber.tip"; + _help: {"tuttihelp.editCruise.field.multirigNumber.help"}; } #multirigNumberField { @@ -133,6 +153,8 @@ text: "tutti.label.filterVesselType"; _strongStyle: true; actionIcon: filter; + toolTipText: "tuttihelp.editCruise.filterVessel.tip"; + _help: {"tuttihelp.editCruise.filterVessel.help"}; } #filterVesselAllButton { @@ -163,28 +185,38 @@ property: vessel; border: {BorderFactory.createTitledBorder(_("tutti.label.list.vessel"))}; _validatorLabel : {_("tutti.label.list.vessel")}; + toolTipText: "tuttihelp.editCruise.list.vessel.tip"; + _help: {"tuttihelp.editCruise.list.vessel.help"}; } #gearList { property: gear; border: {BorderFactory.createTitledBorder(_("tutti.label.list.gear"))}; _validatorLabel : {_("tutti.label.list.gear")}; + toolTipText: "tuttihelp.editCruise.list.gear.tip"; + _help: {"tuttihelp.editCruise.list.gear.help"}; } #headOfMissionList { property: headOfMission; border: {BorderFactory.createTitledBorder(_("tutti.label.list.headOfMission"))}; _validatorLabel : {_("tutti.label.list.headOfMission")}; + toolTipText: "tuttihelp.editCruise.list.headOfMission.tip"; + _help: {"tuttihelp.editCruise.list.headOfMission.help"}; } #headOfSortRoomList { property: headOfSortRoom; border: {BorderFactory.createTitledBorder(_("tutti.label.list.headOfSortRoom"))}; _validatorLabel : {_("tutti.label.list.headOfSortRoom")}; + toolTipText: "tuttihelp.editCruise.list.headOfSortRoom.tip"; + _help: {"tuttihelp.editCruise.list.headOfSortRoom.help"}; } #commentPane { border: {BorderFactory.createTitledBorder(_("tutti.label.comment"))}; + toolTipText: "tuttihelp.editCruise.field.comment.tip"; + _help: {"tuttihelp.editCruise.field.comment.help"}; } #commentField { @@ -195,22 +227,26 @@ #saveButton { _tuttiAction: {SaveCruiseAction.class}; enabled: {model.isModify() && model.isValid()}; + _help: {"tuttihelp.editCruise.action.save.help"}; } #cancelButton { _tuttiAction: {CancelEditCruiseAction.class}; + _help: {"tuttihelp.editCruise.action.cancel.help"}; } #generateNameButton { actionIcon: generate; text: "tutti.action.generateCampaignName"; enabled: {model.isCanGenerateName()}; + toolTipText: "tuttihelp.editCruise.action.generateName.tip"; + _help: {"tuttihelp.editCruise.action.generateName.help"}; } #topToolBar { floatable: false; - opaque: true; - borderPainted: true; + opaque: false; + borderPainted: false; } #attachmentsButton { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,7 +21,7 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='editCruiseTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditCruiseUIModel, EditCruiseUIHandler>'> <import> @@ -32,17 +32,15 @@ fr.ifremer.tutti.persistence.entities.referential.Vessel fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor + fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment jaxx.runtime.swing.editor.NumberEditor jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanListHeader jaxx.runtime.swing.editor.bean.BeanDoubleList - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel - org.jdesktop.swingx.JXDatePicker javax.swing.DefaultListModel @@ -76,11 +74,9 @@ <EditCruiseUIModel id='model' initializer='getContextValue(EditCruiseUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> - - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> - <field name='program' component='surveyComboBox'/> + <field name='program' component='programComboBox'/> <field name='year' component='yearField'/> <field name='surveyPart' component='surveyPartField'/> <field name='name' component='nameField'/> @@ -95,8 +91,12 @@ <field name='comment' component='commentPane'/> </BeanValidator> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editCruise.help"'/> + <JToolBar id='topToolBar'> - <JButton id='attachmentsButton'/> + <ButtonAttachment id='attachmentsButton' + constructorParams='getHandler().getContext(), getModel()'/> </JToolBar> <Table fill='both' constraints='BorderLayout.CENTER'> @@ -107,7 +107,7 @@ <JLabel id='programLabel'/> </cell> <cell weightx='1'> - <BeanComboBox id='surveyComboBox' constructorParams='this' + <BeanComboBox id='programComboBox' constructorParams='this' genericType='Program'/> </cell> <cell anchor='west'> @@ -231,7 +231,4 @@ </row> </Table> - <ButtonAttachmentEditor id='attachmentEditor' - initializer='ButtonAttachmentEditor.newEditor(this, attachmentsButton)'/> - </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -180,7 +180,7 @@ } }); - initBeanComboBox(ui.getSurveyComboBox(), + initBeanComboBox(ui.getProgramComboBox(), persistenceService.getAllProgram(), model.getProgram()); @@ -223,6 +223,8 @@ log.info("closing: " + ui); } clearValidators(); + + ui.getAttachmentsButton().onCloseUI(); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationAction.java 2013-03-09 13:59:14 UTC (rev 567) @@ -469,6 +469,21 @@ handler.registerValidator(); } + Decorator<FishingOperation> decorator = + getDecorator(FishingOperation.class, null); + + String fishingOperationText; + + if (bean == null) { + fishingOperationText = null; + } else { + fishingOperationText = _("tutti.label.traitReminder", + decorator.toString(bean)); + } + ui.getTraitGeneralTabPane().setTitle(fishingOperationText); + ui.getVesselUseFeatureTabPane().setTitle(fishingOperationText); + ui.getGearUseFeatureTabPane().setTitle(fishingOperationText); + handler.installStartDateListener(); handler.installCoordinatesListener(); } @@ -560,8 +575,6 @@ // ui.getPlanktonTabContent().getHandler().selectFishingOperation(bean); // ui.getMacroWasteTabContent().getHandler().selectFishingOperation(bean); // ui.getAccidentalTabContent().getHandler().selectFishingOperation(bean); - - } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -54,6 +54,25 @@ bean: {model}; } +#editFishingOperationTopPanel { + _help: {"tuttihelp.editFishingOperation.help"}; +} +#traitGeneralTabPaneToolBar { + floatable: false; + opaque: false; + borderPainted: false; +} + +#fishingOperationAttachmentsButton { + enabled: {model.getId() != null}; + toolTipText: "tuttihelp.editFishingOperation.action.attachments.tip"; + _help: {"tuttihelp.editFishingOperation.action.attachments.help"}; +} + +#traitGeneralTabPane { + rightDecoration: {traitGeneralTabPaneToolBar}; +} + /*#fishingOperationTabScrollPane { horizontalScrollBarPolicy: {javax.swing.ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER}; }*/ @@ -61,6 +80,8 @@ #stationNumberLabel { text: "tutti.label.fishingOperation.stationNumber"; labelFor: {stationNumberField}; + toolTipText: "tuttihelp.editFishingOperation.field.stationNumber.tip"; + _help: {"tuttihelp.editFishingOperation.field.stationNumber.help"}; } #stationNumberField { @@ -71,6 +92,8 @@ #fishingOperationNumberLabel { text: "tutti.label.fishingOperation.fishingOperationNumber"; labelFor: {fishingOperationNumberField}; + toolTipText: "tuttihelp.editFishingOperation.field.fishingOperationNumber.tip"; + _help: {"tuttihelp.editFishingOperation.field.fishingOperationNumber.help"}; } #fishingOperationNumberField { @@ -84,6 +107,8 @@ #strataLabel { text: "tutti.label.fishingOperation.strata"; labelFor: {strataComboBox}; + toolTipText: "tuttihelp.editFishingOperation.field.strata.tip"; + _help: {"tuttihelp.editFishingOperation.field.strata.help"}; } #strataComboBox { @@ -95,6 +120,8 @@ #subStrataLabel { text: "tutti.label.fishingOperation.subStrata"; labelFor: {subStrataComboBox}; + toolTipText: "tuttihelp.editFishingOperation.field.subStrata.tip"; + _help: {"tuttihelp.editFishingOperation.field.subStrata.help"}; } #subStrataComboBox { @@ -106,6 +133,8 @@ #locationLabel { text: "tutti.label.fishingOperation.location"; labelFor: {locationComboBox}; + toolTipText: "tuttihelp.editFishingOperation.field.location.tip"; + _help: {"tuttihelp.editFishingOperation.field.location.help"}; } #locationComboBox { @@ -115,31 +144,43 @@ } #gearLongitudeLabel { - text: {_("tutti.label.fishingOperation.gearLongitude", ((CoordinateEditorType)handler.getConfig().getCoordinateEditorType()).toString())}; + text: {handler.getGearLongitudeLabelText(handler.getConfig().getCoordinateEditorType())}; actionIcon: "coordinates"; + toolTipText: "tuttihelp.editFishingOperation.field.gearLongitude.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearLongitude.help"}; } #gearLatitudeLabel { - text: {_("tutti.label.fishingOperation.gearLatitude", ((CoordinateEditorType)handler.getConfig().getCoordinateEditorType()).toString())}; + text: {handler.getGearLatitudeLabelText(handler.getConfig().getCoordinateEditorType())}; actionIcon: "coordinates"; + toolTipText: "tuttihelp.editFishingOperation.field.gearLatitude.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearLatitude.help"}; } #gearDateLabel { text: "tutti.label.fishingOperation.gearDate"; actionIcon: "calendar"; + toolTipText: "tuttihelp.editFishingOperation.field.gearDate.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearDate.help"}; } #gearTimeLabel { text: "tutti.label.fishingOperation.gearTime"; actionIcon: "time"; + toolTipText: "tuttihelp.editFishingOperation.field.gearTime.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearTime.help"}; } #gearShootingStartLabel { text: "tutti.label.fishingOperation.gearShootingStart"; + toolTipText: "tuttihelp.editFishingOperation.field.gearShootingStart.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearShootingStart.help"}; } #gearShootingEndLabel { text: "tutti.label.fishingOperation.gearShootingEnd"; + toolTipText: "tuttihelp.editFishingOperation.field.gearShootingEnd.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearShootingEnd.help"}; } CardLayout2Ext { @@ -154,6 +195,8 @@ text: "tutti.label.fishingOperation.vessel"; labelFor: {vesselComboBox}; actionIcon: "vessel"; + toolTipText: "tuttihelp.editFishingOperation.field.vessel.tip"; + _help: {"tuttihelp.editFishingOperation.field.vessel.help"}; } #vesselComboBox { @@ -166,6 +209,8 @@ text: "tutti.label.fishingOperation.gear"; labelFor: {gearComboBox}; actionIcon: "gear"; + toolTipText: "tuttihelp.editFishingOperation.field.gear.tip"; + _help: {"tuttihelp.editFishingOperation.field.gear.help"}; } #gearComboBox { @@ -177,6 +222,8 @@ #multirigAggregationLabel { text: "tutti.label.fishingOperation.multirigAggregation"; labelFor: {multirigAggregationField}; + toolTipText: "tuttihelp.editFishingOperation.field.multirigAggregation.tip"; + _help: {"tuttihelp.editFishingOperation.field.multirigAggregation.help"}; } #multirigAggregationField { @@ -213,6 +260,8 @@ #gearShootingStartLongitudePanel { layout:{gearShootingStartLongitudeLayout}; + toolTipText: "tuttihelp.editFishingOperation.gearShootingStartLongitude.tip"; + _help: {"tuttihelp.editFishingOperation.gearShootingStartLongitude.help"}; } #gearShootingStartLongitudeDMSDegreeField { @@ -258,6 +307,8 @@ #gearShootingStartLatitudePanel { layout:{gearShootingStartLatitudeLayout}; + toolTipText: "tuttihelp.editFishingOperation.field.gearShootingStartLatitude.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearShootingStartLatitude.help"}; } #gearShootingStartLatitudeDMSDegreeField { @@ -313,6 +364,8 @@ #gearShootingEndLongitudePanel { layout:{gearShootingEndLongitudeLayout}; + toolTipText: "tuttihelp.editFishingOperation.field.gearShootingEndLongitude.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearShootingEndLongitude.help"}; } #gearShootingEndLongitudeDMSDegreeField { @@ -358,6 +411,8 @@ #gearShootingEndLatitudePanel { layout:{gearShootingEndLatitudeLayout}; + toolTipText: "tuttihelp.editFishingOperation.field.gearShootingEndLatitude.tip"; + _help: {"tuttihelp.editFishingOperation.field.gearShootingEndLatitude.help"}; } #gearShootingEndLatitudeDMSDegreeField { @@ -416,6 +471,8 @@ borderPainted: false; opaque: false; _validatorLabel : {_("tutti.label.fishingOperation.fishingOperationValidity")}; + toolTipText: "tuttihelp.editFishingOperation.field.fishingOperationValid.tip"; + _help: {"tuttihelp.editFishingOperation.field.fishingOperationValid.help"}; } #resetValidStateButton { @@ -443,11 +500,15 @@ #fishingOperationRectiligneCheckBox { text: "tutti.label.fishingOperation.fishingOperationRectiligne"; selected: {model.isFishingOperationRectiligne()}; + toolTipText: "tuttihelp.editFishingOperation.field.fishingOperationRectiligne.tip"; + _help: {"tuttihelp.editFishingOperation.field.fishingOperationRectiligne.help"}; } #trawlDistanceLabel { text: "tutti.label.fishingOperation.trawlDistance"; labelFor: {trawlDistanceField}; + toolTipText: "tuttihelp.editFishingOperation.field.trawlDistance.tip"; + _help: {"tuttihelp.editFishingOperation.field.trawlDistance.help"}; } #trawlDistanceField { @@ -456,13 +517,15 @@ useFloat: false; numberPattern: {INT_6_DIGITS_PATTERN}; enabled: {!model.isFishingOperationRectiligne()}; - toolTipText: {model.getTrawlDistance() != null ? _("tutti.tooltip.distanceInMilles", TuttiUIUtil.getDistanceInMilles(model.getTrawlDistance())) : null}; + toolTipText: {handler.getTrawlDistanceTooltipText(model.getTrawlDistance())}; _validatorLabel : {_("tutti.label.fishingOperation.trawlDistance")}; } #durationLabel { text: "tutti.label.fishingOperation.duration"; labelFor: {durationField}; + toolTipText: "tuttihelp.editFishingOperation.field.duration.tip"; + _help: {"tuttihelp.editFishingOperation.field.duration.help"}; } #durationField { @@ -475,10 +538,14 @@ property: recorderPerson; border: {BorderFactory.createTitledBorder(_("tutti.label.list.recorderPerson"))}; _validatorLabel : {_("tutti.label.list.recorderPerson")}; + toolTipText: "tuttihelp.editFishingOperation.list.recorderPerson.tip"; + _help: {"tuttihelp.editFishingOperation.list.recorderPerson.help"}; } #commentPane { border: {BorderFactory.createTitledBorder(_("tutti.label.comment"))}; + toolTipText: "tuttihelp.editFishingOperation.field.comment.tip"; + _help: {"tuttihelp.editFishingOperation.field.comment.help"}; } #commentField { @@ -488,16 +555,18 @@ #saveButton { _tuttiAction: {SaveFishingOperationAction.class}; + toolTipText: "tuttihelp.editFishingOperation.action.save.tip"; + _help: {"tuttihelp.editFishingOperation.action.save.help"}; } #cancelButton { _tuttiAction: {CancelEditFishingOperationAction.class}; + toolTipText: "tuttihelp.editFishingOperation.action.cancel.tip"; + _help: {"tuttihelp.editFishingOperation.action.cancel.help"}; } #importCasinoButton { _tuttiAction: {ImportCasinoAction.class}; + toolTipText: "tuttihelp.editFishingOperation.action.importCasino.tip"; + _help: {"tuttihelp.editFishingOperation.action.importCasino.help"}; } - -#attachmentsButton { - enabled: {model.getId() !=null} -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,23 +21,24 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='editFishingOperationTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditFishingOperationUIModel, EditFishingOperationUIHandler>'> <import> - fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation fr.ifremer.tutti.persistence.entities.data.FishingOperation + fr.ifremer.tutti.persistence.entities.referential.FishingOperationLocation fr.ifremer.tutti.persistence.entities.referential.Gear fr.ifremer.tutti.persistence.entities.referential.Person fr.ifremer.tutti.persistence.entities.referential.Vessel fr.ifremer.tutti.ui.swing.content.operation.fishing.VesselUseFeatureTabUI fr.ifremer.tutti.ui.swing.content.operation.fishing.GearUseFeatureTabUI - - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor + + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.util.TuttiUIUtil + fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor - fr.ifremer.tutti.ui.swing.util.TuttiUIUtil jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanListHeader @@ -46,11 +47,9 @@ jaxx.runtime.swing.editor.TimeEditor jaxx.runtime.swing.CardLayout2Ext - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel - org.jdesktop.swingx.JXDatePicker org.jdesktop.swingx.JXTable + org.jdesktop.swingx.JXTitledPanel java.awt.Dimension @@ -79,10 +78,7 @@ <EditFishingOperationUIModel id='model' initializer='getContextValue(EditFishingOperationUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> - <BeanValidator id='validator' context='validate' bean='model' - errorTableModel='errorTableModel' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='stationNumber' component='stationNumberField'/> <field name='fishingOperationNumber' @@ -159,370 +155,372 @@ <CardLayout2Ext id='gearShootingEndLatitudeLayout' constructorParams='this, "gearShootingEndLatitudePanel"'/> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editeditFishingOperation.help"'/> + <JToolBar id='traitGeneralTabPaneToolBar'> + <JButton id='importCasinoButton'/> + <ButtonAttachment id='fishingOperationAttachmentsButton' + constructorParams='getHandler().getContext(), getModel()'/> + </JToolBar> + <JPanel id='fishingOperationPane' constraints='BorderLayout.CENTER' layout='{new BorderLayout()}'> <JTabbedPane id='fishingOperationTabPane' constraints='BorderLayout.CENTER'> <tab id='traitGeneralTab'> - <!-- <JScrollPane id='fishingOperationTabScrollPane'>--> - <Table fill='both' id='generalForm'> + <JXTitledPanel id='traitGeneralTabPane'> + <!-- <JScrollPane id='fishingOperationTabScrollPane'>--> + <Table fill='both' id='generalForm'> - <!-- Numero station / Numéro trait / Numéro de poche --> - <row> - <cell> - <JLabel id='stationNumberLabel'/> - </cell> - <cell weightx='0.3'> - <JTextField id='stationNumberField' - onKeyReleased='handler.setText(event, "stationNumber")'/> - </cell> - <cell> - <JLabel id='fishingOperationNumberLabel'/> - </cell> - <cell weightx='0.3'> - <NumberEditor id='fishingOperationNumberField' - constructorParams='this'/> - </cell> - <cell> - <JLabel id='multirigAggregationLabel'/> - </cell> - <cell weightx='0.3'> - <JTextField id='multirigAggregationField' - onKeyReleased='handler.setText(event, "multirigAggregation")'/> - </cell> - </row> + <!-- Numero station / Numéro trait / Numéro de poche --> + <row> + <cell> + <JLabel id='stationNumberLabel'/> + </cell> + <cell weightx='0.3'> + <JTextField id='stationNumberField' + onKeyReleased='handler.setText(event, "stationNumber")'/> + </cell> + <cell> + <JLabel id='fishingOperationNumberLabel'/> + </cell> + <cell weightx='0.3'> + <NumberEditor id='fishingOperationNumberField' + constructorParams='this'/> + </cell> + <cell> + <JLabel id='multirigAggregationLabel'/> + </cell> + <cell weightx='0.3'> + <JTextField id='multirigAggregationField' + onKeyReleased='handler.setText(event, "multirigAggregation")'/> + </cell> + </row> - <!-- Strate d'association / Sous Strate / Localité --> - <row> - <cell> - <JLabel id='strataLabel'/> - </cell> - <cell weightx='0.3'> - <BeanComboBox id='strataComboBox' constructorParams='this' - genericType='FishingOperationLocation'/> - </cell> - <cell> - <JLabel id='subStrataLabel'/> - </cell> - <cell weightx='0.3'> - <BeanComboBox id='subStrataComboBox' constructorParams='this' - genericType='FishingOperationLocation'/> - </cell> - <cell> - <JLabel id='locationLabel'/> - </cell> - <cell weightx='0.3'> - <BeanComboBox id='locationComboBox' constructorParams='this' - genericType='FishingOperationLocation'/> - </cell> - </row> + <!-- Strate d'association / Sous Strate / Localité --> + <row> + <cell> + <JLabel id='strataLabel'/> + </cell> + <cell weightx='0.3'> + <BeanComboBox id='strataComboBox' constructorParams='this' + genericType='FishingOperationLocation'/> + </cell> + <cell> + <JLabel id='subStrataLabel'/> + </cell> + <cell weightx='0.3'> + <BeanComboBox id='subStrataComboBox' constructorParams='this' + genericType='FishingOperationLocation'/> + </cell> + <cell> + <JLabel id='locationLabel'/> + </cell> + <cell weightx='0.3'> + <BeanComboBox id='locationComboBox' constructorParams='this' + genericType='FishingOperationLocation'/> + </cell> + </row> - <!-- début de traine long-lat-date-heure - fin de traine long-lat-date-heure --> - <row> - <cell columns='6'> - <JPanel layout="{new BorderLayout()}"> - <Table id="gearCaracteristicsTable" fill="both" weightx='1' - constraints='BorderLayout.CENTER'> - <row> - <cell> - <JPanel/> - </cell> - <cell> - <JLabel id='gearLatitudeLabel'/> - </cell> - <cell> - <JLabel id='gearLongitudeLabel'/> - </cell> - <cell> - <JLabel id='gearDateLabel'/> - </cell> - <cell> - <JLabel id='gearTimeLabel'/> - </cell> - </row> + <!-- début de traine long-lat-date-heure + fin de traine long-lat-date-heure --> + <row> + <cell columns='6'> + <JPanel layout="{new BorderLayout()}"> + <Table id="gearCaracteristicsTable" fill="both" weightx='1' + constraints='BorderLayout.CENTER'> + <row> + <cell> + <JPanel/> + </cell> + <cell> + <JLabel id='gearLatitudeLabel'/> + </cell> + <cell> + <JLabel id='gearLongitudeLabel'/> + </cell> + <cell> + <JLabel id='gearDateLabel'/> + </cell> + <cell> + <JLabel id='gearTimeLabel'/> + </cell> + </row> - <row> - <cell> - <JLabel id='gearShootingStartLabel'/> - </cell> - <cell weightx='1'> - <JPanel id='gearShootingStartLatitudePanel'> - <NumberEditor id='gearShootingStartLatitudeDDField' - constraints='"DD"' - constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingStartLatitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> + <row> + <cell> + <JLabel id='gearShootingStartLabel'/> + </cell> + <cell weightx='1'> + <JPanel id='gearShootingStartLatitudePanel'> + <NumberEditor id='gearShootingStartLatitudeDDField' + constraints='"DD"' + constructorParams='this'/> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMS"'> + <NumberEditor + id='gearShootingStartLatitudeDMSDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingStartLatitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> + <NumberEditor + id='gearShootingStartLatitudeDMSMinuteField' + constructorParams='this' styleClass='minute'/> - <NumberEditor - id='gearShootingStartLatitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingStartLatitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> + <NumberEditor + id='gearShootingStartLatitudeDMSSecondField' + constructorParams='this' styleClass='second'/> + </JPanel> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMD"'> + <NumberEditor + id='gearShootingStartLatitudeDMDDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingStartLatitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> + <NumberEditor + id='gearShootingStartLatitudeDMDMinuteField' + constructorParams='this' + styleClass='decimalMinute'/> + </JPanel> </JPanel> - </JPanel> - </cell> - <cell weightx='1'> - <JPanel id='gearShootingStartLongitudePanel'> - <NumberEditor id='gearShootingStartLongitudeDDField' - constraints='"DD"' - constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingStartLongitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> + </cell> + <cell weightx='1'> + <JPanel id='gearShootingStartLongitudePanel'> + <NumberEditor id='gearShootingStartLongitudeDDField' + constraints='"DD"' + constructorParams='this'/> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMS"'> + <NumberEditor + id='gearShootingStartLongitudeDMSDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingStartLongitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> + <NumberEditor + id='gearShootingStartLongitudeDMSMinuteField' + constructorParams='this' styleClass='minute'/> - <NumberEditor - id='gearShootingStartLongitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingStartLongitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> + <NumberEditor + id='gearShootingStartLongitudeDMSSecondField' + constructorParams='this' styleClass='second'/> + </JPanel> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMD"'> + <NumberEditor + id='gearShootingStartLongitudeDMDDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingStartLongitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> + <NumberEditor + id='gearShootingStartLongitudeDMDMinuteField' + constructorParams='this' + styleClass='decimalMinute'/> + </JPanel> </JPanel> - </JPanel> - </cell> - <cell> - <JXDatePicker id='gearShootingStartDateField' - onActionPerformed='handler.setDate(event, "gearShootingStartDate")'/> - </cell> - <cell> - <SimpleTimeEditor id='gearShootingStartTimeField' + </cell> + <cell> + <JXDatePicker id='gearShootingStartDateField' + onActionPerformed='handler.setDate(event, "gearShootingStartDate")'/> + </cell> + <cell> + <SimpleTimeEditor id='gearShootingStartTimeField' + constructorParams='this'/> + </cell> + </row> + <row> + <cell> + <JLabel id='gearShootingEndLabel'/> + </cell> + <cell weightx='1'> + <JPanel id='gearShootingEndLatitudePanel'> + <NumberEditor id='gearShootingEndLatitudeDDField' + constraints='"DD"' constructorParams='this'/> - </cell> - </row> - <row> - <cell> - <JLabel id='gearShootingEndLabel'/> - </cell> - <cell weightx='1'> - <JPanel id='gearShootingEndLatitudePanel'> - <NumberEditor id='gearShootingEndLatitudeDDField' - constraints='"DD"' - constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingEndLatitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMS"'> + <NumberEditor + id='gearShootingEndLatitudeDMSDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingEndLatitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> + <NumberEditor + id='gearShootingEndLatitudeDMSMinuteField' + constructorParams='this' styleClass='minute'/> - <NumberEditor - id='gearShootingEndLatitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingEndLatitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> + <NumberEditor + id='gearShootingEndLatitudeDMSSecondField' + constructorParams='this' styleClass='second'/> + </JPanel> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMD"'> + <NumberEditor + id='gearShootingEndLatitudeDMDDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingEndLatitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> + <NumberEditor + id='gearShootingEndLatitudeDMDMinuteField' + constructorParams='this' + styleClass='decimalMinute'/> + </JPanel> </JPanel> - </JPanel> - </cell> - <cell weightx='1'> - <JPanel id='gearShootingEndLongitudePanel'> - <NumberEditor id='gearShootingEndLongitudeDDField' - constraints='"DD"' - constructorParams='this'/> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMS"'> - <NumberEditor - id='gearShootingEndLongitudeDMSDegreeField' - constructorParams='this' styleClass='degree'/> + </cell> + <cell weightx='1'> + <JPanel id='gearShootingEndLongitudePanel'> + <NumberEditor id='gearShootingEndLongitudeDDField' + constraints='"DD"' + constructorParams='this'/> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMS"'> + <NumberEditor + id='gearShootingEndLongitudeDMSDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingEndLongitudeDMSMinuteField' - constructorParams='this' styleClass='minute'/> + <NumberEditor + id='gearShootingEndLongitudeDMSMinuteField' + constructorParams='this' styleClass='minute'/> - <NumberEditor - id='gearShootingEndLongitudeDMSSecondField' - constructorParams='this' styleClass='second'/> - </JPanel> - <JPanel layout="{new GridLayout(1,0)}" - constraints='"DMD"'> - <NumberEditor - id='gearShootingEndLongitudeDMDDegreeField' - constructorParams='this' styleClass='degree'/> + <NumberEditor + id='gearShootingEndLongitudeDMSSecondField' + constructorParams='this' styleClass='second'/> + </JPanel> + <JPanel layout="{new GridLayout(1,0)}" + constraints='"DMD"'> + <NumberEditor + id='gearShootingEndLongitudeDMDDegreeField' + constructorParams='this' styleClass='degree'/> - <NumberEditor - id='gearShootingEndLongitudeDMDMinuteField' - constructorParams='this' - styleClass='decimalMinute'/> + <NumberEditor + id='gearShootingEndLongitudeDMDMinuteField' + constructorParams='this' + styleClass='decimalMinute'/> + </JPanel> </JPanel> - </JPanel> - </cell> - <cell> - <JXDatePicker id='gearShootingEndDateField' - onActionPerformed='handler.setDate(event, "gearShootingEndDate")'/> - </cell> - <cell> - <SimpleTimeEditor id='gearShootingEndTimeField' + </cell> + <cell> + <JXDatePicker id='gearShootingEndDateField' + onActionPerformed='handler.setDate(event, "gearShootingEndDate")'/> + </cell> + <cell> + <SimpleTimeEditor id='gearShootingEndTimeField' + constructorParams='this'/> + </cell> + </row> + + <!-- FishingOperation rectiligne / distance chalutee / durée --> + <row> + <cell> + <JLabel/> + </cell> + <cell> + <JCheckBox id='fishingOperationRectiligneCheckBox' + onItemStateChanged='handler.setBoolean(event, "fishingOperationRectiligne")'/> + </cell> + <cell> + <JPanel layout="{new BorderLayout()}"> + <JLabel id='trawlDistanceLabel' + constraints='BorderLayout.WEST'/> + <NumberEditor id='trawlDistanceField' + constraints='BorderLayout.CENTER' constructorParams='this'/> - </cell> - </row> + </JPanel> + </cell> + <cell> + <JLabel/> + </cell> + <cell> + <JPanel layout="{new BorderLayout()}"> + <JLabel id='durationLabel' + constraints='BorderLayout.WEST'/> + <JTextField id='durationField' + constraints='BorderLayout.CENTER'/> + </JPanel> + </cell> + </row> - <!-- FishingOperation rectiligne / distance chalutee / durée --> - <row> - <cell> - <JLabel/> - </cell> - <cell> - <JCheckBox id='fishingOperationRectiligneCheckBox' - onItemStateChanged='handler.setBoolean(event, "fishingOperationRectiligne")'/> - </cell> - <cell> - <JPanel layout="{new BorderLayout()}"> - <JLabel id='trawlDistanceLabel' - constraints='BorderLayout.WEST'/> - <NumberEditor id='trawlDistanceField' - constraints='BorderLayout.CENTER' - constructorParams='this'/> - </JPanel> - </cell> - <cell> - <JLabel/> - </cell> - <cell> - <JPanel layout="{new BorderLayout()}"> - <JLabel id='durationLabel' - constraints='BorderLayout.WEST'/> - <JTextField id='durationField' - constraints='BorderLayout.CENTER'/> - </JPanel> - </cell> - </row> + <!-- Fishing operation valid / invalid--> + <row> + <cell> + <JToolBar id='fishingOperationValidPanel' + layout='{new BorderLayout()}'> + <JButton id='resetValidStateButton' + constraints='BorderLayout.WEST' + onActionPerformed="model.setFishingOperationValid(null)"/> + <JRadioButton id='fishingOperationResetRadio' + constraints='BorderLayout.EAST'/> + </JToolBar> + </cell> + <cell> + <HBox> + <JRadioButton id='fishingOperationValidRadio' + onActionPerformed='model.setFishingOperationValid(Boolean.TRUE)'/> + <JRadioButton id='fishingOperationInvalidRadio' + onActionPerformed='model.setFishingOperationValid(Boolean.FALSE)'/> + </HBox> + </cell> + <cell columns="4"> + <JPanel/> + </cell> + </row> + </Table> + </JPanel> + </cell> + </row> - <!-- Fishing operation valid / invalid--> - <row> - <cell> - <JToolBar id='fishingOperationValidPanel' - layout='{new BorderLayout()}'> - <JButton id='resetValidStateButton' - constraints='BorderLayout.WEST' - onActionPerformed="model.setFishingOperationValid(null)"/> - <JRadioButton id='fishingOperationResetRadio' - constraints='BorderLayout.EAST'/> - </JToolBar> - </cell> - <cell> - <HBox> - <JRadioButton id='fishingOperationValidRadio' - onActionPerformed='model.setFishingOperationValid(Boolean.TRUE)'/> - <JRadioButton id='fishingOperationInvalidRadio' - onActionPerformed='model.setFishingOperationValid(Boolean.FALSE)'/> - </HBox> - </cell> - <cell columns="4"> - <JPanel/> - </cell> - </row> - </Table> - </JPanel> - </cell> - </row> + <!-- RecorderPerson / Vessel / Gear --> + <row weighty='0.2'> + <cell columns='6'> + <JPanel layout='{new GridLayout(1,0)}'> + <BeanDoubleList id='recorderPersonList' genericType='Person'/> + <Table fill="both" weightx='1' id='traitVesselPanel'> + <row> + <cell anchor='west'> + <JLabel id='vesselLabel'/> + </cell> + <cell weightx="1.0" fill="both"> + <BeanComboBox id='vesselComboBox' + constructorParams='this' + genericType='Vessel'/> + </cell> + </row> + <row> + <cell anchor='west'> + <JLabel id='gearLabel'/> + </cell> + <cell> + <BeanComboBox id='gearComboBox' + constructorParams='this' + genericType='Gear'/> + </cell> + </row> + </Table> + </JPanel> + </cell> + </row> - <!-- Actions d'import --> - <row> - <cell columns='6'> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='importCasinoButton'/> - <JButton id='attachmentsButton'/> - </JPanel> - </cell> - </row> - - <!-- RecorderPerson / Vessel / Gear --> - <row weighty='0.2'> - <cell columns='6'> - <JPanel layout='{new GridLayout(1,0)}'> - <BeanDoubleList id='recorderPersonList' genericType='Person'/> - <Table fill="both" weightx='1' id='traitVesselPanel'> - <row> - <cell anchor='west'> - <JLabel id='vesselLabel'/> - </cell> - <cell weightx="1.0" fill="both"> - <BeanComboBox id='vesselComboBox' - constructorParams='this' - genericType='Vessel'/> - </cell> - </row> - <row> - <cell anchor='west'> - <JLabel id='gearLabel'/> - </cell> - <cell> - <BeanComboBox id='gearComboBox' - constructorParams='this' - genericType='Gear'/> - </cell> - </row> - </Table> - </JPanel> - </cell> - </row> - - <!-- Commentaire --> - <row weighty='0.8'> - <cell columns='6'> - <JScrollPane id='commentPane' - onFocusGained='commentField.requestFocus()'> - <JTextArea id='commentField' - onKeyReleased='handler.setText(event, "comment")'/> - </JScrollPane> - </cell> - </row> - </Table> + <!-- Commentaire --> + <row weighty='0.8'> + <cell columns='6'> + <JScrollPane id='commentPane' + onFocusGained='commentField.requestFocus()'> + <JTextArea id='commentField' + onKeyReleased='handler.setText(event, "comment")'/> + </JScrollPane> + </cell> + </row> + </Table> + </JXTitledPanel> <!--</JScrollPane>--> </tab> <tab id='gearUseFeatureTab'> - - <GearUseFeatureTabUI id='gearUseFeatureTabContent' - constructorParams='this'/> + <JXTitledPanel id='gearUseFeatureTabPane'> + <GearUseFeatureTabUI id='gearUseFeatureTabContent' + constructorParams='this'/> + </JXTitledPanel> </tab> <tab id='vesselUseFeatureTab'> - - <VesselUseFeatureTabUI id='vesselUseFeatureTabContent' - constructorParams='this'/> + <JXTitledPanel id='vesselUseFeatureTabPane'> + <VesselUseFeatureTabUI id='vesselUseFeatureTabContent' + constructorParams='this'/> + </JXTitledPanel> </tab> </JTabbedPane> @@ -538,7 +536,4 @@ </JPanel> - <ButtonAttachmentEditor id='attachmentEditor' - initializer='ButtonAttachmentEditor.newEditor(this, attachmentsButton)'/> - </JPanel> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/EditFishingOperationUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -46,6 +46,7 @@ import fr.ifremer.tutti.ui.swing.util.TabHandler; import fr.ifremer.tutti.ui.swing.util.TuttiBeanMonitor; import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.editor.CoordinateEditorType; import jaxx.runtime.validator.swing.SwingValidator; import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang3.time.DateUtils; @@ -357,13 +358,21 @@ clearValidators(); + ui.getFishingOperationAttachmentsButton().onCloseUI(); closeUI(ui.getGearUseFeatureTabContent()); closeUI(ui.getVesselUseFeatureTabContent()); } @Override + protected boolean onTabChanged(int currentIndex, int newIndex) { + ui.getFishingOperationAttachmentsButton().onCloseUI(); + return super.onTabChanged(currentIndex, newIndex); + } + + @Override public boolean onHideTab(int currentIndex, int newIndex) { boolean result; + ui.getFishingOperationAttachmentsButton().onCloseUI(); if (isAModelModified()) { // something was modified @@ -475,6 +484,23 @@ return fishingOperationMonitor; } + public String getGearLatitudeLabelText(CoordinateEditorType coordinateEditorType) { + String result = _("tutti.label.fishingOperation.gearLatitude", coordinateEditorType.toString()); + return result; + } + + public String getGearLongitudeLabelText(CoordinateEditorType coordinateEditorType) { + String result = _("tutti.label.fishingOperation.gearLongitude", coordinateEditorType.toString()); + return result; + } + + public String getTrawlDistanceTooltipText(Float trawlDistance) { + String result = trawlDistance == null ? + null : + _("tutti.tooltip.distanceInMilles", TuttiUIUtil.getDistanceInMilles(trawlDistance)); + return result; + } + @Override public void setDate(ActionEvent event, String property) { JXDatePicker field = (JXDatePicker) event.getSource(); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -28,6 +28,9 @@ bean: {model}; } +#fishingOperationsTopPanel { + _help: {"tuttihelp.fishingOperations.help"}; +} #newFishingOperationButton { _tuttiAction: {NewFishingOperationAction.class}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/FishingOperationsUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,15 +21,16 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='fishingOperationsTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<FishingOperationsUIModel, FishingOperationsUIHandler>'> <import> fr.ifremer.tutti.persistence.entities.data.FishingOperation - fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI + fr.ifremer.tutti.ui.swing.util.TuttiUI jaxx.runtime.swing.editor.bean.BeanComboBox @@ -55,6 +56,8 @@ <FishingOperationsUIModel id='model' initializer='getContextValue(FishingOperationsUIModel.class)'/> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.fishingOperations.help"'/> <Table fill='both' id='topPanel' constraints='BorderLayout.NORTH'> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -41,6 +41,27 @@ computedDataColor: {handler.getConfig().getColorComputedWeights()}; } +#editCatchesTopPanel { + _help: {"tuttihelp.editCatchBatch.help"}; +} +#catchesCaracteristicsTabToolBar { + floatable: false; + opaque: false; + borderPainted: false; +} + +#catchesCaracteristicsAttachmentsButton { + enabled: {model.getObjectId() != null}; +} + +#catchesCaracteristicsTabPane { + rightDecoration: {catchesCaracteristicsTabToolBar}; +} + +#speciesTabFishingOperationReminderLabel { + rightDecoration: {speciesTabContent.getSpeciesBatchTabToolBar()}; +} + #catchTable { border: {BorderFactory.createTitledBorder(_("tutti.legend.catch.total"))}; } @@ -225,12 +246,6 @@ _tuttiAction: {ImportPupitriAction.class}; } -#attachmentsButton { - actionIcon: edit-attachment; - toolTipText: "tutti.action.attachments.tip"; - text: {ButtonAttachmentEditor.getButtonText(model.getAttachment())}; -} - #benthosTab { enabled: {false}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,10 +21,12 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='editCatchesTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditCatchesUIModel, EditCatchesUIHandler>'> <import> + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.content.operation.FishingOperationsUI fr.ifremer.tutti.ui.swing.content.operation.catches.accidental.AccidentalBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.benthos.BenthosBatchUI @@ -36,7 +38,7 @@ fr.ifremer.tutti.ui.swing.content.operation.catches.species.split.SplitSpeciesBatchUI fr.ifremer.tutti.ui.swing.content.operation.catches.EditCatchesUI - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor + fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment fr.ifremer.tutti.ui.swing.util.editor.TuttiComputedOrNotDataEditor org.jdesktop.swingx.JXTitledPanel @@ -44,9 +46,6 @@ jaxx.runtime.swing.CardLayout2Ext jaxx.runtime.swing.editor.NumberEditor - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel - static org.nuiton.i18n.I18n._ static jaxx.runtime.SwingUtil.getStringValue static fr.ifremer.tutti.ui.swing.util.TuttiUIUtil.getWeightStringValue @@ -70,9 +69,7 @@ <EditCatchesUIModel id='model' initializer='getContextValue(EditCatchesUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> - - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='catchTotalWeight' component='catchTotalWeightField'/> <!-- <field name='catchTotalSortedTremisWeight' @@ -99,6 +96,15 @@ <CardLayout2Ext id='speciesTabPanelLayout' constructorParams='this, "speciesTabPanel"'/> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editCatchBatch.help"'/> + + <JToolBar id='catchesCaracteristicsTabToolBar'> + <JButton id='importPupitriButton'/> + <ButtonAttachment id='catchesCaracteristicsAttachmentsButton' + constructorParams='getHandler().getContext(), getModel()'/> + </JToolBar> + <JTabbedPane id='tabPane' constraints='BorderLayout.CENTER'> <tab id='catchesCaracteristicsTab'> <JXTitledPanel id='catchesCaracteristicsTabPane'> @@ -276,16 +282,6 @@ </Table> </cell> </row> - - <!-- Actions d'import --> - <row> - <cell columns='2'> - <JPanel layout='{new GridLayout(1,0)}'> - <JButton id='importPupitriButton'/> - <JButton id='attachmentsButton'/> - </JPanel> - </cell> - </row> </Table> </JPanel> </JScrollPane> @@ -352,7 +348,4 @@ </JPanel> </JPanel> - <ButtonAttachmentEditor id='attachmentEditor' - initializer='ButtonAttachmentEditor.newEditor(this, attachmentsButton)'/> - </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -113,7 +113,7 @@ if (log.isInfoEnabled()) { log.info("closing: " + ui); } - + ui.getCatchesCaracteristicsAttachmentsButton().onCloseUI(); // close batches tabs, then general tab closeUI(ui.getSpeciesTabContent()); // closeUI(ui.getBenthosTabContent()); @@ -151,7 +151,17 @@ } @Override + protected boolean onTabChanged(int currentIndex, int newIndex) { + ui.getCatchesCaracteristicsAttachmentsButton().onCloseUI(); + ui.getSpeciesTabContent().getSpeciesBatchAttachmentsButton().onCloseUI(); + return super.onTabChanged(currentIndex, newIndex); + } + + @Override public boolean onHideTab(int currentIndex, int newIndex) { + + ui.getCatchesCaracteristicsAttachmentsButton().onCloseUI(); + ui.getSpeciesTabContent().getSpeciesBatchAttachmentsButton().onCloseUI(); //FIXME 20130203 kmorin: cannot change tab if model is modified // (I do not even know why it is set to modified and have no time // before the demo) Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/EditCatchesUIModel.java 2013-03-09 13:59:14 UTC (rev 567) @@ -194,8 +194,10 @@ public void setCatchBatch(CatchBatch catchBatch) { Object oldValue = getCatchBatch(); + Object oldObjectId = getObjectId(); this.catchBatch = catchBatch; firePropertyChange(PROPERTY_CATCH_BATCH, oldValue, catchBatch); + firePropertyChange(PROPERTY_OBJECT_ID, oldObjectId, getObjectId()); } public FishingOperation getFishingOperation() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/accidental/AccidentalBatchUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -27,7 +27,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.persistence.entities.data.AccidentalBatch; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.referential.Species; @@ -249,9 +248,7 @@ Decorator<Attachment> decorator = getDecorator(Attachment.class, null); addColumnToModel(columnModel, AttachmentCellEditor.newEditor( - ui, - AttachmentCellRenderer.newRender(decorator), - AttachementObjectTypeEnum.SAMPLE + ui ), AttachmentCellRenderer.newRender(decorator), AccidentalBatchTableModel.ATTACHMENTS); Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -28,7 +28,6 @@ fr.ifremer.tutti.ui.swing.util.TuttiUI fr.ifremer.tutti.ui.swing.TuttiUIContext - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor fr.ifremer.tutti.ui.swing.util.editor.LongTextEditorUI jaxx.runtime.swing.editor.NumberEditor @@ -144,7 +143,4 @@ onFocusLost='handler.saveSelectedRowIfRequired(event)'/> </JScrollPane> - <ButtonAttachmentEditor id='attachmentEditor' - initializer='ButtonAttachmentEditor.newEditor(this, attachmentsButton)'/> - </JPanel> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/benthos/BenthosBatchUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -26,7 +26,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; @@ -265,9 +264,8 @@ { // File column addColumnToModel(columnModel, - AttachmentCellEditor.newEditor(ui, - AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), - AttachementObjectTypeEnum.SAMPLE), + AttachmentCellEditor.newEditor(ui + ), AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), BenthosBatchTableModel.ATTACHMENT); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/macrowaste/MacroWasteBatchUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -26,7 +26,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.MacroWasteBatch; @@ -256,9 +255,8 @@ { // File column addColumnToModel(columnModel, - AttachmentCellEditor.newEditor(ui, - AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), - AttachementObjectTypeEnum.SAMPLE), + AttachmentCellEditor.newEditor(ui + ), AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), MacroWasteBatchTableModel.ATTACHMENTS); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/plankton/PlanktonBatchUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -26,7 +26,6 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; import fr.ifremer.tutti.persistence.entities.data.PlanktonBatch; @@ -252,9 +251,8 @@ { // File column addColumnToModel(columnModel, - AttachmentCellEditor.newEditor(ui, - AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), - AttachementObjectTypeEnum.SAMPLE), + AttachmentCellEditor.newEditor(ui + ), AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), PlanktonBatchTableModel.ATTACHMENTS); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -41,6 +41,19 @@ computedDataColor: {handler.getConfig().getColorComputedWeights()}; } +#speciesBatchTopPanel { + _help: {"tuttihelp.editSpeciesBatch.help"}; +} +#speciesBatchTabToolBar { + floatable: false; + opaque: false; + borderPainted: false; +} + +#speciesBatchAttachmentsButton { + enabled: {model.getObjectId() != null}; +} + #speciesTotalWeightLabel { text: "tutti.label.catches.speciesTotalWeight"; labelFor: {speciesTotalWeightField}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,13 +21,13 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='speciesBatchTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<SpeciesBatchUIModel, SpeciesBatchUIHandler>'> <import> + fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.util.TuttiUI - - fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor + fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment fr.ifremer.tutti.ui.swing.util.editor.LongTextEditorUI fr.ifremer.tutti.ui.swing.util.editor.TuttiComputedOrNotDataEditor @@ -35,9 +35,6 @@ jaxx.runtime.swing.editor.NumberEditor - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel - javax.swing.ListSelectionModel java.awt.Color @@ -65,14 +62,20 @@ <SpeciesBatchUIModel id='model' initializer='getContextValue(SpeciesBatchUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> - - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='speciesTotalSortedWeight' component='speciesTotalSortedWeightField'/> </BeanValidator> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editSpeciesBatch.help"'/> + + <JToolBar id='speciesBatchTabToolBar'> + <ButtonAttachment id='speciesBatchAttachmentsButton' + constructorParams='getHandler().getContext(), getModel()'/> + </JToolBar> + <LongTextEditorUI id='longTextEditor'/> <JPopupMenu id='tablePopup'> @@ -144,7 +147,6 @@ <JPanel layout='{new GridLayout(1,0)}' constraints='BorderLayout.WEST'> <JButton id='createSpeciesBatchButton' onActionPerformed='handler.createSpeciesBatch()'/> - <JButton id='attachmentsButton'/> </JPanel> <JPanel id='filterTablePane' constraints='BorderLayout.CENTER'> <JLabel id='filterSpeciesBatchLabel'/> @@ -166,7 +168,4 @@ onMouseClicked='handler.autoSelectRowInTable(event, tablePopup)'/> </JScrollPane> - <ButtonAttachmentEditor id='attachmentEditor' - initializer='ButtonAttachmentEditor.newEditor(this, attachmentsButton)'/> - </JPanel> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -30,7 +30,6 @@ import com.google.common.collect.Multimap; import com.google.common.collect.Sets; import fr.ifremer.tutti.persistence.entities.TuttiEntities; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.persistence.entities.data.BatchContainer; import fr.ifremer.tutti.persistence.entities.data.FishingOperation; @@ -629,9 +628,8 @@ { // File column addColumnToModel(columnModel, - AttachmentCellEditor.newEditor(ui, - AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), - AttachementObjectTypeEnum.SAMPLE), + AttachmentCellEditor.newEditor(ui + ), AttachmentCellRenderer.newRender(getDecorator(Attachment.class, null)), SpeciesBatchTableModel.ATTACHMENT); } @@ -710,6 +708,7 @@ if (log.isInfoEnabled()) { log.info("Closing: " + ui); } + ui.getSpeciesBatchAttachmentsButton().onCloseUI(); } //------------------------------------------------------------------------// Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/operation/catches/species/SpeciesBatchUIModel.java 2013-03-09 13:59:14 UTC (rev 567) @@ -371,7 +371,9 @@ } public void setRootBatchId(String rootBatchId) { + String oldValue = getObjectId(); this.rootBatchId = rootBatchId; + firePropertyChange(PROPERTY_OBJECT_ID, oldValue, getObjectId()); } public String getRootBatchId() { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -28,6 +28,10 @@ bean: {model}; } +#editProgramTopPanel { + _help: {"tuttihelp.editProgram.help"}; +} + #form { border: {BorderFactory.createTitledBorder((String)null)}; } @@ -35,6 +39,8 @@ #nameLabel { text: "tutti.label.program.name"; labelFor: {nameField}; + toolTipText: "tuttihelp.editProgram.field.name.tip"; + _help: {"tuttihelp.editProgram.field.name.help"}; } #nameField { @@ -44,6 +50,8 @@ #commentPane { border: {BorderFactory.createTitledBorder(_("tutti.label.comment"))}; + toolTipText: "tuttihelp.editProgram.field.comment.tip"; + _help: {"tuttihelp.editProgram.field.comment.help"}; } #commentField { @@ -54,6 +62,8 @@ #zoneLabel { text: "tutti.label.program.zone"; labelFor: {zoneComboBox}; + toolTipText: "tuttihelp.editProgram.field.zone.tip"; + _help: {"tuttihelp.editProgram.field.zone.help"}; } #zoneComboBox { @@ -65,8 +75,10 @@ #saveButton { _tuttiAction: {SaveProgramAction.class}; enabled: {model.isModify() && model.isValid()}; + _help: {"tuttihelp.editProgram.action.save.help"}; } #cancelButton { _tuttiAction: {CancelEditProgramAction.class}; + _help: {"tuttihelp.editProgram.action.cancel.help"}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/program/EditProgramUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,24 +21,23 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='editProgramTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProgramUIModel, EditProgramUIHandler>'> <import> fr.ifremer.tutti.persistence.entities.referential.Zone + + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.TuttiHelpBroker fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.TuttiUIContext jaxx.runtime.swing.editor.bean.BeanComboBox - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel java.awt.Dimension javax.swing.ListSelectionModel static org.nuiton.i18n.I18n._ static jaxx.runtime.SwingUtil.getStringValue - </import> <script><![CDATA[ @@ -61,9 +60,10 @@ <EditProgramUIModel id='model' initializer='getContextValue(EditProgramUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editProgram.help"'/> - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='name' component='nameField'/> <field name='zone' component='zoneComboBox'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -32,6 +32,10 @@ bean: {model}; } +#editProtocolTopPanel { + _help: {"tuttihelp.editProtocol.help"}; +} + #form { border: {BorderFactory.createTitledBorder((String)null)}; } @@ -39,6 +43,8 @@ #nameLabel { text: "tutti.label.protocol.name"; labelFor: {nameField}; + toolTipText: "tuttihelp.editProtocol.field..tip"; + _help: {"tuttihelp.editProtocol.field.name.help"}; } #nameField { @@ -48,6 +54,8 @@ #commentPane { border: {BorderFactory.createTitledBorder(_("tutti.label.comment"))}; + toolTipText: "tuttihelp.editProtocol.field.comment.tip"; + _help: {"tuttihelp.editProtocol.field.comment.help"}; } #commentField { @@ -68,24 +76,30 @@ #saveButton { enabled: {model.isModify() && model.isValid()}; _tuttiAction: {SaveProtocolAction.class}; + _help: {"tuttihelp.editProtocol.action.save.help"}; } #cancelButton { _tuttiAction: {CancelEditProtocolAction.class}; + _help: {"tuttihelp.editProtocol.action.cancel.help"}; } #speciesComboBox { showReset: false; enabled: {!speciesComboBox.isEmpty()}; + toolTipText: "tuttihelp.editProtocol.field..tip"; + _help: {"tuttihelp.editProtocol.field.species.help"}; } #selectOtherSpecies { _tuttiAction: {SelectOtherSpeciesAction.class}; + _help: {"tuttihelp.editProtocol.action.selectOtherSpecies.help"}; } #addSpeciesProtocol { _tuttiAction: {AddSpeciesProtocolAction.class}; enabled: {speciesComboBox.getSelectedItem() != null}; + _help: {"tuttihelp.editProtocol.action.addSpeciesProtocol.help"}; } #tablePopup { @@ -96,6 +110,7 @@ _tuttiAction: {RemoveSpeciesProtocolAction.class}; enabled: {model.isRemoveSpeciesEnabled()}; mnemonic: R; + _help: {"tuttihelp.editProtocol.action.removeSpeciesProtocol.help"}; } #speciesTable { @@ -103,44 +118,54 @@ selectionBackground: {null}; selectionForeground: {Color.BLACK}; sortable: false; + _help: {"tuttihelp.editProtocol.table.species.help"}; } #caracteristicPane { tabPlacement: {JTabbedPane.LEFT}; + _help: {"tuttihelp.editProtocol.pane.caracteristic.help"}; } #importSpecies { _tuttiAction: {ImportProtocolSpeciesAction.class}; + _help: {"tuttihelp.editProtocol.action.importSpecies.help"}; } #exportSpecies { _tuttiAction: {ExportProtocolSpeciesAction.class}; + _help: {"tuttihelp.editProtocol.action.exportSpecies.help"}; } #importCaracteristic { _tuttiAction: {ImportProtocolCaracteristicAction.class}; + _help: {"tuttihelp.editProtocol.action.importCaracteristic.help"}; } #exportCaracteristic { _tuttiAction: {ExportProtocolCaracteristicAction.class}; + _help: {"tuttihelp.editProtocol.action.exportCaracteristic.help"}; } #exportAllCaracteristic { _tuttiAction: {ExportAllCaracteristicAction.class}; + _help: {"tuttihelp.editProtocol.action.exportAllCaracteristic.help"}; } #gearUseFeatureList { property: gearUseFeaturePmfm; beanType: {Caracteristic.class}; + _help: {"tuttihelp.editProtocol.list.gearUseFeature.help"}; } #vesselUseFeatureList { property: vesselUseFeaturePmfm; beanType: {Caracteristic.class}; + _help: {"tuttihelp.editProtocol.list.vesselUseFeature.help"}; } #lengthClassesList { property: lengthClassesPmfm; beanType: {Caracteristic.class}; + _help: {"tuttihelp.editProtocol.list.lengthClasses.help"}; } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,19 +21,19 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel id='homePanel' layout='{new BorderLayout()}' +<JPanel id='editProtocolTopPanel' layout='{new BorderLayout()}' decorator='help' implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<EditProtocolUIModel, EditProtocolUIHandler>'> <import> fr.ifremer.tutti.persistence.entities.referential.Caracteristic fr.ifremer.tutti.persistence.entities.referential.Species + + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.util.TuttiUI - fr.ifremer.tutti.ui.swing.TuttiUIContext jaxx.runtime.swing.editor.bean.BeanComboBox jaxx.runtime.swing.editor.bean.BeanDoubleList - jaxx.runtime.validator.swing.SwingValidatorUtil - jaxx.runtime.validator.swing.SwingValidatorMessageTableModel java.awt.Dimension java.awt.Color @@ -68,9 +68,10 @@ <EditProtocolUIModel id='model' initializer='getContextValue(EditProtocolUIModel.class)'/> - <SwingValidatorMessageTableModel id='errorTableModel'/> + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.editProtocol.help"'/> - <BeanValidator id='validator' bean='model' errorTableModel='errorTableModel' + <BeanValidator id='validator' bean='model' uiClass='jaxx.runtime.validator.swing.ui.ImageValidationUI'> <field name='name' component='nameField'/> <field name='comment' component='commentPane'/> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/protocol/EditProtocolUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -10,15 +10,15 @@ * %% * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the + * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. - * + * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public + * + * You should have received a copy of the GNU General Public * License along with this program. If not, see * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -38,7 +38,7 @@ import fr.ifremer.tutti.ui.swing.util.action.AbstractTuttiAction; import fr.ifremer.tutti.ui.swing.util.action.TuttiActionUI; import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; -import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachmentEditor; +import fr.ifremer.tutti.ui.swing.util.attachment.ButtonAttachment; import fr.ifremer.tutti.ui.swing.util.editor.SimpleTimeEditor; import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; @@ -353,8 +353,8 @@ } else if (component instanceof SimpleTimeEditor) { initTimeEditor((SimpleTimeEditor) component); - } else if (component instanceof ButtonAttachmentEditor) { - initButtonAttachmentEditor((ButtonAttachmentEditor) component); + } else if (component instanceof ButtonAttachment) { + initButtonAttachment((ButtonAttachment) component); } else if (component instanceof JLabel) { JLabel jLabel = (JLabel) component; @@ -393,7 +393,7 @@ } } - protected void initButtonAttachmentEditor(ButtonAttachmentEditor component) { + protected void initButtonAttachment(ButtonAttachment component) { component.init(); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/CustomTab.java 2013-03-09 13:59:14 UTC (rev 567) @@ -26,8 +26,6 @@ */ import jaxx.runtime.SwingUtil; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; import javax.swing.JLabel; import javax.swing.JPanel; @@ -46,7 +44,7 @@ */ public class CustomTab extends JPanel { - private Log log = LogFactory.getLog(CustomTab.class); + private static final long serialVersionUID = 1L; protected AbstractTuttiBeanUIModel model; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionException.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionException.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiActionException.java 2013-03-09 13:59:14 UTC (rev 567) @@ -45,7 +45,7 @@ Throwable cause) { TuttiActionException result; if (cause instanceof TuttiActionException) { - result = ((TuttiActionException)cause); + result = ((TuttiActionException) cause); } else { result = new TuttiActionException(action, cause); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/action/TuttiUIAction.java 2013-03-09 13:59:14 UTC (rev 567) @@ -133,9 +133,6 @@ @Override public void run() { try { - if (log.isInfoEnabled()) { - log.info("Log to death!"); - } worker.get(); } catch (ExecutionException e) { // don't care . @@ -164,9 +161,9 @@ } } - // protected void setMnemonic(int key) { -// putValue(MNEMONIC_KEY, key); -// } + public void setMnemonic(int key) { + putValue(MNEMONIC_KEY, key); + } protected static class TuttiActionSwingWorker<A extends AbstractTuttiAction> extends SwingWorker<Void, String> { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellEditor.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellEditor.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellEditor.java 2013-03-09 13:59:14 UTC (rev 567) @@ -25,29 +25,25 @@ */ import com.google.common.base.Preconditions; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel; import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractSelectTableAction; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableModel; -import fr.ifremer.tutti.ui.swing.util.table.ColumnIdentifier; -import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import javax.swing.AbstractCellEditor; import javax.swing.JTable; import javax.swing.border.LineBorder; +import javax.swing.event.CellEditorListener; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; import javax.swing.table.TableCellEditor; import java.awt.Color; import java.awt.Component; -import java.awt.Frame; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; +import java.util.EventObject; -import static org.nuiton.i18n.I18n._; - /** * To edit attachments from a table cell. * @@ -62,90 +58,36 @@ /** Logger. */ private static final Log log = LogFactory.getLog(AttachmentCellEditor.class); - public static TableCellEditor newEditor(TuttiUI ui, - AttachmentCellRenderer renderer, - AttachementObjectTypeEnum objectType) { + public static TableCellEditor newEditor(TuttiUI ui) { - Frame frame = SwingUtil.getParentContainer(ui, Frame.class); - - renderer.setBorder(new LineBorder(Color.BLACK)); - - return new AttachmentCellEditor(frame, renderer, objectType); + return new AttachmentCellEditor(ui.getHandler().getContext()); } - protected final AttachmentCellRenderer component; - - protected AttachmentEditor attachmentEditor; - protected JTable table; protected AbstractTuttiTableModel<AbstractTuttiBeanUIModel> tableModel; - protected ColumnIdentifier<AbstractTuttiBeanUIModel> columnIdentifier; - - protected AttachmentModelAware editRow; - protected Integer rowIndex; protected Integer columnIndex; - protected PropertyChangeListener reloadAttachmentEditorTextListener; + protected final ButtonAttachment editorButton; - public AttachmentCellEditor(Frame frame, - AttachmentCellRenderer component, - AttachementObjectTypeEnum objectTypeProperty) { + public AttachmentCellEditor(TuttiUIContext context) { - this.component = component; - - reloadAttachmentEditorTextListener = new PropertyChangeListener() { + this.editorButton = new ButtonAttachment(context, null); + this.editorButton.setBorder(new LineBorder(Color.BLACK)); + addCellEditorListener(new CellEditorListener() { @Override - public void propertyChange(PropertyChangeEvent evt) { - - tableModel.fireTableCellUpdated(rowIndex, columnIndex); -// List<Attachment> attachment = (List<Attachment>) evt.getNewValue(); -// AttachmentCellEditor.this.component.setText(ButtonAttachmentEditor.getButtonText(attachment)); + public void editingStopped(ChangeEvent e) { + editorButton.setSelected(false); } - }; - this.attachmentEditor = new AttachmentEditor(frame, - component, - objectTypeProperty, - _("tutti.table.accidental.batch.header.file")) { - - private static final long serialVersionUID = 1L; - @Override - protected AttachmentModelAware getBean() { - return editRow; + public void editingCanceled(ChangeEvent e) { + editorButton.setSelected(false); } - - @Override - public void startEdit() { - - ((AbstractTuttiBeanUIModel) getBean()).addPropertyChangeListener(AttachmentModelAware.PROPERTY_ATTACHMENT, reloadAttachmentEditorTextListener); - - try { - super.startEdit(); - int r = rowIndex; - int c = columnIndex; - - // stop edition - stopCellEditing(); - - // refresh cell - tableModel.fireTableCellUpdated(r, c); - - // reselect this cell - AbstractSelectTableAction.doSelectCell(table, r, c); - - // focus on table - table.requestFocus(); - } finally { - - ((AbstractTuttiBeanUIModel) getBean()).removePropertyChangeListener(AttachmentModelAware.PROPERTY_ATTACHMENT, reloadAttachmentEditorTextListener); - } - } - }; + }); } @Override @@ -156,25 +98,32 @@ int column) { this.table = table; this.tableModel = (AbstractTuttiTableModel<AbstractTuttiBeanUIModel>) table.getModel(); - columnIdentifier = tableModel.getPropertyName(column); rowIndex = row; columnIndex = column; - editRow = (AttachmentModelAware) tableModel.getEntry(row); + AttachmentModelAware model = + (AttachmentModelAware) tableModel.getEntry(row); - return component; + editorButton.init(model); + + return editorButton; } @Override + public boolean shouldSelectCell(EventObject anEvent) { + return false; + } + + @Override public Object getCellEditorValue() { - Preconditions.checkNotNull(editRow, "No editRow found in editor."); + AttachmentModelAware model = editorButton.getBean(); + Preconditions.checkNotNull(model, "No model found in editor."); - String propertyName = columnIdentifier.getPropertyName(); - Object result = TuttiUIUtil.getProperty(editRow, propertyName); + Object result = model.getAttachment(); if (log.isInfoEnabled()) { - log.info("editor value (" + propertyName + "): " + result); + log.info("editor value: " + result); } return result; @@ -184,18 +133,14 @@ public boolean stopCellEditing() { boolean b = super.stopCellEditing(); if (b) { - rowIndex = null; - editRow = null; - columnIndex = null; + editorButton.setBean(null); } return b; } @Override public void cancelCellEditing() { + editorButton.setBean(null); super.cancelCellEditing(); - rowIndex = null; - columnIndex = null; - editRow = null; } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellRenderer.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellRenderer.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentCellRenderer.java 2013-03-09 13:59:14 UTC (rev 567) @@ -29,10 +29,10 @@ import org.apache.commons.collections.CollectionUtils; import org.nuiton.util.decorator.Decorator; +import javax.swing.JComponent; import javax.swing.JTable; import javax.swing.table.DefaultTableCellRenderer; -import java.awt.Component; -import java.util.Collection; +import java.util.List; import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; @@ -46,7 +46,6 @@ */ public class AttachmentCellRenderer extends DefaultTableCellRenderer { - public static final String TEXT_PATTERN = "<html><body>%s</body></html>"; private static final long serialVersionUID = 1L; @@ -72,18 +71,15 @@ } @Override - public Component getTableCellRendererComponent(JTable table, - Object value, - boolean isSelected, - boolean hasFocus, - int row, - int column) { + public JComponent getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, + int column) { -// if (table != null) { + List<Attachment> attachments = (List<Attachment>) value; - Collection<Attachment> attachments = (Collection<Attachment>) value; - - String textValue; String toolTipTextValue; if (CollectionUtils.isEmpty(attachments)) { @@ -91,7 +87,7 @@ // use HTML to show the tooltip in italic toolTipTextValue = "<i>" + _(noneText) + "</i>"; - textValue = null; + } else { StringBuilder sb = new StringBuilder(); @@ -100,14 +96,13 @@ } // use html to display the tooltip on several lines toolTipTextValue = sb.substring(5); - textValue = "(" + attachments.size() + ")"; } + String textValue = ButtonAttachment.getButtonText(attachments); boolean editable = table.isCellEditable(row, column); toolTipTextValue = String.format(TEXT_PATTERN, toolTipTextValue); setEnabled(editable); setText(textValue); setToolTipText(toolTipTextValue); -// } return this; } Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditor.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditor.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditor.java 2013-03-09 13:59:14 UTC (rev 567) @@ -1,155 +0,0 @@ -package fr.ifremer.tutti.ui.swing.util.attachment; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import com.ezware.oxbow.swingbits.util.Preconditions; -import fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum; -import jaxx.runtime.JAXXUtil; -import jaxx.runtime.swing.ComponentMover; -import jaxx.runtime.swing.ComponentResizer; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; - -import javax.swing.BorderFactory; -import javax.swing.JComponent; -import javax.swing.JDialog; -import java.awt.Component; -import java.awt.Frame; -import java.awt.event.KeyAdapter; -import java.awt.event.KeyEvent; -import java.awt.event.MouseAdapter; -import java.awt.event.MouseEvent; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; - -/** - * Editor of attachment. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0.2 - */ -public abstract class AttachmentEditor extends JDialog { - - private static final long serialVersionUID = 1L; - - /** Logger. */ - private static final Log log = LogFactory.getLog(AttachmentEditor.class); - - protected AttachmentEditorUI editor; - - protected JComponent component; - - public AttachmentEditor(Frame owner, - JComponent component, - AttachementObjectTypeEnum objectType, - String title) { - super(owner, true); - - Preconditions.checkNotNull( - component, - "AttachmentEditor.component can not be null"); - this.component = component; - this.editor = new AttachmentEditorUI(); - editor.setBorder(BorderFactory.createTitledBorder(title)); - editor.setObjectType(objectType); - editor.setObjectIdProperty(AttachmentModelAware.PROPERTY_OBJECT_ID); - - setUndecorated(true); - add(editor); - setResizable(true); - pack(); - - ComponentResizer cr = new ComponentResizer(); - cr.registerComponent(this); - ComponentMover cm = new ComponentMover(); - cm.setDragInsets(cr.getDragInsets()); - cm.registerComponent(this); - - addWindowListener(new WindowAdapter() { - - @Override - public void windowClosed(WindowEvent e) { - Component ui = (Component) e.getSource(); - if (log.isInfoEnabled()) { - log.info("Destroy ui " + ui); - } - JAXXUtil.destroy(ui); - } - }); - - component.addKeyListener(new KeyAdapter() { - @Override - public void keyReleased(KeyEvent e) { - if (e.getKeyCode() == KeyEvent.VK_ENTER || - e.getKeyCode() == KeyEvent.VK_SPACE) { - e.consume(); - if (((JComponent) e.getSource()).isEnabled()) { - startEdit(); - } - } - } - }); - - component.addMouseListener(new MouseAdapter() { - @Override - public void mouseClicked(MouseEvent e) { - e.consume(); - if (((JComponent) e.getSource()).isEnabled()) { - startEdit(); - } - } - }); - } - - protected abstract AttachmentModelAware getBean(); - - public void startEdit() { - - editor.setBean(getBean()); - - // Computes the location of bottom left corner of the cell - Component comp = component; - int x = 0; - int y = component.getHeight(); - while (comp != null) { - x += comp.getX(); - y += comp.getY(); - comp = comp.getParent(); - } - - pack(); - // if the editor is too big on the right, - // then align its right side to the right side of the cell - if (x + getWidth() > getOwner().getX() + getOwner().getWidth()) { - x = x - getWidth() + component.getWidth(); - } - setLocation(x, y); - setVisible(true); - } - - protected JComponent getComponent() { - return component; - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.css 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.css 2013-03-09 13:59:14 UTC (rev 567) @@ -21,6 +21,16 @@ * <http://www.gnu.org/licenses/gpl-3.0.html>. * #L% */ + +#attachmentDialog { + undecorated: true; + alwaysOnTop: true; +} + +#attachmentBody { + title: "tutti.title.attachment"; +} + #fileLabel { text: "tutti.label.attachmentEditor.file"; labelFor: {file}; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.jaxx 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUI.jaxx 2013-03-09 13:59:14 UTC (rev 567) @@ -21,23 +21,47 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<Table id='mainPanel'> +<JDialog id='attachmentDialog' layout='{new BorderLayout()}'> <import> - fr.ifremer.tutti.ui.swing.util.AbstractTuttiBeanUIModel - fr.ifremer.tutti.persistence.entities.data.Attachment - fr.ifremer.tutti.persistence.entities.data.AttachementObjectTypeEnum + fr.ifremer.tutti.ui.swing.TuttiUIContext + jaxx.runtime.swing.editor.FileEditor + org.jdesktop.swingx.JXTitledPanel + javax.swing.JComponent </import> + <script><![CDATA[ + +public AttachmentEditorUI(TuttiUIContext context) { + super(context.getMainUI()); + setContextValue(context); + AttachmentEditorUIHandler handler = new AttachmentEditorUIHandler(context, this); + setContextValue(handler); + handler.beforeInitUI(); +} + +protected void $afterCompleteSetup() { + getHandler().afterInitUI(); +} + +public void openEditor(JComponent component) { + handler.openEditor(component); +} + +public void closeEditor() { + handler.closeEditor(); +} + ]]></script> + <!-- bean property where to find the objectId to attach to Attachment (see Attachment#objectId) --> - <String id='objectIdProperty' javaBean='""'/> + <!--<String id='objectIdProperty' javaBean='""'/>--> <!-- object type of attachments (see Attachment#objectType) --> - <AttachementObjectTypeEnum id='objectType' javaBean='null'/> + <!--<AttachementObjectTypeEnum id='objectType' javaBean='null'/>--> <!-- bean property linked state --> - <String id='property' javaBean='""'/> + <!--<String id='property' javaBean='""'/>--> <!-- if true, display the form to add attachments and the button to remove existing attachments --> @@ -46,47 +70,54 @@ <!-- bean property --> <AttachmentModelAware id='bean' javaBean='null'/> - <AttachmentEditorUIHandler id='handler' constructorParams='this'/> + <AttachmentEditorUIHandler id='handler' + initializer='getContextValue(AttachmentEditorUIHandler.class)'/> - <row fill='both'> - <cell fill='both' weightx='1' columns='3'> - <VBox id='attachments'></VBox> - </cell> - </row> - <row fill='both'> - <cell fill='both' weightx='1'> - <JLabel id='fileLabel'/> - </cell> - <cell fill='both' weightx='1'> - <FileEditor id='file'/> - </cell> - <cell fill='both' rows='3'> - <JButton id='addButton' - onActionPerformed='handler.addAttachment()'/> - </cell> - </row> - <row fill='both'> - <cell fill='both' weightx='1'> - <JLabel id='fileNameLabel'/> - </cell> - <cell fill='both' weightx='1'> - <JTextField id='fileName'/> - </cell> - </row> - <row fill='both' weighty='1'> - <cell fill='both' weightx='1'> - <JLabel id='fileCommentLabel'/> - </cell> - <cell fill='both' weightx='1'> - <JScrollPane> - <JTextArea id='fileComment' rows='3'/> - </JScrollPane> - </cell> - </row> - <row fill='both'> - <!-- actions --> - <cell fill='both' weightx='1' columns='3'> - <JButton id='closeButton' onActionPerformed='handler.close()'/> - </cell> - </row> -</Table> \ No newline at end of file + <JXTitledPanel id='attachmentBody' constraints='BorderLayout.CENTER'> + <JScrollPane id='attachmentBodyScrollPane'> + <Table id='mainPanel'> + + <row fill='both'> + <cell fill='both' weightx='1' columns='3'> + <VBox id='attachments'></VBox> + </cell> + </row> + <row fill='both'> + <cell fill='both' weightx='1' columns='3'> + <JSeparator/> + </cell> + </row> + <row fill='both'> + <cell fill='both' weightx='1'> + <JLabel id='fileLabel'/> + </cell> + <cell fill='both' weightx='1'> + <FileEditor id='file'/> + </cell> + <cell fill='both' rows='3'> + <JButton id='addButton' + onActionPerformed='handler.addAttachment()'/> + </cell> + </row> + <row fill='both'> + <cell fill='both' weightx='1'> + <JLabel id='fileNameLabel'/> + </cell> + <cell fill='both' weightx='1'> + <JTextField id='fileName'/> + </cell> + </row> + <row fill='both' weighty='1'> + <cell fill='both' weightx='1'> + <JLabel id='fileCommentLabel'/> + </cell> + <cell fill='both' weightx='1'> + <JScrollPane> + <JTextArea id='fileComment' rows='3'/> + </JScrollPane> + </cell> + </row> + </Table> + </JScrollPane> + </JXTitledPanel> +</JDialog> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/AttachmentEditorUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -27,28 +27,36 @@ import fr.ifremer.tutti.persistence.entities.data.Attachment; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.ComponentMover; +import jaxx.runtime.swing.ComponentResizer; import jaxx.runtime.swing.HBox; import org.apache.commons.lang3.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.ImageIcon; import javax.swing.JButton; -import javax.swing.JDialog; +import javax.swing.JComponent; import javax.swing.JLabel; +import javax.swing.JRootPane; +import javax.swing.JToolBar; +import javax.swing.KeyStroke; import javax.swing.SwingConstants; +import java.awt.Component; import java.awt.Cursor; -import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; +import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; import java.io.File; import java.util.List; +import static org.nuiton.i18n.I18n._; + /** * @author kmorin <morin@codelutin.com> * @author tchemit <chemit@codelutin.com> @@ -60,25 +68,118 @@ private static final Log log = LogFactory.getLog(AttachmentEditorUIHandler.class); - private final AttachmentEditorUI ui; + public static final String CLOSE_DIALOG_ACTION = "closeDialog"; - private final PersistenceService persistenceService; + public static final String SHOW_DIALOG_ACTION = "showDialog"; - public AttachmentEditorUIHandler(AttachmentEditorUI ui) { + protected final AttachmentEditorUI ui; + + protected final PersistenceService persistenceService; + + protected final TuttiUIContext context; + + public AttachmentEditorUIHandler(TuttiUIContext context, + AttachmentEditorUI ui) { + this.context = context; this.ui = ui; - persistenceService = - TuttiUIContext.getApplicationContext().getPersistenceService(); + this.persistenceService = context.getPersistenceService(); +// this.ui.addPropertyChangeListener(new PropertyChangeListener() { +// +// @Override +// public void propertyChange(PropertyChangeEvent evt) { +// if (log.isInfoEnabled()) { +// log.info("Init (property " + evt.getPropertyName() + " changed)."); +// } +// init(); +// } +// }); + } - this.ui.addPropertyChangeListener(new PropertyChangeListener() { + protected void beforeInitUI() { + } + protected void afterInitUI() { + + ui.getFile().setDialogOwner(ui); + ui.pack(); + ui.setResizable(true); +// ui.setSize(800, 300); + + ComponentResizer cr = new ComponentResizer(); + cr.registerComponent(ui); + ComponentMover cm = new ComponentMover(); + cm.setDragInsets(cr.getDragInsets()); + cm.registerComponent(ui); + + JRootPane rootPane = ui.getRootPane(); + + KeyStroke shortcutClosePopup = KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0); + + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put( + shortcutClosePopup, CLOSE_DIALOG_ACTION); + + closeAction = new AbstractAction() { + private static final long serialVersionUID = 1L; + @Override - public void propertyChange(PropertyChangeEvent evt) { - init(); + public void actionPerformed(ActionEvent e) { + ui.dispose(); + ui.setVisible(false); } - }); + }; + + openAction = new AbstractAction() { + + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) { + ui.setVisible(true); + } + }; + + ImageIcon actionIcon = SwingUtil.createActionIcon("close-dialog"); + closeAction.putValue(Action.SMALL_ICON, actionIcon); + closeAction.putValue(Action.LARGE_ICON_KEY, actionIcon); + closeAction.putValue(Action.ACTION_COMMAND_KEY, "close"); + closeAction.putValue(Action.NAME, "close"); + closeAction.putValue(Action.SHORT_DESCRIPTION, _("tutti.action.closeAttachment.tip")); + + rootPane.getActionMap().put(CLOSE_DIALOG_ACTION, closeAction); + rootPane.getActionMap().put(SHOW_DIALOG_ACTION, openAction); + + JButton closeButton = new JButton(closeAction); + closeButton.setText(null); + closeButton.setFocusPainted(false); + closeButton.setRequestFocusEnabled(false); + closeButton.setFocusable(false); + + JToolBar jToolBar = new JToolBar(); + jToolBar.setOpaque(false); + jToolBar.add(closeAction); + jToolBar.setBorderPainted(false); + jToolBar.setFloatable(false); + ui.getAttachmentBody().setRightDecoration(jToolBar); } + protected Action closeAction; + + protected Action openAction; + + public void closeEditor() { + + closeAction.actionPerformed(null); + } + + public void openEditor(JComponent component) { + + if (component != null) { + place(component); + } + openAction.actionPerformed(null); + } + public void init() { resetFields(); ui.getAttachments().removeAll(); @@ -93,6 +194,51 @@ } } + public void place(JComponent component) { + // Computes the location of bottom left corner of the cell + Component comp = component; + int x = 0; + int y = component.getHeight(); + while (comp != null) { + x += comp.getX(); + y += comp.getY(); + comp = comp.getParent(); + } + + ui.pack(); + // if the editor is too big on the right, + // then align its right side to the right side of the cell + if (x + ui.getWidth() > ui.getOwner().getX() + ui.getOwner().getWidth()) { + x = x - ui.getWidth() + component.getWidth(); + } + ui.setLocation(x, y); + } + + public void addAttachment() { + AttachmentModelAware bean = ui.getBean(); + Attachment attachment = new Attachment(); + + File file = ui.getFile().getSelectedFile(); + if (file != null) { + String name = ui.getFileName().getText(); + if (StringUtils.isEmpty(name)) { + name = file.getName(); + } + attachment.setObjectType(bean.getObjectType()); + attachment.setObjectId(Integer.valueOf(bean.getObjectId())); + attachment.setName(name); + attachment.setComment(ui.getFileComment().getText()); + + attachment = persistenceService.createAttachment(attachment, file); + bean.addAttachment(attachment); + + resetFields(); + addAttachment(attachment); + + ui.pack(); + } + } + protected void addAttachment(final Attachment attachment) { final HBox hbox = new HBox(); hbox.setVerticalAlignment(SwingConstants.CENTER); @@ -110,8 +256,7 @@ ui.getAttachments().remove(hbox); - JDialog parent = SwingUtil.getParentContainer(ui, JDialog.class); - parent.pack(); + ui.pack(); } }); hbox.add(deleteButton); @@ -143,42 +288,9 @@ ui.getAttachments().add(hbox); } - /** closes the editor */ - public void close() { - if (log.isInfoEnabled()) { - log.info("Will close UI " + ui); - } - SwingUtil.getParentContainer(ui, Window.class).dispose(); - } - - public void addAttachment() { - AttachmentModelAware bean = ui.getBean(); - Attachment attachment = new Attachment(); - - File file = ui.getFile().getSelectedFile(); - if (file != null) { - String name = ui.getFileName().getText(); - if (StringUtils.isEmpty(name)) { - name = file.getName(); - } - attachment.setObjectType(ui.getObjectType()); - attachment.setObjectId(Integer.valueOf(String.valueOf(TuttiUIUtil.getProperty(bean, ui.getObjectIdProperty())))); - attachment.setName(name); - attachment.setComment(ui.getFileComment().getText()); - - attachment = persistenceService.createAttachment(attachment, file); - bean.addAttachment(attachment); - - resetFields(); - addAttachment(attachment); - - JDialog parent = SwingUtil.getParentContainer(ui, JDialog.class); - parent.pack(); - } - } - protected void resetFields() { ui.getFile().setSelectedFile((File) null); + ui.getFile().setSelectedFile((String) null); ui.getFileName().setText(""); ui.getFileComment().setText(""); } Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachment.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachment.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachment.java 2013-03-09 13:59:14 UTC (rev 567) @@ -0,0 +1,188 @@ +package fr.ifremer.tutti.ui.swing.util.attachment; + +/* + * #%L + * Tutti :: UI + * $Id$ + * $HeadURL$ + * %% + * Copyright (C) 2012 - 2013 Ifremer + * %% + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public + * License along with this program. If not, see + * <http://www.gnu.org/licenses/gpl-3.0.html>. + * #L% + */ + +import fr.ifremer.tutti.persistence.entities.data.Attachment; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import jaxx.runtime.SwingUtil; +import org.jdesktop.beans.AbstractSerializableBean; + +import javax.swing.JToggleButton; +import javax.swing.event.ChangeEvent; +import javax.swing.event.ChangeListener; +import java.awt.Point; +import java.awt.event.HierarchyBoundsAdapter; +import java.awt.event.HierarchyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * Button to edit attachments. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class ButtonAttachment extends JToggleButton { + + private static final long serialVersionUID = 1L; + + protected final AttachmentEditorUI popup; + + private transient PropertyChangeListener listenAttachmentsChanged; + + protected Point popupPosition = null; + + protected boolean popupMoving; + + public ButtonAttachment(TuttiUIContext context, + AttachmentModelAware model) { + + setIcon(SwingUtil.createActionIcon("edit-attachment")); + setToolTipText(_("tutti.action.attachments.tip")); + + popup = new AttachmentEditorUI(context); + +// popup.addComponentListener(new ComponentAdapter() { +// +// @Override +// public void componentMoved(ComponentEvent e) { +// Component component = e.getComponent(); +// if (component.isShowing() && !popupMoving) { +// popupPosition = component.getLocationOnScreen(); +// +// if (log.isInfoEnabled()) { +// log.info("Popup has moved by user, keeping his position: " + popupPosition); +// } +// } +// } +// }); + + popup.addWindowListener(new WindowAdapter() { + + @Override + public void windowOpened(WindowEvent e) { + setSelected(true); + } + + @Override + public void windowClosing(WindowEvent e) { + setSelected(false); + } + + @Override + public void windowClosed(WindowEvent e) { + setSelected(false); + } + }); + + addChangeListener(new ChangeListener() { + @Override + public void stateChanged(ChangeEvent e) { + if (isSelected()) { + popup.openEditor(ButtonAttachment.this); + } else { + popup.closeEditor(); + } + } + }); + + addHierarchyBoundsListener(new HierarchyBoundsAdapter() { + + @Override + public void ancestorMoved(HierarchyEvent e) { + if (popup.isShowing()) { + + // place dialog just under the button + Point point = new Point(getLocationOnScreen()); + point.translate(-popup.getWidth() + getWidth(), getHeight()); + popupMoving = true; + try { + popup.setLocation(point); + } finally { + popupMoving = false; + } + } + } + }); + setBean(model); + } + + public static String getButtonText(List<Attachment> attachment) { + return _("tutti.action.attachments", attachment.size()); + } + + public void init() { + popup.getHandler().init(); + } + + public void init(AttachmentModelAware model) { + setBean(model); + init(); + } + + public void onCloseUI() { + setSelected(false); + } + + public AttachmentModelAware getBean() { + return popup.getBean(); + } + + protected void setBean(AttachmentModelAware model) { + AttachmentModelAware bean = popup.getBean(); + if (bean != null) { + ((AbstractSerializableBean) bean).removePropertyChangeListener(AttachmentModelAware.PROPERTY_ATTACHMENT, getListenAttachmentsChanged()); + } + popup.setBean(model); + + if (model != null) { + + ((AbstractSerializableBean) model).addPropertyChangeListener(AttachmentModelAware.PROPERTY_ATTACHMENT, getListenAttachmentsChanged()); + List<Attachment> attachment = model.getAttachment(); + setText(ButtonAttachment.getButtonText(attachment)); + } + } + + protected PropertyChangeListener getListenAttachmentsChanged() { + if (listenAttachmentsChanged == null) { + listenAttachmentsChanged = new PropertyChangeListener() { + @Override + public void propertyChange(PropertyChangeEvent evt) { + List<Attachment> attachment = (List<Attachment>) evt.getNewValue(); + setText(getButtonText(attachment)); + if (!popup.isVisible()) { + init(); + } + } + }; + } + return listenAttachmentsChanged; + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachment.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachmentEditor.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachmentEditor.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/attachment/ButtonAttachmentEditor.java 2013-03-09 13:59:14 UTC (rev 567) @@ -1,103 +0,0 @@ -package fr.ifremer.tutti.ui.swing.util.attachment; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 - 2013 Ifremer - * %% - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public - * License along with this program. If not, see - * <http://www.gnu.org/licenses/gpl-3.0.html>. - * #L% - */ - -import fr.ifremer.tutti.persistence.entities.data.Attachment; -import fr.ifremer.tutti.ui.swing.util.TuttiUI; -import jaxx.runtime.SwingUtil; -import org.jdesktop.beans.AbstractSerializableBean; - -import javax.swing.JButton; -import java.awt.Frame; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.util.Collections; -import java.util.List; - -import static org.nuiton.i18n.I18n._; - -/** - * To show attachment editor on a button. - * - * @author tchemit <chemit@codelutin.com> - * @since 1.0.2 - */ -public class ButtonAttachmentEditor extends AttachmentEditor { - - private static final long serialVersionUID = 1L; - - public static String getButtonText(List<Attachment> attachment) { - return _("tutti.action.attachments", attachment.size()); - } - - public static ButtonAttachmentEditor newEditor(TuttiUI ui, - JButton button) { - - Frame frame = SwingUtil.getParentContainer(ui, Frame.class); - - return new ButtonAttachmentEditor(frame, - button, - (AttachmentModelAware) ui.getModel() - ); - } - - protected final AttachmentModelAware model; - - protected ButtonAttachmentEditor(Frame owner, - JButton component, - AttachmentModelAware model) { - super(owner, - component, - model.getObjectType(), - null); - this.model = model; - } - - @Override - protected AttachmentModelAware getBean() { - return model; - } - - protected JButton getComponent() { - return (JButton) component; - } - - public void init() { - - JButton button = getComponent(); - button.setIcon(SwingUtil.createActionIcon("edit-attachment")); - button.setToolTipText(_("tutti.action.attachments.tip")); - ((AbstractSerializableBean) model).addPropertyChangeListener(AttachmentModelAware.PROPERTY_ATTACHMENT, new PropertyChangeListener() { - @Override - public void propertyChange(PropertyChangeEvent evt) { - List<Attachment> attachment = (List<Attachment>) evt.getNewValue(); - getComponent().setText(ButtonAttachmentEditor.getButtonText(attachment)); - } - }); - AttachmentModelAware bean = getBean(); - List<Attachment> attachment = bean == null ? Collections.<Attachment>emptyList() : bean.getAttachment(); - button.setText(ButtonAttachmentEditor.getButtonText(attachment)); - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/table/AbstractTuttiTableUIHandler.java 2013-03-09 13:59:14 UTC (rev 567) @@ -307,7 +307,8 @@ new HighlightPredicate() { @Override public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - return StringUtils.isNotBlank((String) adapter.getValue()); + String value = (String) adapter.getValue(); + return StringUtils.isNotBlank(value); } }), cellWithValueColor); table.addHighlighter(commentHighlighter); @@ -320,7 +321,8 @@ new HighlightPredicate() { @Override public boolean isHighlighted(Component renderer, ComponentAdapter adapter) { - return CollectionUtils.isNotEmpty((Collection) adapter.getValue()); + Collection attachments = (Collection) adapter.getValue(); + return CollectionUtils.isNotEmpty(attachments); } } ), cellWithValueColor); Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-09 07:57:31 UTC (rev 566) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-09 13:59:14 UTC (rev 567) @@ -5,7 +5,7 @@ tutti.action.addSpecies.text=... tutti.action.addSpecies.tip=Sélectionner une autre espèce tutti.action.addSpeciesProtocol.tip=Ajouter une espèce au protocole -tutti.action.attachments=Pièces jointes (%s) +tutti.action.attachments=(%s) tutti.action.attachments.tip=Pièces jointes tutti.action.cancel=Annuler tutti.action.cancel.editCruise=Annuler @@ -29,6 +29,7 @@ tutti.action.cloneProtocol=Cloner tutti.action.cloneProtocol.tip=Dupliquer le protocole sélectionné tutti.action.close=Fermer +tutti.action.closeAttachment.tip=Fermer la fenêtre des picèes-jointes tutti.action.closeDb=Fermer tutti.action.closeDb.tip=Fermer la base de données en cours d'utilisation tutti.action.computeWeights=Elever les poids @@ -159,6 +160,7 @@ tutti.action.selectCruise.tip=Sélectionner la campagne à utiliser tutti.action.selectOtherSpecies.text=... tutti.action.selectOtherSpecies.tip=Sélectionner une autre espèce +tutti.action.showHelp.tip= tutti.action.site=Site tutti.action.site.tip=Accéder au site du projet Tutti tutti.action.splitSpeciesBatch=Catégoriser le lot @@ -391,6 +393,7 @@ tutti.menu.synchronisations.tip=Import/Export tutti.message.action.running=<html>Action <strong>%s</strong> en cours d'execution...<hr/></html> tutti.option.cruiseId.description=Identifiant de la dernière campagne utilisée +tutti.option.help.directory.description=Répertoire des fichiers d'aide tutti.option.i18n.directory.description=Répertoire des fichiers de traductions tutti.option.i18n.locale.description=Langue utilisée dans l'application tutti.option.launch.mode.description=Mode de démarrage de l'application @@ -487,6 +490,7 @@ tutti.table.species.sampleCategory.header.weight=Poids (kg) tutti.timeeditor.H=H tutti.title.about=À propos de Tutti +tutti.title.attachment=Pièces jointes tutti.title.choose.dbExportFile=Exporter la base de données tutti.title.choose.exportTemporaryGearExampleFile=Exporter un exemple de référentiel Engin tutti.title.choose.exportTemporaryPersonExampleFile=Exporter un exemple de référentiel Personne @@ -590,3 +594,66 @@ tutti.validator.warning.longitude.outOfBounds=La Latitude doit être comprise entre -180.0 et 180.0 tutti.validator.warning.longitude.second.outOfBounds=La seconde de la longitude doit être comprise entre 0 et 60 tutti.weights.rate.difference.totalAndSorted.description=Pourcentage de différence entre les Poids totaux VRAC triés et les poids totaux VRAC en dessous duquel on demande confirmation sur la saisie. +tuttihelp.editCruise.action.generateName.tip= +tuttihelp.editCruise.beginDateField.tip= +tuttihelp.editCruise.commentField.tip= +tuttihelp.editCruise.countryComboBox.tip= +tuttihelp.editCruise.endDateField.tip= +tuttihelp.editCruise.field.beginDate.tip= +tuttihelp.editCruise.field.comment.tip= +tuttihelp.editCruise.field.country.tip= +tuttihelp.editCruise.field.endDate.tip= +tuttihelp.editCruise.field.multirigNumber.tip= +tuttihelp.editCruise.field.name.tip= +tuttihelp.editCruise.field.program.tip= +tuttihelp.editCruise.field.surveyPart.tip= +tuttihelp.editCruise.field.year.tip= +tuttihelp.editCruise.filterVessel.tip= +tuttihelp.editCruise.gearList.tip= +tuttihelp.editCruise.generateNameAction.tip= +tuttihelp.editCruise.headOfMissionList.tip= +tuttihelp.editCruise.headOfSortRoomList.tip= +tuttihelp.editCruise.list.gear.tip= +tuttihelp.editCruise.list.headOfMission.tip= +tuttihelp.editCruise.list.headOfSortRoom.tip= +tuttihelp.editCruise.list.vessel.tip= +tuttihelp.editCruise.multirigNumberField.tip= +tuttihelp.editCruise.nameField.tip= +tuttihelp.editCruise.programComboBox.tip= +tuttihelp.editCruise.surveyPartField.tip= +tuttihelp.editCruise.vesselList.tip= +tuttihelp.editCruise.yearField.tip= +tuttihelp.editFishingOperation.action.attachments.tip= +tuttihelp.editFishingOperation.action.cancel.tip= +tuttihelp.editFishingOperation.action.importCasino.tip= +tuttihelp.editFishingOperation.action.save.tip= +tuttihelp.editFishingOperation.field..tip= +tuttihelp.editFishingOperation.field.comment.tip= +tuttihelp.editFishingOperation.field.duration.tip= +tuttihelp.editFishingOperation.field.fishingOperationNumber.tip= +tuttihelp.editFishingOperation.field.fishingOperationRectiligne.tip= +tuttihelp.editFishingOperation.field.fishingOperationValid.tip= +tuttihelp.editFishingOperation.field.gear.tip= +tuttihelp.editFishingOperation.field.gearDate.tip= +tuttihelp.editFishingOperation.field.gearLatitude.tip= +tuttihelp.editFishingOperation.field.gearLongitude.tip= +tuttihelp.editFishingOperation.field.gearShootingEnd.tip= +tuttihelp.editFishingOperation.field.gearShootingEndLatitude.tip= +tuttihelp.editFishingOperation.field.gearShootingEndLongitude.tip= +tuttihelp.editFishingOperation.field.gearShootingStart.tip= +tuttihelp.editFishingOperation.field.gearShootingStartLatitude.tip= +tuttihelp.editFishingOperation.field.gearTime.tip= +tuttihelp.editFishingOperation.field.location.tip= +tuttihelp.editFishingOperation.field.multirigAggregation.tip= +tuttihelp.editFishingOperation.field.stationNumber.tip= +tuttihelp.editFishingOperation.field.strata.tip= +tuttihelp.editFishingOperation.field.subStrata.tip= +tuttihelp.editFishingOperation.field.trawlDistance.tip= +tuttihelp.editFishingOperation.field.vessel.tip= +tuttihelp.editFishingOperation.gearShootingStartLongitude.tip= +tuttihelp.editFishingOperation.list.recorderPerson.tip= +tuttihelp.editProgram.field.comment.tip= +tuttihelp.editProgram.field.name.tip= +tuttihelp.editProgram.field.zone.tip= +tuttihelp.editProtocol.field..tip= +tuttihelp.editProtocol.field.comment.tip= Added: trunk/tutti-ui-swing/src/main/resources/icons/action-close-dialog.png =================================================================== (Binary files differ) Property changes on: trunk/tutti-ui-swing/src/main/resources/icons/action-close-dialog.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: svn:keywords + Author Date Id Revision HeadURL
participants (1)
-
tchemit@users.forge.codelutin.com