Package org.springframework.ide.eclipse.config.graph.figures

Source Code of org.springframework.ide.eclipse.config.graph.figures.BorderedContainerFigure$Expander

/*******************************************************************************
*  Copyright (c) 2012 VMware, Inc.
*  All rights reserved. This program and the accompanying materials
*  are made available under the terms of the Eclipse Public License v1.0
*  which accompanies this distribution, and is available at
*  http://www.eclipse.org/legal/epl-v10.html
*
*  Contributors:
*      VMware, Inc. - initial API and implementation
*******************************************************************************/
package org.springframework.ide.eclipse.config.graph.figures;

import org.eclipse.draw2d.ActionListener;
import org.eclipse.draw2d.ButtonModel;
import org.eclipse.draw2d.ChangeEvent;
import org.eclipse.draw2d.ChangeListener;
import org.eclipse.draw2d.Clickable;
import org.eclipse.draw2d.ColorConstants;
import org.eclipse.draw2d.FreeformLayout;
import org.eclipse.draw2d.Label;
import org.eclipse.draw2d.Triangle;
import org.eclipse.draw2d.geometry.Dimension;
import org.eclipse.draw2d.geometry.Point;
import org.eclipse.draw2d.geometry.Rectangle;

/**
* @author Leo Dos Santos
*/
public class BorderedContainerFigure extends SubgraphFigure {

  private class Expander extends Clickable {

    private final Triangle triangle;

    public Expander() {
      setStyle(Clickable.STYLE_TOGGLE);
      triangle = new Triangle();
      triangle.setSize(10, 10);
      triangle.setBackgroundColor(ColorConstants.black);
      triangle.setForegroundColor(ColorConstants.black);
      triangle.setFill(true);
      triangle.setDirection(Triangle.EAST);
      triangle.setLocation(new Point(5, 3));
      setLayoutManager(new FreeformLayout());
      add(triangle);
      setPreferredSize(15, 15);
      addChangeListener(new ChangeListener() {
        public void handleStateChanged(ChangeEvent event) {
          if (event.getPropertyName().equals(ButtonModel.SELECTED_PROPERTY)) {
            handleExpandedStateChanged();
          }
          else if (event.getPropertyName().equals(ButtonModel.MOUSEOVER_PROPERTY)) {
            repaint();
          }
        }
      });
    }

    protected void open() {
      triangle.setDirection(Triangle.SOUTH);
    }

    protected void close() {
      triangle.setDirection(Triangle.EAST);
    }

  }

  private final Expander expander;

  private boolean isExpanded = false;

  public BorderedContainerFigure(Label header, int direction) {
    super(header, new Label(""), direction); //$NON-NLS-1$
    expander = new Expander();
    add(expander);
    setBorder(new ConnectorBorder(direction, 0, 0));
    setOpaque(true);
  }

  public void addActionListener(ActionListener listener) {
    expander.addActionListener(listener);
  }

  @Override
  public Dimension getPreferredSize(int wHint, int hHint) {
    Dimension dim = new Dimension();
    int wHeader = getHeader().getPreferredSize().width;
    wHeader += expander.getPreferredSize().width;
    int wFooter = getFooter().getPreferredSize().width;
    dim.width = wHeader >= wFooter ? wHeader : wFooter;
    dim.width += getInsets().getWidth();
    dim.height = 50;
    return dim;
  }

  protected void handleExpandedStateChanged() {
    if (isExpanded) {
      expander.close();
    }
    else {
      expander.open();
    }
    isExpanded = !isExpanded;
  }

  public boolean isExpanded() {
    return isExpanded;
  }

  @Override
  public void setBounds(Rectangle rect) {
    super.setBounds(rect);
    getClientArea(rect);

    Dimension size = expander.getPreferredSize();
    expander.setSize(size);
    int dy = 0;
    int headerHeight = header.getBounds().height;
    int expanderHeight = expander.getBounds().height;
    if (headerHeight > expanderHeight) {
      dy = (headerHeight - expanderHeight) / 2;
    }
    expander.setLocation(rect.getTopLeft().translate(0, dy));

    header.translate(expander.getSize().width, 0);
    footer.setLocation(new Point(0, 0));
    footer.setSize(0, 0);
  }

}
TOP

Related Classes of org.springframework.ide.eclipse.config.graph.figures.BorderedContainerFigure$Expander

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.