Revision: 1266
Author:   mathiasbr
Date:     2006-08-04 12:39:40 -0700 (Fri, 04 Aug 2006)
ViewCVS:  http://svn.sourceforge.net/spring-rich-c/?rev=1266&view=rev

Log Message:
-----------
fix for RCP-216
All overlays where added now to the tree regardless if they are visible or not.

Modified Paths:
--------------
    
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/DirtyIndicatorInterceptor.java
    
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/OverlayValidationInterceptorFactory.java
    
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/util/OverlayHelper.java
Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/DirtyIndicatorInterceptor.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/DirtyIndicatorInterceptor.java
    2006-08-04 14:20:29 UTC (rev 1265)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/DirtyIndicatorInterceptor.java
    2006-08-04 19:39:40 UTC (rev 1266)
@@ -97,7 +97,9 @@
                     }
                 });
 
-        InterceptorOverlayHelper.attachOverlay(overlay.getControl(), 
component, OverlayHelper.NORTH_WEST, 5, 0);
+        JComponent overlayControl = overlay.getControl();
+        InterceptorOverlayHelper.attachOverlay(overlayControl, component, 
OverlayHelper.NORTH_WEST, overlayControl
+                .getPreferredSize().height / 2, 0);
         overlay.setVisible(false);
     }
 

Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/OverlayValidationInterceptorFactory.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/OverlayValidationInterceptorFactory.java
  2006-08-04 14:20:29 UTC (rev 1265)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/form/builder/support/OverlayValidationInterceptorFactory.java
  2006-08-04 19:39:40 UTC (rev 1266)
