Package org.dyno.visual.swing.widgets.layout

Source Code of org.dyno.visual.swing.widgets.layout.GridBagLayoutAdapter

/************************************************************************************
* Copyright (c) 2008 William Chen.                                                 *
*                                                                                  *
* 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 *
*                                                                                  *
* Use is subject to the terms of Eclipse Public License v1.0.                      *
*                                                                                  *
* Contributors:                                                                    *
*     William Chen - initial API and implementation.                               *
************************************************************************************/

package org.dyno.visual.swing.widgets.layout;

import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Component;
import java.awt.Container;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.LayoutManager;
import java.awt.Point;
import java.awt.Polygon;
import java.awt.Rectangle;
import java.awt.Stroke;

import javax.swing.JComponent;

import org.dyno.visual.swing.plugin.spi.CompositeAdapter;
import org.dyno.visual.swing.plugin.spi.ILayoutBean;
import org.dyno.visual.swing.plugin.spi.LayoutAdapter;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;
import org.eclipse.core.runtime.IProgressMonitor;

public class GridBagLayoutAdapter extends LayoutAdapter implements ILayoutBean {
  public void initConainerLayout(Container container, IProgressMonitor monitor) {
    GridBagLayout layout = new GridBagLayout();
    layout.columnWeights = new double[]{0.0, 0.0, 0.0, 0.0};
    layout.columnWidths = new int[]{40, 40, 40, 40};
    layout.rowWeights = new double[]{0.0, 0.0, 0.0, 0.0};
    layout.rowHeights = new int[]{40, 40, 40, 40};
     container.setLayout(layout);
  }
  @Override
  public boolean dragEnter(Point p) {
    return super.dragEnter(p);
  }

  @Override
  public boolean dragExit(Point p) {
    return super.dragExit(p);
  }

  @Override
  public boolean dragOver(Point p) {
    return super.dragOver(p);
  }

  @Override
  public boolean drop(Point p) {
    WidgetAdapter parent = WidgetAdapter.getWidgetAdapter(container);
    parent.clearAllSelected();
    for (WidgetAdapter todrop : parent.getDropWidget()) {
      container.add(todrop.getParentContainer(), new GridBagConstraints());
      todrop.setSelected(true);
    }
    parent.getRootAdapter().getWidget().validate();
    return super.drop(p);
  }

  @Override
  public boolean cloneLayout(JComponent panel) {
    GridBagLayout layout = (GridBagLayout) container.getLayout();
    panel.setLayout(copyLayout(panel));
    int count = container.getComponentCount();
    for (int i = 0; i < count; i++) {
      JComponent child = (JComponent) container.getComponent(i);
      WidgetAdapter cAdapter = WidgetAdapter.getWidgetAdapter(child);
      panel.add(cAdapter.cloneWidget(), layout.getConstraints(child));
    }
    return true;
  }

  @Override
  protected LayoutManager copyLayout(Container con) {
    GridBagLayout copy = new GridBagLayout();
    return copy;
  }

  @Override
  public void addChildByConstraints(Component child, Object constraints) {
    container.add(child, constraints);
  }
  private static Stroke STROKE = new BasicStroke(1, BasicStroke.CAP_BUTT, BasicStroke.JOIN_BEVEL, 0, new float[] { 2 }, 0);
  @Override
  public void paintGrid(Graphics g) {
    GridBagLayout layout = (GridBagLayout) container.getLayout();
    int[][] row_cols = layout.getLayoutDimensions();
    if (row_cols == null)
      return;
    g.setColor(new Color(0,100,180));
    Stroke old=((Graphics2D)g).getStroke();
    ((Graphics2D)g).setStroke(STROKE);
    int w = container.getWidth();
    int h = container.getHeight();
    Point origin = layout.getLayoutOrigin();
    int[] widths = layout.columnWidths;
    if (widths == null)
      widths = row_cols[0];
    if (widths != null) {
      int x = origin!=null?origin.x:0;
      for (int i = 0; i < widths.length; i++) {
        g.drawLine(x, 0, x, h - 1);
        x += widths[i];
      }
      g.drawLine(x, 0, x, h - 1);
    }
    int[] heights = layout.rowHeights;
    if (heights == null)
      heights = row_cols[1];
    if (heights != null) {
      int y = origin!=null?origin.y:0;
      for (int i = 0; i < heights.length; i++) {
        g.drawLine(0, y, w - 1, y);
        y += heights[i];
      }
      g.drawLine(0, y, w - 1, y);
    }
    ((Graphics2D)g).setStroke(old);   
    WidgetAdapter containerAdapter = WidgetAdapter.getWidgetAdapter(container);
    if (!containerAdapter.isSelected()) {
      g.setColor(Color.lightGray);
      g.drawRect(0, 0, w - 1, h - 1);
    }
  }
  @Override
  public boolean isChildResizable() {
    return false;
 
  @Override
  public void paintAnchor(Graphics g) {
    CompositeAdapter parentAdapter = (CompositeAdapter) WidgetAdapter.getWidgetAdapter(container);
    int count = parentAdapter.getChildCount();
    for(int i=0;i<count;i++){
      Component child = parentAdapter.getChild(i);
      WidgetAdapter childAdapter = WidgetAdapter.getWidgetAdapter(child);
      if(childAdapter.isSelected()){
        Rectangle rect=child.getBounds();
        g.setColor(Color.white);
        g.fillRect(rect.x+rect.width-18, rect.y-4, 10, 8);
        g.setColor(Color.black);
        g.drawRect(rect.x+rect.width-18, rect.y-4, 10, 8);
        Polygon p = new Polygon();
        p.addPoint(rect.x+rect.width-16, rect.y-1);
        p.addPoint(rect.x+rect.width-9, rect.y-1);
        p.addPoint(rect.x+rect.width-13, rect.y+3);
        g.setColor(Color.black);
        g.fillPolygon(p);
      }
    } 
  }
  @Override
  public Object getChildConstraints(Component child) {
    GridBagLayout layout = (GridBagLayout) container.getLayout();
    return layout.getConstraints(child);
  }
}
TOP

Related Classes of org.dyno.visual.swing.widgets.layout.GridBagLayoutAdapter

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.