Package org.dyno.visual.swing.widgets.design

Source Code of org.dyno.visual.swing.widgets.design.JDesktopPaneDesignOperation

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

import java.awt.Component;
import java.awt.Dimension;
import java.awt.Point;
import java.awt.Toolkit;

import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;

import org.dyno.visual.swing.base.Azimuth;
import org.dyno.visual.swing.plugin.spi.IPainter;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;
import org.dyno.visual.swing.widgets.painter.JDesktopPanePainter;

public class JDesktopPaneDesignOperation extends CompositeDesignOperation {
  private void setForbid(boolean f){
    JDesktopPanePainter jdpp=(JDesktopPanePainter) adaptable.getAdapter(IPainter.class);
    jdpp.setForbid(f);
  }
  private boolean isForbid(){
    JDesktopPanePainter jdpp=(JDesktopPanePainter) adaptable.getAdapter(IPainter.class);
    return jdpp.isForbid();
  }
  @Override
  public boolean dragEnter(Point p) {
    for(WidgetAdapter drop:adaptable.getDropWidget()){
      Component comp = drop.getWidget();
      if(!(comp instanceof JInternalFrame)){
        setForbid(true);
        return false;
      }
    }
    setForbid(false);
    return true;
  }

  @Override
  public boolean dragExit(Point p) {
    setForbid(false);
    return true;
  }

  @Override
  public boolean dragOver(Point p) {
    int state = adaptable.getState();
    if (state == Azimuth.STATE_BEAN_HOVER) {
      adaptable.setMascotLocation(p);
    } else {
      resize_widget(p);
    }
    return true;
  }

  private void resize_widget(Point p) {
    assert adaptable.getDropWidget().size()==1;
    int state = adaptable.getState();
    Dimension min = new Dimension(10, 10);
    WidgetAdapter toBeResizedAdapter=adaptable.getDropWidget().get(0);
    Component toBeResized=toBeResizedAdapter.getWidget();
    Dimension size = toBeResized.getSize();
    Point hotspot = adaptable.getMascotLocation();
    int w = min.width;
    int h = min.height;
    switch (state) {
    case Azimuth.STATE_BEAN_RESIZE_RIGHT_BOTTOM:
      w = p.x - hotspot.x;
      h = p.y - hotspot.y;
      break;
    case Azimuth.STATE_BEAN_RESIZE_BOTTOM:
      w = size.width;
      h = p.y - hotspot.y;
      break;
    case Azimuth.STATE_BEAN_RESIZE_LEFT_BOTTOM:
      w = size.width + hotspot.x - p.x;
      h = p.y - hotspot.y;
      hotspot.x = p.x;
      break;
    case Azimuth.STATE_BEAN_RESIZE_LEFT:
      w = size.width + hotspot.x - p.x;
      h = size.height;
      hotspot.x = p.x;
      break;
    case Azimuth.STATE_BEAN_RESIZE_LEFT_TOP:
      w = size.width + hotspot.x - p.x;
      h = size.height + hotspot.y - p.y;
      hotspot.x = p.x;
      hotspot.y = p.y;
      break;
    case Azimuth.STATE_BEAN_RESIZE_TOP:
      w = size.width;
      h = size.height + hotspot.y - p.y;
      hotspot.y = p.y;
      break;
    case Azimuth.STATE_BEAN_RESIZE_RIGHT_TOP:
      w = p.x - hotspot.x;
      h = size.height + hotspot.y - p.y;
      hotspot.y = p.y;
      break;
    case Azimuth.STATE_BEAN_RESIZE_RIGHT:
      w = p.x - hotspot.x;
      h = size.height;
      break;
    }
    if (w <= min.width)
      w = min.width;
    if (h <= min.height)
      h = min.height;
    adaptable.setMascotLocation(hotspot);
    toBeResized.setSize(w, h);
    toBeResizedAdapter.doLayout();
    toBeResizedAdapter.setDirty(true);
  }

  @Override
  public boolean drop(Point p) {
    if(isDroppingPopup())
      return super.drop(p);
    if (!isForbid()) {
      JDesktopPane jtp = (JDesktopPane) adaptable.getWidget();
      adaptable.clearAllSelected();     
      for (WidgetAdapter drop : adaptable.getDropWidget()) {
        JInternalFrame jif = (JInternalFrame) drop.getWidget();
        Point htsp = drop.getHotspotPoint();
        int state = adaptable.getState();
        switch (state) {
        case Azimuth.STATE_BEAN_HOVER:
          jif.setLocation(p.x - htsp.x, p.y - htsp.y);
          break;
        default:
          Point pt = adaptable.getMascotLocation();
          jif.setLocation(pt.x - htsp.x, pt.y - htsp.y);
          break;
        }
        jtp.add(jif);
        drop.requestNewName();
        jif.setVisible(true);
        drop.setSelected(true);
        drop.setDirty(true);
        jif.toFront();       
      }
      adaptable.getWidget().validate();
      return true;
    } else {
      Toolkit.getDefaultToolkit().beep();
      return false;
    }
  } 
}
TOP

Related Classes of org.dyno.visual.swing.widgets.design.JDesktopPaneDesignOperation

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.