@@ -36,11 +36,10 @@
 import org.springframework.richclient.util.OverlayHelper;
 
 /**
- * Adds an "overlay" to a component that is triggered by a validation event. 
The overlaid
- * image is retrieved by the image key "severity.{severityShortCode}.overlay", 
where
- * {severityShortCode} is the number returned by [EMAIL PROTECTED] 
Severity#getShortCode()}. The
- * image is placed at the bottom-left corner of the component, and the image's 
tooltip is
- * set to the validation message.
+ * Adds an "overlay" to a component that is triggered by a validation event. 
The overlaid image is retrieved by the
+ * image key "severity.{severityShortCode}.overlay", where {severityShortCode} 
is the number returned by
+ * [EMAIL PROTECTED] Severity#getShortCode()}. The image is placed at the 
bottom-left corner of the component, and the image's
+ * tooltip is set to the validation message.
  * 
  * @author Oliver Hutchison
  * @see OverlayHelper#attachOverlay
@@ -53,26 +52,30 @@
         textCompHeight = new JTextField().getPreferredSize().height;
     }
 
-    public FormComponentInterceptor getInterceptor( FormModel formModel ) {
+    public FormComponentInterceptor getInterceptor(FormModel formModel) {
         return new OverlayValidationInterceptor(formModel);
     }
 
     public class OverlayValidationInterceptor extends ValidationInterceptor {
 
-        public OverlayValidationInterceptor( FormModel formModel ) {
+        public OverlayValidationInterceptor(FormModel formModel) {
             super(formModel);
         }
 
-        public void processComponent( String propertyName, final JComponent 
component ) {
+        public void processComponent(String propertyName, final JComponent 
component) {
             final ErrorReportingOverlay overlay = new ErrorReportingOverlay();
 
+            if (component.getName() == null) {
+                component.setName(propertyName);
+            }
+
             registerGuarded(propertyName, overlay);
             registerMessageReceiver(propertyName, overlay);
 
-            if( component.getParent() == null ) {
+            if (component.getParent() == null) {
                 PropertyChangeListener waitUntilHasParentListener = new 
PropertyChangeListener() {
-                    public void propertyChange( PropertyChangeEvent e ) {
-                        if( component.getParent() != null ) {
+                    public void propertyChange(PropertyChangeEvent e) {
+                        if (component.getParent() != null) {
                             component.removePropertyChangeListener("ancestor", 
this);
                             attachOverlay(overlay, component);
                         }
@@ -84,10 +87,9 @@
             }
         }
 
-        private void attachOverlay( ErrorReportingOverlay overlay, JComponent 
component ) {
+        private void attachOverlay(ErrorReportingOverlay overlay, JComponent 
component) {
             int yOffset = component.getPreferredSize().height;
-            InterceptorOverlayHelper.attachOverlay(overlay, component, 
SwingConstants.NORTH_WEST, 0, Math.min(yOffset,
-                    textCompHeight));
+            InterceptorOverlayHelper.attachOverlay(overlay, component, 
SwingConstants.SOUTH_WEST, 0, 0);
         }
     }
 
@@ -98,17 +100,17 @@
             return true;
         }
 
-        public void setEnabled( boolean enabled ) {
+        public void setEnabled(final boolean enabled) {
             setVisible(!enabled);
         }
 
-        public void setMessage( Message message ) {
+        public void setMessage(Message message) {
             messageBuffer.setMessage(message);
             message = messageBuffer.getMessage();
             setToolTipText(message.getText());
             Severity severity = message.getSeverity();
 
-            if( severity != null ) {
+            if (severity != null) {
                 IconSource iconSource = (IconSource) 
ApplicationServicesLocator.services().getService(IconSource.class);
                 setIcon(iconSource.getIcon("severity." + severity.getLabel() + 
".overlay"));
             } else {

Modified: 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/util/OverlayHelper.java
===================================================================
--- 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/util/OverlayHelper.java
        2006-08-04 14:20:29 UTC (rev 1265)
+++ 
trunk/spring-richclient/support/src/main/java/org/springframework/richclient/util/OverlayHelper.java
        2006-08-04 19:39:40 UTC (rev 1266)
@@ -33,8 +33,8 @@
 import javax.swing.JLayeredPane;
 import javax.swing.JRootPane;
 import javax.swing.JViewport;
+import javax.swing.Scrollable;
 import javax.swing.SwingConstants;
-import javax.swing.Scrollable;
 
 /**
  * A helper class that attaches one component (the overlay) on top of another
@@ -164,16 +164,17 @@
         try {
             isUpdating = true;
             Container overlayCapableParent = 
getOverlayCapableParent(overlayTarget);
-            if (overlayCapableParent == null || !overlayTarget.isShowing() || 
!overlay.isVisible()) {
-                hideOverlay();
-            }
-            else {
+            if (overlayCapableParent != null) {
                 JLayeredPane layeredPane = 
getLayeredPane(overlayCapableParent);
-                if( layeredPane.isVisible() && layeredPane.isShowing() ) {
+                if (overlay.getParent() == null || overlay.getParent() != 
layeredPane) {
                     putOverlay(layeredPane);
-                    positionOverlay(layeredPane);
                 }
             }
+            if (overlayCapableParent == null || !overlayTarget.isShowing() || 
!overlay.isVisible()) {
+                hideOverlay();
+            } else {
+                positionOverlay(overlayCapableParent);
+            }
         }
         finally {
             isUpdating = false;
@@ -191,27 +192,26 @@
         }
     }
 
-    private void positionOverlay(JLayeredPane layeredPane) {
-        Point layOffset = layeredPane.getLocationOnScreen();
-        Point targetOffset = overlayTarget.getParent().getLocationOnScreen();
-        int centerX = xOffset + (targetOffset.x - layOffset.x);
-        int centerY = yOffset + (targetOffset.y - layOffset.y);
-        Rectangle overlayTargetBounds = overlayTarget.getBounds();
+    private void positionOverlay(Container overlayCapableParent) {
+        Point position = determineComponentLocation(overlayTarget, 
overlayCapableParent);
+        Rectangle targetBounds = overlayTarget.getBounds();
+        Dimension overlayBounds = overlay.getPreferredSize();
+        int tlx = xOffset + position.x - overlayBounds.width / 2;
+        int tly = yOffset + position.y - overlayBounds.height / 2;;
         switch (center) {
         case SwingConstants.NORTH:
         case SwingConstants.NORTH_WEST:
         case SwingConstants.NORTH_EAST:
-            centerY += overlayTargetBounds.y;
             break;
         case SwingConstants.CENTER:
         case SwingConstants.EAST:
         case SwingConstants.WEST:
-            centerY += overlayTargetBounds.y + (overlayTargetBounds.height / 
2);
+            tly += targetBounds.height / 2;
             break;
         case SwingConstants.SOUTH:
         case SwingConstants.SOUTH_EAST:
         case SwingConstants.SOUTH_WEST:
-            centerY += overlayTargetBounds.y + overlayTargetBounds.height;
+            tly += targetBounds.height;
             break;
         default:
             throw new IllegalArgumentException("Unknown value for center [" + 
center + "]");
@@ -220,28 +220,44 @@
         case SwingConstants.WEST:
         case SwingConstants.NORTH_WEST:
         case SwingConstants.SOUTH_WEST:
-            centerX += overlayTargetBounds.x;
             break;
         case SwingConstants.CENTER:
         case SwingConstants.NORTH:
         case SwingConstants.SOUTH:
-            centerX += overlayTargetBounds.x + (overlayTargetBounds.width / 2);
+            tlx += targetBounds.width / 2;
             break;
         case SwingConstants.EAST:
         case SwingConstants.NORTH_EAST:
         case SwingConstants.SOUTH_EAST:
-            centerX += overlayTargetBounds.x + overlayTargetBounds.width;
+            tlx += targetBounds.width;
             break;
         default:
             throw new IllegalArgumentException("Unknown value for center [" + 
center + "]");
         }
         Dimension size = overlay.getPreferredSize();
-        Rectangle newBound = new Rectangle(centerX - (size.width / 2), centerY 
- (size.height / 2), size.width,
-                                           size.height);
+        Rectangle newBound = new Rectangle(tlx, tly, size.width, size.height);
         setOverlayBounds(newBound);
     }
 
-    private void setOverlayBounds(Rectangle newBounds) {
+    /**
+     * Determine the location of a component in the given container.
+     * The component must be in the component tree of the container
+     * 
+     * @param parent
+     * @param component
+     * @return
+     */
+    private Point determineComponentLocation(Component component, Container 
parent) {
+        Point location = component.getLocation();
+        if(component.getParent() == parent) {
+            return location;
+        }
+        Point parentLocation = 
determineComponentLocation(component.getParent(), parent);
+        location.translate(parentLocation.x, parentLocation.y);
+        return location;
+    }
+
+    private void setOverlayBounds(Rectangle newBounds) {        
         if (!newBounds.equals(overlay.getBounds())) {
             overlay.setBounds(newBounds);
         }


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys -- and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV
_______________________________________________
spring-rich-c-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/spring-rich-c-cvs

Reply via email to