Author: echatellier Date: 2014-08-05 10:22:38 +0200 (Tue, 05 Aug 2014) New Revision: 467 Url: http://forge.codelutin.com/projects/faxtomail/repository/revisions/467 Log: fixes #5533: la fen?\195?\170tre d'ajout d'annotations contient une croix (fermeture de fen?\195?\170tre) sous windows, le probl?\195?\168me est que si l'on clique dessus, rien n'est sauv?\195?\169 Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/MainUIHandler.java 2014-08-05 08:22:38 UTC (rev 467) @@ -33,11 +33,13 @@ import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUI; import com.franciaflex.faxtomail.ui.swing.util.RemoveablePropertyChangeListener; import com.google.common.base.Preconditions; + import jaxx.runtime.JAXXBinding; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.JAXXWidgetUtil; import jaxx.runtime.swing.session.SwingSession; import jaxx.runtime.validator.swing.SwingValidator; + import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -45,6 +47,7 @@ import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; import javax.swing.*; + import java.awt.Cursor; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/attachment/AttachmentEditorUIModel.java 2014-08-05 08:22:38 UTC (rev 467) @@ -60,16 +60,6 @@ super(fromBeanBinder, toBeanBinder); } - /*public File getFile() { - return file; - } - - public void setFile(File file) { - Object oldValue = getFile(); - this.file = file; - firePropertyChange(PROPERTY_FILE, oldValue, file); - }*/ - public boolean isEditable() { return editable; } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/demande/DemandeUIHandler.java 2014-08-05 08:22:38 UTC (rev 467) @@ -40,7 +40,6 @@ import java.util.Set; import javax.swing.JComponent; -import javax.swing.JOptionPane; import javax.swing.JSplitPane; import javax.swing.JTextPane; import javax.swing.ListSelectionModel; @@ -59,8 +58,6 @@ import org.jdesktop.swingx.decorator.HighlightPredicate; import org.jdesktop.swingx.table.DefaultTableColumnModelExt; import org.jdesktop.swingx.table.TableColumnModelExt; -import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction; -import org.nuiton.jaxx.application.swing.action.ApplicationUIAction; import org.nuiton.jaxx.application.swing.tab.TabHandler; import org.nuiton.jaxx.application.swing.table.AbstractApplicationTableModel; import org.nuiton.jaxx.application.swing.table.MoveToNextEditableCellAction; @@ -458,59 +455,6 @@ return result; } - /** - * Gros copier/coller de quitScreen() pour appeler runActionAndWait au lieu de saveAction.actionPerformed(null); par defaut - * pour tenter de corriger un problème de concurrence entre l'action de sauvegarde de l'email - * et l'action de rechargement de l'arbre qui fait un closeTransaction au même moment. - * - * @param modelIsValid - * @param modelIsModify - * @param askGiveUpMessage - * @param askSaveMessage - * @param saveAction - * @return - */ - protected boolean quitScreen2(boolean modelIsValid, boolean modelIsModify, String askGiveUpMessage, String askSaveMessage, - SaveDemandeAction saveAction) { - boolean result; - - if (!modelIsValid) { - - // model is not valid - // ask user to qui or not - result = askCancelEditBeforeLeaving(askGiveUpMessage); - - } else if (modelIsModify) { - - // something is modify ask user what to do - int answer = askSaveBeforeLeaving(askSaveMessage); - switch (answer) { - case JOptionPane.YES_OPTION: - - // ok save - //saveAction.actionPerformed(null); - //XXX echatellier 2010731 : action bloquante - getContext().getActionEngine().runActionAndWait(saveAction); - result = true; - break; - case JOptionPane.NO_OPTION: - - // do not save but can still quit the screen (so nothing to do) - result = true; - break; - default: - // do not save and stay here (so nothing to do) - result = false; - - } - } else { - - // model is valid and not modify, can safely quit screen - result = true; - } - return result; - } - @Override public SwingValidator<DemandeUIModel> getValidator() { return ui.getValidator(); Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIHandler.java 2014-08-05 08:22:38 UTC (rev 467) @@ -24,6 +24,8 @@ * #L% */ +import static org.nuiton.i18n.I18n.t; + import java.awt.Component; import java.awt.Cursor; import java.awt.Dimension; @@ -53,11 +55,6 @@ import javax.swing.JComponent; import javax.swing.JPanel; -import com.franciaflex.faxtomail.persistence.entities.Email; -import com.franciaflex.faxtomail.persistence.entities.HistoryType; -import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; -import com.google.common.collect.HashMultimap; -import com.google.common.collect.Multimap; import jaxx.runtime.swing.ComponentMover; import jaxx.runtime.swing.ComponentResizer; import jaxx.runtime.validator.swing.SwingValidator; @@ -67,9 +64,16 @@ import com.franciaflex.faxtomail.persistence.entities.Attachment; import com.franciaflex.faxtomail.persistence.entities.AttachmentFile; +import com.franciaflex.faxtomail.persistence.entities.Email; +import com.franciaflex.faxtomail.persistence.entities.HistoryType; +import com.franciaflex.faxtomail.ui.swing.actions.GenerateAnnotatedAttachmentAction; +import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; import com.franciaflex.faxtomail.ui.swing.util.AbstractFaxToMailUIHandler; +import com.franciaflex.faxtomail.ui.swing.util.CloseableUI; import com.franciaflex.faxtomail.ui.swing.util.FaxToMailUIUtil; import com.franciaflex.faxtomail.ui.swing.util.JImagePanel; +import com.google.common.collect.HashMultimap; +import com.google.common.collect.Multimap; import com.itextpdf.text.Document; import com.itextpdf.text.DocumentException; import com.itextpdf.text.PageSize; @@ -82,13 +86,11 @@ import com.sun.pdfview.PDFFile; import com.sun.pdfview.PDFPage; -import static org.nuiton.i18n.I18n.t; - /** * @author Kevin Morin (Code Lutin) * */ -public class PDFEditorUIHandler extends AbstractFaxToMailUIHandler<PDFEditorUIModel, PDFEditorUI> { +public class PDFEditorUIHandler extends AbstractFaxToMailUIHandler<PDFEditorUIModel, PDFEditorUI> implements CloseableUI { private static final Log log = LogFactory.getLog(PDFEditorUIHandler.class); @@ -237,8 +239,20 @@ } @Override + public boolean quitUI() { + boolean result = quitScreen2( + true, + getModel().isModify(), + null, + t("faxtomail.pdfEditor.askSaveBeforeLeaving.save"), + getContext().getActionFactory().createLogicAction(this, GenerateAnnotatedAttachmentAction.class) + ); + return result; + } + + @Override public void onCloseUI() { -// getModel() + } public void addNote() { Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/content/pdfeditor/PDFEditorUIModel.java 2014-08-05 08:22:38 UTC (rev 467) @@ -24,10 +24,13 @@ * #L% */ +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; import java.util.ArrayList; import java.util.List; import com.franciaflex.faxtomail.ui.swing.content.demande.DemandeUIModel; + import org.nuiton.util.beans.Binder; import org.nuiton.util.beans.BinderFactory; @@ -64,10 +67,12 @@ public void addNote(PDFEditorNoteUI note) { notes.add(note); + setModify(true); } public void removeNote(PDFEditorNoteUI note) { notes.remove(note); + setModify(true); } public List<PDFEditorCrossUI> getCrosses() { @@ -76,10 +81,12 @@ public void addCross(PDFEditorCrossUI cross) { crosses.add(cross); + setModify(true); } public void removeCross(PDFEditorCrossUI cross) { crosses.remove(cross); + setModify(true); } public List<PDFEditorLineUI> getLines() { @@ -88,10 +95,12 @@ public void addLine(PDFEditorLineUI line) { lines.add(line); + setModify(true); } public void removeLine(PDFEditorLineUI line) { lines.remove(line); + setModify(true); } public List<PDFEditorHighlighterUI> getHighlighters() { @@ -100,10 +109,12 @@ public void addHighlighter(PDFEditorHighlighterUI highlighter) { highlighters.add(highlighter); + setModify(true); } public void removeHighlighter(PDFEditorHighlighterUI highlighter) { highlighters.remove(highlighter); + setModify(true); } } Modified: trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java =================================================================== --- trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/java/com/franciaflex/faxtomail/ui/swing/util/AbstractFaxToMailUIHandler.java 2014-08-05 08:22:38 UTC (rev 467) @@ -22,45 +22,66 @@ * #L% */ -import com.franciaflex.faxtomail.FaxToMailConfiguration; -import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; -import com.franciaflex.faxtomail.persistence.entities.HasLabel; -import com.franciaflex.faxtomail.services.DecoratorService; -import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; -import com.franciaflex.faxtomail.ui.swing.content.MainUI; -import com.franciaflex.faxtomail.ui.swing.content.MainUIHandler; -import com.google.common.base.Preconditions; -import com.google.common.collect.Sets; +import static org.nuiton.i18n.I18n.t; + +import java.awt.Component; +import java.awt.Container; +import java.awt.Dialog; +import java.awt.Dimension; +import java.awt.Frame; +import java.awt.event.ActionEvent; +import java.awt.event.ItemEvent; +import java.awt.event.ItemListener; +import java.awt.event.KeyEvent; +import java.awt.event.WindowAdapter; +import java.awt.event.WindowEvent; +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.io.Serializable; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Set; + +import javax.swing.AbstractAction; +import javax.swing.ComboBoxModel; +import javax.swing.JComboBox; +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.WindowConstants; +import javax.swing.event.TableModelEvent; +import javax.swing.event.TableModelListener; +import javax.swing.text.JTextComponent; + import jaxx.runtime.JAXXUtil; import jaxx.runtime.SwingUtil; import jaxx.runtime.swing.editor.bean.BeanUIUtil; import jaxx.runtime.validator.swing.SwingValidator; + import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.nuiton.decorator.Decorator; import org.nuiton.jaxx.application.ApplicationDataUtil; import org.nuiton.jaxx.application.swing.AbstractApplicationUIHandler; import org.nuiton.jaxx.application.swing.ApplicationUI; +import org.nuiton.jaxx.application.swing.action.AbstractApplicationAction; import org.nuiton.jaxx.application.swing.action.ApplicationActionUI; +import org.nuiton.jaxx.application.swing.util.Cancelable; import org.nuiton.validator.bean.simple.SimpleBeanValidator; -import javax.swing.*; -import javax.swing.event.TableModelEvent; -import javax.swing.event.TableModelListener; -import javax.swing.text.JTextComponent; -import java.awt.*; -import java.awt.event.ActionEvent; -import java.awt.event.ItemEvent; -import java.awt.event.ItemListener; -import java.awt.event.KeyEvent; -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; -import java.io.Serializable; -import java.lang.reflect.Method; -import java.util.*; +import com.franciaflex.faxtomail.FaxToMailConfiguration; +import com.franciaflex.faxtomail.persistence.entities.FaxToMailUser; +import com.franciaflex.faxtomail.persistence.entities.HasLabel; +import com.franciaflex.faxtomail.services.DecoratorService; +import com.franciaflex.faxtomail.ui.swing.FaxToMailUIContext; +import com.franciaflex.faxtomail.ui.swing.content.MainUI; +import com.franciaflex.faxtomail.ui.swing.content.MainUIHandler; +import com.google.common.base.Preconditions; +import com.google.common.collect.Sets; -import static org.nuiton.i18n.I18n.t; - /** * Contract of any UI handler. * @@ -251,7 +272,128 @@ SwingUtil.center(getContext().getMainUI(), result); result.setVisible(true); } + + /** + * Surchargée pour temporairement ajouter un appel à ApplicationUI#onCloseUI on windowClosing. + * + * @deprecated overriden during waiting response for issue : http://nuiton.org/issues/3415 + */ + @Deprecated + @Override + public void openDialog(final ApplicationUI dialogContent, String title, Dimension dim) { + Component topestUI = getTopestUI(); + final JDialog result; + if (topestUI instanceof Frame) { + result = new JDialog((Frame) topestUI, title, true); + } else { + result = new JDialog((Dialog) topestUI, title, true); + } + + result.add((Component) dialogContent); + result.setResizable(true); + + result.setSize(dim); + + final AbstractApplicationUIHandler handler = dialogContent.getHandler(); + + if (handler instanceof Cancelable) { + + // add a auto-close action + JRootPane rootPane = result.getRootPane(); + + KeyStroke shortcutClosePopup = getContext().getConfiguration().getShortcutClosePopup(); + + rootPane.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(shortcutClosePopup, "close"); + rootPane.getActionMap().put("close", new AbstractAction() { + private static final long serialVersionUID = 1L; + + @Override + public void actionPerformed(ActionEvent e) { + ((Cancelable) handler).cancel(); + } + }); + } + + result.setDefaultCloseOperation(WindowConstants.DO_NOTHING_ON_CLOSE); + result.addWindowListener(new WindowAdapter() { + @Override + public void windowClosing(WindowEvent e) { + boolean canClose = true; + if (handler instanceof CloseableUI) { + canClose = ((CloseableUI)handler).quitUI(); + } + if (canClose) { + result.setVisible(false); + } + } + + @Override + public void windowClosed(WindowEvent e) { + Component ui = (Component) e.getSource(); + if (log.isDebugEnabled()) { + log.debug("Destroy ui " + ui); + } + JAXXUtil.destroy(ui); + } + }); + SwingUtil.center(getContext().getMainUI(), result); + result.setVisible(true); + } + + /** + * Gros copier/coller de quitScreen() pour appeler runActionAndWait au lieu de saveAction.actionPerformed(null); par defaut + * pour tenter de corriger un problème de concurrence entre l'action de sauvegarde de l'email + * et l'action de rechargement de l'arbre qui fait un closeTransaction au même moment. + * + * @param modelIsValid + * @param modelIsModify + * @param askGiveUpMessage + * @param askSaveMessage + * @param saveAction + * @return + */ + protected boolean quitScreen2(boolean modelIsValid, boolean modelIsModify, String askGiveUpMessage, String askSaveMessage, + AbstractApplicationAction saveAction) { + boolean result; + + if (!modelIsValid) { + + // model is not valid + // ask user to qui or not + result = askCancelEditBeforeLeaving(askGiveUpMessage); + + } else if (modelIsModify) { + + // something is modify ask user what to do + int answer = askSaveBeforeLeaving(askSaveMessage); + switch (answer) { + case JOptionPane.YES_OPTION: + + // ok save + //saveAction.actionPerformed(null); + //XXX echatellier 2010731 : action bloquante + getContext().getActionEngine().runActionAndWait(saveAction); + result = true; + break; + case JOptionPane.NO_OPTION: + + // do not save but can still quit the screen (so nothing to do) + result = true; + break; + default: + // do not save and stay here (so nothing to do) + result = false; + + } + } else { + + // model is valid and not modify, can safely quit screen + result = true; + } + return result; + } + public void closeFrame() { getParentContainer(JFrame.class).setVisible(false); } Modified: trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties =================================================================== --- trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-04 15:59:45 UTC (rev 466) +++ trunk/faxtomail-ui-swing/src/main/resources/i18n/faxtomail-ui-swing_fr_FR.properties 2014-08-05 08:22:38 UTC (rev 467) @@ -209,6 +209,7 @@ faxtomail.pdfEditor.action.cancel.tip=Ne pas enregistrer les changements et fermer faxtomail.pdfEditor.action.validate=Enregistrer faxtomail.pdfEditor.action.validate.tip=Enregistrer les changements et fermer +faxtomail.pdfEditor.askSaveBeforeLeaving.save=Les modifications apportées n'ont pas été sauvegardées. faxtomail.pdfEditor.button.addCross.tip=Ajouter une croix faxtomail.pdfEditor.button.addHighlighter.tip=Ajouter un surlignement faxtomail.pdfEditor.button.addLine.tip=Ajouter une ligne