Package org.dyno.visual.swing.widgets.grouplayout

Source Code of org.dyno.visual.swing.widgets.grouplayout.ResizeLeft

/************************************************************************************
* 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.grouplayout;

import java.awt.Insets;
import java.awt.Point;
import java.awt.Rectangle;
import java.util.List;

import javax.swing.JComponent;

import org.dyno.visual.swing.layouts.Alignment;
import org.dyno.visual.swing.layouts.Bilateral;
import org.dyno.visual.swing.layouts.Constraints;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.layouts.Leading;
import org.dyno.visual.swing.layouts.Spring;
import org.dyno.visual.swing.layouts.Trailing;
import org.dyno.visual.swing.plugin.spi.CompositeAdapter;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;

class ResizeLeft extends ResizeOperation {

  public ResizeLeft(GroupLayoutAdapter layout, WidgetAdapter tracingAdapter, GroupLayout op, JComponent container) {
    super(layout, tracingAdapter,op, container);
  }

 
  public boolean dragOver(Point p) {
    CompositeAdapter parent = (CompositeAdapter) WidgetAdapter.getWidgetAdapter(container);
    JComponent todrop = (JComponent)tracingAdapter.getWidget();
    Point lp = p;
    if (last_point == null) {
      last_point = lp;
      adapter.setHovered(true);
      return false;
    }
    if (lp.equals(last_point))
      return false;
    pair = calculateMascotLocation(todrop, lp, azimuth);
    Point np = pair == null ? lp : new Point(pair.vQuart.masc, lp.y);
    Point sp = parent.getMascotLocation();
    int x = sp.x + todrop.getWidth();
    int ch = todrop.getHeight();
    int cw = x - np.x;
    todrop.setSize(cw, ch);
    azimuth = getAzimuth(p, last_point);
    last_point = lp;
    np.y = sp.y;
    parent.setMascotLocation(np);
    return true;
  }

  private QuartetPair pair;

 
  public boolean drop(Point p) {
    CompositeAdapter parent = (CompositeAdapter) WidgetAdapter.getWidgetAdapter(container);
    Insets insets = container.getInsets();
    WidgetAdapter dropAdapter = tracingAdapter;
    JComponent drop = (JComponent)dropAdapter.getParentContainer();
    Point hot = dropAdapter.getHotspotPoint();
    Alignment vertical = adapter.getLastConstraints().getVertical();
    Alignment horizontal = adapter.getLastConstraints().getHorizontal();
    Point ltp = parent.getMascotLocation();
    int x = ltp.x - hot.x;
    int y = ltp.y - hot.y;
    int width = drop.getWidth();
    int height = drop.getHeight();
    Spring spring = new Spring(10, 10);// TODO should be replaced by a
                      // container gap.
    if (pair == null || pair.vQuart == null) {
      if (horizontal instanceof Leading)
        horizontal = new Leading(x - insets.left, width, spring);
      else if (horizontal instanceof Trailing)
        horizontal = new Trailing(container.getWidth() - x - width - insets.right, width, spring);
      else if (horizontal instanceof Bilateral)
        horizontal = new Trailing(container.getWidth() - x - width - insets.right, width, spring);
    } else {
      if (pair.vQuart != null) {
        horizontal = pair.vQuart.anchor.createLeftAxis(drop, new Rectangle(x, y, width, height), horizontal);
      }
    }
    assert horizontal != null && vertical != null;
    Constraints constraints = new Constraints(horizontal, vertical);
    container.add(drop, constraints);
    last_point = null;
    return true;
  }

 
  public boolean dragEnter(Point p) {
    CompositeAdapter parent = (CompositeAdapter) WidgetAdapter.getWidgetAdapter(container);
    parent.setMascotLocation(p);
    last_point = p;
    adapter.setHovered(true);
    return true;
  }

 
  public boolean dragExit(Point p) {
    adapter.setHovered(false);
    return true;
  }

  private QuartetPair calculateMascotLocation(JComponent todrop, Point this_point, int azimuth) {
    List<Quartet> vAnchor = calLAnchor(todrop, this_point, azimuth);
    if (vAnchor == null) {
      adapter.addBaseline(null, null);
      return null;
    } else {
      adapter.addBaseline(null, vAnchor);
      Quartet qtet = calMasc(this_point.x, vAnchor);
      return new QuartetPair(null, qtet);
    }
  }
}

TOP

Related Classes of org.dyno.visual.swing.widgets.grouplayout.ResizeLeft

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.