This is an automated email from the git hooks/post-receive script. New commit to branch develop in repository jaxx. See http://git.nuiton.org/jaxx.git commit afba725caab50fc7924da222df0f052b5f527fc4 Author: Tony CHEMIT <chemit@codelutin.com> Date: Mon Apr 13 09:01:37 2015 +0200 refs #3468 Remove JXLayer API and replace it by JLayer --- jaxx-compiler/pom.xml | 5 -- .../decorators/BoxedCompiledObjectDecorator.java | 6 +- .../compiler/finalizers/ValidatorFinalizer.java | 6 +- .../jaxx/compiler/spi/DefaultInitializer.java | 10 +-- .../compiler/tags/DefaultComponentHandler.java | 2 +- .../{JXLayerHandler.java => JLayerHandler.java} | 18 ++--- jaxx-runtime-api/pom.xml | 5 -- .../api/internal/awt/visitor/BuildTreeVisitor.java | 6 +- .../org/nuiton/jaxx/runtime/api/swing}/Icons.java | 2 +- .../org/nuiton/jaxx/runtime/api/swing/JLayers.java | 48 ++++++------ .../java/org/nuiton/jaxx/runtime/SwingUtil.java | 2 +- jaxx-swing-extra/pom.xml | 6 -- .../java/org/nuiton/jaxx/swing/extra/Swings.java | 35 ++++----- .../jaxx/swing/extra/layer/BlockingLayerUI.java | 87 ++++++++++++++++------ .../jaxx/swing/extra/layer/BlockingLayerUI2.java | 68 +++++++++++++---- .../list/renderer/LocaleListCellRenderer.java | 2 +- 16 files changed, 185 insertions(+), 123 deletions(-) diff --git a/jaxx-compiler/pom.xml b/jaxx-compiler/pom.xml index 7caab59..13fabbc 100644 --- a/jaxx-compiler/pom.xml +++ b/jaxx-compiler/pom.xml @@ -82,11 +82,6 @@ </dependency> <dependency> - <groupId>org.swinglabs</groupId> - <artifactId>jxlayer</artifactId> - </dependency> - - <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> diff --git a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/decorators/BoxedCompiledObjectDecorator.java b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/decorators/BoxedCompiledObjectDecorator.java index a1a82f0..475665e 100644 --- a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/decorators/BoxedCompiledObjectDecorator.java +++ b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/decorators/BoxedCompiledObjectDecorator.java @@ -26,7 +26,7 @@ import org.nuiton.jaxx.compiler.CompiledObject; import org.nuiton.jaxx.compiler.CompiledObject.ChildRef; import org.nuiton.jaxx.compiler.JAXXCompiler; import org.nuiton.jaxx.compiler.java.JavaFile; -import org.nuiton.jaxx.swing.extra.JXLayers; +import org.nuiton.jaxx.runtime.api.swing.JLayers; /** * A decorator to surround a compiled object (should be a component at least) @@ -58,10 +58,10 @@ public class BoxedCompiledObjectDecorator extends DefaultCompiledObjectDecorator for (ChildRef child : parent.getChilds()) { if (child.getChild() == object) { String javaCode = child.getChildJavaCode(); - String type = compiler.getImportedType(JXLayers.class); + String type = compiler.getImportedType(JLayers.class); child.setChildJavaCode( type + - ".boxComponentWithJxLayer(" + javaCode + ")"); + ".boxComponentWithJLayer(" + javaCode + ")"); break; } } diff --git a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/finalizers/ValidatorFinalizer.java b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/finalizers/ValidatorFinalizer.java index 22f48d1..c9e9580 100644 --- a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/finalizers/ValidatorFinalizer.java +++ b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/finalizers/ValidatorFinalizer.java @@ -42,7 +42,7 @@ import org.nuiton.jaxx.compiler.java.JavaFile; import org.nuiton.jaxx.compiler.tags.validator.BeanValidatorHandler; import org.nuiton.jaxx.compiler.tags.validator.BeanValidatorHandler.CompiledBeanValidator; import org.nuiton.jaxx.compiler.types.TypeManager; -import org.nuiton.jaxx.swing.extra.JXLayers; +import org.nuiton.jaxx.runtime.api.swing.JLayers; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -103,11 +103,11 @@ public class ValidatorFinalizer extends AbstractFinalizer { if (found) { // compiler.setNeedSwingUtil(true); String type = - compiler.getImportedType(JXLayers.class); + compiler.getImportedType(JLayers.class); // box the child component in a JxLayer child.setChildJavaCode( type + - ".boxComponentWithJxLayer(" + javaCode + ")"); + ".boxComponentWithJLayer(" + javaCode + ")"); } } } diff --git a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/spi/DefaultInitializer.java b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/spi/DefaultInitializer.java index 3ac2b0b..e6c45a5 100644 --- a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/spi/DefaultInitializer.java +++ b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/spi/DefaultInitializer.java @@ -22,8 +22,6 @@ package org.nuiton.jaxx.compiler.spi; -import org.nuiton.jaxx.validator.swing.SwingValidator; -import org.jdesktop.jxlayer.JXLayer; import org.nuiton.jaxx.compiler.JAXXCompiler; import org.nuiton.jaxx.compiler.beans.BeanInfoUtil; import org.nuiton.jaxx.compiler.reflect.ClassDescriptor; @@ -60,7 +58,7 @@ import org.nuiton.jaxx.compiler.tags.swing.JTextComponentHandler; import org.nuiton.jaxx.compiler.tags.swing.JToolBarHandler; import org.nuiton.jaxx.compiler.tags.swing.JTreeHandler; import org.nuiton.jaxx.compiler.tags.swing.JWindowHandler; -import org.nuiton.jaxx.compiler.tags.swing.JXLayerHandler; +import org.nuiton.jaxx.compiler.tags.swing.JLayerHandler; import org.nuiton.jaxx.compiler.tags.swing.RowHandler; import org.nuiton.jaxx.compiler.tags.swing.TabHandler; import org.nuiton.jaxx.compiler.tags.swing.TableHandler; @@ -74,6 +72,7 @@ import org.nuiton.jaxx.runtime.api.swing.JAXXList; import org.nuiton.jaxx.runtime.api.swing.JAXXTab; import org.nuiton.jaxx.runtime.api.swing.JAXXTree; import org.nuiton.jaxx.runtime.api.swing.Table; +import org.nuiton.jaxx.validator.swing.SwingValidator; import javax.swing.JCheckBox; import javax.swing.JCheckBoxMenuItem; @@ -83,6 +82,7 @@ import javax.swing.JEditorPane; import javax.swing.JFormattedTextField; import javax.swing.JFrame; import javax.swing.JInternalFrame; +import javax.swing.JLayer; import javax.swing.JList; import javax.swing.JMenu; import javax.swing.JPasswordField; @@ -184,8 +184,8 @@ public class DefaultInitializer implements Initializer { registerBean(JFrame.class, JWindowHandler.class); registerBean(JWindow.class, JWindowHandler.class); - // JXLayer - registerBean(JXLayer.class, JXLayerHandler.class); + // JLayer + registerBean(JLayer.class, JLayerHandler.class); registerBean(Application.class, ApplicationHandler.class); diff --git a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/DefaultComponentHandler.java b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/DefaultComponentHandler.java index 1ba9d8e..daa8fda 100644 --- a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/DefaultComponentHandler.java +++ b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/DefaultComponentHandler.java @@ -33,7 +33,7 @@ import org.nuiton.jaxx.compiler.reflect.ClassDescriptor; import org.nuiton.jaxx.compiler.reflect.ClassDescriptorHelper; import org.nuiton.jaxx.compiler.types.TypeManager; import org.nuiton.jaxx.runtime.api.JAXXRuntime; -import org.nuiton.jaxx.swing.extra.Icons; +import org.nuiton.jaxx.runtime.api.swing.Icons; import org.w3c.dom.Attr; import org.w3c.dom.Element; import org.w3c.dom.NamedNodeMap; diff --git a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JXLayerHandler.java b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JLayerHandler.java similarity index 88% rename from jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JXLayerHandler.java rename to jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JLayerHandler.java index a6253fd..0f1628b 100644 --- a/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JXLayerHandler.java +++ b/jaxx-compiler/src/main/java/org/nuiton/jaxx/compiler/tags/swing/JLayerHandler.java @@ -22,7 +22,6 @@ package org.nuiton.jaxx.compiler.tags.swing; import org.apache.commons.collections4.CollectionUtils; -import org.jdesktop.jxlayer.JXLayer; import org.nuiton.jaxx.compiler.CompiledObject; import org.nuiton.jaxx.compiler.CompilerException; import org.nuiton.jaxx.compiler.JAXXCompiler; @@ -30,17 +29,18 @@ import org.nuiton.jaxx.compiler.reflect.ClassDescriptor; import org.nuiton.jaxx.compiler.reflect.ClassDescriptorHelper; import org.nuiton.jaxx.compiler.tags.DefaultComponentHandler; +import javax.swing.JLayer; import java.awt.Component; /** * To deal with JXLayer, since from version 3.0.4, we can not use any longer - * the {@link JXLayer#add(Component)} ! but must now use the - * method {@link JXLayer#setView(Component)}. + * the {@link JLayer#add(Component)} ! but must now use the + * method {@link JLayer#setView(Component)}. * * @author Tony Chemit - chemit@codelutin.com * @since 2.4 */ -public class JXLayerHandler extends DefaultComponentHandler { +public class JLayerHandler extends DefaultComponentHandler { public static final String ATTRIBUTE_ORIENTATION = "orientation"; @@ -52,9 +52,9 @@ public class JXLayerHandler extends DefaultComponentHandler { public static final String ORIENTATION_VALUE_HORIZONTAL_SPLIT = "horizontal_split"; - public JXLayerHandler(ClassDescriptor beanClass) { + public JLayerHandler(ClassDescriptor beanClass) { super(beanClass); - ClassDescriptorHelper.checkSupportClass(getClass(), beanClass, JXLayer.class); + ClassDescriptorHelper.checkSupportClass(getClass(), beanClass, JLayer.class); } @Override @@ -67,16 +67,16 @@ public class JXLayerHandler extends DefaultComponentHandler { JAXXCompiler compiler) throws CompilerException { if (constraints != null) { - compiler.reportError("JXLayer does not accept constraints"); + compiler.reportError("JLayer does not accept constraints"); return; } if (CollectionUtils.isNotEmpty(getChilds())) { // already one child, authrozied only one child... - compiler.reportError("JXLayer is limited to one children"); + compiler.reportError("JLayer is limited to one children"); return; } - super.addChild(child, constraints, compiler); + super.addChild(child, null, compiler); } diff --git a/jaxx-runtime-api/pom.xml b/jaxx-runtime-api/pom.xml index b12e144..cd83477 100644 --- a/jaxx-runtime-api/pom.xml +++ b/jaxx-runtime-api/pom.xml @@ -64,11 +64,6 @@ </dependency> <dependency> - <groupId>org.swinglabs</groupId> - <artifactId>jxlayer</artifactId> - </dependency> - - <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <scope>test</scope> diff --git a/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/internal/awt/visitor/BuildTreeVisitor.java b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/internal/awt/visitor/BuildTreeVisitor.java index 1000829..fffd7c5 100644 --- a/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/internal/awt/visitor/BuildTreeVisitor.java +++ b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/internal/awt/visitor/BuildTreeVisitor.java @@ -22,8 +22,8 @@ package org.nuiton.jaxx.runtime.api.internal.awt.visitor; * #L% */ -import org.jdesktop.jxlayer.JXLayer; +import javax.swing.JLayer; import javax.swing.JRootPane; import java.awt.Component; import java.awt.Container; @@ -52,8 +52,8 @@ public class BuildTreeVisitor implements ComponentTreeNodeVisitor { Container container = (Container) component; //TODO-TC-2013-03-17 Should use some rules to add this. for (Component child : container.getComponents()) { - if (child instanceof JXLayer<?>) { - child = ((JXLayer<?>) child).getView(); + if (child instanceof JLayer<?>) { + child = ((JLayer<?>) child).getView(); } else if (child instanceof JRootPane) { child = ((JRootPane) child).getLayeredPane(); } diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Icons.java b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/Icons.java similarity index 98% rename from jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Icons.java rename to jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/Icons.java index ea73e93..49f399a 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Icons.java +++ b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/Icons.java @@ -1,4 +1,4 @@ -package org.nuiton.jaxx.swing.extra; +package org.nuiton.jaxx.runtime.api.swing; import javax.swing.Icon; import javax.swing.ImageIcon; diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/JXLayers.java b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/JLayers.java similarity index 51% rename from jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/JXLayers.java rename to jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/JLayers.java index 0dbac1b..e8288d0 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/JXLayers.java +++ b/jaxx-runtime-api/src/main/java/org/nuiton/jaxx/runtime/api/swing/JLayers.java @@ -1,47 +1,46 @@ -package org.nuiton.jaxx.swing.extra; +package org.nuiton.jaxx.runtime.api.swing; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.jxlayer.JXLayer; -import org.jdesktop.jxlayer.plaf.LayerUI; import org.nuiton.jaxx.runtime.api.JAXXObject; import javax.swing.JComponent; +import javax.swing.JLayer; +import javax.swing.plaf.LayerUI; +import java.awt.Component; import java.awt.Container; import java.util.ArrayList; import java.util.List; import java.util.Map; /** - * //TODO Use Jdk7 JLayer API * Created on 4/5/15. * * @author Tony Chemit - chemit@codelutin.com * @since 3.0 */ -public class JXLayers { +public class JLayers { /** Logger. */ - private static final Log log = LogFactory.getLog(JXLayers.class); + private static final Log log = LogFactory.getLog(JLayers.class); /** - * Box a component in a {@link JXLayer}. + * Box a component in a {@link JLayer}. * * @param component the component to box - * @return the {@link JXLayer} boxing the component + * @return the {@link JLayer} boxing the component */ - public static <V extends JComponent> JXLayer<V> boxComponentWithJxLayer(V component) { - JXLayer<V> layer = getLayer(component); - if (layer != null) { - return layer; + public static <V extends Component> JLayer<V> boxComponentWithJLayer(V component) { + JLayer<V> layer = getLayer(component); + if (layer == null) { + layer = new JLayer<>(); + layer.setView(component); } - layer = new JXLayer<V>(); - layer.setView(component); return layer; } - public static List<JComponent> getLayeredComponents(JAXXObject object) { - List<JComponent> result = new ArrayList<JComponent>(); + public static List<Component> getLayeredComponents(JAXXObject object) { + List<Component> result = new ArrayList<>(); for (Map.Entry<String, Object> child : object.get$objectMap().entrySet()) { if (child.getValue() == null) { log.warn("find a null object in $objectMap " + child.getKey()); @@ -57,20 +56,23 @@ public class JXLayers { return result; } - public static <V extends JComponent> JXLayer<V> getLayer(V comp) { + public static <V extends Component> JLayer<V> getLayer(V comp) { if (!isLayered(comp)) { return null; } - return (JXLayer<V>) comp.getParent(); + return (JLayer<V>) comp.getParent(); } - public static void setLayerUI(JComponent comp, LayerUI<JComponent> ui) { - JXLayer<JComponent> layer = getLayer(comp); - layer.setUI(ui); + public static <V extends Component> void setLayerUI(Component comp, LayerUI<V> ui) { + JLayer<V> layer = (JLayer<V>) getLayer(comp); + if (layer != null) { + layer.setUI(ui); + } } - public static boolean isLayered(JComponent comp) { + public static boolean isLayered(Component comp) { Container parent = comp.getParent(); - return parent != null && parent instanceof JXLayer<?>; + return parent != null && parent instanceof JLayer<?>; } + } diff --git a/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/SwingUtil.java b/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/SwingUtil.java index bbd664b..2954686 100644 --- a/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/SwingUtil.java +++ b/jaxx-runtime/src/main/java/org/nuiton/jaxx/runtime/SwingUtil.java @@ -26,7 +26,7 @@ import org.nuiton.jaxx.runtime.swing.editor.BooleanCellEditor; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.jdesktop.swingx.JXTreeTable; -import org.nuiton.jaxx.swing.extra.Icons; +import org.nuiton.jaxx.runtime.api.swing.Icons; import org.nuiton.jaxx.swing.extra.table.renderer.BooleanCellRenderer; import org.nuiton.jaxx.swing.extra.table.renderer.EmptyNumberTableCellRenderer; import org.nuiton.jaxx.swing.extra.table.renderer.EnumTableCellRenderer; diff --git a/jaxx-swing-extra/pom.xml b/jaxx-swing-extra/pom.xml index 0a1d821..a6294e4 100644 --- a/jaxx-swing-extra/pom.xml +++ b/jaxx-swing-extra/pom.xml @@ -97,12 +97,6 @@ <artifactId>swingx-core</artifactId> </dependency> - <!-- TODO Remove this and use jdk7 API --> - <dependency> - <groupId>org.swinglabs</groupId> - <artifactId>jxlayer</artifactId> - </dependency> - <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Swings.java b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Swings.java index 6ea0c0b..3bdff52 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Swings.java +++ b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/Swings.java @@ -2,9 +2,9 @@ package org.nuiton.jaxx.swing.extra; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.jdesktop.jxlayer.JXLayer; import javax.swing.JComponent; +import javax.swing.JLayer; import javax.swing.JLayeredPane; import javax.swing.JRootPane; import java.awt.Component; @@ -150,14 +150,12 @@ public class Swings { // Two passes: see comment in sun.awt.SunGraphicsCallback for (int i = 0; i < ncomponents; i++) { Component comp = component[i]; - Rectangle rect = null; + Rectangle rect; if (comp != null && !comp.isLightweight()) { - if (rect == null || rect.width == 0 || rect.height == 0) { - rect = comp.getBounds(); - } - if (comp instanceof JXLayer<?>) { - JXLayer<?> layer = (JXLayer<?>) comp; + rect = comp.getBounds(); + if (comp instanceof JLayer<?>) { + JLayer<?> layer = (JLayer<?>) comp; comp = layer.getView(); } if (comp instanceof Container) { @@ -179,14 +177,12 @@ public class Swings { for (int i = 0; i < ncomponents; i++) { Component comp = component[i]; - Rectangle rect = null; + Rectangle rect; if (comp != null && comp.isLightweight()) { - if (rect == null || rect.width == 0 || rect.height == 0) { - rect = comp.getBounds(); - } - if (comp instanceof JXLayer<?>) { - JXLayer<?> layer = (JXLayer<?>) comp; + rect = comp.getBounds(); + if (comp instanceof JLayer<?>) { + JLayer<?> layer = (JLayer<?>) comp; comp = layer.getView(); } if (comp instanceof Container) { @@ -218,13 +214,14 @@ public class Swings { * @param component le component à centrer */ public static void center(Component parent, Component component) { - if (parent == null) { - return; + if (parent != null) { + + Rectangle r = parent.getBounds(); + int x = r.x + (r.width - component.getSize().width) / 2; + int y = r.y + (r.height - component.getSize().height) / 2; + component.setLocation(x, y); + } - Rectangle r = parent.getBounds(); - int x = r.x + (r.width - component.getSize().width) / 2; - int y = r.y + (r.height - component.getSize().height) / 2; - component.setLocation(x, y); } public static Dimension newMinDimension() { diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI.java b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI.java index 2fe60cc..8061ca5 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI.java +++ b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI.java @@ -21,15 +21,17 @@ */ package org.nuiton.jaxx.swing.extra.layer; -import org.jdesktop.jxlayer.JXLayer; -import org.jdesktop.jxlayer.plaf.AbstractLayerUI; import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JComponent; +import javax.swing.JLayer; +import javax.swing.plaf.LayerUI; +import java.awt.AWTEvent; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; +import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; @@ -38,6 +40,7 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; +import java.beans.PropertyChangeEvent; import java.util.Arrays; import java.util.List; @@ -50,13 +53,13 @@ import java.util.List; * To hook an click on the layer's icon, you can : * <p/> * <ul><li>pass an Action via method {@link #setAcceptAction(Action)}</li> - * <li>override the method {@link #acceptEvent(MouseEvent, JXLayer)}</li> + * <li>override the method {@link #acceptEvent(MouseEvent, JLayer)}</li> * </ul> * * @author Tony Chemit - chemit@codelutin.com * @since 1.2 */ -public class BlockingLayerUI extends AbstractLayerUI<JComponent> { +public class BlockingLayerUI extends LayerUI<JComponent> { public static final String CAN_CLICK_PROPERTY = "canClick"; @@ -65,7 +68,8 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { public static final String BLOCK_ICON_PROPERTY = "blockIcon"; public static final String BLOCK_PROPERTY = "block"; -// private static final long serialVersionUID = 1L; + + private static final long serialVersionUID = 1L; /** Action to be treated when click on icon */ protected Action acceptAction; @@ -137,9 +141,17 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } } + public void setDirty(boolean dirty) { + firePropertyChange("dirty", null, dirty); + } + @Override - public void setDirty(boolean isDirty) { - super.setDirty(isDirty); + public void applyPropertyChange(PropertyChangeEvent evt, JLayer<? extends JComponent> l) { + super.applyPropertyChange(evt, l); + if (!"dirty".equals(evt.getPropertyName()) + || evt.getNewValue() == Boolean.TRUE) { + l.repaint(); + } } public void setBlockIcon(BufferedImage blockIcon) { @@ -184,7 +196,7 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } @Override - protected void processKeyEvent(KeyEvent e, JXLayer<? extends JComponent> l) { + protected void processKeyEvent(KeyEvent e, JLayer<? extends JComponent> l) { if (useIcon) { e.consume(); return; @@ -206,7 +218,7 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } @Override - protected void processMouseMotionEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseMotionEvent(MouseEvent e, JLayer<? extends JComponent> l) { if (useIcon) { updateCanClickState(l, e); e.consume(); @@ -228,7 +240,7 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } @Override - protected void processMouseEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseEvent(MouseEvent e, JLayer<? extends JComponent> l) { if (useIcon) { switch (e.getID()) { case MouseEvent.MOUSE_ENTERED: @@ -277,7 +289,7 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } @Override - protected void processMouseWheelEvent(MouseWheelEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseWheelEvent(MouseWheelEvent e, JLayer<? extends JComponent> l) { if (useIcon) { @@ -306,8 +318,10 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } @Override - protected void paintLayer(Graphics2D g2, JXLayer<? extends JComponent> l) { - super.paintLayer(g2, l); + public void paint(Graphics g, JComponent c) { + super.paint(g, c); + JLayer l = (JLayer) c; + Graphics2D g2 = (Graphics2D) g; if (block && blockingColor != null) { // to be in sync with the view if the layer has a border /*Insets layerInsets = l.getInsets(); @@ -330,7 +344,33 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { } } - protected void acceptEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + private static final long ACCEPTED_EVENTS = + AWTEvent.COMPONENT_EVENT_MASK | + AWTEvent.CONTAINER_EVENT_MASK | + AWTEvent.FOCUS_EVENT_MASK | + AWTEvent.KEY_EVENT_MASK | + AWTEvent.MOUSE_WHEEL_EVENT_MASK | + AWTEvent.MOUSE_MOTION_EVENT_MASK | + AWTEvent.MOUSE_EVENT_MASK | + AWTEvent.INPUT_METHOD_EVENT_MASK | + AWTEvent.HIERARCHY_EVENT_MASK | + AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK; + + @Override + public void installUI(JComponent c) { + super.installUI(c); + JLayer l = (JLayer) c; + l.setLayerEventMask(ACCEPTED_EVENTS); + } + + @Override + public void uninstallUI(JComponent c) { + super.uninstallUI(c); + JLayer l = (JLayer) c; + l.setLayerEventMask(0); + } + + protected void acceptEvent(MouseEvent e, JLayer<? extends JComponent> l) { if (acceptAction != null) { acceptAction.putValue("layer", l); Component source = l.getView(); @@ -352,21 +392,22 @@ public class BlockingLayerUI extends AbstractLayerUI<JComponent> { return icon; } - protected void updateCanClickState(JXLayer<? extends JComponent> l, MouseEvent e) { + protected void updateCanClickState(JLayer<? extends JComponent> l, MouseEvent e) { // udpate toolTipText Point layerLocation = l.getView().getLocation(); Point mousePoint = e.getPoint(); BufferedImage currentIcon = getCurrentIcon(); if (currentIcon == null) { setCanClick(false); - return; + } else { + int minX = (int) layerLocation.getX() + l.getWidth() - currentIcon.getWidth(); + int maxX = (int) layerLocation.getX() + l.getWidth(); + int minY = 0; + int maxY = currentIcon.getHeight(); + boolean accept = minX <= mousePoint.getX() && mousePoint.getX() <= maxX; + accept &= minY <= mousePoint.getLocation().getY() && mousePoint.getLocation().getY() <= maxY; + setCanClick(accept); } - int minX = (int) layerLocation.getX() + l.getWidth() - currentIcon.getWidth(); - int maxX = (int) layerLocation.getX() + l.getWidth(); - int minY = 0; - int maxY = currentIcon.getHeight(); - boolean accept = minX <= mousePoint.getX() && mousePoint.getX() <= maxX; - accept &= minY <= mousePoint.getLocation().getY() && mousePoint.getLocation().getY() <= maxY; - setCanClick(accept); } + } diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI2.java b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI2.java index cc78323..55020f3 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI2.java +++ b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/layer/BlockingLayerUI2.java @@ -21,15 +21,16 @@ */ package org.nuiton.jaxx.swing.extra.layer; -import org.jdesktop.jxlayer.JXLayer; -import org.jdesktop.jxlayer.plaf.AbstractLayerUI; - import javax.swing.Action; import javax.swing.ImageIcon; import javax.swing.JComponent; +import javax.swing.JLayer; +import javax.swing.plaf.LayerUI; +import java.awt.AWTEvent; import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Component; +import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Point; import java.awt.RenderingHints; @@ -38,6 +39,7 @@ import java.awt.event.KeyEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseWheelEvent; import java.awt.image.BufferedImage; +import java.beans.PropertyChangeEvent; /** * A JXLayer ui implementation that permits to block a component but still @@ -51,13 +53,13 @@ import java.awt.image.BufferedImage; * To hook an click on the layer's icon, you can : * <p/> * <ul><li>pass an Action via method {@link #setAcceptAction(Action)}</li> - * <li>override the method {@link #acceptEvent(MouseEvent, JXLayer)}</li> + * <li>override the method {@link #acceptEvent(MouseEvent, JLayer)}</li> * </ul> * * @author Tony Chemit - chemit@codelutin.com * @since 1.3 */ -public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { +public class BlockingLayerUI2 extends LayerUI<JComponent> { public static final String CAN_CLICK_PROPERTY = "canClick"; @@ -105,9 +107,17 @@ public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { } } + public void setDirty(boolean dirty) { + firePropertyChange("dirty", null, dirty); + } + @Override - public void setDirty(boolean isDirty) { - super.setDirty(isDirty); + public void applyPropertyChange(PropertyChangeEvent evt, JLayer<? extends JComponent> l) { + super.applyPropertyChange(evt, l); + if (!"dirty".equals(evt.getPropertyName()) + || evt.getNewValue() == Boolean.TRUE) { + l.repaint(); + } } public void setBlockingColor(Color blockingColor) { @@ -142,22 +152,22 @@ public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { } @Override - protected void processKeyEvent(KeyEvent e, JXLayer<? extends JComponent> l) { + protected void processKeyEvent(KeyEvent e, JLayer<? extends JComponent> l) { e.consume(); } @Override - protected void processMouseMotionEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseMotionEvent(MouseEvent e, JLayer<? extends JComponent> l) { e.consume(); } @Override - protected void processMouseWheelEvent(MouseWheelEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseWheelEvent(MouseWheelEvent e, JLayer<? extends JComponent> l) { e.consume(); } @Override - protected void processMouseEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + protected void processMouseEvent(MouseEvent e, JLayer<? extends JComponent> l) { switch (e.getID()) { case MouseEvent.MOUSE_ENTERED: setCanClick(true); @@ -174,9 +184,37 @@ public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { e.consume(); } + private static final long ACCEPTED_EVENTS = + AWTEvent.COMPONENT_EVENT_MASK | + AWTEvent.CONTAINER_EVENT_MASK | + AWTEvent.FOCUS_EVENT_MASK | + AWTEvent.KEY_EVENT_MASK | + AWTEvent.MOUSE_WHEEL_EVENT_MASK | + AWTEvent.MOUSE_MOTION_EVENT_MASK | + AWTEvent.MOUSE_EVENT_MASK | + AWTEvent.INPUT_METHOD_EVENT_MASK | + AWTEvent.HIERARCHY_EVENT_MASK | + AWTEvent.HIERARCHY_BOUNDS_EVENT_MASK; + + @Override + public void installUI(JComponent c) { + super.installUI(c); + JLayer l = (JLayer) c; + l.setLayerEventMask(ACCEPTED_EVENTS); + } + + @Override + public void uninstallUI(JComponent c) { + super.uninstallUI(c); + JLayer l = (JLayer) c; + l.setLayerEventMask(0); + } + @Override - protected void paintLayer(Graphics2D g2, JXLayer<? extends JComponent> l) { - super.paintLayer(g2, l); + public void paint(Graphics g, JComponent c) { + super.paint(g, c); + JLayer l = (JLayer) c; + Graphics2D g2 = (Graphics2D) g; if (blockingColor != null) { // to be in sync with the view if the layer has a border /*Insets layerInsets = l.getInsets(); @@ -199,7 +237,7 @@ public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { } } - protected void acceptEvent(MouseEvent e, JXLayer<? extends JComponent> l) { + protected void acceptEvent(MouseEvent e, JLayer<? extends JComponent> l) { if (acceptAction != null) { acceptAction.putValue("layer", l); Component source = l.getView(); @@ -221,7 +259,7 @@ public class BlockingLayerUI2 extends AbstractLayerUI<JComponent> { return icon; } - protected void updateCanClickState(JXLayer<JComponent> l, MouseEvent e) { + protected void updateCanClickState(JLayer<JComponent> l, MouseEvent e) { // udpate toolTipText Point layerLocation = l.getView().getLocation(); Point mousePoint = e.getPoint(); diff --git a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/list/renderer/LocaleListCellRenderer.java b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/list/renderer/LocaleListCellRenderer.java index a644341..a34d326 100644 --- a/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/list/renderer/LocaleListCellRenderer.java +++ b/jaxx-swing-extra/src/main/java/org/nuiton/jaxx/swing/extra/list/renderer/LocaleListCellRenderer.java @@ -23,7 +23,7 @@ package org.nuiton.jaxx.swing.extra.list.renderer; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; -import org.nuiton.jaxx.swing.extra.Icons; +import org.nuiton.jaxx.runtime.api.swing.Icons; import javax.swing.DefaultListCellRenderer; import javax.swing.Icon; -- To stop receiving notification emails like this one, please contact nuiton.org SCM administrator <admin+scm@nuiton.org>.