Author: tchemit Date: 2009-07-31 00:28:43 +0200 (Fri, 31 Jul 2009) New Revision: 1513 Modified: trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIBuilder.java trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/CategoryModel.java trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/ConfigUIModel.java trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/OptionModel.java trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties Log: improve quit action (always use the action of quit button, begin of ui to quit config editor when config was saved at least one, to be continued...) Modified: trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIBuilder.java =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIBuilder.java 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/ConfigUIBuilder.java 2009-07-30 22:28:43 UTC (rev 1513) @@ -19,9 +19,11 @@ package jaxx.runtime.swing.editor.config; import java.awt.Frame; +import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; +import java.util.List; import javax.swing.AbstractAction; import javax.swing.Action; import javax.swing.JButton; @@ -70,9 +72,32 @@ @Override public void actionPerformed(ActionEvent e) { - if (canQuitCategory(ui)) { - ui.getParentContainer(JDialog.class).dispose(); + if (!canQuitCategory(ui)) { + return; } + + if (model.isSaved() && !model.isStandalone()) { + StringBuilder buffer = new StringBuilder(); + // on doit verifier si des options sauvees necessite + // un redemarrage de l'application + for (CategoryModel cat : model) { + List<OptionModel> savedOptions = cat.getSavedOptions(); + if (!savedOptions.isEmpty()) { + buffer.append("\n").append(_("config.category.saved", _(cat.getCategory()))).append("\n"); + for (OptionModel option : savedOptions) { + buffer.append("\n- ").append(option.getKey()); + } + } + + } +// askUser(ui, +// _("config.title.will.reload.application"), buffer.toString(), +// JOptionPane.INFORMATION_MESSAGE, +// new Object[]{ +// _("config.choice.ok")}, +// 0); + } + ui.getParentContainer(Window.class).dispose(); } }; String tip = quitButton.getToolTipText(); @@ -113,17 +138,18 @@ f.setIconImage(ui.getIconImage()); } // pour savoir si l'ui est autonome - configUI.putClientProperty("standalone", ui == null); + configUI.getModel().setStandalone(ui == null); f.setDefaultCloseOperation(JDialog.DO_NOTHING_ON_CLOSE); f.addWindowListener(new WindowAdapter() { @Override public void windowClosing(WindowEvent e) { - - if (canQuitCategory(configUI)) { - e.getWindow().dispose(); - } + ActionEvent myEvent = new ActionEvent(e.getSource(), 1, "quit"); + configUI.getQuit().getAction().actionPerformed(myEvent); +// if (canQuitCategory(configUI)) { +// e.getWindow().dispose(); +// } } }); f.setUndecorated(undecorated); Modified: trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/CategoryModel.java =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/CategoryModel.java 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/CategoryModel.java 2009-07-30 22:28:43 UTC (rev 1513) @@ -131,6 +131,16 @@ return result; } + public List<OptionModel> getSavedOptions() { + List<OptionModel> result = new ArrayList<OptionModel>(); + for (OptionModel option : this) { + if (option.isSaved()) { + result.add(option); + } + } + return result; + } + public void firePropertyChange(String propertyName, Object oldValue, Object newValue) { pcs.firePropertyChange(propertyName, oldValue, newValue); } Modified: trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/ConfigUIModel.java =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/ConfigUIModel.java 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/ConfigUIModel.java 2009-07-30 22:28:43 UTC (rev 1513) @@ -45,6 +45,22 @@ protected final ApplicationConfig config; /** la cateogrie en cours d'utilisation */ protected CategoryModel categoryModel; + /** + * un drapeau pour savoir si la configuration a été modifiée au moins une + * fois. + * + * On utilise ce drapeau lors de la sortie pour verifier s'il faut ou non + * redemarer l'application (si non en mode standalone) + */ + protected boolean saved; + /** + * un drapeau pour savoir si l'ui de configuration a été lancée en mode + * standalone ou pas. + * + * Si pas lancée en mode standalone, et si la confi a été sauvé on vérifie + * s'il ne faut pas relancer l'application. + */ + protected boolean standalone; /** suport of modification */ protected final PropertyChangeSupport pcs = new PropertyChangeSupport(this); @@ -105,6 +121,22 @@ firePropertyChange(CATEGORY_MODEL_PROPERTY_NAME, old, categoryModel); } + public boolean isSaved() { + return saved; + } + + public void setSaved(boolean saved) { + this.saved = saved; + } + + public boolean isStandalone() { + return standalone; + } + + public void setStandalone(boolean standalone) { + this.standalone = standalone; + } + public void saveModified() { // compute transients keys (to never be saved) List<String> transients = new ArrayList<String>(); @@ -115,6 +147,8 @@ //TODO TC-20090245 : should try to seek for a mutator, since // mutator could have extra code to be done when modify an option config.setOption(option.getKey(), value == null ? null : value.toString()); + // l'option a été sauvegardée, on la marque + option.setSaved(true); // this is the new original value option.initValue(value); } @@ -122,6 +156,7 @@ transients.add(option.getKey()); } } + setSaved(true); // save config config.saveForUser(transients.toArray(new String[transients.size()])); // notify data has changed Modified: trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/OptionModel.java =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/OptionModel.java 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/java/jaxx/runtime/swing/editor/config/model/OptionModel.java 2009-07-30 22:28:43 UTC (rev 1513) @@ -27,9 +27,15 @@ */ public class OptionModel implements OptionDef { + /** la definition de l'option ( venant de la config) */ protected final OptionDef def; + /** un drapeau pour savoir si l'option est valide (n'est pas utilisé actuellement) */ protected boolean valid = true; + /** un drapeau pour savoir si l'option a été sauvée */ + protected boolean saved = false; + /** la valeur non modifié de l'option */ protected Object originalValue; + /** la valeur actuelle de l'option (peut être la valeur orignal si non modifée)*/ protected Object value; protected OptionModel(OptionDef def, Object value) { @@ -91,6 +97,14 @@ this.valid = valid; } + public boolean isSaved() { + return saved; + } + + public void setSaved(boolean saved) { + this.saved = saved; + } + public void initValue(Object originalValue) { this.originalValue = originalValue; this.value = originalValue; Modified: trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-en_GB.properties 2009-07-30 22:28:43 UTC (rev 1513) @@ -10,9 +10,11 @@ config.action.reset.tip=Cancel the modifications for the category config.action.save=Save config.action.save.tip=Save the modifications for the category +config.category.saved=The category '%1$s' was modified \: config.choice.cancel=Cancel config.choice.continue=Continue config.choice.doNotSave=Do not save +config.choice.ok=Ok config.choice.save=Save config.defaultValue=Default value config.defaultValue.tip=Default value of the option @@ -30,6 +32,7 @@ config.option.modified=Value is modified < original value \: '%1$s' - new value \: '%2$s' > config.title=Preferences config.title.need.confirm=A confirmation is required +config.title.will.reload.application=The application need to be restarted config.unmodifiable=Can not be modified config.unvalid=Option is not valid \! (previous value \: %1$s, required type \: %2$s) config.value=Value Modified: trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties =================================================================== --- trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-07-30 22:27:02 UTC (rev 1512) +++ trunk/jaxx-runtime-swing-widget/src/main/resources/i18n/jaxx-runtime-swing-widget-fr_FR.properties 2009-07-30 22:28:43 UTC (rev 1513) @@ -10,9 +10,11 @@ config.action.reset.tip=Annuler les modifications de cette cat\u00E9gorie config.action.save=Enregistrer config.action.save.tip=Sauver les modifications de cette cat\u00E9gorie +config.category.saved=La cat\u00E9gorie '%1$s' a \u00E9t\u00E9 modifi\u00E9e \: config.choice.cancel=Annuler config.choice.continue=Continuer config.choice.doNotSave=Ne pas enregistrer +config.choice.ok=Ok config.choice.save=Enregistrer config.defaultValue=Valeur par d\u00E9faut config.defaultValue.tip=Valeur par d\u00E9faut de l'option @@ -31,6 +33,7 @@ config.option.valid=Valeur non valide config.title=Pr\u00E9f\u00E9rences config.title.need.confirm=Une confirmation de votre part est requise... +config.title.will.reload.application=L'application doit \u00EAtre red\u00E9marrer... config.unmodifiable=Ne peut pas \u00EAtre modifi\u00E9 config.unvalid=Option non valide (valeur originale \: %1$s, type requis \: %2$s) config.value=Valeur