Package org.dyno.visual.swing.widgets

Source Code of org.dyno.visual.swing.widgets.JInternalFrameAdapter

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

import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.Point;

import javax.swing.JComponent;
import javax.swing.JDesktopPane;
import javax.swing.JInternalFrame;
import javax.swing.JMenuBar;
import javax.swing.JPanel;
import javax.swing.event.MouseInputListener;

import org.dyno.visual.swing.base.ExtensionRegistry;
import org.dyno.visual.swing.base.JavaUtil;
import org.dyno.visual.swing.layouts.GroupLayout;
import org.dyno.visual.swing.plugin.spi.CompositeAdapter;
import org.dyno.visual.swing.plugin.spi.LayoutAdapter;
import org.dyno.visual.swing.plugin.spi.RootPaneContainerAdapter;
import org.dyno.visual.swing.plugin.spi.WidgetAdapter;

@SuppressWarnings("unchecked")
public class JInternalFrameAdapter extends RootPaneContainerAdapter {
  private static JDesktopPane desktopPane = new JDesktopPane();
  private JPanel contentPane;
  private JPanelAdapter contentAdapter;

  public JInternalFrameAdapter() {
    super(null);
  }
  public boolean isRoot() {
    Component me = getWidget();
    if (me == null)
      return false;
    Container container = me.getParent();
    return container == null || WidgetAdapter.getWidgetAdapter(container)==null;
 
  public CompositeAdapter getParentAdapter() {
    if (isRoot())
      return null;
    Component parent = getWidget().getParent();
    while (parent != null) {
      if (parent instanceof Component) {
        WidgetAdapter adapter = WidgetAdapter.getWidgetAdapter(parent);
        if (adapter != null) {
          return (CompositeAdapter) adapter;
        }
      }
      parent = parent.getParent();
    }
    return null;
  }
  @Override
  public boolean allowChildResize(Component child) {
    if (child instanceof JMenuBar)
      return false;
    return contentAdapter.allowChildResize(child);
  }
  @Override
  public Component getRootPane() {
    return getWidget();
  }
  public void doLayout() {
    CompositeAdapter content = getContentAdapter();
    content.doLayout();
  }
  public boolean removeChild(Component child) {
    if (child instanceof JMenuBar) {
      JInternalFrame jframe = (JInternalFrame) getWidget();
      jframe.setJMenuBar(null);
      return true;
    } else
      return getContentAdapter().removeChild(child);
 
  @Override
  public void clearSelection() {
    setSelected(false);
    JInternalFrame jframe = (JInternalFrame) getWidget();
    JMenuBar jmb = jframe.getJMenuBar();
    if (jmb != null) {
      WidgetAdapter jmbAdapter = WidgetAdapter.getWidgetAdapter(jmb);
      jmbAdapter.clearSelection();
    }
    getContentAdapter().clearSelection();
  }
  @Override
  public Component cloneWidget() {
    JInternalFrame copy = (JInternalFrame) super.cloneWidget();
    JInternalFrame jframe = (JInternalFrame) getWidget();
    JMenuBar jmb = jframe.getJMenuBar();
    if (jmb != null) {
      WidgetAdapter jmbAdapter = WidgetAdapter.getWidgetAdapter(jmb);
      JMenuBar copyjmb=(JMenuBar) jmbAdapter.cloneWidget();
      copy.setJMenuBar(copyjmb);
    }
    CompositeAdapter content = getContentAdapter();
    copy.setContentPane((JComponent) content.cloneWidget());
    return copy;
  }


  @Override
  public boolean needGenBoundCode(Component child) {
    if(child instanceof JMenuBar)
      return false;
    Container panel = (Container) getContentPane();
    LayoutManager layout = panel.getLayout();
    return layout == null;
  }
  public CompositeAdapter getContentAdapter() {
    if (contentAdapter == null) {
      contentAdapter = (JPanelAdapter) ExtensionRegistry.createWidgetAdapter(JPanel.class);
      ((JPanelAdapter) contentAdapter).setIntermediate(true);
      JInternalFrame jif = (JInternalFrame) getWidget();
      contentPane = (JPanel) jif.getContentPane();
      contentAdapter.setWidget(contentPane);
      contentAdapter.setDirty(false);
      contentAdapter.setName(getName());
      ((JPanelAdapter)contentAdapter).setDelegate(this);
    }
    return contentAdapter;
  }

  @Override
  public boolean isEnclosingContainer() {
    return true;
  }

  @Override
  public boolean interceptPoint(Point p, int ad) {
    JInternalFrame comp = (JInternalFrame) getWidget();
    return p.x >= -ad
        && p.y >= -ad
        && p.x < comp.getWidth() + ad
        && p.y < comp.getHeight() + ad
        && !(p.x >= ad && p.y >= ad + TITLE_HEIGHT
            && p.x < comp.getWidth() - ad && p.y < comp.getHeight()
            - ad);
  }

  private static int TITLE_HEIGHT = 22;

  @Override
  protected Component createWidget() {
    JInternalFrame jif = new JInternalFrame();   
    Dimension size = new Dimension(100, 100);
    jif.setLayout(new GroupLayout());
    jif.setSize(size);
    JavaUtil.layoutContainer(jif);
    jif.validate();
    jif.addNotify();
    desktopPane.add(jif);
    jif.setVisible(true);
    return jif;
  }


  @Override
  public Component getChild(int index) {
    JInternalFrame jif = (JInternalFrame) getWidget();
    JMenuBar jmb = jif.getJMenuBar();
    if (jmb == null)
      return getContentAdapter().getChild(index);
    else if (index == 0)
      return jmb;
    else
      return getContentAdapter().getChild(index - 1);
  }

  @Override
  public int getChildCount() {
    JInternalFrame jif = (JInternalFrame) getWidget();
    JMenuBar jmb=jif.getJMenuBar();   
    int count = getContentAdapter().getChildCount();
    return jmb==null?count:count+1;
  }

  @Override
  public int getIndexOfChild(Component child) {
    JInternalFrame jif = (JInternalFrame) getWidget();
    JMenuBar jmb = jif.getJMenuBar();
    if (jmb == null)
      return getContentAdapter().getIndexOfChild(child);
    else if (child == jmb)
      return 0;
    else
      return getContentAdapter().getIndexOfChild(child) + 1;
  }
  @Override
  protected Component newWidget() {
    return new JInternalFrame();
  }

  @Override
  public void addChildByConstraints(Component child, Object constraints) {
    if(child instanceof JMenuBar){
      JInternalFrame jif = (JInternalFrame) getWidget();
      jif.setJMenuBar((JMenuBar)child);
    }else
      getContentAdapter().addChildByConstraints(child, constraints);
  }

  @Override
  public Object getChildConstraints(Component child) {
    if (child instanceof JMenuBar)
      return null;   
    return getContentAdapter().getChildConstraints(child);
  }

  @Override
  public Class getWidgetClass() {
    return JInternalFrame.class;
  }
  @Override
  public Object getAdapter(Class adapterClass) {
    if(adapterClass==MouseInputListener.class){
      LayoutAdapter adapter=contentAdapter.getLayoutAdapter();
      if(adapter!=null)
        return adapter.getAdapter(adapterClass);
      else
        return null;
    }else
      return super.getAdapter(adapterClass);
  }
}
TOP

Related Classes of org.dyno.visual.swing.widgets.JInternalFrameAdapter

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.