From 7857f67d6e442e9f1db551513adec454cffec1db Mon Sep 17 00:00:00 2001 From: Artur Signell Date: Wed, 3 Dec 2008 12:55:50 +0000 Subject: [PATCH] Fix for #2278 - MarginHandler refactoring. - Added MarginHandler interface which contains getMargin() and setMargin(MarginInfo). - Renamed client side MarginInfo to IMarginInfo to avoid mixups. svn changeset:6081/svn branch:trunk --- .../gwt/client/ui/ICoordinateLayout.java | 8 ++-- .../terminal/gwt/client/ui/IFormLayout.java | 2 +- .../terminal/gwt/client/ui/IGridLayout.java | 2 +- .../ui/{MarginInfo.java => IMarginInfo.java} | 14 ++++--- .../gwt/client/ui/layout/CellBasedLayout.java | 6 +-- src/com/itmill/toolkit/ui/AbstractLayout.java | 25 ++++++++++-- src/com/itmill/toolkit/ui/Layout.java | 39 +++++++++++++++++++ 7 files changed, 79 insertions(+), 17 deletions(-) rename src/com/itmill/toolkit/terminal/gwt/client/ui/{MarginInfo.java => IMarginInfo.java} (78%) diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/ICoordinateLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/ICoordinateLayout.java index 29b9f4044a..1adfd715c0 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/ICoordinateLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/ICoordinateLayout.java @@ -64,7 +64,7 @@ public class ICoordinateLayout extends ComplexPanel implements Container, // current layout margins and width/height protected int[] layout = new int[6]; - protected MarginInfo marginInfo; // from UIDL + protected IMarginInfo marginInfo; // from UIDL protected int[] margins; // from CSS public ICoordinateLayout() { @@ -79,7 +79,7 @@ public class ICoordinateLayout extends ComplexPanel implements Container, DOM.setStyleAttribute(getElement(), "zoom", "1"); } - marginInfo = new MarginInfo(0); + marginInfo = new IMarginInfo(0); // Init data structures componentList = new ArrayList(); @@ -124,9 +124,9 @@ public class ICoordinateLayout extends ComplexPanel implements Container, // Enable / disable margins if (uidl.hasAttribute("margins")) { - marginInfo = new MarginInfo(uidl.getIntAttribute("margins")); + marginInfo = new IMarginInfo(uidl.getIntAttribute("margins")); } else { - marginInfo = new MarginInfo(0); + marginInfo = new IMarginInfo(0); } // Start going through the component tree diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java index fd8abd0dd2..54a24608e1 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IFormLayout.java @@ -54,7 +54,7 @@ public class IFormLayout extends SimplePanel implements Container { } public void updateFromUIDL(UIDL uidl, ApplicationConnection client) { - final MarginInfo margins = new MarginInfo(uidl + final IMarginInfo margins = new IMarginInfo(uidl .getIntAttribute("margins")); Element margin = getElement(); diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java index bf82cf8d15..3be1f34971 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IGridLayout.java @@ -589,7 +589,7 @@ public class IGridLayout extends SimplePanel implements Paintable, Container { } private void handleMargins(UIDL uidl) { - final MarginInfo margins = new MarginInfo(uidl + final IMarginInfo margins = new IMarginInfo(uidl .getIntAttribute("margins")); String styles = CLASSNAME + "-margin"; diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/MarginInfo.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/IMarginInfo.java similarity index 78% rename from src/com/itmill/toolkit/terminal/gwt/client/ui/MarginInfo.java rename to src/com/itmill/toolkit/terminal/gwt/client/ui/IMarginInfo.java index 68d2e2eadf..dde94d76a3 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/MarginInfo.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/IMarginInfo.java @@ -4,7 +4,7 @@ package com.itmill.toolkit.terminal.gwt.client.ui; -public class MarginInfo { +public class IMarginInfo { private static final int TOP = 1; private static final int RIGHT = 2; @@ -13,11 +13,11 @@ public class MarginInfo { private int bitMask; - public MarginInfo(int bitMask) { + public IMarginInfo(int bitMask) { this.bitMask = bitMask; } - public MarginInfo(boolean top, boolean right, boolean bottom, boolean left) { + public IMarginInfo(boolean top, boolean right, boolean bottom, boolean left) { setMargins(top, right, bottom, left); } @@ -29,6 +29,10 @@ public class MarginInfo { bitMask += left ? LEFT : 0; } + public void setMargins(IMarginInfo marginInfo) { + bitMask = marginInfo.bitMask; + } + public boolean hasLeft() { return (bitMask & LEFT) == LEFT; } @@ -58,11 +62,11 @@ public class MarginInfo { } public boolean equals(Object obj) { - if (!(obj instanceof MarginInfo)) { + if (!(obj instanceof IMarginInfo)) { return false; } - return ((MarginInfo) obj).bitMask == bitMask; + return ((IMarginInfo) obj).bitMask == bitMask; } } diff --git a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/CellBasedLayout.java b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/CellBasedLayout.java index 1e7cd824a0..0e9991669d 100644 --- a/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/CellBasedLayout.java +++ b/src/com/itmill/toolkit/terminal/gwt/client/ui/layout/CellBasedLayout.java @@ -14,7 +14,7 @@ import com.itmill.toolkit.terminal.gwt.client.BrowserInfo; import com.itmill.toolkit.terminal.gwt.client.Container; import com.itmill.toolkit.terminal.gwt.client.Paintable; import com.itmill.toolkit.terminal.gwt.client.UIDL; -import com.itmill.toolkit.terminal.gwt.client.ui.MarginInfo; +import com.itmill.toolkit.terminal.gwt.client.ui.IMarginInfo; public abstract class CellBasedLayout extends ComplexPanel implements Container { @@ -28,7 +28,7 @@ public abstract class CellBasedLayout extends ComplexPanel implements Container public static final int ORIENTATION_HORIZONTAL = 1; protected Margins activeMargins = new Margins(0, 0, 0, 0); - protected MarginInfo activeMarginsInfo = new MarginInfo(-1); + protected IMarginInfo activeMarginsInfo = new IMarginInfo(-1); protected boolean spacingEnabled = false; protected final Spacing spacingFromCSS = new Spacing(12, 12); @@ -184,7 +184,7 @@ public abstract class CellBasedLayout extends ComplexPanel implements Container private void updateMarginAndSpacingInfo(UIDL uidl) { int bitMask = uidl.getIntAttribute("margins"); if (activeMarginsInfo.getBitMask() != bitMask) { - activeMarginsInfo = new MarginInfo(bitMask); + activeMarginsInfo = new IMarginInfo(bitMask); marginsNeedsRecalculation = true; } boolean spacing = uidl.getBooleanAttribute("spacing"); diff --git a/src/com/itmill/toolkit/ui/AbstractLayout.java b/src/com/itmill/toolkit/ui/AbstractLayout.java index 59f7aa1923..c849c86b39 100644 --- a/src/com/itmill/toolkit/ui/AbstractLayout.java +++ b/src/com/itmill/toolkit/ui/AbstractLayout.java @@ -6,7 +6,7 @@ package com.itmill.toolkit.ui; import com.itmill.toolkit.terminal.PaintException; import com.itmill.toolkit.terminal.PaintTarget; -import com.itmill.toolkit.terminal.gwt.client.ui.MarginInfo; +import com.itmill.toolkit.ui.Layout.MarginHandler; /** * An abstract class that defines default implementation for the {@link Layout} @@ -18,9 +18,9 @@ import com.itmill.toolkit.terminal.gwt.client.ui.MarginInfo; * @since 5.0 */ public abstract class AbstractLayout extends AbstractComponentContainer - implements Layout { + implements Layout, MarginHandler { - protected MarginInfo margins = new MarginInfo(false, false, false, false); + protected MarginInfo margins = new MarginInfo(false); /* * (non-Javadoc) @@ -39,6 +39,25 @@ public abstract class AbstractLayout extends AbstractComponentContainer requestRepaint(); } + /* + * (non-Javadoc) + * + * @see com.itmill.toolkit.ui.Layout.MarginHandler#getMargin() + */ + public MarginInfo getMargin() { + return margins; + } + + /* + * (non-Javadoc) + * + * @see com.itmill.toolkit.ui.Layout.MarginHandler#setMargin(MarginInfo) + */ + public void setMargin(MarginInfo marginInfo) { + margins.setMargins(marginInfo); + requestRepaint(); + } + /* * (non-Javadoc) * diff --git a/src/com/itmill/toolkit/ui/Layout.java b/src/com/itmill/toolkit/ui/Layout.java index e9ed263bb5..deb72fcd91 100644 --- a/src/com/itmill/toolkit/ui/Layout.java +++ b/src/com/itmill/toolkit/ui/Layout.java @@ -5,6 +5,7 @@ package com.itmill.toolkit.ui; import com.itmill.toolkit.terminal.gwt.client.ui.AlignmentInfo; +import com.itmill.toolkit.terminal.gwt.client.ui.IMarginInfo; /** * Extension to the {@link ComponentContainer} interface which adds the @@ -130,4 +131,42 @@ public interface Layout extends ComponentContainer { public boolean isSpacingEnabled(); } + /** + * This type of layout can enable margins. + * + * TODO refine javadocs + */ + public interface MarginHandler { + /** + * Enable margins for this layout. + * + *

+ * NOTE: This will only affect margins for the layout, + * not spacing between components inside the layout. Use + * {@link #setSpacing(boolean)} to add space between components in the + * layout. + *

+ * + * @param marginInfo MarginInfo object containing the new margins. + */ + public void setMargin(MarginInfo marginInfo); + + /** + * + * @return MarginInfo containing the currently enabled margins. + */ + public MarginInfo getMargin(); + } + + public static class MarginInfo extends IMarginInfo { + + public MarginInfo(boolean enabled) { + super(enabled, enabled, enabled, enabled); + } + + public MarginInfo(boolean top, boolean right, boolean bottom, + boolean left) { + super(top, right, bottom, left); + } + } } -- 2.39.5