Package cn.edu.pku.sei.capriceui

Source Code of cn.edu.pku.sei.capriceui.CapricePanel

package cn.edu.pku.sei.capriceui;

import cn.edu.pku.sei.capriceui.verticaltext.VTextIcon;
import cn.edu.pku.sei.capriceui.verticaltext.CompositeIcon;

import javax.swing.*;
import javax.swing.border.Border;
import javax.swing.border.EtchedBorder;
import java.awt.*;
import java.awt.event.*;
import java.net.URL;

import org.jdesktop.swingx.border.DropShadowBorder;


/**
* User: zhangwei
* Date: 2003-4-3
* Time: 15:26:01
*/

/**
* �����������ӵ�������
*  1. ͬһ��ͣ���������������ڱ�ѡ��.(��ǰ�汾ֻ֧�����һ�����ڴ��ڱ�ѡ��״̬)
*     ��������ڴ��ڱ�ѡ��״̬ʱ���������ڷֱ�ռ��ͣ������Ӧ��ʾ�����һ���֡�
*     ����ռ�ݷ�ʽ��Ϊ�������:
*     a. ��ǰͣ����Ϊ���Ҳ�ͣ���������Ӧ����ʾ��������ָ
*        ����ͼ��ʾ���������ͣ�������������ڱ�ѡ��������������ֱ�ռ������1��2��3������ʾ���򣩣�
*              --------------------------
*              |    |                   |
*              |    |       ����1       |
*              |    |                   |
*              | �� |-------------------|
*              | �� |                   |
*              | ͣ |       ����2       |
*              | �� |                   |
*              | �� |-------------------|
*              |    |                   |
*              |    |      ����3        |
*              |    |                   |
*              --------------------------
*
*     b. ��ǰͣ����Ϊ���²�ͣ���������Ӧ����ʾ���򱻺���ָ
*        ����ͼ��ʾ�������²�ͣ�������������ڱ�ѡ��������������ֱ�ռ������1��2��3������ʾ����:
*              --------------------------------------------------------
*              |                |                  |                  |
*              |     ����1      |     ����2        |      ����3       |
*              |                |                  |                  |
*              --------------------------------------------------------
*              |                       �²�ͣ����                     |
*              --------------------------------------------------------
*/

public class CapricePanel extends JPanel implements SwingConstants {

    protected JCapriceDesktopPane desktop = null;
    protected CapriceDesktopManager desktopManager = null;

    protected JInternalFrame centerFrame = null;

    protected CapriceToolBar westToolBar = null;
    protected CapriceToolBar eastToolBar = null;
    protected CapriceToolBar northToolBar = null;
    protected CapriceToolBar southToolBar = null;

    protected CapriceButtonGroup westButtonGroup = null;
    protected CapriceButtonGroup eastButtonGroup = null;
    protected CapriceButtonGroup northButtonGroup = null;
    protected CapriceButtonGroup southButtonGroup = null;

    protected final Insets insets0 = new Insets(0, 0, 0, 0);
//    protected ImageIcon icon = new ImageIcon(getClass().getResource("image/window.gif"));
//    protected ImageIcon child = new ImageIcon(getClass().getResource("image/child.jpg"));
    protected ImageIcon icon = null;
    protected ImageIcon child = null;
   

    protected final PopupMenuTrigger popupMenuTrigger = new PopupMenuTrigger();

    //private static Color freashColor = new Color(153, 153, 204);

    //private static Border compBorder = new DropShadowBorder(null, 2, 4, (float)0.5, 10, false, false, true, true);

    private static Border compBorder = new DropShadowBorder();

    private int count = 0;

