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