summaryrefslogtreecommitdiffstats
path: root/src/com/vaadin/ui/SplitPanel.java
diff options
context:
space:
mode:
authorArtur Signell <artur.signell@itmill.com>2010-11-23 16:12:57 +0000
committerArtur Signell <artur.signell@itmill.com>2010-11-23 16:12:57 +0000
commit3cddcbae1f2064ec4524764ea883af10a5039080 (patch)
tree5ace3e2602133f4320d2df3761af91ed2798cdd2 /src/com/vaadin/ui/SplitPanel.java
parent8e7e091f8077f4200d9cb36c761d6872fd878b3f (diff)
downloadvaadin-framework-3cddcbae1f2064ec4524764ea883af10a5039080.tar.gz
vaadin-framework-3cddcbae1f2064ec4524764ea883af10a5039080.zip
#6020 - Split SplitPanel into HorizontalSplitPanel and VerticalSplitPanel
Refactored SplitPanels to extend an AbstractSplitPanel super class. Deprecated the old SplitPanel class. svn changeset:16113/svn branch:6.5
Diffstat (limited to 'src/com/vaadin/ui/SplitPanel.java')
-rw-r--r--src/com/vaadin/ui/SplitPanel.java431
1 files changed, 7 insertions, 424 deletions
diff --git a/src/com/vaadin/ui/SplitPanel.java b/src/com/vaadin/ui/SplitPanel.java
index 704b04c94c..389bbe1fe2 100644
--- a/src/com/vaadin/ui/SplitPanel.java
+++ b/src/com/vaadin/ui/SplitPanel.java
@@ -4,20 +4,9 @@
package com.vaadin.ui;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.util.Iterator;
-import java.util.Map;
-
-import com.vaadin.event.ComponentEventListener;
-import com.vaadin.event.MouseEvents.ClickEvent;
import com.vaadin.terminal.PaintException;
import com.vaadin.terminal.PaintTarget;
-import com.vaadin.terminal.Sizeable;
-import com.vaadin.terminal.gwt.client.MouseEventDetails;
-import com.vaadin.terminal.gwt.client.ui.VSplitPanel;
import com.vaadin.terminal.gwt.client.ui.VSplitPanelHorizontal;
-import com.vaadin.tools.ReflectTools;
import com.vaadin.ui.ClientWidget.LoadStyle;
/**
@@ -30,10 +19,12 @@ import com.vaadin.ui.ClientWidget.LoadStyle;
* @version
* @VERSION@
* @since 5.0
+ * @deprecated in 6.5. Use {@link HorizontalSplitPanel} or
+ * {@link VerticalSplitPanel} instead.
*/
-@SuppressWarnings("serial")
+@Deprecated
@ClientWidget(value = VSplitPanelHorizontal.class, loadStyle = LoadStyle.EAGER)
-public class SplitPanel extends AbstractLayout {
+public class SplitPanel extends AbstractSplitPanel {
/* Predefined orientations */
@@ -47,81 +38,18 @@ public class SplitPanel extends AbstractLayout {
*/
public static final int ORIENTATION_HORIZONTAL = 1;
- private Component firstComponent;
-
- private Component secondComponent;
-
/**
* Orientation of the layout.
*/
private int orientation;
- private int pos = 50;
-
- private int posUnit = UNITS_PERCENTAGE;
-
- private boolean posReversed = false;
-
- private boolean locked = false;
-
- private static final String SPLITTER_CLICK_EVENT = VSplitPanel.SPLITTER_CLICK_EVENT_IDENTIFIER;
-
- /**
- * Modifiable and Serializable Iterator for the components, used by
- * {@link SplitPanel#getComponentIterator()}.
- */
- private class ComponentIterator implements Iterator<Component>,
- Serializable {
-
- int i = 0;
-
- public boolean hasNext() {
- if (i < getComponentCount()) {
- return true;
- }
- return false;
- }
-
- public Component next() {
- if (!hasNext()) {
- return null;
- }
- i++;
- if (i == 1) {
- return firstComponent == null ? secondComponent
- : firstComponent;
- } else if (i == 2) {
- return secondComponent;
- }
- return null;
- }
-
- public void remove() {
- if (i == 1) {
- if (firstComponent != null) {
- setFirstComponent(null);
- i = 0;
- } else {
- setSecondComponent(null);
- }
- } else if (i == 2) {
- setSecondComponent(null);
- }
- }
- }
-
/**
* Creates a new split panel. The orientation of the panels is
* <code>ORIENTATION_VERTICAL</code>.
- *
- * @deprecated this class will become abstract in a becoming version. Use
- * {@link HorizontalSplitPanel} and {@link VerticalSplitPanel}
- * instead.
*/
- @Deprecated
public SplitPanel() {
+ super();
orientation = ORIENTATION_VERTICAL;
- setSizeFull();
}
/**
@@ -130,125 +58,13 @@ public class SplitPanel extends AbstractLayout {
*
* @param orientation
* the Orientation of the layout.
- *
- * @deprecated this class will become abstract in a becoming version. Use
- * {@link HorizontalSplitPanel} and {@link VerticalSplitPanel}
- * instead.
*/
- @Deprecated
public SplitPanel(int orientation) {
this();
setOrientation(orientation);
}
/**
- * Add a component into this container. The component is added to the right
- * or under the previous component.
- *
- * @param c
- * the component to be added.
- */
- @Override
- public void addComponent(Component c) {
- if (firstComponent == null) {
- firstComponent = c;
- } else if (secondComponent == null) {
- secondComponent = c;
- } else {
- throw new UnsupportedOperationException(
- "Split panel can contain only two components");
- }
- super.addComponent(c);
- requestRepaint();
- }
-
- public void setFirstComponent(Component c) {
- if (firstComponent == c) {
- // Nothing to do
- return;
- }
-
- if (firstComponent != null) {
- // detach old
- removeComponent(firstComponent);
- }
- firstComponent = c;
- super.addComponent(c);
- }
-
- public void setSecondComponent(Component c) {
- if (c == secondComponent) {
- // Nothing to do
- return;
- }
-
- if (secondComponent != null) {
- // detach old
- removeComponent(secondComponent);
- }
- secondComponent = c;
- super.addComponent(c);
- }
-
- /**
- * @return the first Component of this SplitPanel.
- */
- public Component getFirstComponent() {
- return firstComponent;
- }
-
- /**
- * @return the second Component of this SplitPanel.
- */
- public Component getSecondComponent() {
- return secondComponent;
- }
-
- /**
- * Removes the component from this container.
- *
- * @param c
- * the component to be removed.
- */
- @Override
- public void removeComponent(Component c) {
- super.removeComponent(c);
- if (c == firstComponent) {
- firstComponent = null;
- } else {
- secondComponent = null;
- }
- requestRepaint();
- }
-
- /**
- * Gets the component container iterator for going through all the
- * components in the container.
- *
- * @return the Iterator of the components inside the container.
- */
- public Iterator<Component> getComponentIterator() {
- return new ComponentIterator();
- }
-
- /**
- * Gets the number of contained components. Consistent with the iterator
- * returned by {@link #getComponentIterator()}.
- *
- * @return the number of contained components (zero, one or two)
- */
- public int getComponentCount() {
- int count = 0;
- if (firstComponent != null) {
- count++;
- }
- if (secondComponent != null) {
- count++;
- }
- return count;
- }
-
- /**
* Paints the content of this component.
*
* @param target
@@ -260,61 +76,28 @@ public class SplitPanel extends AbstractLayout {
public void paintContent(PaintTarget target) throws PaintException {
super.paintContent(target);
- final String position = pos + UNIT_SYMBOLS[posUnit];
-
if (orientation == ORIENTATION_VERTICAL) {
target.addAttribute("vertical", true);
}
- target.addAttribute("position", position);
-
- if (isLocked()) {
- target.addAttribute("locked", true);
- }
-
- target.addAttribute("reversed", posReversed);
-
- if (firstComponent != null) {
- firstComponent.paint(target);
- } else {
- VerticalLayout temporaryComponent = new VerticalLayout();
- temporaryComponent.setParent(this);
- temporaryComponent.paint(target);
- }
- if (secondComponent != null) {
- secondComponent.paint(target);
- } else {
- VerticalLayout temporaryComponent = new VerticalLayout();
- temporaryComponent.setParent(this);
- temporaryComponent.paint(target);
- }
}
/**
- * Gets the orientation of the container.
+ * Gets the orientation of the split panel.
*
* @return the Value of property orientation.
*
- * @deprecated this class will become abstract in a becoming version. Use
- * {@link HorizontalSplitPanel} and {@link VerticalSplitPanel}
- * instead.
*/
- @Deprecated
public int getOrientation() {
return orientation;
}
/**
- * Set the orientation of the container.
+ * Sets the orientation of the split panel.
*
* @param orientation
* the New value of property orientation.
- *
- * @deprecated this class will become abstract in a becoming version. Use
- * {@link HorizontalSplitPanel} and {@link VerticalSplitPanel}
- * instead.
*/
- @Deprecated
public void setOrientation(int orientation) {
// Checks the validity of the argument
@@ -327,204 +110,4 @@ public class SplitPanel extends AbstractLayout {
requestRepaint();
}
- /* Documented in superclass */
- public void replaceComponent(Component oldComponent, Component newComponent) {
- if (oldComponent == firstComponent) {
- setFirstComponent(newComponent);
- } else if (oldComponent == secondComponent) {
- setSecondComponent(newComponent);
- }
- requestRepaint();
- }
-
- /**
- * Moves the position of the splitter.
- *
- * @param pos
- * the new size of the first region in the unit that was last
- * used (default is percentage)
- */
- public void setSplitPosition(int pos) {
- setSplitPosition(pos, posUnit, true, false);
- }
-
- /**
- * Moves the position of the splitter.
- *
- * @param pos
- * the new size of the region in the unit that was last used
- * (default is percentage)
- * @param reverse
- * if set to true the split splitter position is measured by the
- * second region else it is measured by the first region
- */
- public void setSplitPosition(int pos, boolean reverse) {
- setSplitPosition(pos, posUnit, true, reverse);
- }
-
- /**
- * Moves the position of the splitter with given position and unit.
- *
- * @param pos
- * size of the first region
- * @param unit
- * the unit (from {@link Sizeable}) in which the size is given.
- */
- public void setSplitPosition(int pos, int unit) {
- setSplitPosition(pos, unit, true, false);
- }
-
- /**
- * Moves the position of the splitter with given position and unit.
- *
- * @param pos
- * size of the first region
- * @param unit
- * the unit (from {@link Sizeable}) in which the size is given.
- * @param reverse
- * if set to true the split splitter position is measured by the
- * second region else it is measured by the first region
- *
- */
- public void setSplitPosition(int pos, int unit, boolean reverse) {
- setSplitPosition(pos, unit, true, reverse);
- }
-
- /**
- * Returns the current position of the splitter, in
- * {@link #getSplitPositionUnit()} units.
- *
- * @return position of the splitter
- */
- public int getSplitPosition() {
- return pos;
- }
-
- /**
- * Returns the unit of position of the splitter
- *
- * @return unit of position of the splitter
- */
- public int getSplitPositionUnit() {
- return posUnit;
- }
-
- /**
- * Moves the position of the splitter.
- *
- * @param pos
- * the new size of the first region
- * @param unit
- * the unit (from {@link Sizeable}) in which the size is given.
- * @param repaintNotNeeded
- * true if client side needs to be updated. Use false if the
- * position info has come from the client side, thus it already
- * knows the position.
- */
- private void setSplitPosition(int pos, int unit, boolean repaintNeeded,
- boolean reverse) {
- if (unit != UNITS_PERCENTAGE && unit != UNITS_PIXELS) {
- throw new IllegalArgumentException(
- "Only percentage and pixel units are allowed");
- }
- this.pos = pos;
- posUnit = unit;
- posReversed = reverse;
- if (repaintNeeded) {
- requestRepaint();
- }
- }
-
- /**
- * Lock the SplitPanels position, disabling the user from dragging the split
- * handle.
- *
- * @param locked
- * Set <code>true</code> if locked, <code>false</code> otherwise.
- */
- public void setLocked(boolean locked) {
- this.locked = locked;
- requestRepaint();
- }
-
- /**
- * Is the SplitPanel handle locked (user not allowed to change split
- * position by dragging).
- *
- * @return <code>true</code> if locked, <code>false</code> otherwise.
- */
- public boolean isLocked() {
- return locked;
- }
-
- /*
- * Invoked when a variable of the component changes. Don't add a JavaDoc
- * comment here, we use the default documentation from implemented
- * interface.
- */
- @SuppressWarnings("unchecked")
- @Override
- public void changeVariables(Object source, Map<String, Object> variables) {
-
- super.changeVariables(source, variables);
-
- if (variables.containsKey("position") && !isLocked()) {
- Integer newPos = (Integer) variables.get("position");
- setSplitPosition(newPos, posUnit, posReversed);
- }
-
- if (variables.containsKey(SPLITTER_CLICK_EVENT)) {
- fireClick((Map<String, Object>) variables.get(SPLITTER_CLICK_EVENT));
- }
-
- }
-
- private void fireClick(Map<String, Object> parameters) {
- MouseEventDetails mouseDetails = MouseEventDetails
- .deSerialize((String) parameters.get("mouseDetails"));
-
- fireEvent(new SplitterClickEvent(this, mouseDetails));
- }
-
- /**
- * <code>SplitterClickListener</code> interface for listening for
- * <code>SplitterClickEvent</code> fired by a <code>SplitPanel</code>.
- *
- * @see SplitterClickEvent
- * @since 6.2
- */
- public interface SplitterClickListener extends ComponentEventListener {
-
- public static final Method clickMethod = ReflectTools.findMethod(
- SplitterClickListener.class, "splitterClick",
- SplitterClickEvent.class);
-
- /**
- * SplitPanel splitter has been clicked
- *
- * @param event
- * SplitterClickEvent event.
- */
- public void splitterClick(SplitterClickEvent event);
- }
-
- public class SplitterClickEvent extends ClickEvent {
-
- public SplitterClickEvent(Component source,
- MouseEventDetails mouseEventDetails) {
- super(source, mouseEventDetails);
- }
-
- }
-
- public void addListener(SplitterClickListener listener) {
- addListener(SPLITTER_CLICK_EVENT, SplitterClickEvent.class, listener,
- SplitterClickListener.clickMethod);
- }
-
- public void removeListener(SplitterClickListener listener) {
- removeListener(SPLITTER_CLICK_EVENT, SplitterClickListener.class,
- listener);
- }
-
}