123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288 |
- /* *************************************************************************
-
- IT Mill Toolkit
-
- Development of Browser User Interfaces Made Easy
-
- Copyright (C) 2000-2006 IT Mill Ltd
-
- *************************************************************************
-
- This product is distributed under commercial license that can be found
- from the product package on license.pdf. Use of this product might
- require purchasing a commercial license from IT Mill Ltd. For guidelines
- on usage, see licensing-guidelines.html
-
- *************************************************************************
-
- For more information, contact:
-
- IT Mill Ltd phone: +358 2 4802 7180
- Ruukinkatu 2-4 fax: +358 2 4802 7181
- 20540, Turku email: info@itmill.com
- Finland company www: www.itmill.com
-
- Primary source for information and releases: www.itmill.com
-
- ********************************************************************** */
-
- package com.itmill.toolkit.ui;
-
- import java.util.Iterator;
-
- import com.itmill.toolkit.terminal.PaintException;
- import com.itmill.toolkit.terminal.PaintTarget;
- import com.itmill.toolkit.terminal.Sizeable;
-
- /**
- * SplitPanel.
- *
- * <code>SplitPanel</code> is a component container, that can contain two
- * components (possibly containers) which are split by divider element.
- *
- * @author IT Mill Ltd.
- * @version
- * @VERSION@
- * @since 5.0
- */
- public class SplitPanel extends AbstractLayout {
-
- /* Predefined orientations ***************************************** */
-
- /**
- * Components are to be layed out vertically.
- */
- public static int ORIENTATION_VERTICAL = 0;
-
- /**
- * Components are to be layed out horizontally.
- */
- public static 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;
-
- /**
- * Creates a new split panel. The orientation of the panels is
- * <code>ORIENTATION_VERTICAL</code>.
- */
- public SplitPanel() {
- orientation = ORIENTATION_VERTICAL;
- setSizeFull();
- }
-
- /**
- * Create a new split panels. The orientation of the panel is given as
- * parameters.
- *
- * @param orientation
- * the Orientation of the layout.
- */
- public SplitPanel(int orientation) {
- this.orientation = orientation;
- setSizeFull();
- }
-
- /**
- * Gets the component UIDL tag.
- *
- * @return the Component UIDL tag as string.
- */
- public String getTag() {
- if (orientation == ORIENTATION_HORIZONTAL) {
- return "hsplitpanel";
- } else {
- return "vsplitpanel";
- }
- }
-
- /**
- * 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.
- */
- 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 != null) {
- // detach old
- removeComponent(firstComponent);
- }
- firstComponent = c;
- super.addComponent(c);
- }
-
- public void setSecondComponent(Component c) {
- if (secondComponent != null) {
- // detach old
- removeComponent(c);
- }
- secondComponent = c;
- super.addComponent(c);
- }
-
- /**
- * Removes the component from this container.
- *
- * @param c
- * the component to be removed.
- */
- public void removeComponent(Component c) {
- super.removeComponent(c);
- if (c == firstComponent)
- firstComponent = null;
- else
- secondComponent = null;
- requestRepaint();
- }
-
- /**
- * Gets the component container iterator for going trough all the components
- * in the container.
- *
- * @return the Iterator of the components inside the container.
- */
- public Iterator getComponentIterator() {
- return new Iterator() {
- int i = 0;
-
- public boolean hasNext() {
- if (i < (firstComponent == null ? 0 : 1)
- + (secondComponent == null ? 0 : 1))
- return true;
- return false;
- }
-
- public Object 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);
- }
- };
- }
-
- /**
- * Paints the content of this component.
- *
- * @param target
- * the Paint Event.
- * @throws PaintException
- * if the paint operation failed.
- */
- public void paintContent(PaintTarget target) throws PaintException {
-
- super.paintContent(target);
-
- String position = pos + UNIT_SYMBOLS[posUnit];
-
- target.addAttribute("position", position);
-
- if (firstComponent != null)
- firstComponent.paint(target);
- else
- (new OrderedLayout()).paint(target);
- if (secondComponent != null)
- secondComponent.paint(target);
- else
- (new OrderedLayout()).paint(target);
- }
-
- /**
- * Gets the orientation of the container.
- *
- * @return the Value of property orientation.
- */
- public int getOrientation() {
- return this.orientation;
- }
-
- /**
- * Set the orientation of the container.
- *
- * @param orientation
- * the New value of property orientation.
- */
- public void setOrientation(int orientation) {
-
- // Checks the validity of the argument
- if (orientation < ORIENTATION_VERTICAL
- || orientation > ORIENTATION_HORIZONTAL)
- throw new IllegalArgumentException();
-
- this.orientation = orientation;
- requestRepaint();
- }
-
- /* Documented in superclass */
- public void replaceComponent(Component oldComponent, Component newComponent) {
- if (oldComponent == firstComponent) {
- setFirstComponent(newComponent);
- } else if (oldComponent == secondComponent) {
- setSecondComponent(secondComponent);
- }
- requestRepaint();
- }
-
- /**
- * Moves the position of the splitter.
- *
- * @param pos
- * the new size of the first region in persentage
- */
- public void setSplitPosition(int pos) {
- setSplitPosition(pos, UNITS_PERCENTAGE);
- }
-
- /**
- * 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) {
- this.pos = pos;
- this.posUnit = unit;
- }
-
- }
|