    public CapricePanel() {
        super();
        try{
          icon= new ImageIcon(new URL("http://localhost:8080/FMTool_Web2/resources/capriceui/window.gif"));
          child = new ImageIcon(new URL("http://localhost:8080/FMTool_Web2/resources/capriceui/child.jpg"));
        }catch(Exception e){
          e.printStackTrace();
        }
        this.setLayout(new BorderLayout());

        westToolBar = new CapriceToolBar(SwingConstants.VERTICAL);
        westToolBar.setFloatable(false);
        westToolBar.setBorder(BorderFactory.createEmptyBorder());

        eastToolBar = new CapriceToolBar(SwingConstants.VERTICAL);
        eastToolBar.setFloatable(false);
        eastToolBar.setBorder(BorderFactory.createEmptyBorder());

        northToolBar = new CapriceToolBar(SwingConstants.HORIZONTAL);
        northToolBar.setFloatable(false);
        northToolBar.setBorder(BorderFactory.createEmptyBorder());

        final JToggleButton marginOfToolBar = new JToggleButton();
        marginOfToolBar.setMinimumSize(new Dimension(westToolBar.getWidth(), 0));
        marginOfToolBar.setPreferredSize(marginOfToolBar.getMinimumSize());
        marginOfToolBar.setMaximumSize(marginOfToolBar.getMinimumSize());
        marginOfToolBar.setEnabled(false);
        marginOfToolBar.setFocusPainted(false);
        marginOfToolBar.setBorderPainted(false);
        northToolBar.add(marginOfToolBar);
        westToolBar.addComponentListener(new ComponentListener() {
            public void componentResized(ComponentEvent e) {
                int newWidth = e.getComponent().getWidth();
                int oldWidth = marginOfToolBar.getWidth();

                if (newWidth == oldWidth) return;

                marginOfToolBar.setMinimumSize(new Dimension(westToolBar.getWidth(), 0));
                marginOfToolBar.setPreferredSize(marginOfToolBar.getMinimumSize());
                marginOfToolBar.setMaximumSize(marginOfToolBar.getMinimumSize());
                marginOfToolBar.invalidate();
                northToolBar.validate();
                northToolBar.repaint();

            }

            public void componentMoved(ComponentEvent e) {
            }

            public void componentShown(ComponentEvent e) {
            }

            public void componentHidden(ComponentEvent e) {
            }

        }
        );

        southToolBar = new CapriceToolBar(SwingConstants.HORIZONTAL);
        southToolBar.setFloatable(false);
        southToolBar.setBorder(BorderFactory.createEmptyBorder());

        westButtonGroup = new CapriceButtonGroup();
        eastButtonGroup = new CapriceButtonGroup();
        northButtonGroup = new CapriceButtonGroup();
        southButtonGroup = new CapriceButtonGroup();

        westButtonGroup.setInvisibleButton(new JToggleButton());
        eastButtonGroup.setInvisibleButton(new JToggleButton());
        northButtonGroup.setInvisibleButton(new JToggleButton());
        southButtonGroup.setInvisibleButton(new JToggleButton());

        desktop = new JCapriceDesktopPane();
        desktopManager = new CapriceDesktopManager();
        desktop.setDesktopManager(desktopManager);
        desktop.setDragMode(JDesktopPane.OUTLINE_DRAG_MODE);

        westButtonGroup.addPropertyChangeListener(desktopManager);
        eastButtonGroup.addPropertyChangeListener(desktopManager);
        northButtonGroup.addPropertyChangeListener(desktopManager);
        southButtonGroup.addPropertyChangeListener(desktopManager);

        northToolBar.setMargin(new Insets(0, 50, 0, 50));

        this.add(northToolBar, BorderLayout.NORTH);
        this.add(westToolBar, BorderLayout.WEST);
        this.add(eastToolBar, BorderLayout.EAST);

        JPanel panel = new JPanel();
        panel.setLayout(new BorderLayout());
        panel.add(southToolBar, BorderLayout.SOUTH);

        panel.add(desktop, BorderLayout.CENTER);

        this.add(panel, BorderLayout.CENTER);

        //��ʼ���������
        centerFrame = new JInternalFrame("CenterFrame");
        centerFrame.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
        centerFrame.setBorder(BorderFactory.createEtchedBorder());
        //centerFrame.getContentPane().setBackground(freashColor);
        centerFrame.putClientProperty(CapriceConstants.IS_FIRST_TIME, CapriceConstants.TRUE);
        centerFrame.setUI(new CapriceInternalFrameUI(centerFrame, SwingConstants.CENTER));

        desktop.add(centerFrame);

        setIconBarAutoHideable(false);

    }

    //forwarding method
    public void setCornerType(String cornerName, int cornerType) {
        desktopManager.setCornerType(cornerName, cornerType, true);
    }

    //forwarding method
    public int getCornerType(String cornerName) {
        return desktopManager.getCornerType(cornerName);
    }

