r2246 - trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor
Author: tchemit Date: 2011-04-10 14:07:01 +0200 (Sun, 10 Apr 2011) New Revision: 2246 Url: http://nuiton.org/repositories/revision/jaxx/2246 Log: Evolution #1450: Can set a numberPattern on number editor Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2011-03-18 11:45:43 UTC (rev 2245) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditor.jaxx 2011-04-10 12:07:01 UTC (rev 2246) @@ -67,6 +67,9 @@ <!-- show reset property --> <Boolean id='showReset' javaBean='false'/> + <!-- show reset property --> + <String id="numberPattern" javaBean='null'/> + <!-- internal editor model as text --> <String id="modelText" javaBean='""'/> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2011-03-18 11:45:43 UTC (rev 2245) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/NumberEditorHandler.java 2011-04-10 12:07:01 UTC (rev 2246) @@ -26,6 +26,7 @@ package jaxx.runtime.swing.editor; import org.apache.commons.beanutils.PropertyUtils; +import org.apache.commons.lang.StringUtils; import org.apache.commons.lang.math.NumberUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -44,6 +45,8 @@ import java.lang.reflect.Method; import java.math.BigDecimal; import java.math.BigInteger; +import java.util.regex.Matcher; +import java.util.regex.Pattern; import static jaxx.runtime.swing.editor.NumberEditor.PROPERTY_MODEL; import static jaxx.runtime.swing.editor.NumberEditor.PROPERTY_POPUP_VISIBLE; @@ -76,8 +79,13 @@ protected Class<?> modelType; + protected Pattern numberPattern; + public NumberEditorHandler(NumberEditor ui) { editor = ui; + if (StringUtils.isNotEmpty(editor.getNumberPattern())) { + numberPattern = Pattern.compile(editor.getNumberPattern()); + } } /** initialise l'ui et les listeners d'évènements. */ @@ -87,6 +95,22 @@ throw new NullPointerException("can not have a null bean in ui " + editor); } + editor.addPropertyChangeListener(NumberEditor.PROPERTY_NUMBER_PATTERN, new PropertyChangeListener() { + + @Override + public void propertyChange(PropertyChangeEvent evt) { + String newPattern = (String) evt.getNewValue(); + if (log.isInfoEnabled()) { + log.info("set new numberPattern" + newPattern); + } + if (StringUtils.isEmpty(newPattern)) { + numberPattern = null; + } else { + numberPattern = Pattern.compile(newPattern); + } + } + }); + editor.addPropertyChangeListener(NumberEditor.PROPERTY_SHOW_POPUP_BUTTON, new PropertyChangeListener() { @Override @@ -112,7 +136,7 @@ } } }); - + editor.addPropertyChangeListener(PROPERTY_MODEL, new PropertyChangeListener() { @Override @@ -197,6 +221,8 @@ }); } + protected String lastValidText; + /** * Modifie le modèle de la donnée à éditer à partir d'un evenement clavier * <p/> @@ -216,6 +242,31 @@ return; } + if (StringUtils.isNotEmpty(s) && numberPattern != null) { + + // use given number pattern + Matcher matcher = numberPattern.matcher(s); + if (!matcher.matches()) { + + // the current text is not accepted... + if (log.isInfoEnabled()) { + log.info("Does not accept the new number " + s + + ", will reapply lastValidText : " + lastValidText); + } + + String oldText; + if (lastValidText != null) { + + // push back last valid text + oldText = lastValidText; + } else { + oldText = ""; + } + editor.getTextField().setText(oldText); + return; + } + } + boolean canApply = false; boolean endWithDot = false; @@ -278,6 +329,7 @@ int oldPosition = field.getCaretPosition(); if (canApply) { + if (log.isDebugEnabled()) { log.debug("can apply new model value : " + newValue); } @@ -291,6 +343,8 @@ editor.setModelText(s.substring(0, s.length() - 1)); field.setCaretPosition(oldPosition); } + + lastValidText = editor.getModelText(); return; } @@ -305,10 +359,11 @@ oldPosition--; } field.setText(text); + + lastValidText = text; try { field.setCaretPosition(oldPosition); - } - catch (IllegalArgumentException ex) { + } catch (IllegalArgumentException ex) { log.debug("CaretPosition is invalid for position : " + oldPosition, ex); } }
participants (1)
-
tchemit@users.nuiton.org