summaryrefslogtreecommitdiffstats
path: root/server/src/com/vaadin/ui/Layout.java
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/com/vaadin/ui/Layout.java')
-rw-r--r--server/src/com/vaadin/ui/Layout.java239
1 files changed, 239 insertions, 0 deletions
diff --git a/server/src/com/vaadin/ui/Layout.java b/server/src/com/vaadin/ui/Layout.java
new file mode 100644
index 0000000000..6a95d23f8c
--- /dev/null
+++ b/server/src/com/vaadin/ui/Layout.java
@@ -0,0 +1,239 @@
+/*
+ * Copyright 2011 Vaadin Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License"); you may not
+ * use this file except in compliance with the License. You may obtain a copy of
+ * the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations under
+ * the License.
+ */
+
+package com.vaadin.ui;
+
+import java.io.Serializable;
+
+import com.vaadin.shared.ui.VMarginInfo;
+import com.vaadin.shared.ui.AlignmentInfo.Bits;
+
+/**
+ * Extension to the {@link ComponentContainer} interface which adds the
+ * layouting control to the elements in the container. This is required by the
+ * various layout components to enable them to place other components in
+ * specific locations in the UI.
+ *
+ * @author Vaadin Ltd.
+ * @since 3.0
+ */
+public interface Layout extends ComponentContainer, Serializable {
+
+ /**
+ * Enable layout margins. Affects all four sides of the layout. This will
+ * tell the client-side implementation to leave extra space around the
+ * layout. The client-side implementation decides the actual amount, and it
+ * can vary between themes.
+ *
+ * @param enabled
+ */
+ public void setMargin(boolean enabled);
+
+ /**
+ * Enable specific layout margins. This will tell the client-side
+ * implementation to leave extra space around the layout in specified edges,
+ * clockwise from top (top, right, bottom, left). The client-side
+ * implementation decides the actual amount, and it can vary between themes.
+ *
+ * @param top
+ * @param right
+ * @param bottom
+ * @param left
+ */
+ public void setMargin(boolean top, boolean right, boolean bottom,
+ boolean left);
+
+ /**
+ * AlignmentHandler is most commonly an advanced {@link Layout} that can
+ * align its components.
+ */
+ public interface AlignmentHandler extends Serializable {
+
+ /**
+ * Contained component should be aligned horizontally to the left.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_LEFT = Bits.ALIGNMENT_LEFT;
+
+ /**
+ * Contained component should be aligned horizontally to the right.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_RIGHT = Bits.ALIGNMENT_RIGHT;
+
+ /**
+ * Contained component should be aligned vertically to the top.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_TOP = Bits.ALIGNMENT_TOP;
+
+ /**
+ * Contained component should be aligned vertically to the bottom.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_BOTTOM = Bits.ALIGNMENT_BOTTOM;
+
+ /**
+ * Contained component should be horizontally aligned to center.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_HORIZONTAL_CENTER = Bits.ALIGNMENT_HORIZONTAL_CENTER;
+
+ /**
+ * Contained component should be vertically aligned to center.
+ *
+ * @deprecated Use of {@link Alignment} class and its constants
+ */
+ @Deprecated
+ public static final int ALIGNMENT_VERTICAL_CENTER = Bits.ALIGNMENT_VERTICAL_CENTER;
+
+ /**
+ * Set alignment for one contained component in this layout. Alignment
+ * is calculated as a bit mask of the two passed values.
+ *
+ * @deprecated Use {@link #setComponentAlignment(Component, Alignment)}
+ * instead
+ *
+ * @param childComponent
+ * the component to align within it's layout cell.
+ * @param horizontalAlignment
+ * the horizontal alignment for the child component (left,
+ * center, right). Use ALIGNMENT constants.
+ * @param verticalAlignment
+ * the vertical alignment for the child component (top,
+ * center, bottom). Use ALIGNMENT constants.
+ */
+ @Deprecated
+ public void setComponentAlignment(Component childComponent,
+ int horizontalAlignment, int verticalAlignment);
+
+ /**
+ * Set alignment for one contained component in this layout. Use
+ * predefined alignments from Alignment class.
+ *
+ * Example: <code>
+ * layout.setComponentAlignment(myComponent, Alignment.TOP_RIGHT);
+ * </code>
+ *
+ * @param childComponent
+ * the component to align within it's layout cell.
+ * @param alignment
+ * the Alignment value to be set
+ */
+ public void setComponentAlignment(Component childComponent,
+ Alignment alignment);
+
+ /**
+ * Returns the current Alignment of given component.
+ *
+ * @param childComponent
+ * @return the {@link Alignment}
+ */
+ public Alignment getComponentAlignment(Component childComponent);
+
+ }
+
+ /**
+ * This type of layout supports automatic addition of space between its
+ * components.
+ *
+ */
+ public interface SpacingHandler extends Serializable {
+ /**
+ * Enable spacing between child components within this layout.
+ *
+ * <p>
+ * <strong>NOTE:</strong> This will only affect the space between
+ * components, not the space around all the components in the layout
+ * (i.e. do not confuse this with the cellspacing attribute of a HTML
+ * Table). Use {@link #setMargin(boolean)} to add space around the
+ * layout.
+ * </p>
+ *
+ * <p>
+ * See the reference manual for more information about CSS rules for
+ * defining the amount of spacing to use.
+ * </p>
+ *
+ * @param enabled
+ * true if spacing should be turned on, false if it should be
+ * turned off
+ */
+ public void setSpacing(boolean enabled);
+
+ /**
+ *
+ * @return true if spacing between child components within this layout
+ * is enabled, false otherwise
+ */
+ public boolean isSpacing();
+ }
+
+ /**
+ * This type of layout supports automatic addition of margins (space around
+ * its components).
+ */
+ public interface MarginHandler extends Serializable {
+ /**
+ * Enable margins for this layout.
+ *
+ * <p>
+ * <strong>NOTE:</strong> This will only affect the space around the
+ * components in the layout, not space between the components in the
+ * layout. Use {@link #setSpacing(boolean)} to add space between the
+ * components in the layout.
+ * </p>
+ *
+ * <p>
+ * See the reference manual for more information about CSS rules for
+ * defining the size of the margin.
+ * </p>
+ *
+ * @param marginInfo
+ * MarginInfo object containing the new margins.
+ */
+ public void setMargin(MarginInfo marginInfo);
+
+ /**
+ *
+ * @return MarginInfo containing the currently enabled margins.
+ */
+ public MarginInfo getMargin();
+ }
+
+ @SuppressWarnings("serial")
+ public static class MarginInfo extends VMarginInfo implements Serializable {
+
+ public MarginInfo(boolean enabled) {
+ super(enabled, enabled, enabled, enabled);
+ }
+
+ public MarginInfo(boolean top, boolean right, boolean bottom,
+ boolean left) {
+ super(top, right, bottom, left);
+ }
+ }
+}