Tony CHEMIT pushed to branch develop-7.x at ultreiaio / ird-observe Commits: d0fa2a21 by Tony CHEMIT at 2018-09-21T10:18:39Z L'action de sauvegarde de la base locale est lancée automatiquement si on sélectionne une source connue - Closes #1072 - - - - - 471a7f3e by Tony CHEMIT at 2018-09-21T11:39:14Z Fix some validation messages - - - - - 049d8449 by Tony CHEMIT at 2018-09-21T11:43:25Z start to improve navigation popup (but not use it now) - - - - - 22 changed files: - client/src/main/java/fr/ird/observe/client/ui/ObserveCommon.jcss - client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java - client/src/main/java/fr/ird/observe/client/ui/actions/UIActionSupport.java - + client/src/main/java/fr/ird/observe/client/ui/actions/content/ShowTechnicalInformationsAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseRemoteConfigurationUIAction.java - client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseServerConfigurationUIAction.java - client/src/main/java/fr/ird/observe/client/ui/content/ContentUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/ContentUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jaxx - client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss - client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java - validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-create-error-validation.xml - validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-update-error-validation.xml Changes: ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveCommon.jcss ===================================== @@ -24,6 +24,10 @@ computeI18n:"skip" } +.forceNavigation { + _forceNavigation: true; +} + JToolBar { borderPainted:false; floatable:false; ===================================== client/src/main/java/fr/ird/observe/client/ui/ObserveKeyStrokes.java ===================================== @@ -83,6 +83,7 @@ public abstract class ObserveKeyStrokes { public static final KeyStroke KEY_STROKE_CHANGE_FOCUS = KeyStroke.getKeyStroke("pressed F1"); public static final KeyStroke KEY_STROKE_SAVE = KeyStroke.getKeyStroke("ctrl pressed S"); public static final KeyStroke KEY_STROKE_SHIFT_ALT_ENTER = KeyStroke.getKeyStroke("alt shift pressed ENTER"); + public static final KeyStroke KEY_STROKE_SHOW_TECHNICAL_INFORMATIONS = KeyStroke.getKeyStroke("shift pressed F1"); public static final KeyStroke KEY_STROKE_GO_DOWN = KeyStroke.getKeyStroke("alt pressed D"); public static final KeyStroke KEY_STROKE_ADD_DCP = KeyStroke.getKeyStroke("ctrl pressed P"); public static final KeyStroke KEY_STROKE_ADD_SET_LONGLINE = KeyStroke.getKeyStroke("ctrl pressed L"); ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/UIActionSupport.java ===================================== @@ -83,6 +83,18 @@ public abstract class UIActionSupport extends AbstractAction { } } + public String getText() { + return (String) getValue(SHORT_DESCRIPTION); + } + + public String getToolTipText() { + return (String) getValue(LONG_DESCRIPTION); + } + + public Icon getIcon() { + return (Icon) getValue(SMALL_ICON); + } + public KeyStroke getAcceleratorKey() { return (KeyStroke) getValue(ACCELERATOR_KEY); } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/content/ShowTechnicalInformationsAction.java ===================================== @@ -0,0 +1,140 @@ +package fr.ird.observe.client.ui.actions.content; + +import fr.ird.observe.client.ObserveSwingApplicationContext; +import fr.ird.observe.client.ui.ObserveKeyStrokes; +import fr.ird.observe.client.ui.ObserveMainUI; +import fr.ird.observe.client.ui.content.ContentUI; +import fr.ird.observe.client.ui.content.ContentUIModel; +import fr.ird.observe.client.ui.util.SpringUtilities; +import fr.ird.observe.dto.IdDto; +import fr.ird.observe.dto.referential.ReferentialDto; +import org.apache.commons.lang3.time.FastDateFormat; +import org.nuiton.decorator.Decorator; + +import javax.swing.JButton; +import javax.swing.JLabel; +import javax.swing.JPanel; +import javax.swing.JPopupMenu; +import javax.swing.JTextField; +import javax.swing.SpringLayout; +import javax.swing.border.TitledBorder; +import java.awt.Dimension; +import java.awt.event.FocusEvent; +import java.awt.event.FocusListener; +import java.util.Locale; +import java.util.Objects; + +import static org.nuiton.i18n.I18n.n; +import static org.nuiton.i18n.I18n.t; + +/** + * Created by tchemit on 21/09/2018. + * + * @author Tony Chemit - dev@tchemit.fr + */ +public class ShowTechnicalInformationsAction extends AbstractContentUIAction { + + public static final String ACTION_NAME = ShowTechnicalInformationsAction.class.getName(); + private static final long serialVersionUID = 1L; + + private final FastDateFormat dateFormat; + + public ShowTechnicalInformationsAction(ObserveMainUI mainUI) { + super(mainUI, + ACTION_NAME, + null, + n("observe.action.show.technical.informations.tip"), + "show-informations", + ObserveKeyStrokes.KEY_STROKE_SHOW_TECHNICAL_INFORMATIONS); + putValue(NAME, null); + Locale locale = ObserveSwingApplicationContext.get().getConfig().getLocale(); + if (Locale.ENGLISH.equals(locale)) { + dateFormat = FastDateFormat.getInstance("yyyy-MM-ddZZ hh:mm:ss"); + } else { + dateFormat = FastDateFormat.getInstance("dd/MM/yyyy hh:mm:ss"); + } + } + + @Override + protected void actionPerformed(ContentUI<?, ?> contentUI) { + + JButton button = contentUI.getShowTechnicalInformations(); + + ContentUIModel<?> model = contentUI.getModel(); + IdDto bean = model.isEditing() ? model.getBean() : contentUI.getHandler().getSelectedBean(); + + if (bean.getLastUpdateDate() == null) { + return; + } + + JPanel content = new JPanel(new SpringLayout()); + + FocusListener l = new FocusListener() { + @Override + public void focusGained(FocusEvent e) { + JTextField source = (JTextField) e.getSource(); + source.setSelectionStart(0); + source.setSelectionEnd(source.getText().length()); + } + + @Override + public void focusLost(FocusEvent e) { + + } + }; + + { + content.add(new JLabel(t("observe.common.Dto.topiaId"))); + JTextField comp = new JTextField(bean.getId()); + comp.setEditable(false); + comp.addFocusListener(l); + content.add(comp); + } + + Class<?> beanType = model.getBeanType(); + boolean isReferential = ReferentialDto.class.isAssignableFrom(beanType); + if (isReferential) { + content.add(new JLabel(t("observe.common.Dto.topiaCreateDate"))); + JTextField comp = new JTextField(dateFormat.format(bean.getCreateDate())); + comp.setEditable(false); + comp.addFocusListener(l); + content.add(comp); + } + + { + content.add(new JLabel(t("observe.common.Dto.lastUpdateDate"))); + JTextField comp = new JTextField(dateFormat.format(bean.getLastUpdateDate())); + comp.setEditable(false); + comp.addFocusListener(l); + content.add(comp); + } + + if (isReferential) { + content.add(new JLabel(t("observe.common.Dto.topiaVersion"))); + JTextField comp = new JTextField(String.valueOf(bean.getVersion())); + comp.setEditable(false); + comp.addFocusListener(l); + content.add(comp); + } + + SpringUtilities.makeCompactGrid(content, isReferential ? 4 : 2, 2, 5, 5, 5, 5); + + Decorator<?> decorator = ObserveSwingApplicationContext.get().getDecoratorService().getDecoratorByType(beanType); + Objects.requireNonNull(decorator, "Cant find decorator of type " + beanType); + String title = t("observe.common.Dto.technicalInformations", "\n" + decorator.toString(bean)); + + content.setBorder(new TitledBorder(title)); + + JPopupMenu popup = new JPopupMenu(); + popup.setBorderPainted(true); + popup.add(content); + popup.pack(); + + Dimension dim = popup.getPreferredSize(); + int x = (int) (button.getPreferredSize().getWidth() - dim.getWidth()); + int y = button.getHeight(); + popup.show(button, x, y); + + } + +} ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseRemoteConfigurationUIAction.java ===================================== @@ -29,8 +29,8 @@ import fr.ird.observe.client.ui.storage.StorageUI; import fr.ird.observe.client.ui.storage.StorageUIModel; import fr.ird.observe.client.ui.storage.tabs.ConfigUI; import fr.ird.observe.dto.presets.RemoteDataSourceConfiguration; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.swing.JMenuItem; import javax.swing.KeyStroke; @@ -84,8 +84,7 @@ public class UseRemoteConfigurationUIAction extends UIActionSupport { if (ConnexionStatus.SUCCESS == configUI.getModel().getConnexionStatus()) { if (parentContainer.getModel().getNextStep() != null) { parentContainer.getNextAction().doClick(); - } - if (getMainUI() != null) { + } else if (getMainUI() != null) { parentContainer.getApplyAction().doClick(); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/actions/storage/UseServerConfigurationUIAction.java ===================================== @@ -10,12 +10,12 @@ package fr.ird.observe.client.ui.actions.storage; * 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>. @@ -29,8 +29,8 @@ import fr.ird.observe.client.ui.storage.StorageUI; import fr.ird.observe.client.ui.storage.StorageUIModel; import fr.ird.observe.client.ui.storage.tabs.ConfigUI; import fr.ird.observe.dto.presets.ServerDataSourceConfiguration; -import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.LogManager; +import org.apache.logging.log4j.Logger; import javax.swing.JMenuItem; import javax.swing.KeyStroke; @@ -45,10 +45,9 @@ import java.awt.event.ActionEvent; */ public class UseServerConfigurationUIAction extends UIActionSupport { + public static final String ACTION_NAME = UseServerConfigurationUIAction.class.getName(); /** Logger */ private static final Logger log = LogManager.getLogger(UseServerConfigurationUIAction.class); - - public static final String ACTION_NAME = UseServerConfigurationUIAction.class.getName(); private final ConfigUI configUI; private final ServerDataSourceConfiguration configuration; private StorageUI parentContainer; @@ -84,8 +83,7 @@ public class UseServerConfigurationUIAction extends UIActionSupport { if (ConnexionStatus.SUCCESS == configUI.getModel().getConnexionStatus()) { if (parentContainer.getModel().getNextStep() != null) { parentContainer.getNextAction().doClick(); - } - if (getMainUI() != null) { + } else if (getMainUI() != null) { parentContainer.getApplyAction().doClick(); } } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUI.jaxx ===================================== @@ -37,6 +37,7 @@ fr.ird.observe.client.configuration.ClientConfig fr.ird.observe.client.ui.actions.content.GoUpUIAction fr.ird.observe.client.ui.actions.content.GoDownUIAction + fr.ird.observe.client.ui.actions.content.ShowTechnicalInformationsAction fr.ird.observe.client.ui.content.ContentUIHandler fr.ird.observe.dto.IdDto @@ -48,6 +49,9 @@ javax.swing.JComboBox javax.swing.JList javax.swing.UIManager + javax.swing.AbstractButton + + static org.nuiton.i18n.I18n.t </import> <ClientConfig id='config' initializer='ObserveSwingApplicationContext.get().getConfig()'/> @@ -76,6 +80,8 @@ public abstract ContentUIHandler<E,U> getHandler(); + public List<AbstractButton> getNavigationPopupActions() { return getHandler().getNavigationPopupActions(); } + public Object getSelectedBean(JComboBox combo) { return combo.getSelectedItem(); } @@ -143,8 +149,7 @@ public void createData() { <JButton id='actionDown'/> </JXLayer> - <JButton id='showTechnicalInformations' - onActionPerformed='getHandler().showTechnicalInformations((JButton) event.getSource());'/> + <JButton id='showTechnicalInformations'/> <JLabel id='titleRight'/> </JToolBar> @@ -163,6 +168,9 @@ public void createData() { <JPanel id="invisible" visible='false'> + <JPanel id="navigationActions"> + <!--Place here all actions you want to see in navigation popup but not in the form--> + </JPanel> </JPanel> </org.jdesktop.swingx.JXTitledPanel> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUI.jcss ===================================== @@ -37,6 +37,7 @@ #actionDown { _observeAction:{GoDownUIAction.ACTION_NAME}; _protectFocus:true; + _skipNavigation:true; } #actionUpPane { @@ -46,6 +47,7 @@ #actionUp { _observeAction:{GoUpUIAction.ACTION_NAME}; _protectFocus:true; + _skipNavigation:true; } @@ -59,8 +61,7 @@ #showTechnicalInformations { _original:true; - toolTipText:"observe.action.show.technical.informations.tip"; - actionIcon:"show-informations"; + _observeAction:{ShowTechnicalInformationsAction.ACTION_NAME}; enabled:{!model.isCreatingMode() && (model.getBean() != null)}; focusPainted:false; borderPainted:false; ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ContentUIHandler.java ===================================== @@ -8,12 +8,12 @@ * 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>. @@ -35,7 +35,6 @@ import fr.ird.observe.client.ui.content.list.ContentListUIModel; import fr.ird.observe.client.ui.content.ref.ContentReferenceUIHandler; import fr.ird.observe.client.ui.tree.navigation.NavigationTree; import fr.ird.observe.client.ui.tree.navigation.nodes.NavigationTreeNodeSupport; -import fr.ird.observe.client.ui.util.SpringUtilities; import fr.ird.observe.client.ui.util.UIHelper; import fr.ird.observe.client.validation.ClientValidationContext; import fr.ird.observe.dto.IdDto; @@ -96,11 +95,10 @@ import fr.ird.observe.services.service.referential.ReferentialService; import fr.ird.observe.services.service.sql.SqlScriptProducerService; import fr.ird.observe.spi.map.ImmutableDtoMap; import org.apache.commons.lang3.BooleanUtils; -import org.apache.commons.lang3.time.FastDateFormat; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import org.nuiton.decorator.Decorator; import org.nuiton.decorator.DecoratorUtil; +import org.nuiton.jaxx.runtime.JAXXObject; import org.nuiton.jaxx.runtime.context.DefaultJAXXContext; import org.nuiton.jaxx.validator.swing.SwingValidatorMessageTableModel; import org.nuiton.jaxx.validator.swing.SwingValidatorUtil; @@ -112,28 +110,17 @@ import org.nuiton.validator.NuitonValidatorScope; import javax.swing.AbstractButton; import javax.swing.ActionMap; import javax.swing.Icon; -import javax.swing.JButton; import javax.swing.JComponent; -import javax.swing.JLabel; import javax.swing.JOptionPane; -import javax.swing.JPanel; -import javax.swing.JPopupMenu; -import javax.swing.JTextField; import javax.swing.JToolBar; -import javax.swing.SpringLayout; import javax.swing.SwingUtilities; import javax.swing.UIManager; -import javax.swing.border.TitledBorder; import java.awt.Component; -import java.awt.Dimension; import java.awt.FocusTraversalPolicy; -import java.awt.event.FocusEvent; -import java.awt.event.FocusListener; import java.util.Collection; import java.util.Collections; import java.util.LinkedList; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.Optional; @@ -158,13 +145,12 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U private final DataContextType type; private final Icon errorIcon; private final Map<String, ReferentialReferencesFilter> referentialsFilters = new TreeMap<>(); - private final FastDateFormat dateFormat; + private final ObserveLayoutFocusTraversalPolicy<U> focusTraversalPolicy; protected String prefix; /** l'interface graphique que le controleur utilise */ protected U ui; private boolean init; - private final ObserveLayoutFocusTraversalPolicy<U> focusTraversalPolicy; public ContentUIHandler(DataContextType parentType, DataContextType type) { this(null, parentType, type); } @@ -174,17 +160,9 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U this.parentType = parentType; this.type = type; this.errorIcon = UIManager.getIcon("action.error"); - Locale locale = ObserveSwingApplicationContext.get().getConfig().getLocale(); - if (Locale.ENGLISH.equals(locale)) { - dateFormat = FastDateFormat.getInstance("yyyy-MM-ddZZ hh:mm:ss"); - } else { - dateFormat = FastDateFormat.getInstance("dd/MM/yyyy hh:mm:ss"); - } this.focusTraversalPolicy = creatFocusTraversalPolicy(); } - protected abstract ObserveLayoutFocusTraversalPolicy<U> creatFocusTraversalPolicy(); - public static NavigationTree getNavigationTree() { return ObserveSwingApplicationContext.get().getMainUI().getNavigationUI().getTree(); } @@ -298,6 +276,63 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U model.removeMessages(ui, null); } + /** + * @return layout focus traversel policy used by the ui. + */ + protected abstract ObserveLayoutFocusTraversalPolicy<U> creatFocusTraversalPolicy(); + + /** + * @return actions usable in the navigation popup. + */ + public List<AbstractButton> getNavigationPopupActions() { + List<AbstractButton> result = new LinkedList<>(); + collectNavigationPopupActions(result, ui, "actions", "extraActions", "navigationActions", "titleRightToolBar"); + for (Object object : ui.get$objectMap().values()) { + if (object != ui && object instanceof ContentUI) { + collectNavigationPopupActions(result, (JAXXObject) object, "actions", "extraActions", "navigationActions"); + } + } + return result; + } + + protected void collectNavigationPopupActions(List<AbstractButton> result, JAXXObject jaxxObject, String... containers) { + for (Object object : jaxxObject.get$objectMap().values()) { + if (object instanceof AbstractButton) { + AbstractButton button = (AbstractButton) object; + boolean force = Objects.equals(true, button.getClientProperty("forceNavigation")); + if (!force) { + if (!button.isEnabled()) { + log.info("Reject (disabled) action: " + button.getName() + " - " + button.getText()); + continue; + } + if (!button.isShowing()) { + log.info("Reject (hidden) action: " + button.getName() + " - " + button.getText()); + continue; + } + if (Objects.equals(true, button.getClientProperty("skipNavigation"))) { + log.info("Reject (skip) action: " + button.getName() + " - " + button.getText()); + continue; + } + + boolean found = false; + for (String container : containers) { + found = SwingUtilities.getAncestorNamed(container, button) != null; + if (found) { + break; + } + } + if (!found) { + log.info("Reject (out of zone) action: " + button.getName() + " - " + button.getText()); + continue; + } + } + log.info("Keep action: " + button.getName() + " - " + button.getText()); + result.add(button); + } + } + + } + protected void addReferentialFilter(String propertyName, ReferentialReferencesFilter filter) { referentialsFilters.put(propertyName, filter); } @@ -802,9 +837,9 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U protected void addInfoMessage(String message) { addMessage(ui, - NuitonValidatorScope.INFO, - getTypeI18nKey(getModel().getBeanType()), - t(message) + NuitonValidatorScope.INFO, + getTypeI18nKey(getModel().getBeanType()), + t(message) ); } @@ -1159,92 +1194,11 @@ public abstract class ContentUIHandler<E extends IdDto, U extends ContentUI<E, U } - protected E getSelectedBean() { + public E getSelectedBean() { return getModel().getBean(); } - /** - * Pour afficher une popup avec l'ensemble des informations techniques. - * - * @param button le boutton qui a declanche l'action - */ - void showTechnicalInformations(JButton button) { - - E bean = getModel().isEditing() ? getBean() : getSelectedBean(); - - if (bean.getLastUpdateDate() == null) { - return; - } - - JPanel content = new JPanel(new SpringLayout()); - - FocusListener l = new FocusListener() { - @Override - public void focusGained(FocusEvent e) { - JTextField source = (JTextField) e.getSource(); - source.setSelectionStart(0); - source.setSelectionEnd(source.getText().length()); - } - - @Override - public void focusLost(FocusEvent e) { - - } - }; - - { - content.add(new JLabel(t("observe.common.Dto.topiaId"))); - JTextField comp = new JTextField(bean.getId()); - comp.setEditable(false); - comp.addFocusListener(l); - content.add(comp); - } - - boolean isReferential = ReferentialDto.class.isAssignableFrom(getBeanType()); - if (isReferential) { - content.add(new JLabel(t("observe.common.Dto.topiaCreateDate"))); - JTextField comp = new JTextField(dateFormat.format(bean.getCreateDate())); - comp.setEditable(false); - comp.addFocusListener(l); - content.add(comp); - } - - { - content.add(new JLabel(t("observe.common.Dto.lastUpdateDate"))); - JTextField comp = new JTextField(dateFormat.format(bean.getLastUpdateDate())); - comp.setEditable(false); - comp.addFocusListener(l); - content.add(comp); - } - - if (isReferential) { - content.add(new JLabel(t("observe.common.Dto.topiaVersion"))); - JTextField comp = new JTextField(String.valueOf(bean.getVersion())); - comp.setEditable(false); - comp.addFocusListener(l); - content.add(comp); - } - - SpringUtilities.makeCompactGrid(content, isReferential ? 4 : 2, 2, 5, 5, 5, 5); - - Decorator<E> decorator = getDecoratorService().getDecoratorByType(getBeanType()); - Objects.requireNonNull(decorator, "Cant find decorator of type " + getBeanType()); - String title = t("observe.common.Dto.technicalInformations", "\n" + decorator.toString(bean)); - - content.setBorder(new TitledBorder(title)); - - JPopupMenu popup = new JPopupMenu(); - popup.setBorderPainted(true); - popup.add(content); - popup.pack(); - Dimension dim = popup.getPreferredSize(); - int x = (int) (button.getPreferredSize().getWidth() - dim.getWidth()); - int y = button.getHeight(); - popup.show(button, x, y); - } - void openedUI() { - SwingUtilities.invokeLater(this::forceGrabFocusOnForm); } ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUI.jaxx ===================================== @@ -36,6 +36,7 @@ fr.ird.observe.client.ui.actions.content.AddActivityLonglineSetUIAction fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.MoveActivityLonglineUIAction fr.ird.observe.client.ui.actions.main.global.DeleteDataGlobalUIAction fr.ird.observe.client.ui.actions.main.global.OpenDataGlobalUIAction fr.ird.observe.client.ui.actions.main.global.CloseDataGlobalUIAction @@ -156,5 +157,7 @@ </cell> </row> </Table> - + <JPanel id="forceNavigation"> + <JButton id='move' styleClass="forceNavigation"/> + </JPanel> </fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/ActivityLonglineUI.jcss ===================================== @@ -97,3 +97,7 @@ _observeAction:{AddActivityLonglineSetUIAction.ACTION_NAME}; } + +#move { + _observeAction:{MoveActivityLonglineUIAction.ACTION_NAME}; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jaxx ===================================== @@ -38,6 +38,7 @@ fr.ird.observe.dto.referential.DataQualityReference fr.ird.observe.dto.referential.longline.TripTypeReference fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.MoveTripLonglineUIAction fr.ird.observe.client.ui.actions.main.global.DeleteDataGlobalUIAction fr.ird.observe.client.ui.actions.main.global.NewNextDataGlobalUIAction fr.ird.observe.client.ui.util.JComment @@ -238,4 +239,7 @@ protected boolean canEditOcean(java.util.LinkedHashSet<TripLonglineActivityDto> <JButton id='closeAndCreate'/> <JButton id='actionDown'/> + <JPanel id="forceNavigation"> + <JButton id='move' styleClass="forceNavigation"/> + </JPanel> </fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/longline/TripLonglineUI.jcss ===================================== @@ -118,3 +118,7 @@ _toolTipText:{t("observe.common.TripDto.action.delete.tip")}; _globalAction:{DeleteDataGlobalUIAction.ACTION_NAME}; } + +#move { + _observeAction:{MoveTripLonglineUIAction.ACTION_NAME}; +} ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUI.jaxx ===================================== @@ -44,9 +44,10 @@ org.nuiton.jaxx.widgets.temperature.TemperatureEditor org.nuiton.jaxx.widgets.temperature.TemperatureEditorConfig - fr.ird.observe.client.ui.actions.content.DeleteDataUIAction fr.ird.observe.client.ui.actions.content.AddActivitySeineSetUIAction fr.ird.observe.client.ui.actions.content.AddActivitySeineFloatingObjectUIAction + fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.MoveActivitySeineUIAction fr.ird.observe.client.ui.util.JComment org.nuiton.jaxx.widgets.number.NumberEditor @@ -303,5 +304,7 @@ </cell> </row> </Table> - + <JPanel id="forceNavigation"> + <JButton id='move' styleClass="forceNavigation"/> + </JPanel> </fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/ActivitySeineUI.jcss ===================================== @@ -181,3 +181,6 @@ visible:{bean.isDcpOperation()}; _observeAction:{AddActivitySeineFloatingObjectUIAction.ACTION_NAME}; } +#move { + _observeAction:{MoveActivitySeineUIAction.ACTION_NAME}; +} \ No newline at end of file ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUI.jaxx ===================================== @@ -30,6 +30,7 @@ <import> fr.ird.observe.dto.data.seine.RouteDto fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.MoveRouteUIAction fr.ird.observe.client.ui.util.JComment org.jdesktop.swingx.JXDatePicker @@ -95,5 +96,7 @@ <JButton id='close'/> <JButton id='closeAndCreate'/> <JButton id='actionDown'/> - + <JPanel id="forceNavigation"> + <JButton id='move' styleClass="forceNavigation"/> + </JPanel> </fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/RouteUI.jcss ===================================== @@ -64,3 +64,6 @@ NumberEditor { #delete { _toolTipText:{t("observe.common.RouteDto.action.delete.tip")}; } +#move { + _observeAction:{MoveRouteUIAction.ACTION_NAME}; +} \ No newline at end of file ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jaxx ===================================== @@ -41,6 +41,7 @@ fr.ird.observe.dto.referential.DataQualityReference fr.ird.observe.client.ui.actions.content.DeleteDataUIAction + fr.ird.observe.client.ui.actions.content.MoveTripSeineUIAction fr.ird.observe.client.ui.util.JComment fr.ird.observe.client.ui.util.tripMap.TripMapUI @@ -262,5 +263,7 @@ protected boolean canEditOcean(java.util.LinkedHashSet<RouteStubDto> routes) { <JButton id='close'/> <JButton id='closeAndCreate'/> <JButton id='actionDown'/> - + <JPanel id="forceNavigation"> + <JButton id='move' styleClass="forceNavigation"/> + </JPanel> </fr.ird.observe.client.ui.content.open.ContentOpenableUI> ===================================== client/src/main/java/fr/ird/observe/client/ui/content/data/seine/TripSeineUI.jcss ===================================== @@ -151,3 +151,6 @@ NumberEditor { #delete { _toolTipText:{t("observe.common.TripDto.action.delete.tip")}; } +#move { + _observeAction:{MoveTripSeineUIAction.ACTION_NAME}; +} \ No newline at end of file ===================================== client/src/main/java/fr/ird/observe/client/ui/content/ref/ContentReferenceUIHandler.java ===================================== @@ -418,7 +418,7 @@ public class ContentReferenceUIHandler<D extends ReferentialDto, R extends Refer } @Override - protected D getSelectedBean() { + public D getSelectedBean() { return getModel().getSelectedBean(); } ===================================== validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-create-error-validation.xml ===================================== @@ -179,7 +179,7 @@ <field-validator type="quadrantDto" short-circuit="true"> <param name="ocean">currentTripSeine.ocean</param> <message> - observe.validation.activity.invalid.quadrant##${currentTripSeine.ocean.libelle} + observe.validation.activity.invalid.quadrant##${currentTripSeine.ocean.label} </message> </field-validator> ===================================== validation/src/main/resources/fr/ird/observe/dto/data/seine/ActivitySeineDto-update-error-validation.xml ===================================== @@ -37,7 +37,7 @@ <field-validator type="quadrantDto" short-circuit="true"> <param name="ocean">currentTripSeine.ocean</param> <message> - observe.validation.activity.invalid.quadrant##${currentTripSeine.ocean.libelle} + observe.validation.activity.invalid.quadrant##${currentTripSeine.ocean.label} </message> </field-validator> View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/d1e7c51b29e155397778dce9347... -- View it on GitLab: https://gitlab.com/ultreiaio/ird-observe/compare/d1e7c51b29e155397778dce9347... You're receiving this email because of your account on gitlab.com.
participants (1)
-
Tony CHEMIT