diff options
author | Artur Signell <artur.signell@itmill.com> | 2010-11-23 16:12:57 +0000 |
---|---|---|
committer | Artur Signell <artur.signell@itmill.com> | 2010-11-23 16:12:57 +0000 |
commit | 3cddcbae1f2064ec4524764ea883af10a5039080 (patch) | |
tree | 5ace3e2602133f4320d2df3761af91ed2798cdd2 /src/com/vaadin/ui/SplitPanel.java | |
parent | 8e7e091f8077f4200d9cb36c761d6872fd878b3f (diff) | |
download | vaadin-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.java | 431 |
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); - } - } |