    public void setIconBarAutoHideable(boolean autoHideable) {
        westToolBar.setAutoHideable(autoHideable);
        eastToolBar.setAutoHideable(autoHideable);
        northToolBar.setAutoHideable(autoHideable);
        southToolBar.setAutoHideable(autoHideable);
    }

    public boolean isIconBarAutoHideable() {
        return westToolBar.isAutoHideable();
    }

    public void add(JComponent comp, int position) {
        add(comp, null, null, position);
    }

    public void add(JComponent comp, Icon icon, String title, int position) {

        if (comp == null) return;

        if (position == CENTER) {
            if(title == null || title.length() <= 0){
                title = "Frame " + (++count);
            }

            centerFrame.getContentPane().add(comp, BorderLayout.CENTER);
            desktopManager.update();
            return;
        }

        if ((position != WEST) && (position != EAST) && (position != SOUTH) && (position != NORTH)) {
            return;
        }

        //JInternalFrame jif = new JInternalFrame("", true, true, false, false);
        JInternalFrame jif = new CapriceInternalFrame("", true, true, false, false);

        if (title == null || title.length() <= 0) {
            jif.setTitle("Frame " + (++count));
        }else{
            jif.setTitle(title);
        }

        if(icon != null)
            jif.setFrameIcon(icon);

        jif.getContentPane().add(comp, BorderLayout.CENTER);
        //jif.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createEtchedBorder(), compBorder));
        jif.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        jif.putClientProperty("JInternalFrame.isPalette", Boolean.TRUE);
        jif.setUI(new CapriceInternalFrameUI(jif, position));
        jif.putClientProperty(CapriceConstants.IS_FIRST_TIME, CapriceConstants.TRUE);

        Insets insets = jif.getInsets();

        Dimension dim = null;

        if (position == (SwingConstants.NORTH))
            dim = new Dimension(insets.left, (int) jif.getMinimumSize().getHeight());
        else if (position == (SwingConstants.SOUTH))
            //dim = new Dimension(insets.left, (int)jif.getMinimumSize().getHeight());
            dim = new Dimension(insets.left, insets.top);
        else if (position == (SwingConstants.WEST))
            dim = new Dimension(insets.left, insets.bottom);
        else if (position == (SwingConstants.EAST))
            dim = new Dimension(insets.right, insets.bottom);
        else if (position == (SwingConstants.CENTER))
            dim = new Dimension(0, 0);
        else
            assert false;

        jif.setMinimumSize(dim);

        Dimension maximumSize = comp.getMaximumSize();
        //maximumSize.height += 12;
        //maximumSize.width += 5;
        jif.setMaximumSize(maximumSize);


        JToggleButton button = new JToggleButton();

        if (position == WEST || position == EAST) {
            VTextIcon textIcon = new VTextIcon(button, jif.getTitle(), VTextIcon.ROTATE_DEFAULT);
            Icon buttonIcon = new CompositeIcon(jif.getFrameIcon(), textIcon);
            button.setIcon(buttonIcon);
        } else {
            button.setIcon(jif.getFrameIcon());
            button.setText(jif.getTitle());
        }

        button.setBorderPainted(true);
        //button.setBorder(BorderFactory.createEtchedBorder(EtchedBorder.RAISED));
        button.setMargin(insets0);
        button.addMouseListener(popupMenuTrigger);

        jif.putClientProperty(CapriceConstants.RELATED_BUTTON_MODEL, button.getModel());

        desktop.add(jif);

        if (position == WEST) {
            westToolBar.add(button);
            westButtonGroup.add(button);
            westButtonGroup.setSelected(button.getModel(), true);
            this.validate();
        } else if (position == EAST) {
            eastToolBar.add(button);
            eastButtonGroup.add(button);
            eastButtonGroup.setSelected(button.getModel(), true);
            this.validate();
        } else if (position == NORTH) {
            northToolBar.add(button);
            northButtonGroup.add(button);
            northButtonGroup.setSelected(button.getModel(), true);
            this.validate();
        } else if (position == SOUTH) {
            southToolBar.add(button);
            southButtonGroup.add(button);
            southButtonGroup.setSelected(button.getModel(), true);
            this.validate();
        } else if (position == CENTER) {
            desktopManager.update();
        }
    }

