r32 - in trunk/tutti-ui-swing/src/main: java/fr/ifremer/tutti/ui/swing java/fr/ifremer/tutti/ui/swing/content/catches/species java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency java/fr/ifremer/tutti/ui/swing/util resources/i18n
Author: tchemit Date: 2012-12-06 18:43:45 +0100 (Thu, 06 Dec 2012) New Revision: 32 Url: http://forge.codelutin.com/projects/tutti/repository/revisions/32 Log: display frequency ui + move ui util class to his natural package Added: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java Removed: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIUtil.java Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTreeModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.css trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.jaxx trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java 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/AbstractTuttiUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/AbstractTuttiUIHandler.java 2012-12-06 17:43:45 UTC (rev 32) @@ -31,6 +31,7 @@ import fr.ifremer.tutti.persistence.entities.TuttiEntities; import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.ui.swing.config.TuttiConfig; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.swing.OneClicListSelectionModel; import jaxx.runtime.swing.editor.NumberEditor; import jaxx.runtime.swing.editor.TimeEditor; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/MainUIHandler.java 2012-12-06 17:43:45 UTC (rev 32) @@ -34,6 +34,7 @@ import fr.ifremer.tutti.ui.swing.content.campaign.EditSurveyUI; import fr.ifremer.tutti.ui.swing.content.campaign.SelectCampaignUI; import fr.ifremer.tutti.ui.swing.content.catches.CatchesUI; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.AboutPanel; import jaxx.runtime.swing.ErrorDialogUI; Deleted: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIUtil.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIUtil.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIUtil.java 2012-12-06 17:43:45 UTC (rev 32) @@ -1,257 +0,0 @@ -package fr.ifremer.tutti.ui.swing; - -/* - * #%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 com.google.common.base.Preconditions; -import fr.ifremer.tutti.service.TuttiServiceTechnicalException; -import fr.ifremer.tutti.ui.swing.util.TuttiColorHighlighter; -import jaxx.runtime.JAXXUtil; -import jaxx.runtime.SwingUtil; -import org.apache.commons.beanutils.PropertyUtils; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; -import org.jdesktop.swingx.decorator.HighlightPredicate; -import org.jdesktop.swingx.decorator.Highlighter; -import org.nuiton.util.FileUtil; - -import javax.swing.Action; -import javax.swing.JComponent; -import javax.swing.JDialog; -import javax.swing.JFrame; -import javax.swing.JOptionPane; -import javax.swing.JRootPane; -import javax.swing.KeyStroke; -import javax.swing.UIManager; -import java.awt.Color; -import java.awt.Component; -import java.awt.Cursor; -import java.awt.Dimension; -import java.awt.event.WindowAdapter; -import java.awt.event.WindowEvent; -import java.io.File; - -/** - * Created: 14/06/12 - * - * @author tchemit <chemit@codelutin.com> - * @since 0.1 - */ -public final class TuttiUIUtil { - - /** Logger. */ - private static final Log log = LogFactory.getLog(TuttiUIUtil.class); - - private TuttiUIUtil() { - // never instanciate util class - } - - public static JDialog openInDialog(JComponent ui, - JFrame frame, - String title, - Action closeAction) { - return openInDialog(ui, frame, title, closeAction, null); - } - - public static JDialog openInDialog(JComponent ui, - JFrame frame, - String title, - Action closeAction, - Dimension dim) { - - JDialog result = new JDialog(frame, false); - result.setTitle(title); - result.add(ui); - result.setResizable(true); - if (dim == null) { - result.setSize(550, 450); - } else { - result.setSize(dim); - } - if (closeAction != null) { - JRootPane rootPane = result.getRootPane(); - rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close"); - rootPane.getActionMap().put("close", closeAction); - } - result.addWindowListener(new WindowAdapter() { - - @Override - public void windowClosed(WindowEvent e) { - Component ui = (Component) e.getSource(); - if (log.isInfoEnabled()) { - log.info("Destroy ui " + ui); - } - JAXXUtil.destroy(ui); - } - }); - SwingUtil.center(frame, result); - result.setVisible(true); - return result; - } - - /** - * Choisir un fichier via un sélecteur graphique de fichiers. - * - * @param parent le component swing appelant le controle - * @param title le titre du dialogue de sélection - * @param buttonLabel le label du boutton d'acceptation - * @param incoming le fichier de base à utilier - * @param filters les filtres + descriptions sur le sélecteur de - * fichiers - * @return le fichier choisi ou le fichier incoming si l'opération a été - * annulée - */ - public static File chooseFile(Component parent, - String title, - String buttonLabel, - File incoming, - String... filters) { - File oldBasedir = FileUtil.getCurrentDirectory(); - if (incoming != null) { - File basedir; - if (incoming.isFile()) { - basedir = incoming.getParentFile(); - } else { - basedir = incoming; - } - if (basedir.exists()) { - FileUtil.setCurrentDirectory(basedir); - } - } - File file = FileUtil.getFile(title, buttonLabel, parent, filters); - if (log.isDebugEnabled()) { - log.debug(title + " : " + file); - } - FileUtil.setCurrentDirectory(oldBasedir); - File result = file == null ? incoming : file; - return result; - } - - /** - * Choisir un répertoire via un sélecteur graphique de fichiers. - * - * @param parent le component swing appelant le controle - * @param title le titre de la boite de dialogue de sléection - * @param buttonLabel le label de l'action d'acceptation - * @param incoming le fichier de base à utiliser - * @return le répertoire choisi ou le répertoire incoming si l'opération a - * été annulée - */ - public static File chooseDirectory(Component parent, - String title, - String buttonLabel, - File incoming) { - File oldBasedir = FileUtil.getCurrentDirectory(); - if (incoming != null) { - File basedir; - if (incoming.isFile()) { - basedir = incoming.getParentFile(); - } else { - basedir = incoming; - } - if (basedir.exists()) { - FileUtil.setCurrentDirectory(basedir); - } - } - String file = FileUtil.getDirectory(parent, title, buttonLabel); - if (log.isDebugEnabled()) { - log.debug(title + " : " + file); - } - FileUtil.setCurrentDirectory(oldBasedir); - return file == null ? incoming : new File(file); - } - - public static void updateBusyState(Component ui, boolean busy) { - if (busy) { - // ui bloquee - if (log.isDebugEnabled()) { - log.debug("block ui in busy mode"); - } - ui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); - } else { - // ui debloquee - if (log.isDebugEnabled()) { - log.debug("unblock ui in none busy mode"); - } - ui.setCursor(Cursor.getDefaultCursor()); - } - } - - public static void showSuccessMessage(Component ui, String message) { - JOptionPane.showMessageDialog( - ui, - message, - "Success", - JOptionPane.INFORMATION_MESSAGE, - UIManager.getIcon("info") - ); - } - - public static void showErrorMessage(Component ui, String message) { - JOptionPane.showMessageDialog( - ui, - message, - "Error", - JOptionPane.ERROR_MESSAGE, - UIManager.getIcon("error") - ); - } - - public static boolean askQuestion(Component ui, String message) { - int i = JOptionPane.showConfirmDialog( - ui, - message, - "Question?", - JOptionPane.YES_NO_OPTION); - return i == JOptionPane.YES_OPTION; - } - - public static void setProperty(Object bean, String property, Object value) { - Preconditions.checkNotNull(bean); - Preconditions.checkNotNull(property); - try { - PropertyUtils.setSimpleProperty(bean, property, value); - } catch (Exception e) { - throw new TuttiServiceTechnicalException("Could not set property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e); - } - } - - public static Object getProperty(Object bean, String property) { - Preconditions.checkNotNull(bean); - Preconditions.checkNotNull(property); - try { - return PropertyUtils.getSimpleProperty(bean, property); - } catch (Exception e) { - throw new TuttiServiceTechnicalException("Could not get property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e); - } - } - - public static Highlighter newBackgroundColorHighlighter(HighlightPredicate predicate, Color color) { - return new TuttiColorHighlighter(predicate, color, false); - } - - public static Highlighter newForegroundColorHighlighter(HighlightPredicate predicate, Color color) { - return new TuttiColorHighlighter(predicate, color, true); - } -} Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/FrequencyCellComponent.java 2012-12-06 17:43:45 UTC (rev 32) @@ -25,6 +25,8 @@ */ import com.google.common.base.Preconditions; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.content.catches.species.frequency.SpeciesFrequencyUI; import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -37,11 +39,14 @@ import javax.swing.table.TableCellRenderer; import java.awt.Color; import java.awt.Component; +import java.awt.Frame; import java.awt.event.KeyAdapter; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; +import static org.nuiton.i18n.I18n._; + /** * Component to render and edit frequency stuff from batch table. * @@ -68,8 +73,8 @@ return new FrequencyCellRenderer(); } - public static TableCellEditor newEditor() { - return new FrequencyCellEditor(); + public static TableCellEditor newEditor(SpeciesFrequencyUI ui) { + return new FrequencyCellEditor(ui); } public static class FrequencyCellEditor extends AbstractCellEditor implements TableCellEditor { @@ -78,6 +83,10 @@ protected final FrequencyCellComponent component; + protected final SpeciesFrequencyUI ui; + + protected Frame frame; + protected SpeciesBatchTableModel tableModel; protected SpeciesBatchColumnIdentifier columnIdentifier; @@ -86,7 +95,8 @@ protected Integer rowIndex; - public FrequencyCellEditor() { + public FrequencyCellEditor(SpeciesFrequencyUI ui) { + this.ui = ui; component = new FrequencyCellComponent(); component.setBorder(new LineBorder(Color.BLACK)); component.addKeyListener(new KeyAdapter() { @@ -121,6 +131,15 @@ if (log.isInfoEnabled()) { log.info("Will edit frequencies for row: " + rowIndex); } + + if (frame == null) { + frame = SwingUtil.getParentContainer(ui, Frame.class); + } + + ui.editBatch(editRow); + + TuttiUIUtil.openInDialog(ui, frame, _("tutti.title.frequency"), true, null); + } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchColumnIdentifier.java 2012-12-06 17:43:45 UTC (rev 32) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.ui.swing.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractColumnIdentifier; import static org.nuiton.i18n.I18n.n_; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTreeModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTreeModel.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesBatchTreeModel.java 2012-12-06 17:43:45 UTC (rev 32) @@ -26,7 +26,7 @@ import com.google.common.collect.Lists; import fr.ifremer.tutti.persistence.entities.data.SpeciesBatch; -import fr.ifremer.tutti.ui.swing.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import java.io.Serializable; import java.util.List; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUI.jaxx 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUI.jaxx 2012-12-06 17:43:45 UTC (rev 32) @@ -29,6 +29,7 @@ fr.ifremer.tutti.ui.swing.TuttiUIContext fr.ifremer.tutti.ui.swing.content.catches.CatchesUI + fr.ifremer.tutti.ui.swing.content.catches.species.frequency.SpeciesFrequencyUI org.jdesktop.swingx.JXTable @@ -73,6 +74,8 @@ <field name='totalHorsVracWeight' component='totalHorsVracWeightField'/> </BeanValidator> + <SpeciesFrequencyUI id='frequencyUI' constructorParams='handler.getContext()'/> + <Table id='form' fill='both' constraints='BorderLayout.NORTH'> <!-- Poids total / Poids total vrac --> Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/SpeciesTabUIHandler.java 2012-12-06 17:43:45 UTC (rev 32) @@ -36,7 +36,7 @@ import fr.ifremer.tutti.service.DecoratorService; import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUI; -import fr.ifremer.tutti.ui.swing.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.content.catches.CatchesUI; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; import org.apache.commons.logging.Log; @@ -325,7 +325,7 @@ { // Poids calculé addColumnToModel(columnModel, - FrequencyCellComponent.newEditor(), + FrequencyCellComponent.newEditor(ui.getFrequencyUI()), FrequencyCellComponent.newRender(), SpeciesBatchColumnIdentifier.computedWeight); } @@ -333,7 +333,7 @@ { // Nombre calculé addColumnToModel(columnModel, - FrequencyCellComponent.newEditor(), + FrequencyCellComponent.newEditor(ui.getFrequencyUI()), FrequencyCellComponent.newRender(), SpeciesBatchColumnIdentifier.computedNumber); } Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyColumnIdentifier.java 2012-12-06 17:43:45 UTC (rev 32) @@ -24,7 +24,7 @@ * #L% */ -import fr.ifremer.tutti.ui.swing.TuttiUIUtil; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractColumnIdentifier; import static org.nuiton.i18n.I18n.n_; Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyTableModel.java 2012-12-06 17:43:45 UTC (rev 32) @@ -41,7 +41,7 @@ public SpeciesFrequencyTableModel(TableColumnModel columnModel) { super(columnModel); - setNoneEditableCols(SpeciesFrequencyColumnIdentifier.weight); + setNoneEditableCols(SpeciesFrequencyColumnIdentifier.computedWeight); } @Override Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.css =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.css 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.css 2012-12-06 17:43:45 UTC (rev 32) @@ -31,9 +31,9 @@ enabled:{model.isModify() && model.isValid()}; } -#cancelButton { - actionIcon:"cancel"; - text:"tutti.action.cancel"; +#closeButton { + actionIcon:"close"; + text:"tutti.action.close"; } #table { Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.jaxx =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.jaxx 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUI.jaxx 2012-12-06 17:43:45 UTC (rev 32) @@ -50,7 +50,10 @@ handler.beforeInitUI(); } - public void editBatch(SpeciesBatchRowModel row) { handler.editBatch(row); } + public void editBatch(SpeciesBatchRowModel row) { + handler.editBatch(row); + } + protected void $afterCompleteSetup() { handler.afterInitUI(); } @@ -79,8 +82,7 @@ <!-- actions --> <JPanel id='actionPanel' layout='{new GridLayout(1, 0)}' constraints='BorderLayout.SOUTH'> - <JButton id='cancelButton' onActionPerformed='handler.cancel()'/> - <JButton id='saveButton' onActionPerformed='handler.save()'/> + <JButton id='close' onActionPerformed='handler.close()'/> </JPanel> </JPanel> \ No newline at end of file Modified: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/content/catches/species/frequency/SpeciesFrequencyUIHandler.java 2012-12-06 17:43:45 UTC (rev 32) @@ -24,18 +24,19 @@ * #L% */ -import fr.ifremer.tutti.service.PersistenceService; import fr.ifremer.tutti.ui.swing.TuttiUI; import fr.ifremer.tutti.ui.swing.TuttiUIContext; -import fr.ifremer.tutti.ui.swing.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.content.catches.species.SpeciesBatchRowModel; +import fr.ifremer.tutti.ui.swing.util.TuttiUIUtil; import fr.ifremer.tutti.ui.swing.util.table.AbstractTuttiTableUIHandler; +import jaxx.runtime.SwingUtil; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTable; import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; +import javax.swing.JDialog; import javax.swing.table.TableColumnModel; import java.awt.Color; @@ -51,8 +52,6 @@ private final SpeciesFrequencyUI ui; - private final PersistenceService persistenceService; - public SpeciesFrequencyUIHandler(TuttiUIContext context, SpeciesFrequencyUI ui) { super(context, @@ -61,7 +60,6 @@ SpeciesFrequencyRowModel.PROPERTY_WEIGHT, SpeciesFrequencyRowModel.PROPERTY_COMPUTED_WEIGHT); this.ui = ui; - persistenceService = context.getService(PersistenceService.class); } @Override @@ -131,20 +129,15 @@ getModel().fromBean(row); } - public void cancel() { - if (log.isInfoEnabled()) { - log.info("Will cancel"); - } - } + public void close() { - public void save() { - if (log.isInfoEnabled()) { - log.info("Will save"); + log.info("Will close UI " + ui); } - SpeciesFrequencyUIModel model = getModel(); + ui.editBatch(null); + SwingUtil.getParentContainer(ui, JDialog.class).setVisible(false); } @Override Copied: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java (from rev 29, trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/TuttiUIUtil.java) =================================================================== --- trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java (rev 0) +++ trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.java 2012-12-06 17:43:45 UTC (rev 32) @@ -0,0 +1,258 @@ +package fr.ifremer.tutti.ui.swing.util; + +/* + * #%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 com.google.common.base.Preconditions; +import fr.ifremer.tutti.service.TuttiServiceTechnicalException; +import jaxx.runtime.JAXXUtil; +import jaxx.runtime.SwingUtil; +import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.decorator.HighlightPredicate; +import org.jdesktop.swingx.decorator.Highlighter; +import org.nuiton.util.FileUtil; + +import javax.swing.Action; +import javax.swing.JComponent; +import javax.swing.JDialog; +import javax.swing.JOptionPane; +import javax.swing.JRootPane; +import javax.swing.KeyStroke; +import javax.swing.UIManager; +import java.awt.Color; +import java.awt.Component; +import java.awt.Cursor; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.io.File; + +/** + * Created: 14/06/12 + * + * @author tchemit <chemit@codelutin.com> + * @since 0.1 + */ +public final class TuttiUIUtil { + + /** Logger. */ + private static final Log log = LogFactory.getLog(TuttiUIUtil.class); + + private TuttiUIUtil() { + // never instanciate util class + } + + public static JDialog openInDialog(JComponent ui, + Frame frame, + String title, + boolean modal, + Action closeAction) { + return openInDialog(ui, frame, title, modal, closeAction, null); + } + + public static JDialog openInDialog(JComponent ui, + Frame frame, + String title, + boolean modal, + Action closeAction, + Dimension dim) { + + JDialog result = new JDialog(frame, modal); + result.setTitle(title); + result.add(ui); + result.setResizable(true); + if (dim == null) { + result.setSize(550, 450); + } else { + result.setSize(dim); + } + if (closeAction != null) { + JRootPane rootPane = result.getRootPane(); + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("ESCAPE"), "close"); + rootPane.getActionMap().put("close", closeAction); + } + result.addWindowListener(new WindowAdapter() { + + @Override + public void windowClosed(WindowEvent e) { + Component ui = (Component) e.getSource(); + if (log.isInfoEnabled()) { + log.info("Destroy ui " + ui); + } + JAXXUtil.destroy(ui); + } + }); + SwingUtil.center(frame, result); + result.setVisible(true); + return result; + } + + /** + * Choisir un fichier via un sélecteur graphique de fichiers. + * + * @param parent le component swing appelant le controle + * @param title le titre du dialogue de sélection + * @param buttonLabel le label du boutton d'acceptation + * @param incoming le fichier de base à utilier + * @param filters les filtres + descriptions sur le sélecteur de + * fichiers + * @return le fichier choisi ou le fichier incoming si l'opération a été + * annulée + */ + public static File chooseFile(Component parent, + String title, + String buttonLabel, + File incoming, + String... filters) { + File oldBasedir = FileUtil.getCurrentDirectory(); + if (incoming != null) { + File basedir; + if (incoming.isFile()) { + basedir = incoming.getParentFile(); + } else { + basedir = incoming; + } + if (basedir.exists()) { + FileUtil.setCurrentDirectory(basedir); + } + } + File file = FileUtil.getFile(title, buttonLabel, parent, filters); + if (log.isDebugEnabled()) { + log.debug(title + " : " + file); + } + FileUtil.setCurrentDirectory(oldBasedir); + File result = file == null ? incoming : file; + return result; + } + + /** + * Choisir un répertoire via un sélecteur graphique de fichiers. + * + * @param parent le component swing appelant le controle + * @param title le titre de la boite de dialogue de sléection + * @param buttonLabel le label de l'action d'acceptation + * @param incoming le fichier de base à utiliser + * @return le répertoire choisi ou le répertoire incoming si l'opération a + * été annulée + */ + public static File chooseDirectory(Component parent, + String title, + String buttonLabel, + File incoming) { + File oldBasedir = FileUtil.getCurrentDirectory(); + if (incoming != null) { + File basedir; + if (incoming.isFile()) { + basedir = incoming.getParentFile(); + } else { + basedir = incoming; + } + if (basedir.exists()) { + FileUtil.setCurrentDirectory(basedir); + } + } + String file = FileUtil.getDirectory(parent, title, buttonLabel); + if (log.isDebugEnabled()) { + log.debug(title + " : " + file); + } + FileUtil.setCurrentDirectory(oldBasedir); + return file == null ? incoming : new File(file); + } + + public static void updateBusyState(Component ui, boolean busy) { + if (busy) { + // ui bloquee + if (log.isDebugEnabled()) { + log.debug("block ui in busy mode"); + } + ui.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR)); + } else { + // ui debloquee + if (log.isDebugEnabled()) { + log.debug("unblock ui in none busy mode"); + } + ui.setCursor(Cursor.getDefaultCursor()); + } + } + + public static void showSuccessMessage(Component ui, String message) { + JOptionPane.showMessageDialog( + ui, + message, + "Success", + JOptionPane.INFORMATION_MESSAGE, + UIManager.getIcon("info") + ); + } + + public static void showErrorMessage(Component ui, String message) { + JOptionPane.showMessageDialog( + ui, + message, + "Error", + JOptionPane.ERROR_MESSAGE, + UIManager.getIcon("error") + ); + } + + public static boolean askQuestion(Component ui, String message) { + int i = JOptionPane.showConfirmDialog( + ui, + message, + "Question?", + JOptionPane.YES_NO_OPTION); + return i == JOptionPane.YES_OPTION; + } + + public static void setProperty(Object bean, String property, Object value) { + Preconditions.checkNotNull(bean); + Preconditions.checkNotNull(property); + try { + PropertyUtils.setSimpleProperty(bean, property, value); + } catch (Exception e) { + throw new TuttiServiceTechnicalException("Could not set property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e); + } + } + + public static Object getProperty(Object bean, String property) { + Preconditions.checkNotNull(bean); + Preconditions.checkNotNull(property); + try { + return PropertyUtils.getSimpleProperty(bean, property); + } catch (Exception e) { + throw new TuttiServiceTechnicalException("Could not get property '" + property + "' on object of type '" + bean.getClass().getName() + "'", e); + } + } + + public static Highlighter newBackgroundColorHighlighter(HighlightPredicate predicate, Color color) { + return new TuttiColorHighlighter(predicate, color, false); + } + + public static Highlighter newForegroundColorHighlighter(HighlightPredicate predicate, Color color) { + return new TuttiColorHighlighter(predicate, color, true); + } +} Property changes on: trunk/tutti-ui-swing/src/main/java/fr/ifremer/tutti/ui/swing/util/TuttiUIUtil.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_fr_FR.properties =================================================================== --- trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-12-06 17:16:09 UTC (rev 31) +++ trunk/tutti-ui-swing/src/main/resources/i18n/tutti-ui-swing_fr_FR.properties 2012-12-06 17:43:45 UTC (rev 32) @@ -164,6 +164,7 @@ tutti.title.edit.campaign=Editer une campagne existante tutti.title.edit.survey=Editer une série de campagne existante tutti.title.fill.catches=Saisie des captures +tutti.title.frequency=Saisie des mensurations tutti.title.home=Sélection de la campagne tutti.title.noSelectedCampaign=Pas de campagne sélectionné tutti.title.noSelectedSurvey=Pas de série de campagne sélectionné
participants (1)
-
tchemit@users.forge.codelutin.com