r2106 - in trunk: . jaxx-runtime jaxx-widgets jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean
Author: tchemit Date: 2010-10-05 10:37:01 +0200 (Tue, 05 Oct 2010) New Revision: 2106 Url: http://nuiton.org/repositories/revision/jaxx/2106 Log: Evolution #914: Update swingx to swingx-core 1.6.2-2 Modified: trunk/jaxx-runtime/pom.xml trunk/jaxx-widgets/pom.xml trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanUIUtil.java trunk/pom.xml Modified: trunk/jaxx-runtime/pom.xml =================================================================== --- trunk/jaxx-runtime/pom.xml 2010-10-05 08:04:30 UTC (rev 2105) +++ trunk/jaxx-runtime/pom.xml 2010-10-05 08:37:01 UTC (rev 2106) @@ -90,7 +90,7 @@ <dependency> <groupId>org.swinglabs</groupId> - <artifactId>swingx</artifactId> + <artifactId>swingx-core</artifactId> </dependency> </dependencies> Modified: trunk/jaxx-widgets/pom.xml =================================================================== --- trunk/jaxx-widgets/pom.xml 2010-10-05 08:04:30 UTC (rev 2105) +++ trunk/jaxx-widgets/pom.xml 2010-10-05 08:37:01 UTC (rev 2106) @@ -53,7 +53,7 @@ <dependency> <groupId>org.swinglabs</groupId> - <artifactId>swingx</artifactId> + <artifactId>swingx-core</artifactId> </dependency> <!--dependency> Modified: trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanUIUtil.java =================================================================== --- trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanUIUtil.java 2010-10-05 08:04:30 UTC (rev 2105) +++ trunk/jaxx-widgets/src/main/java/jaxx/runtime/swing/editor/bean/BeanUIUtil.java 2010-10-05 08:37:01 UTC (rev 2106) @@ -31,12 +31,17 @@ import jaxx.runtime.swing.JAXXButtonGroup; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; +import org.jdesktop.swingx.autocomplete.AutoCompleteComboBoxEditor; import org.jdesktop.swingx.autocomplete.AutoCompleteDecorator; -import org.jdesktop.swingx.autocomplete.AutoCompletePropertyChangeListener; +import org.jdesktop.swingx.autocomplete.AutoCompleteDocument; +import org.jdesktop.swingx.autocomplete.ComboBoxAdaptor; import org.jdesktop.swingx.autocomplete.ObjectToStringConverter; import javax.swing.AbstractButton; +import javax.swing.ActionMap; import javax.swing.ButtonGroup; +import javax.swing.ComboBoxEditor; +import javax.swing.InputMap; import javax.swing.JComboBox; import javax.swing.JComponent; import javax.swing.JLabel; @@ -47,10 +52,16 @@ import javax.swing.text.JTextComponent; import java.awt.Component; import java.awt.Dimension; +import java.awt.event.ActionListener; +import java.awt.event.FocusListener; +import java.awt.event.KeyListener; import java.beans.Introspector; import java.beans.PropertyChangeListener; import java.util.Date; +import java.util.List; +import static java.util.Arrays.asList; +import static java.util.Collections.unmodifiableList; import static org.nuiton.i18n.I18n._; import static org.nuiton.i18n.I18n.n_; @@ -94,6 +105,11 @@ */ public static void decorate(JComboBox combo, ObjectToStringConverter convertor) { + // tchemit 2010-10-05 since swingx 1.6.2, undecorate stuff is no more + // public and we want to use it, so hack it... + combo.putClientProperty("oldEditor", combo.getEditor()); + combo.putClientProperty("oldDocument", combo.getEditor().getEditorComponent()); + AutoCompleteDecorator.decorate(combo, convertor); } @@ -101,28 +117,119 @@ * Désactive l'aut-complétion sur une liste déroulante, en y repositionnant * le modèle du document d'édition d'avant auto-complétion. * - * @param combo la liste déroulante à décorer + * @param comboBox la liste déroulante à décorer * @param originalDocument le document original de l'édtieur de la * liste déroulante. */ - public static void undecorate(JComboBox combo, Document originalDocument) { + public static void undecorate(JComboBox comboBox, Document originalDocument) { // has not to be editable - combo.setEditable(false); + comboBox.setEditable(false); // configure the text component=editor component - Component c = combo.getEditor().getEditorComponent(); + Component c = comboBox.getEditor().getEditorComponent(); JTextComponent editorComponent = (JTextComponent) c; editorComponent.setDocument(originalDocument); editorComponent.setText(null); + //undecorate(comboBox); + //remove old property change listener - for (PropertyChangeListener l : c.getPropertyChangeListeners("editor")) { - if (l instanceof AutoCompletePropertyChangeListener) { - c.removePropertyChangeListener("editor", l); + //for (PropertyChangeListener l : c.getPropertyChangeListeners("editor")) { + // if (l instanceof AutoCompletePropertyChangeListener) { + // c.removePropertyChangeListener("editor", l); + // } + //} + + ComboBoxEditor oldEditor = (ComboBoxEditor) comboBox.getClientProperty("oldEditor"); + + if (editorComponent.getDocument() instanceof AutoCompleteDocument) { + AutoCompleteDocument doc = (AutoCompleteDocument) editorComponent.getDocument(); + + if (doc.isStrictMatching()) { + ActionMap map = comboBox.getActionMap(); + + for (String key : COMBO_BOX_ACTIONS) { + map.put(key, null); + } } + + //remove old property change listener + for (PropertyChangeListener l : comboBox.getPropertyChangeListeners("editor")) { + //if (l instanceof AutoComplete.PropertyChangeListener) { + if (l.getClass().getName().contains("AutoComplete")) { + comboBox.removePropertyChangeListener("editor", l); + } + } + + for (PropertyChangeListener l : comboBox.getPropertyChangeListeners("enabled")) { + //if (l instanceof AutoComplete.PropertyChangeListener) { + if (l.getClass().getName().contains("AutoComplete")) { + comboBox.removePropertyChangeListener("enabled", l); + } + } + + AutoCompleteComboBoxEditor editor = (AutoCompleteComboBoxEditor) comboBox.getEditor(); + comboBox.setEditor(oldEditor); + + //remove old key listener + for (KeyListener l : editorComponent.getKeyListeners()) { + //if (l instanceof AutoComplete.KeyAdapter) { + if (l.getClass().getName().contains("AutoComplete")) { + editorComponent.removeKeyListener(l); + break; + } + } + + undecorate(editorComponent, originalDocument); + + for (ActionListener l : comboBox.getActionListeners()) { + if (l instanceof ComboBoxAdaptor) { + comboBox.removeActionListener(l); + break; + } + } + + //TODO remove aqua fix + + //TODO reset editibility } } + static void undecorate(JTextComponent textComponent, Document originalDocument) { + Document doc = textComponent.getDocument(); + + if (doc instanceof AutoCompleteDocument) { + //remove autocomplete key/action mappings + InputMap map = textComponent.getInputMap(); + + while (map.getParent() != null) { + InputMap parent = map.getParent(); + + //if (parent instanceof AutoComplete.InputMap) { + if (parent.getClass().getName().contains("AutoComplete")) { + map.setParent(parent.getParent()); + } + + map = parent; + } + + textComponent.getActionMap().put("nonstrict-backspace", null); + + //remove old focus listener + for (FocusListener l : textComponent.getFocusListeners()) { + //if (l instanceof AutoComplete.FocusAdapter) { + if (l.getClass().getName().contains("AutoComplete")) { + textComponent.removeFocusListener(l); + break; + } + } + + //reset to original document + //textComponent.setDocument(((AutoCompleteDocument) doc).delegate); + textComponent.setDocument(originalDocument); + } + } + public static <O> MultiJXPathDecorator<O> createDecorator(JXPathDecorator<O> decorator) { if (decorator == null) { throw new NullPointerException( @@ -205,7 +312,7 @@ * @param popupLabel * @param sortUp * @param sortDown - * @param decorator le decorateur a utiliser + * @param decorator le decorateur a utiliser */ protected void preparePopup(String selectedTip, String notSelectedTip, @@ -271,4 +378,11 @@ getPopup().invalidate(); } } + + + //these keys were pulled from BasicComboBoxUI from Sun JDK 1.6.0_20 + + private static final List<String> COMBO_BOX_ACTIONS = unmodifiableList(asList("selectNext", + "selectNext2", "selectPrevious", "selectPrevious2", "pageDownPassThrough", + "pageUpPassThrough", "homePassThrough", "endPassThrough")); } Modified: trunk/pom.xml =================================================================== --- trunk/pom.xml 2010-10-05 08:04:30 UTC (rev 2105) +++ trunk/pom.xml 2010-10-05 08:37:01 UTC (rev 2106) @@ -311,8 +311,8 @@ <dependency> <groupId>org.swinglabs</groupId> - <artifactId>swingx</artifactId> - <version>1.6.1</version> + <artifactId>swingx-core</artifactId> + <version>1.6.2-2</version> <scope>compile</scope> </dependency>
participants (1)
-
tchemit@users.nuiton.org