Author: echatellier Date: 2012-08-14 19:29:50 +0200 (Tue, 14 Aug 2012) New Revision: 1049 Url: http://forge.codelutin.com/repositories/revision/coser/1049 Log: fixes #1328: Ajouter une frise permettant de guide l'utilisateur dans le processus Added: trunk/coser-ui/src/main/resources/icons/agt_action_fail.png trunk/coser-ui/src/main/resources/icons/button_ok.png trunk/coser-ui/src/main/resources/icons/stock_lock.png Modified: trunk/coser-ui/pom.xml trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/Freize.jaxx trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/FreizeHandler.java trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties trunk/pom.xml Modified: trunk/coser-ui/pom.xml =================================================================== --- trunk/coser-ui/pom.xml 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/pom.xml 2012-08-14 17:29:50 UTC (rev 1049) @@ -77,6 +77,10 @@ <artifactId>jaxx-validator</artifactId> </dependency> <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets</artifactId> + </dependency> + <dependency> <groupId>org.swinglabs.swingx</groupId> <artifactId>swingx-core</artifactId> </dependency> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/CoserFrameHandler.java 2012-08-14 17:29:50 UTC (rev 1049) @@ -314,6 +314,7 @@ */ public void projectLoaded(Project project) { view.setProject(project); + view.setSelection(null); // to update freize view.setContextValue(project); view.setTitle(_("coser.ui.mainview.titleproject", project.getName())); } Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/Freize.jaxx =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/Freize.jaxx 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/Freize.jaxx 2012-08-14 17:29:50 UTC (rev 1049) @@ -22,7 +22,7 @@ <http://www.gnu.org/licenses/gpl-3.0.html>. #L% --> -<JPanel layout="{new GridLayout(0, 4)}" +<JPanel layout="{new GridLayout(0, 5)}" border="{BorderFactory.createLineBorder(Color.BLACK)}"> <import> @@ -36,66 +36,79 @@ <Table id="step0Panel" border="{BorderFactory.createEtchedBorder()}"> <row> - <cell weightx="1"> + <cell columns="2"> <JLabel text="coser.ui.freize.projectstep" font-weight="bold" /> </cell> - <cell rows="2"> - <JLabel id="step0Icon" icon="button_ok.png" /> - </cell> </row> <row> - <cell> - <JButton text='coser.ui.freize.projectaction' + <cell weightx="1" anchor="center"> + <JButton text='coser.ui.freize.projectcreate' onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showProjectCreationView()"/> </cell> + <cell weightx="1" anchor="center"> + <JButton text='coser.ui.freize.projectopen' + onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showProjectOpenView()"/> + </cell> </row> </Table> <Table id="step1Panel" border="{BorderFactory.createEtchedBorder()}" decorator="boxed"> <row> - <cell weightx="1"> - <JLabel text="coser.ui.freize.controlstep" enabled="{model.isStep1Enabled()}" /> + <cell columns="2"> + <JLabel text="coser.ui.freize.controlstep" enabled="{model.isStep1Enabled()}" font-weight="bold" /> </cell> - <cell rows="2"> - <JLabel id="step1Icon" icon="stock_lock.png" enabled="{model.isStep1Enabled()}" /> - </cell> </row> <row> - <cell> + <cell weightx="1" anchor="center"> <JButton text='coser.ui.freize.controlaction' enabled="{model.isStep1Enabled()}" onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showControlView()"/> </cell> + <cell weightx="2" anchor="center"> + <JLabel id="controlStatus" enabled="{model.isStep1Enabled()}" /> + </cell> </row> </Table> - + <Table id="step2Panel" border="{BorderFactory.createEtchedBorder()}" decorator="boxed"> <row> - <cell weightx="1"> - <JLabel text="coser.ui.freize.selectionstep" enabled="{model.isStep2Enabled()}" /> + <cell columns="2"> + <JLabel text="coser.ui.freize.selectionstep" enabled="{model.isStep2Enabled()}" font-weight="bold" /> </cell> - <cell rows="2"> - <JLabel id="step2Icon" icon="agt_action_fail.png" enabled="{model.isStep2Enabled()}" /> - </cell> </row> <row> - <cell> - <JButton text='coser.ui.freize.selectionaction' enabled="{model.isStep2Enabled()}" - onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showSelectionView(model.getSelection(), 0)"/> + <cell weightx="2" anchor="center"> + <JButton text='coser.ui.freize.selectionaction' + enabled="{model.isStep2Enabled()}" + onMousePressed="getHandler().showSelectionDropDownMenu(this, event)"/> </cell> + <cell weightx="2" anchor="center"> + <JLabel id="selectionStatus" enabled="{model.isStep2Enabled()}" /> + </cell> </row> </Table> - + <Table id="step3Panel" border="{BorderFactory.createEtchedBorder()}" decorator="boxed"> <row> <cell weightx="1"> - <JLabel text="coser.ui.freize.resultstep" enabled="{model.isStep3Enabled()}" /> + <JLabel text="coser.ui.freize.rsufistep" enabled="{model.isStep3Enabled()}" font-weight="bold" /> </cell> - <cell rows="2"> - <JLabel id="step3Icon" icon="agt_action_fail.png" enabled="{model.isStep3Enabled()}" /> + </row> + <row> + <cell> + <JButton text='coser.ui.freize.rsufiaction' enabled="{model.isStep3Enabled()}" + onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showSelectionView(model.getSelection(), 2)"/> </cell> </row> + </Table> + + <Table id="step4Panel" border="{BorderFactory.createEtchedBorder()}" decorator="boxed"> <row> <cell> + <JLabel text="coser.ui.freize.resultstep" enabled="{model.isStep3Enabled()}" font-weight="bold" /> + </cell> + </row> + <row> + <cell weightx="1"> <JButton text='coser.ui.freize.resultaction' enabled="{model.isStep3Enabled()}" onActionPerformed="getParentContainer(CoserFrame.class).getHandler().showSelectionView(model.getSelection(), 2)"/> </cell> Modified: trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/FreizeHandler.java =================================================================== --- trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/FreizeHandler.java 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/src/main/java/fr/ifremer/coser/ui/freize/FreizeHandler.java 2012-08-14 17:29:50 UTC (rev 1049) @@ -22,18 +22,25 @@ */ package fr.ifremer.coser.ui.freize; +import static org.nuiton.i18n.I18n._; + import java.awt.Color; +import java.awt.Component; +import java.awt.event.MouseEvent; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Icon; import javax.swing.ImageIcon; +import javax.swing.JPopupMenu; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import fr.ifremer.coser.bean.Project; import fr.ifremer.coser.bean.Selection; +import fr.ifremer.coser.ui.CoserFrame; +import fr.ifremer.coser.ui.SelectionsListMenu; /** @@ -100,39 +107,79 @@ view.getStep0Panel().setBackground(DISABLED_COLOR); view.getStep1Panel().setBackground(DISABLED_COLOR); view.getStep2Panel().setBackground(DISABLED_COLOR); - view.getStep0Icon().setIcon(BAD_ICON); - view.getStep1Icon().setIcon(BAD_ICON); - view.getStep2Icon().setIcon(BAD_ICON); + view.getStep3Panel().setBackground(DISABLED_COLOR); + view.getStep4Panel().setBackground(DISABLED_COLOR); Project project = model.getProject(); + // step 0 if (project != null) { - view.getStep0Icon().setIcon(OK_ICON); view.getStep0Panel().setBackground(COMPLETE_COLOR); + + // step 1 model.setStep1Enabled(true); - if (project.getControl().isValidated()) { view.getStep1Panel().setBackground(COMPLETE_COLOR); + + // step 2 model.setStep2Enabled(true); if (!project.getSelections().isEmpty()) { - view.getStep1Icon().setIcon(LOCKED_ICON); + view.getControlStatus().setText(_("coser.ui.freize.locked")); + view.getControlStatus().setToolTipText(_("coser.ui.freize.controllockedtip")); + view.getControlStatus().setIcon(LOCKED_ICON); } else { - view.getStep1Icon().setIcon(OK_ICON); + view.getControlStatus().setText(_("coser.ui.freize.validated")); + view.getControlStatus().setIcon(OK_ICON); } Selection selection = model.getSelection(); if (selection != null && selection.isValidated()) { - view.getStep2Icon().setIcon(OK_ICON); + view.getSelectionStatus().setIcon(OK_ICON); + view.getSelectionStatus().setText(_("coser.ui.freize.validated")); view.getStep2Panel().setBackground(COMPLETE_COLOR); + + // step 3 model.setStep3Enabled(true); + view.getStep3Panel().setBackground(COMPLETE_COLOR); + + // step 4 + if (selection.getRsufiResults().isEmpty()) { + view.getStep4Panel().setBackground(PENDING_COLOR); + } else { + view.getStep4Panel().setBackground(COMPLETE_COLOR); + } + } else { view.getStep2Panel().setBackground(PENDING_COLOR); + view.getSelectionStatus().setIcon(BAD_ICON); + view.getSelectionStatus().setText(_("coser.ui.freize.unvalidated")); } } else { view.getStep1Panel().setBackground(PENDING_COLOR); + view.getControlStatus().setIcon(BAD_ICON); + view.getControlStatus().setText(_("coser.ui.freize.unvalidated")); } } else { view.getStep0Panel().setBackground(PENDING_COLOR); - view.getStep0Icon().setIcon(BAD_ICON); } - } + } + + /** + * Affiche en popup l'equivalent du menu "Données" > "Selection". + * + * @param view view + */ + public void showSelectionDropDownMenu(Freize view, MouseEvent event) { + JPopupMenu menu = new JPopupMenu(); + + SelectionsListMenu oldMenu = new SelectionsListMenu(view.getParentContainer(CoserFrame.class)); + oldMenu.setProject(view.getModel().getProject()); + + // lorsqu'on ajoute un element a menu, il est supprimé + // de oldMenu, donc le parcourt doit se faire en sens inverse + for (int i = oldMenu.getItemCount() - 1; i >= 0; i--) { + menu.insert(oldMenu.getMenuComponent(i), 0); + } + + menu.show((Component)event.getSource(), event.getX(), event.getY()); + } } Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_en_GB.properties 2012-08-14 17:29:50 UTC (rev 1049) @@ -61,14 +61,21 @@ coser.ui.error.htmlmessage=An error occurred \: %s coser.ui.error.reportSendTo=A report has been sent to %s coser.ui.error.title=Global application error -coser.ui.freize.controlaction= -coser.ui.freize.controlstep= -coser.ui.freize.projectaction= -coser.ui.freize.projectstep= -coser.ui.freize.resultaction= -coser.ui.freize.resultstep= -coser.ui.freize.selectionaction= -coser.ui.freize.selectionstep= +coser.ui.freize.controlaction=Control +coser.ui.freize.controllockedtip=Control locked because selection exists \! +coser.ui.freize.controlstep=2/4 Control +coser.ui.freize.locked=Locked +coser.ui.freize.projectcreate=Create +coser.ui.freize.projectopen=Open +coser.ui.freize.projectstep=1/4 Project +coser.ui.freize.resultaction=Add result +coser.ui.freize.resultstep=5/5 Result +coser.ui.freize.rsufiaction=RSufi export +coser.ui.freize.rsufistep=4/5 RSUfi +coser.ui.freize.selectionaction=Selection ► +coser.ui.freize.selectionstep=3/4 Selection +coser.ui.freize.unvalidated=Not validated +coser.ui.freize.validated=Validated coser.ui.graph.compareNumberCatchLength=Comparison Catch/Length coser.ui.graph.compareNumberCatchLengthTip=Display catch and length number comparison graphs (data are generated only during error check) coser.ui.graph.lengthStructure=Length structure Modified: trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties =================================================================== --- trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/coser-ui/src/main/resources/i18n/coser-ui_fr_FR.properties 2012-08-14 17:29:50 UTC (rev 1049) @@ -62,13 +62,20 @@ coser.ui.error.reportSendTo=Un rapport a été envoyé à %s coser.ui.error.title=Erreur globale coser.ui.freize.controlaction=Contrôle -coser.ui.freize.controlstep=2/4 \: Contrôle -coser.ui.freize.projectaction=Créer -coser.ui.freize.projectstep=1/4 \: Création +coser.ui.freize.controllockedtip=Contrôle vérrouillé car sélections existantes \! +coser.ui.freize.controlstep=2/5 \: Contrôle +coser.ui.freize.locked=Vérrouillé +coser.ui.freize.projectcreate=Créer +coser.ui.freize.projectopen=Ouvrir +coser.ui.freize.projectstep=1/5 \: Création coser.ui.freize.resultaction=Ajouter un résultat -coser.ui.freize.resultstep=4/4 \: Résultats -coser.ui.freize.selectionaction=Sélection -coser.ui.freize.selectionstep=3/4 \: Sélection +coser.ui.freize.resultstep=5/5 \: Résultats +coser.ui.freize.rsufiaction=Export RSUfi +coser.ui.freize.rsufistep=4/5 RSUfi +coser.ui.freize.selectionaction=Sélection ► +coser.ui.freize.selectionstep=3/5 \: Sélection +coser.ui.freize.unvalidated=Non validé +coser.ui.freize.validated=Validé coser.ui.graph.compareNumberCatchLength=Comparaison Captures/Tailles coser.ui.graph.compareNumberCatchLengthTip=Affiche les graphiques de comparaison des nombres entre les captures et les tailles (Les données sont générées uniquement lors de la vérification des erreurs) coser.ui.graph.lengthStructure=Structures en taille Added: trunk/coser-ui/src/main/resources/icons/agt_action_fail.png =================================================================== (Binary files differ) Property changes on: trunk/coser-ui/src/main/resources/icons/agt_action_fail.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/coser-ui/src/main/resources/icons/button_ok.png =================================================================== (Binary files differ) Property changes on: trunk/coser-ui/src/main/resources/icons/button_ok.png ___________________________________________________________________ Added: svn:mime-type + image/png Added: trunk/coser-ui/src/main/resources/icons/stock_lock.png =================================================================== (Binary files differ) Property changes on: trunk/coser-ui/src/main/resources/icons/stock_lock.png ___________________________________________________________________ Added: svn:mime-type + image/png Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2012-08-14 14:45:09 UTC (rev 1048) +++ trunk/pom.xml 2012-08-14 17:29:50 UTC (rev 1049) @@ -155,6 +155,13 @@ <version>${jaxx.version}</version> <scope>compile</scope> </dependency> + + <dependency> + <groupId>org.nuiton.jaxx</groupId> + <artifactId>jaxx-widgets</artifactId> + <version>${jaxx.version}</version> + <scope>runtime</scope> + </dependency> <dependency> <groupId>org.swinglabs.swingx</groupId>