    public void removeCurrent(int position) {

    }

    protected class PopupMenuTrigger implements MouseListener {
        JPopupMenu northPopupMenu = null;
        JPopupMenu southPopupMenu = null;
        JPopupMenu westPopupMenu = null;
        JPopupMenu eastPopupMenu = null;

        JMenu northMoveToMenu = new JMenu("�ƶ���");
        JMenu southMoveToMenu = new JMenu("�ƶ���");
        JMenu westMoveToMenu = new JMenu("�ƶ���");
        JMenu eastMoveToMenu = new JMenu("�ƶ���");

        ChangePlaceAction moveToTopAction = new ChangePlaceAction(SwingConstants.NORTH);
        ChangePlaceAction moveToBottomAction = new ChangePlaceAction(SwingConstants.SOUTH);
        ChangePlaceAction moveToLeftAction = new ChangePlaceAction(SwingConstants.WEST);
        ChangePlaceAction moveToRightAction = new ChangePlaceAction(SwingConstants.EAST);

        public PopupMenuTrigger() {
            northPopupMenu = new JPopupMenu();
            southPopupMenu = new JPopupMenu();
            westPopupMenu = new JPopupMenu();
            eastPopupMenu = new JPopupMenu();

            northPopupMenu.add(northMoveToMenu);
            southPopupMenu.add(southMoveToMenu);
            westPopupMenu.add(westMoveToMenu);
            eastPopupMenu.add(eastMoveToMenu);

            northMoveToMenu.add(moveToBottomAction);
            northMoveToMenu.add(moveToLeftAction);
            northMoveToMenu.add(moveToRightAction);

            southMoveToMenu.add(moveToTopAction);
            southMoveToMenu.add(moveToLeftAction);
            southMoveToMenu.add(moveToRightAction);

            westMoveToMenu.add(moveToTopAction);
            westMoveToMenu.add(moveToBottomAction);
            westMoveToMenu.add(moveToRightAction);

            eastMoveToMenu.add(moveToTopAction);
            eastMoveToMenu.add(moveToBottomAction);
            eastMoveToMenu.add(moveToLeftAction);
        }

        public void mouseClicked(MouseEvent e) {
        }

        public void mousePressed(MouseEvent e) {
            if (e.isPopupTrigger())
                showPopupMenu(e);
        }

