Author: tchemit Date: 2013-09-27 15:22:40 +0200 (Fri, 27 Sep 2013) New Revision: 1243 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/1243 Log: fixes #3356: [CAMPAGNE] l'option pour ajouter/modifier les caract?\195?\169ristiques des engins pro associ?\195?\169s ?\195?\160 la campagne n'est plus accessible via le clic droit 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.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/cruise/EditCruiseUIModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 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-09-27 09:49:14 UTC (rev 1242) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.css 2013-09-27 13:22:40 UTC (rev 1243) @@ -24,14 +24,12 @@ BeanFilterableComboBox { showReset: true; - i18nPrefix: "tutti.property."; bean: {model}; } BeanDoubleList { showReset: true; showSelectPopupEnabled: true; - i18nPrefix: "tutti.property."; bean: {model}; } @@ -55,6 +53,7 @@ actionIcon: edit; text: "tutti.editCruise.action.editGearCaracteristics"; toolTipText: "tutti.editCruise.action.editGearCaracteristics.tip"; + enabled: {model.isCanEditGearCatacteristic()}; _tuttiAction: {EditGearCaracteristicsAction.class}; _help: {"tutti.editCruise.action.editGearCaracteristics.help"}; } @@ -63,6 +62,7 @@ actionIcon: show-frequency; text: "tutti.editCruise.action.viewGearCaracteristics"; toolTipText: "tutti.editCruise.action.viewGearCaracteristics.tip"; + enabled: {model.isCanShowGearCatacteristic()}; _tuttiAction: {ViewGearCaracteristicsAction.class}; _help: {"tutti.editCruise.action.viewGearCaracteristics.help"}; } 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-09-27 09:49:14 UTC (rev 1242) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUI.jaxx 2013-09-27 13:22:40 UTC (rev 1243) @@ -218,7 +218,6 @@ <cell columns="3"> <BeanFilterableComboBox id='vesselComboBox' constructorParams='this' genericType='Vessel'/> - </cell> </row> <row weighty='0.3'> 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-09-27 09:49:14 UTC (rev 1242) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIHandler.java 2013-09-27 13:22:40 UTC (rev 1243) @@ -44,6 +44,8 @@ import javax.swing.JComponent; import javax.swing.JList; +import javax.swing.JPopupMenu; +import javax.swing.JSeparator; import javax.swing.SwingUtilities; import java.awt.Point; import java.awt.Rectangle; @@ -91,11 +93,19 @@ */ private final PersistenceService persistenceService; + /** + * The gear selected popup grab fro the double list. + * + * @since 2.6 + */ + protected JPopupMenu gearPopupMenu; + public EditCruiseUIHandler(TuttiUI parentUi, EditCruiseUI ui) { super(parentUi.getHandler().getContext(), ui); persistenceService = context.getPersistenceService(); } + @Override public void beforeInitUI() { @@ -216,6 +226,14 @@ allGearList, model.getGear()); + // add more actions on selected gear popup + gearPopupMenu = ui.getGearList().getSelectedList().getComponentPopupMenu(); + ui.getGearList().getSelectedList().setComponentPopupMenu(null); + + gearPopupMenu.add(new JSeparator(), 0); + gearPopupMenu.add(ui.getViewGearCaracteristicsItem(), 0); + gearPopupMenu.add(ui.getEditGearCaracteristicsItem(), 0); + initBeanList(ui.getHeadOfMissionList(), users, model.getHeadOfMission()); @@ -240,17 +258,8 @@ } Gear gear = (Gear) jList.getSelectedValue(); - boolean editMenuEnabled = false; - boolean viewMenuEnabled = false; - if (gear != null) { - editMenuEnabled = !getModel().isCreate() && !getModel().isModify() - && (!gear.isScientificGear() || persistenceService.isTemporary(gear)); - viewMenuEnabled = true; - ui.setContextValue(gear); - } - ui.getEditGearCaracteristicsItem().setEnabled(editMenuEnabled); - ui.getViewGearCaracteristicsItem().setEnabled(viewMenuEnabled); - ui.getGearMenuPopup().show(jList, e.getX(), e.getY()); //and show the menu + updateGearActionsAndShowPoup(gear, jList, e.getX(), e.getY()); + } } }); @@ -274,20 +283,8 @@ Point p = new Point(r.x + r.width / 2, r.y + r.height); Object[] gears = source.getSelectedValues(); - - boolean editMenuEnabled = false; - boolean viewMenuEnabled = false; - if (gears != null && gears.length == 1) { - Gear gear = (Gear) gears[0]; - editMenuEnabled = !getModel().isCreate() && !getModel().isModify() - && (!gear.isScientificGear() || persistenceService.isTemporary(gear)); - viewMenuEnabled = true; - ui.setContextValue(gear); - } - ui.getEditGearCaracteristicsItem().setEnabled(editMenuEnabled); - ui.getViewGearCaracteristicsItem().setEnabled(viewMenuEnabled); - ui.getGearMenuPopup().show(source, p.x, p.y); //and show the menu - + Gear gear = gears != null && gears.length == 1 ? (Gear) gears[0] : null; + updateGearActionsAndShowPoup(gear, source, p.x, p.y); } } }); @@ -312,6 +309,8 @@ protected Set<String> getPropertiesToIgnore() { Set<String> result = super.getPropertiesToIgnore(); result.add(EditCruiseUIModel.PROPERTY_ATTACHMENT); + result.add(EditCruiseUIModel.PROPERTY_CAN_EDIT_GEAR_CARACTERISTIC); + result.add(EditCruiseUIModel.PROPERTY_CAN_SHOW_GEAR_CARACTERISTIC); return result; } @@ -348,4 +347,22 @@ String name = model.getGeneratedCampaignName(); model.setName(name); } + + protected void updateGearActionsAndShowPoup(Gear gear, + JComponent source, + int x, + int y) { + boolean editMenuEnabled = false; + boolean viewMenuEnabled = false; + if (gear != null) { + editMenuEnabled = !getModel().isCreate() && !getModel().isModify() + && (!gear.isScientificGear() || persistenceService.isTemporary(gear)); + viewMenuEnabled = true; + ui.setContextValue(gear); + } + getModel().setCanEditGearCatacteristic(editMenuEnabled); + getModel().setCanShowGearCatacteristic(viewMenuEnabled); + + gearPopupMenu.show(source, x, y); //and show the menu + } } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-09-27 09:49:14 UTC (rev 1242) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/cruise/EditCruiseUIModel.java 2013-09-27 13:22:40 UTC (rev 1243) @@ -57,6 +57,10 @@ public static final String PROPERTY_CAN_GENERATE_NAME = "canGenerateName"; + public static final String PROPERTY_CAN_SHOW_GEAR_CARACTERISTIC = "canShowGearCatacteristic"; + + public static final String PROPERTY_CAN_EDIT_GEAR_CARACTERISTIC = "canEditGearCatacteristic"; + public static final String PROPERTY_VESSEL_TYPE = "vesselType"; public static final String PROPERTY_VESSEL_TYPE_ALL = "vesselTypeAll"; @@ -72,8 +76,29 @@ */ protected final Cruise editObject = TuttiBeanFactory.newCruise(); + /** + * Type of vessel. + * + * @see VesselTypeEnum + * @since 1.0 + */ protected VesselTypeEnum vesselType; + /** + * Can edit caracteristics of selected gear (for any temporary gear or professional one) + * <strong>only for a none modified cruise.</strong>? + * + * @since 2.6 + */ + protected boolean canEditGearCatacteristic; + + /** + * Can show caracteristics of selected gear? Any time so should be keep it? + * + * @since 2.6 + */ + protected boolean canShowGearCatacteristic; + protected final List<Attachment> attachment = Lists.newArrayList(); protected static Binder<EditCruiseUIModel, Cruise> toBeanBinder = @@ -92,6 +117,24 @@ return TuttiBeanFactory.newCruise(); } + public boolean isCanEditGearCatacteristic() { + return canEditGearCatacteristic; + } + + public void setCanEditGearCatacteristic(boolean canEditGearCatacteristic) { + this.canEditGearCatacteristic = canEditGearCatacteristic; + firePropertyChange(PROPERTY_CAN_EDIT_GEAR_CARACTERISTIC, null, canEditGearCatacteristic); + } + + public boolean isCanShowGearCatacteristic() { + return canShowGearCatacteristic; + } + + public void setCanShowGearCatacteristic(boolean canShowGearCatacteristic) { + this.canShowGearCatacteristic = canShowGearCatacteristic; + firePropertyChange(PROPERTY_CAN_SHOW_GEAR_CARACTERISTIC, null, canShowGearCatacteristic); + } + public VesselTypeEnum getVesselType() { return vesselType; } 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-09-27 09:49:14 UTC (rev 1242) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/AbstractTuttiUIHandler.java 2013-09-27 13:22:40 UTC (rev 1243) @@ -362,6 +362,142 @@ return result; } + public void clearValidators() { + MainUI main = context.getMainUI(); + Preconditions.checkNotNull( + main, "No mainUI registred in application context"); + MainUIHandler handler = main.getHandler(); + handler.clearValidators(); + } + + public <O> Decorator<O> getDecorator(Class<O> type, String name) { + DecoratorService decoratorService = + context.getDecoratorService(); + + Preconditions.checkNotNull(type); + + Decorator decorator = decoratorService.getDecoratorByType(type, name); + if (decorator == null) { + + if (LabelAware.class.isAssignableFrom(type)) { + decorator = getDecorator(LabelAware.class, null); + } + } + Preconditions.checkNotNull(decorator); + return decorator; + } + + public void autoSelectRowInTable(MouseEvent e, JPopupMenu popup) { + + boolean rightClick = SwingUtilities.isRightMouseButton(e); + + if (rightClick || SwingUtilities.isLeftMouseButton(e)) { + + // get the coordinates of the mouse click + Point p = e.getPoint(); + + JXTable source = (JXTable) e.getSource(); + + int[] selectedRows = source.getSelectedRows(); +// int[] selectedColumns = source.getSelectedColumns(); + + // get the row index at this point + int rowIndex = source.rowAtPoint(p); + + // get the column index at this point + int columnIndex = source.columnAtPoint(p); + + if (log.isDebugEnabled()) { + log.debug("At point [" + p + "] found Row " + rowIndex + ", Column " + columnIndex); + } + + boolean canContinue = true; + + if (source.isEditing()) { + + // stop editing + boolean stopEdit = source.getCellEditor().stopCellEditing(); + if (!stopEdit) { + if (log.isWarnEnabled()) { + log.warn("Could not stop edit cell..."); + } + canContinue = false; + } + } + + if (canContinue) { + + // select row (could empty selection) + if (rowIndex == -1) { + source.clearSelection(); + } else if (!ArrayUtils.contains(selectedRows, rowIndex)) { + source.setRowSelectionInterval(rowIndex, rowIndex); + } + +// // select column (could empty selection) +// if (columnIndex == -1) { +// source.clearSelection(); +// } else if (!ArrayUtils.contains(selectedColumns, columnIndex)) { +// source.setColumnSelectionInterval(columnIndex, columnIndex); +// } + + if (rightClick) { + + beforeOpenPopup(rowIndex, columnIndex); + + // on right click show popup + popup.show(source, e.getX(), e.getY()); + } + } + } + } + + public void openRowMenu(KeyEvent e, JPopupMenu popup) { + + if (e.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) { + + JXTable source = (JXTable) e.getSource(); + + // get the lowest selected row + int[] selectedRows = source.getSelectedRows(); + int lowestRow = -1; + for (int row : selectedRows) { + lowestRow = Math.max(lowestRow, row); + } + // get the selected column + int selectedColumn = source.getSelectedColumn(); + Rectangle r = source.getCellRect(lowestRow, selectedColumn, true); + + // get the point in the middle lower of the cell + Point p = new Point(r.x + r.width / 2, r.y + r.height); + + if (log.isDebugEnabled()) { + log.debug("Row " + lowestRow + " found t point [" + p + "]"); + } + + boolean canContinue = true; + + if (source.isEditing()) { + + // stop editing + boolean stopEdit = source.getCellEditor().stopCellEditing(); + if (!stopEdit) { + if (log.isWarnEnabled()) { + log.warn("Could not stop edit cell..."); + } + canContinue = false; + } + } + + if (canContinue) { + + beforeOpenPopup(lowestRow, selectedColumn); + + popup.show(source, p.x, p.y); + } + } + } + //------------------------------------------------------------------------// //-- Init methods --// //------------------------------------------------------------------------// @@ -669,7 +805,6 @@ //-- Internal methods --// //------------------------------------------------------------------------// - protected boolean quitScreen(boolean modelIsValid, boolean modelIsModify, String askGiveUpMessage, @@ -723,31 +858,6 @@ } } - public void clearValidators() { - MainUI main = context.getMainUI(); - Preconditions.checkNotNull( - main, "No mainUI registred in application context"); - MainUIHandler handler = main.getHandler(); - handler.clearValidators(); - } - - public <O> Decorator<O> getDecorator(Class<O> type, String name) { - DecoratorService decoratorService = - context.getDecoratorService(); - - Preconditions.checkNotNull(type); - - Decorator decorator = decoratorService.getDecoratorByType(type, name); - if (decorator == null) { - - if (LabelAware.class.isAssignableFrom(type)) { - decorator = getDecorator(LabelAware.class, null); - } - } - Preconditions.checkNotNull(decorator); - return decorator; - } - protected String decorate(Object object) { return decorate(object, null); } @@ -829,15 +939,6 @@ AbstractTuttiBeanUIModel.PROPERTY_VALID); } -// public <B> void selectFirstInCombo(BeanFilterableComboBox<B> combo) { -// List<B> data = combo.getData(); -// B selectedItem = null; -// if (CollectionUtils.isNotEmpty(data)) { -// selectedItem = data.get(0); -// } -// combo.setSelectedItem(selectedItem); -// } - protected void closeUI(TuttiUI ui) { ui.getHandler().onCloseUI(); } @@ -1000,71 +1101,6 @@ return result; } - public void autoSelectRowInTable(MouseEvent e, JPopupMenu popup) { - - boolean rightClick = SwingUtilities.isRightMouseButton(e); - - if (rightClick || SwingUtilities.isLeftMouseButton(e)) { - - // get the coordinates of the mouse click - Point p = e.getPoint(); - - JXTable source = (JXTable) e.getSource(); - - int[] selectedRows = source.getSelectedRows(); - int[] selectedColumns = source.getSelectedColumns(); - - // get the row index at this point - int rowIndex = source.rowAtPoint(p); - - // get the column index at this point - int columnIndex = source.columnAtPoint(p); - - if (log.isDebugEnabled()) { - log.debug("At point [" + p + "] found Row " + rowIndex + ", Column " + columnIndex); - } - - boolean canContinue = true; - - if (source.isEditing()) { - - // stop editing - boolean stopEdit = source.getCellEditor().stopCellEditing(); - if (!stopEdit) { - if (log.isWarnEnabled()) { - log.warn("Could not stop edit cell..."); - } - canContinue = false; - } - } - - if (canContinue) { - - // select row (could empty selection) - if (rowIndex == -1) { - source.clearSelection(); - } else if (!ArrayUtils.contains(selectedRows, rowIndex)) { - source.setRowSelectionInterval(rowIndex, rowIndex); - } - - // select column (could empty selection) - if (columnIndex == -1) { - source.clearSelection(); - } else if (!ArrayUtils.contains(selectedColumns, columnIndex)) { - source.setColumnSelectionInterval(columnIndex, columnIndex); - } - - if (rightClick) { - - beforeOpenPopup(rowIndex, columnIndex); - - // on right click show popup - popup.show(source, e.getX(), e.getY()); - } - } - } - } - /** * Hook to prepare popup just before showing it. * <p/> @@ -1079,50 +1115,4 @@ } - public void openRowMenu(KeyEvent e, JPopupMenu popup) { - - if (e.getKeyCode() == KeyEvent.VK_CONTEXT_MENU) { - - JXTable source = (JXTable) e.getSource(); - - // get the lowest selected row - int[] selectedRows = source.getSelectedRows(); - int lowestRow = -1; - for (int row : selectedRows) { - lowestRow = Math.max(lowestRow, row); - } - // get the selected column - int selectedColumn = source.getSelectedColumn(); - Rectangle r = source.getCellRect(lowestRow, selectedColumn, true); - - // get the point in the middle lower of the cell - Point p = new Point(r.x + r.width / 2, r.y + r.height); - - if (log.isDebugEnabled()) { - log.debug("Row " + lowestRow + " found t point [" + p + "]"); - } - - boolean canContinue = true; - - if (source.isEditing()) { - - // stop editing - boolean stopEdit = source.getCellEditor().stopCellEditing(); - if (!stopEdit) { - if (log.isWarnEnabled()) { - log.warn("Could not stop edit cell..."); - } - canContinue = false; - } - } - - if (canContinue) { - - beforeOpenPopup(lowestRow, selectedColumn); - - popup.show(source, p.x, p.y); - } - } - } - }