Author: tchemit Date: 2013-03-15 01:32:22 +0100 (Fri, 15 Mar 2013) New Revision: 627 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/627 Log: fixes #1957: [PROTOCOLE] - Param?\195?\169trage de l'ordre des cat?\195?\169gorisations de tri Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowConfigAction.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.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/resources/i18n/tutti-ui-swing_en_GB.properties trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-03-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiScreen.java 2013-03-15 00:32:22 UTC (rev 627) @@ -33,10 +33,16 @@ public enum TuttiScreen { /** - * To manager db used by Tutti. + * To display config. * * @since 1.0 */ + CONFIG, + /** + * To manage db used by Tutti. + * + * @since 1.0 + */ MANAGE_DB, /** 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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfig.java 2013-03-15 00:32:22 UTC (rev 627) @@ -44,6 +44,7 @@ import java.io.File; import java.io.IOException; import java.net.URL; +import java.util.List; import java.util.Locale; import java.util.Set; @@ -225,6 +226,11 @@ return StringUtils.isBlank(result) ? null : result; } + public List<Integer> getSamplingOrderIds() { + ApplicationConfig.OptionList result = applicationConfig.getOptionAsList(TuttiApplicationConfigOption.SAMPLING_CATEGORY_ORDER_IDS.getKey()); + return result.getOptionAsInt(); + } + public Color getColorRowInvalid() { return applicationConfig.getOptionAsColor(TuttiApplicationConfigOption.COLOR_ROW_INVALID.getKey()); } 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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiApplicationConfigOption.java 2013-03-15 00:32:22 UTC (rev 627) @@ -121,6 +121,13 @@ String.class ), + SAMPLING_CATEGORY_ORDER_IDS( + "tutti.option.samplingCategoryOrderIds", + n_("tutti.option.samplingCategoryOrderIds.description"), + "198,196,174,1430", + Integer[].class + ), + AUTO_POPUP_NUMBER_EDITOR( "tutti.ui.autoPopupNumberEditor", n_("tutti.option.ui.autoPopupNumberEditor.description"), Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-03-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/config/TuttiConfigUI.java 2013-03-15 00:32:22 UTC (rev 627) @@ -1,169 +0,0 @@ -package fr.ifremer.tutti.ui.swing.config; - -/* - * #%L - * Tutti :: UI - * $Id$ - * $HeadURL$ - * %% - * Copyright (C) 2012 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.service.config.TuttiServiceConfigOption; -import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.content.MainUI; -import fr.ifremer.tutti.ui.swing.content.MainUIHandler; -import fr.ifremer.tutti.ui.swing.content.ReloadTuttiAction; -import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; -import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; -import jaxx.runtime.SwingUtil; -import jaxx.runtime.swing.config.ConfigUI; -import jaxx.runtime.swing.config.ConfigUIHelper; -import jaxx.runtime.swing.config.model.MainCallBackFinalizer; - -import static org.nuiton.i18n.I18n.n_; - -/** - * To launch the config UI. - * - * @author tchemit <chemit@codelutin.com> - * @since 0.3 - */ -public class TuttiConfigUI { - - public static final String CALLBACK_APPLICATION = "application"; - - public static final String CALLBACK_UI = "ui"; - - public static final String CALLBACK_SHORTCUT = "shortcut"; - - protected final MainUI mainUI; - - public TuttiConfigUI(MainUI mainUI) { - this.mainUI = mainUI; - } - - public void createUI() { - - TuttiApplicationConfig config = mainUI.getHandler().getContext().getConfig(); - - ConfigUIHelper helper = new ConfigUIHelper(config.getApplicationConfig()); - - helper.registerCallBack( - CALLBACK_UI, n_("tutti.action.reload.ui"), - SwingUtil.createActionIcon("reload-ui"), - new Runnable() { - - @Override - public void run() { - - //FIXME Should be a long action? - reloadUI(); - } - } - ).registerCallBack( - CALLBACK_APPLICATION, n_("tutti.action.reload.application"), - SwingUtil.createActionIcon("reload-application"), - new Runnable() { - - @Override - public void run() { - - //FIXME Should be a long action? - reloadApplication(); - } - } - ).registerCallBack( - CALLBACK_SHORTCUT, n_("tutti.action.reload.actions"), - SwingUtil.createActionIcon("reload-shortcut"), - new Runnable() { - - @Override - public void run() { - - //FIXME Should be a long action? - reloadShortcuts(); - } - } - ); - - // APPLICATION - - helper.addCategory(n_("tutti.config.category.applications"), - n_("tutti.config.category.applications.description"), - CALLBACK_APPLICATION) - .addOption(TuttiServiceConfigOption.DATA_DIRECTORY) - .addOption(TuttiServiceConfigOption.SITE_URL) - .addOption(TuttiApplicationConfigOption.UI_CONFIG_FILE) - .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE); - - TuttiUIContext context = mainUI.getHandler().getContext(); - if (context.isDbLoaded()) { - VesselTableCell vesselTableCellComponent = new VesselTableCell(context); - helper.addOption(TuttiApplicationConfigOption.TREMIE_CAROUSSEL_VESSEL_ID) - .setOptionEditor(vesselTableCellComponent.getNewTableCellEditor()) - .setOptionRenderer(vesselTableCellComponent.getNewTableCellRenderer()); - } - - // UI - - helper.addCategory(n_("tutti.config.category.ui"), - n_("tutti.config.category.ui.description"), - CALLBACK_UI) - .addOption(TuttiApplicationConfigOption.COLOR_ROW_INVALID) - .addOption(TuttiApplicationConfigOption.COLOR_ROW_READ_ONLY) - .addOption(TuttiApplicationConfigOption.COLOR_CELL_WITH_VALUE) - .addOption(TuttiApplicationConfigOption.COLOR_ROW_TO_CONFIRM) - .addOption(TuttiApplicationConfigOption.COLOR_COMPUTED_WEIGHTS) - .addOption(TuttiApplicationConfigOption.COLOR_BLOCKING_LAYER) - .addOption(TuttiApplicationConfigOption.DATE_FORMAT) - .addOption(TuttiApplicationConfigOption.COORDINATE_EDITOR_TYPE); - - // SHORTCUT - - helper.addCategory(n_("tutti.config.category.shortcuts"), - n_("tutti.config.category.shortcuts.description"), - CALLBACK_SHORTCUT) - .addOption(TuttiApplicationConfigOption.SHORTCUT_CLOSE_POPUP); - - helper.setFinalizer(new MainCallBackFinalizer(CALLBACK_APPLICATION)); - - ConfigUI configUI = helper.buildUI( - mainUI, - n_("tutti.config.category.applications")); - - helper.displayUI(mainUI, false); - mainUI.getHandler().getContext().getSwingSession().add(configUI); - } - - protected void reloadApplication() { - MainUIHandler handler = mainUI.getHandler(); - - TuttiUIAction<ReloadTuttiAction> action = - handler.createUIAction(null, ReloadTuttiAction.class); - action.actionPerformed(null); - } - - protected void reloadUI() { - mainUI.getHandler().reloadUI(); - } - - protected void reloadShortcuts() { - mainUI.getHandler().reloadUI(); - } -} 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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.css 2013-03-15 00:32:22 UTC (rev 627) @@ -45,6 +45,8 @@ text: "tutti.action.configuration"; toolTipText: "tuttihelp.main.action.configuration.tip"; mnemonic: C; + enabled: {model.getScreen() != TuttiScreen.CONFIG}; + _tuttiAction: {ShowConfigAction.class}; _help: {"tuttihelp.main.menu.action.configuration.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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUI.jaxx 2013-03-15 00:32:22 UTC (rev 627) @@ -65,8 +65,7 @@ <!-- menu --> <JMenuBar id='menu'> <JMenu id='menuFile'> - <JMenuItem id='menuFileConfiguration' - onActionPerformed="handler.showConfig()"/> + <JMenuItem id='menuFileConfiguration'/> <JMenuItem id='menuActionUpdate'/> <JSeparator/> <JMenuItem id='menuActionManageDb'/> 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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/MainUIHandler.java 2013-03-15 00:32:22 UTC (rev 627) @@ -33,7 +33,7 @@ import fr.ifremer.tutti.ui.swing.TuttiScreen; import fr.ifremer.tutti.ui.swing.TuttiUIContext; import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; -import fr.ifremer.tutti.ui.swing.config.TuttiConfigUI; +import fr.ifremer.tutti.ui.swing.content.config.TuttiConfigUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUI; import fr.ifremer.tutti.ui.swing.content.cruise.EditCruiseUIHandler; import fr.ifremer.tutti.ui.swing.content.db.DbManagerUI; @@ -254,12 +254,6 @@ reloadUI(); } - public void showConfig() { - - TuttiConfigUI configUI = new TuttiConfigUI(ui); - configUI.createUI(); - } - public void showAbout() { ApplicationConfig applicationConfig = @@ -422,6 +416,13 @@ Icon icon; switch (screen) { + case CONFIG: + + screenUI = new TuttiConfigUI(ui); + screenTitle = _("tutti.title.config"); + icon = ui.getMenuFileConfiguration().getIcon(); + break; + default: case MANAGE_DB: Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowConfigAction.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowConfigAction.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowConfigAction.java 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,40 @@ +package fr.ifremer.tutti.ui.swing.content; + +/* + * #%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.ui.swing.TuttiScreen; + +/** + * To show config screen. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class ShowConfigAction extends AbstractChangeScreenAction { + + public ShowConfigAction(MainUIHandler handler) { + super(handler, true, TuttiScreen.CONFIG); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/ShowConfigAction.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,139 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%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.referential.Caracteristic; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import jaxx.runtime.SwingUtil; + +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.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class SampleOrderButton extends JToggleButton { + + private static final long serialVersionUID = 1L; + + protected final SampleOrderEditorUI popup; + + protected Point popupPosition = null; + + protected boolean popupMoving; + + public SampleOrderButton(TuttiUIContext context, + List<Caracteristic> model) { + + setIcon(SwingUtil.createActionIcon("edit-comment")); + setToolTipText(_("tutti.action.comment.tip")); + + popup = new SampleOrderEditorUI(context); + + 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()) { + if (!popup.isVisible()) { + popup.openEditor(SampleOrderButton.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 void init() { + popup.getHandler().init(); + } + + public void init(List<Caracteristic> model) { + setBean(model); + init(); + } + + public void onCloseUI() { + setSelected(false); + } + + public List<Caracteristic> getBean() { + return popup.getListModel().toList(); + } + + protected void setBean(List<Caracteristic> model) { + popup.setBean(model); + init(); + } + +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderButton.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,42 @@ +/* + * #%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% + */ +#samplingOrderEditorDialog { + undecorated: true; + alwaysOnTop: true; +} + +#sampleOrderEditorTopPanel { + title: "tutti.title.sampleOrder"; +} + +#list { + model: {listModel}; + selectionMode: {ListSelectionModel.SINGLE_SELECTION}; +} + +#closeButton { + actionIcon: close; + text: "tutti.action.close"; + mnemonic: F; +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,77 @@ +<!-- + #%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% + --> +<JDialog id='samplingOrderEditorDialog' layout='{new BorderLayout()}'> + + <import> + fr.ifremer.tutti.persistence.entities.referential.Caracteristic + fr.ifremer.tutti.ui.swing.TuttiUIContext + + jaxx.runtime.swing.model.JaxxDefaultListModel + + org.jdesktop.swingx.JXTitledPanel + javax.swing.JComponent + javax.swing.ListSelectionModel + </import> + + <script><![CDATA[ + +public SampleOrderEditorUI(TuttiUIContext context) { + super(context.getMainUI()); + setContextValue(context); + SampleOrderEditorUIHandler handler = new SampleOrderEditorUIHandler(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 --> + <java.util.List id='bean' genericType='Caracteristic' javaBean='null'/> + + <SampleOrderEditorUIHandler id='handler' + initializer='getContextValue(SampleOrderEditorUIHandler.class)'/> + + <JaxxDefaultListModel id='listModel' genericType='Caracteristic'/> + + <JXTitledPanel id='sampleOrderEditorTopPanel' + constraints='BorderLayout.CENTER'> + + <JScrollPane> + <JList id='list'/> + </JScrollPane> + + </JXTitledPanel> +</JDialog> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUI.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,239 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%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.referential.Caracteristic; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.ComponentMover; +import jaxx.runtime.swing.ComponentResizer; +import jaxx.runtime.swing.model.JaxxDefaultListModel; +import jaxx.runtime.swing.renderer.MultiDecoratorListCellRenderer; +import org.nuiton.util.decorator.JXPathDecorator; + +import javax.swing.AbstractAction; +import javax.swing.Action; +import javax.swing.ImageIcon; +import javax.swing.JButton; +import javax.swing.JComponent; +import javax.swing.JList; +import javax.swing.JRootPane; +import javax.swing.JToolBar; +import javax.swing.KeyStroke; +import java.awt.Component; +import java.awt.event.ActionEvent; +import java.awt.event.KeyAdapter; +import java.awt.event.KeyEvent; +import java.util.List; + +import static org.nuiton.i18n.I18n._; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class SampleOrderEditorUIHandler { + + private static final int DEFAULT_EDITOR_WIDTH = 300; + + private static final int DEFAULT_EDITOR_HEIGHT = 200; + + public static final String CLOSE_DIALOG_ACTION = "closeDialog"; + + public static final String SHOW_DIALOG_ACTION = "showDialog"; + + protected final TuttiUIContext context; + + private final SampleOrderEditorUI ui; + + public SampleOrderEditorUIHandler(TuttiUIContext context, + SampleOrderEditorUI ui) { + this.context = context; + this.ui = ui; + } + + protected void beforeInitUI() { + } + + protected void afterInitUI() { + + ui.setResizable(true); + + ui.setSize(DEFAULT_EDITOR_WIDTH, DEFAULT_EDITOR_HEIGHT); + ui.pack(); + + 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 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.closeCommentEditor.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.getSampleOrderEditorTopPanel().setRightDecoration(jToolBar); + + JXPathDecorator<Caracteristic> decorator = + (JXPathDecorator<Caracteristic>) context.getDecoratorService().getDecoratorByType( + Caracteristic.class, DecoratorService.CARACTERISTIC_PARAMETER_ONLY); + ui.getList().setCellRenderer(new MultiDecoratorListCellRenderer(decorator)); + + ui.getList().addKeyListener(new KeyAdapter() { + + JaxxDefaultListModel<Caracteristic> listModel = ui.getListModel(); + + @Override + public void keyReleased(KeyEvent e) { + super.keyReleased(e); + JList list = (JList) e.getSource(); + + if (!list.isSelectionEmpty()) { + + int selectedIndex = list.getSelectedIndex(); + + Integer newSelectedIndex = null; + + if (e.getKeyCode() == KeyEvent.VK_DOWN) { + + if (selectedIndex < listModel.size() ) { + + // can move to down + newSelectedIndex = selectedIndex - 1; + + Caracteristic remove = listModel.remove(newSelectedIndex); + + listModel.insertElementAt(remove, selectedIndex); + } + } else if (e.getKeyCode() == KeyEvent.VK_UP) { + + if (selectedIndex >= 0) { + + // can move to up + newSelectedIndex = selectedIndex + 1; + + Caracteristic remove = listModel.remove(newSelectedIndex); + listModel.insertElementAt(remove, selectedIndex); + } + } + + if (newSelectedIndex != null) { + list.setSelectedIndex(selectedIndex); + } + } + + } + }); + } + + 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() { + + List<Caracteristic> bean = ui.getBean(); + ui.getListModel().setAllElements(bean); + } + + 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); + } +} \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderEditorUIHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,198 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%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.google.common.base.Joiner; +import com.google.common.collect.Lists; +import com.google.common.collect.Maps; +import fr.ifremer.tutti.TuttiTechnicalException; +import fr.ifremer.tutti.persistence.entities.data.SampleCategoryEnum; +import fr.ifremer.tutti.persistence.entities.referential.Caracteristic; +import fr.ifremer.tutti.service.DecoratorService; +import fr.ifremer.tutti.service.PersistenceService; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import org.nuiton.util.decorator.Decorator; + +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.table.DefaultTableCellRenderer; +import javax.swing.table.TableCellEditor; +import javax.swing.table.TableCellRenderer; +import java.awt.Color; +import java.awt.Component; +import java.util.List; +import java.util.Map; + +/** + * To edit sampling oder ids in a table cell. + * + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class SampleOrderIdsTableCell { + + protected final Decorator<Caracteristic> decorator; + + protected final Map<Integer, SampleCategoryEnum> mapping; + + protected final Map<Integer, Caracteristic> caracteristicMap; + + private final TuttiUIContext context; + + public SampleOrderIdsTableCell(TuttiUIContext context) { + + this.context = context; + this.mapping = SampleCategoryEnum.toIdMapping(); + this.caracteristicMap = Maps.newTreeMap(); + + PersistenceService persistenceService = context.getPersistenceService(); + this.caracteristicMap.put(SampleCategoryEnum.size.getFieldValue(), persistenceService.getSizeCategoryCaracteristic()); + this.caracteristicMap.put(SampleCategoryEnum.sex.getFieldValue(), persistenceService.getSexCaracteristic()); + this.caracteristicMap.put(SampleCategoryEnum.maturity.getFieldValue(), persistenceService.getMaturityCaracteristic()); + this.caracteristicMap.put(SampleCategoryEnum.age.getFieldValue(), persistenceService.getAgeCaracteristic()); + + this.decorator = context.getDecoratorService().getDecoratorByType( + Caracteristic.class, + DecoratorService.CARACTERISTIC_PARAMETER_ONLY); + } + + public TableCellEditor getNewTableCellEditor() { + return new SampleOrderCellEditor(context); + } + + public TableCellRenderer getNewTableCellRenderer() { + return new SamplingOrderIdsTableCellRenderer(); + } + + protected class SamplingOrderIdsTableCellRenderer extends DefaultTableCellRenderer { + + private static final long serialVersionUID = 1L; + + @Override + public Component getTableCellRendererComponent(JTable table, + Object value, + boolean isSelected, + boolean hasFocus, + int row, int column) { + + Integer[] ids = (Integer[]) value; + List<String> texts = Lists.newArrayListWithCapacity(ids.length); + for (Integer id : ids) { + Caracteristic caracteristic = caracteristicMap.get(id); + texts.add(decorator.toString(caracteristic)); + } + String text = Joiner.on(",").join(texts); + return super.getTableCellRendererComponent(table, text, isSelected, hasFocus, row, column); + } + } + + /** + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ + public class SampleOrderCellEditor extends AbstractCellEditor implements TableCellEditor { + + private static final long serialVersionUID = 1L; + + protected Integer rowIndex; + + protected Integer columnIndex; + + protected final SampleOrderButton editorButton; + + protected SampleOrderCellEditor(TuttiUIContext context) { + + this.editorButton = new SampleOrderButton(context, null); + this.editorButton.setBorder(new LineBorder(Color.BLACK)); + addCellEditorListener(new CellEditorListener() { + @Override + public void editingStopped(ChangeEvent e) { + editorButton.setSelected(false); + } + + @Override + public void editingCanceled(ChangeEvent e) { + editorButton.setSelected(false); + } + }); + } + + @Override + public Component getTableCellEditorComponent(JTable table, + Object value, + boolean isSelected, + int row, + int column) { + Integer[] ids = (Integer[]) value; + + rowIndex = row; + columnIndex = column; + + List<Caracteristic> result = Lists.newArrayList(); + for (Integer id : ids) { + SampleCategoryEnum sampleCategoryEnum = mapping.get(id); + if (sampleCategoryEnum == null) { + throw new TuttiTechnicalException("caracteristic with id '" + id + "' is not designed form sampling."); + } + Caracteristic caracteristic = caracteristicMap.get(id); + result.add(caracteristic); + } + + editorButton.init(result); + + return editorButton; + } + + @Override + public Object getCellEditorValue() { + + List<Integer> l = Lists.newArrayList(); + List<Caracteristic> model = editorButton.getBean(); + for (Caracteristic caracteristic : model) { + String id = caracteristic.getId(); + l.add(Integer.valueOf(id)); + } + return l.toArray(new Integer[l.size()]); + } + + @Override + public boolean stopCellEditing() { + boolean b = super.stopCellEditing(); + if (b) { + editorButton.setSelected(false); + } + return b; + } + + @Override + public void cancelCellEditing() { + editorButton.setSelected(false); + super.cancelCellEditing(); + } + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/SampleOrderIdsTableCell.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.css (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.css 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,27 @@ +/* + * #%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% + */ + +#configTopPanel { + _help: {"tuttihelp.config.help"}; +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.css ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,63 @@ +<!-- + #%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% + --> +<JPanel id='configTopPanel' layout='{new BorderLayout()}' decorator='help' + implements='fr.ifremer.tutti.ui.swing.util.TuttiUI<TuttiUIContext, TuttiConfigUIHandler>'> + + <import> + fr.ifremer.tutti.ui.swing.TuttiHelpBroker + fr.ifremer.tutti.ui.swing.TuttiUIContext + fr.ifremer.tutti.ui.swing.util.TuttiUI + fr.ifremer.tutti.ui.swing.util.ActionListCellRenderer + + static org.nuiton.i18n.I18n._ + </import> + + <script><![CDATA[ + + protected TuttiUIContext uiContext; + + public TuttiConfigUI(TuttiUI parentUI) { + JAXXUtil.initContext(this, parentUI); + uiContext = parentUI.getHandler().getContext(); + TuttiConfigUIHandler handler = + new TuttiConfigUIHandler(parentUI, this); + setContextValue(handler); + handler.beforeInitUI(); + } + + protected void $afterCompleteSetup() { + handler.afterInitUI(); + } + ]]></script> + + <TuttiConfigUIHandler id='handler' + initializer='getContextValue(TuttiConfigUIHandler.class)'/> + + <TuttiUIContext id='model' + initializer='getContextValue(TuttiUIContext.class)'/> + + <TuttiHelpBroker id='broker' + constructorParams='"tuttihelp.selectCruise.help"'/> + +</JPanel> \ No newline at end of file Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUI.jaxx ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java 2013-03-15 00:32:22 UTC (rev 627) @@ -0,0 +1,210 @@ +package fr.ifremer.tutti.ui.swing.content.config; + +/* + * #%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.service.config.TuttiServiceConfigOption; +import fr.ifremer.tutti.ui.swing.TuttiUIContext; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfig; +import fr.ifremer.tutti.ui.swing.config.TuttiApplicationConfigOption; +import fr.ifremer.tutti.ui.swing.content.MainUIHandler; +import fr.ifremer.tutti.ui.swing.content.ReloadTuttiAction; +import fr.ifremer.tutti.ui.swing.util.AbstractTuttiUIHandler; +import fr.ifremer.tutti.ui.swing.util.TuttiUI; +import fr.ifremer.tutti.ui.swing.util.action.TuttiUIAction; +import fr.ifremer.tutti.ui.swing.util.editor.VesselTableCell; +import jaxx.runtime.SwingUtil; +import jaxx.runtime.swing.config.ConfigUI; +import jaxx.runtime.swing.config.ConfigUIHelper; +import jaxx.runtime.swing.config.model.MainCallBackFinalizer; +import jaxx.runtime.validator.swing.SwingValidator; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; + +import javax.swing.table.TableCellEditor; +import java.awt.BorderLayout; + +import static org.nuiton.i18n.I18n.n_; + +/** + * @author tchemit <chemit@codelutin.com> + * @since 1.1 + */ +public class TuttiConfigUIHandler extends AbstractTuttiUIHandler<TuttiUIContext, TuttiConfigUI> { + + /** Logger. */ + private static final Log log = + LogFactory.getLog(TuttiConfigUIHandler.class); + + + public static final String CALLBACK_APPLICATION = "application"; + + public static final String CALLBACK_UI = "ui"; + + public static final String CALLBACK_SHORTCUT = "shortcut"; + + public TuttiConfigUIHandler(TuttiUI<?, ?> parentUI, TuttiConfigUI ui) { + super(parentUI.getHandler().getContext(), ui); + } + + @Override + public SwingValidator<TuttiUIContext> getValidator() { + return null; + } + + @Override + public void beforeInitUI() { + + } + + @Override + public void afterInitUI() { + + initUI(ui); + + TuttiApplicationConfig config = getConfig(); + + ConfigUIHelper helper = new ConfigUIHelper(config.getApplicationConfig()); + + helper.registerCallBack( + CALLBACK_UI, n_("tutti.action.reload.ui"), + SwingUtil.createActionIcon("reload-ui"), + new Runnable() { + + @Override + public void run() { + reloadUI(); + } + } + ).registerCallBack( + CALLBACK_APPLICATION, n_("tutti.action.reload.application"), + SwingUtil.createActionIcon("reload-application"), + new Runnable() { + + @Override + public void run() { + reloadApplication(); + } + } + ).registerCallBack( + CALLBACK_SHORTCUT, n_("tutti.action.reload.actions"), + SwingUtil.createActionIcon("reload-shortcut"), + new Runnable() { + + @Override + public void run() { + reloadShortcuts(); + } + } + ); + + // APPLICATION + + helper.addCategory(n_("tutti.config.category.applications"), + n_("tutti.config.category.applications.description"), + CALLBACK_UI) + .addOption(TuttiServiceConfigOption.DATA_DIRECTORY) + .addOption(TuttiServiceConfigOption.SITE_URL) + .addOption(TuttiApplicationConfigOption.TUTTI_HELP_DIRECTORY) + .addOption(TuttiApplicationConfigOption.UI_CONFIG_FILE) + .addOption(TuttiApplicationConfigOption.TOTAL_SORTED_WEIGHTS_DIFFERENCE_RATE); + + if (context.isDbLoaded()) { + + VesselTableCell vesselTableCellComponent = new VesselTableCell(context); + helper.addOption(TuttiApplicationConfigOption.TREMIE_CAROUSSEL_VESSEL_ID) + .setOptionEditor(vesselTableCellComponent.getNewTableCellEditor()) + .setOptionRenderer(vesselTableCellComponent.getNewTableCellRenderer()); + + SampleOrderIdsTableCell comp = new SampleOrderIdsTableCell(context); + + TableCellEditor sampleOrderEditor = comp.getNewTableCellEditor(); + helper.addOption(TuttiApplicationConfigOption.SAMPLING_CATEGORY_ORDER_IDS) + .setOptionEditor(sampleOrderEditor) + .setOptionRenderer(comp.getNewTableCellRenderer()); + } + + // UI + + helper.addCategory(n_("tutti.config.category.ui"), + n_("tutti.config.category.ui.description"), + CALLBACK_UI) + .addOption(TuttiApplicationConfigOption.COLOR_ROW_INVALID) + .addOption(TuttiApplicationConfigOption.COLOR_ROW_READ_ONLY) + .addOption(TuttiApplicationConfigOption.COLOR_CELL_WITH_VALUE) + .addOption(TuttiApplicationConfigOption.COLOR_ROW_TO_CONFIRM) + .addOption(TuttiApplicationConfigOption.COLOR_COMPUTED_WEIGHTS) + .addOption(TuttiApplicationConfigOption.COLOR_BLOCKING_LAYER) + .addOption(TuttiApplicationConfigOption.DATE_FORMAT) + .addOption(TuttiApplicationConfigOption.COORDINATE_EDITOR_TYPE); + + // SHORTCUT + + helper.addCategory(n_("tutti.config.category.shortcuts"), + n_("tutti.config.category.shortcuts.description"), + CALLBACK_SHORTCUT) + .addOption(TuttiApplicationConfigOption.SHORTCUT_CLOSE_POPUP); + + helper.setFinalizer(new MainCallBackFinalizer(CALLBACK_APPLICATION)); + + helper.setCloseAction(new Runnable() { + @Override + public void run() { + + doAction(getContext().getMainUI().getMenuActionSelectCruise(), + null); + } + }); + ConfigUI configUI = helper.buildUI( + getUI(), + n_("tutti.config.category.applications")); + + configUI.getHandler().setTopContainer(getUI()); + getUI().add(configUI, BorderLayout.CENTER); + } + + @Override + public void onCloseUI() { + if (log.isDebugEnabled()) { + log.debug("closing: " + ui); + } + } + + protected void reloadApplication() { + MainUIHandler handler = getContext().getMainUI().getHandler(); + + TuttiUIAction<ReloadTuttiAction> action = + handler.createUIAction(null, ReloadTuttiAction.class); + action.actionPerformed(null); + } + + protected void reloadUI() { + getContext().getMainUI().getHandler().reloadUI(); + } + + protected void reloadShortcuts() { + getContext().getMainUI().getHandler().reloadUI(); + } + +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/config/TuttiConfigUIHandler.java ___________________________________________________________________ Added: svn:keywords + Author Date Id Revision HeadURL Added: svn:eol-style + native Modified: trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-03-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_en_GB.properties 2013-03-15 00:32:22 UTC (rev 627) @@ -351,6 +351,7 @@ tutti.option.launch.mode.description= tutti.option.programId.description= tutti.option.protocolId.description= +tutti.option.samplingCategoryOrderIds.description= tutti.option.tremieCarousselVessel.description= tutti.option.ui.autoPopupNumberEditor.description= tutti.option.ui.color.blockingLayer.description= @@ -459,6 +460,7 @@ tutti.title.choose.protocolSpeciesExportFile= tutti.title.choose.protocolSpeciesImportFile= tutti.title.comment= +tutti.title.config= tutti.title.create.cruise= tutti.title.create.program= tutti.title.create.protocol= @@ -475,6 +477,8 @@ tutti.title.noSelectedProgram= tutti.title.noSelectedProtocol= tutti.title.nodb= +tutti.title.sampleOrder= +tutti.title.samplingOrder= tutti.title.selectSpecies= tutti.title.selectedCruise= tutti.title.selectedProgram= @@ -550,7 +554,7 @@ tutti.validator.warning.longitude.outOfBounds= tutti.validator.warning.longitude.second.outOfBounds= tutti.warn.invalid.batch.model= -tutti.warn.invalid.program= +tutti.warn.invalid.selected.data= tuttihelp.createSpeciesBatch.action.addSpecies.tip= tuttihelp.createSpeciesBatch.action.cancel.tip= tuttihelp.createSpeciesBatch.action.save.tip= 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-15 00:30:46 UTC (rev 626) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2013-03-15 00:32:22 UTC (rev 627) @@ -351,6 +351,7 @@ tutti.option.launch.mode.description=Mode de démarrage de l'application tutti.option.programId.description=Identifiant de la dernière série de campagne utilisée tutti.option.protocolId.description=Identifiant du dernier protocole utilisé +tutti.option.samplingCategoryOrderIds.description=Ordre des catégories d'échantillonnage tutti.option.tremieCarousselVessel.description=Navire ayant un caroussel et un trémie (Thalassa) tutti.option.ui.autoPopupNumberEditor.description=Toujours afficher le pavé numérique lors de l'édition d'un nombre tutti.option.ui.color.blockingLayer.description=Couleur utilisée pour bloquer l'interface lors d'une action longue @@ -459,6 +460,7 @@ tutti.title.choose.protocolSpeciesExportFile=Exporter les espèces tutti.title.choose.protocolSpeciesImportFile=Importer les espèces tutti.title.comment=Commentaire +tutti.title.config=Configuration tutti.title.create.cruise=Créer une nouvelle campagne tutti.title.create.program=Créer une nouvelle série de campagne tutti.title.create.protocol=Créer un nouveau protocol de saisie @@ -475,6 +477,7 @@ tutti.title.noSelectedProgram=Pas de série de campagne sélectionné tutti.title.noSelectedProtocol=Pas de protocol sélectionné tutti.title.nodb=Pas de base chargée +tutti.title.sampleOrder=Catégorie d'échantillonnage tutti.title.selectSpecies=Choisissez une espèce tutti.title.selectedCruise=Campagne %s tutti.title.selectedProgram=Série de campagne %s @@ -550,7 +553,7 @@ 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.warn.invalid.batch.model=L'arbre d'échantillonage n'est pas compatible. Les captures ne seront pas visibles. -tutti.warn.invalid.program=La série de campagne sélectionnée ne possède pas de zone, ses captures ne peuvent pas être éditées. +tutti.warn.invalid.selected.data=Les données sélectionnées ne sont pas valides, impossible de saisir ou valider les captures. tuttihelp.createSpeciesBatch.action.addSpecies.tip=Sélectionner une autre espèce tuttihelp.createSpeciesBatch.action.cancel.tip= tuttihelp.createSpeciesBatch.action.save.tip=