        public void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger())
                showPopupMenu(e);
        }

        public void mouseEntered(MouseEvent e) {
        }

        public void mouseExited(MouseEvent e) {
        }

        protected void showPopupMenu(MouseEvent e) {
            JToggleButton button = (JToggleButton) e.getSource();
            JPopupMenu targetMenu = null;

            if (northToolBar.getComponentIndex(button) >= 0) {
                targetMenu = northPopupMenu;
            } else if (southToolBar.getComponentIndex(button) >= 0) {
                targetMenu = southPopupMenu;
            } else if (westToolBar.getComponentIndex(button) >= 0) {
                targetMenu = westPopupMenu;
            } else if (eastToolBar.getComponentIndex(button) >= 0) {
                targetMenu = eastPopupMenu;
            }

            if (targetMenu != null) {
                moveToTopAction.putValue("relatedMouseEvent", e);
                moveToBottomAction.putValue("relatedMouseEvent", e);
                moveToLeftAction.putValue("relatedMouseEvent", e);
                moveToRightAction.putValue("relatedMouseEvent", e);

                targetMenu.show(button, e.getX(), e.getY());
            }
        }
    }

    protected class ChangePlaceAction extends AbstractAction {
        int position = -1;

        public ChangePlaceAction(int position) {
            this.position = position;
            switch (position) {
                case SwingConstants.NORTH:
                    this.putValue(Action.NAME, "����");
                    break;
                case SwingConstants.SOUTH:
                    this.putValue(Action.NAME, "�ײ�");
                    break;
                case SwingConstants.WEST:
                    this.putValue(Action.NAME, "��");
                    break;
                case SwingConstants.EAST:
                    this.putValue(Action.NAME, "�Ҳ�");
                    break;
            }
        }

        public void actionPerformed(ActionEvent e) {
            MouseEvent event = (MouseEvent) this.getValue("relatedMouseEvent");

            if (event == null) return;

            JToggleButton button = (JToggleButton) event.getSource();

            boolean oldSelectState = button.isSelected();

            int oldPosition = -1;

            if (northToolBar.getComponentIndex(button) >= 0) {
                oldPosition = SwingConstants.NORTH;
            } else if (southToolBar.getComponentIndex(button) >= 0) {
                oldPosition = SwingConstants.SOUTH;
            } else if (westToolBar.getComponentIndex(button) >= 0) {
                oldPosition = SwingConstants.WEST;
            } else if (eastToolBar.getComponentIndex(button) >= 0) {
                oldPosition = SwingConstants.EAST;
            }

            if ((oldPosition == -1) || (oldPosition == position))
                return;

            Component[] children = desktop.getComponents();
            JInternalFrame targetFrame = null;

            for (int i = 0; i < children.length; i++) {
                if (children[i] instanceof JInternalFrame) {
                    targetFrame = (JInternalFrame) children[i];
                    if (targetFrame.getClientProperty(CapriceConstants.RELATED_BUTTON_MODEL)
                            == button.getModel()) {
                        break;
                    } else {
                        targetFrame = null;
                    }
                }
            }

            if (targetFrame == null) return;

            //ɾ������ͼ��

            button.setSelected(false);

            if (oldPosition == WEST) {
                westToolBar.remove(button);
                westButtonGroup.remove(button);
            } else if (oldPosition == EAST) {
                eastToolBar.remove(button);
                eastButtonGroup.remove(button);
            } else if (oldPosition == NORTH) {
                northToolBar.remove(button);
                northButtonGroup.remove(button);
            } else if (oldPosition == SOUTH) {
                southToolBar.remove(button);
                southButtonGroup.remove(button);
            }

            //ɾ�����
            desktop.remove(targetFrame);

            //�����嵽��λ��
            Insets insets = targetFrame.getInsets();
            Dimension dim = null;

            if (position == (SwingConstants.NORTH))
                dim = new Dimension(insets.left, (int) targetFrame.getMinimumSize().getHeight());
            else if (position == (SwingConstants.SOUTH))
                dim = new Dimension(insets.left, insets.top);
            else if (position == (SwingConstants.WEST))
                dim = new Dimension(insets.left, insets.bottom);
            else if (position == (SwingConstants.EAST))
                dim = new Dimension(insets.right, insets.bottom);
            else if (position == (SwingConstants.CENTER))
                dim = new Dimension(0, 0);
            else
                assert false;

            targetFrame.setMinimumSize(dim);

            targetFrame.setUI(new CapriceInternalFrameUI(targetFrame, position));
            desktop.add(targetFrame);

            if ((oldPosition == WEST || oldPosition == EAST) && (position == NORTH || position == SOUTH)) {
                button.setIcon(targetFrame.getFrameIcon());
                button.setText(targetFrame.getTitle());
            } else if ((oldPosition == NORTH || oldPosition == SOUTH) && (position == WEST || position == EAST)) {
                VTextIcon textIcon = new VTextIcon(button, targetFrame.getTitle(), VTextIcon.ROTATE_DEFAULT);
                Icon buttonIcon = new CompositeIcon(targetFrame.getFrameIcon(), textIcon);
                button.setIcon(buttonIcon);
                button.setText(null);
            }

            //��ӿ���ͼ�굽��λ��
            if (position == WEST) {
                westToolBar.add(button);
                westButtonGroup.add(button);
                if (oldSelectState) {
                    westButtonGroup.setSelected(button.getModel(), true);
                }
            } else if (position == EAST) {
                eastToolBar.add(button);
                eastButtonGroup.add(button);
                if (oldSelectState) {
                    eastButtonGroup.setSelected(button.getModel(), true);
                }
            } else if (position == NORTH) {
                northToolBar.add(button);
                northButtonGroup.add(button);
                if (oldSelectState) {
                    northButtonGroup.setSelected(button.getModel(), true);
                }
            } else if (position == SOUTH) {
                southToolBar.add(button);
                southButtonGroup.add(button);
                if (oldSelectState) {
                    southButtonGroup.setSelected(button.getModel(), true);
                }
            }


            CapricePanel.this.validate();
            CapricePanel.this.repaint();
        }

    }

}
TOP

Related Classes of cn.edu.pku.sei.capriceui.CapricePanel

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.