graphnavigateui.java

来自「Semantic Web Ontology Editor」· Java 代码 · 共 243 行

JAVA
243
字号
package org.mindswap.swoop.renderer.entity.graph;

import  com.touchgraph.graphlayout.*;
import com.touchgraph.graphlayout.interaction.DragNodeUI;
import com.touchgraph.graphlayout.interaction.LocalityScroll;
import com.touchgraph.graphlayout.interaction.TGAbstractClickUI;
import com.touchgraph.graphlayout.interaction.TGAbstractDragUI;
import com.touchgraph.graphlayout.interaction.TGUserInterface;
 
import  java.awt.event.*;
import  javax.swing.*;
import  javax.swing.event.*;

import org.mindswap.swoop.TermsDisplay;

/** GLNavigateUI. User interface for moving around the graph, as opposed
  * to editing.
  *   
  * @author   Alexander Shapiro                                        
  * @author   Murray Altheim (abstracted GLPanel to TGScrollPane interface)
  * @version  1.21  $Id: GLNavigateUI.java,v 1.16 2002/04/04 06:21:06 x_ander Exp $
  */
public class GraphNavigateUI extends TGUserInterface {
    
	GraphPanel glPanel;
    TGPanel tgPanel;    
    
    GLNavigateMouseListener ml;
        
    TGAbstractDragUI hvDragUI;
    TGAbstractDragUI rotateDragUI;
    //TGAbstractDragUI hvRotateDragUI;
    
    TGAbstractClickUI hvScrollToCenterUI;
    DragNodeUI dragNodeUI;
    LocalityScroll localityScroll;
    JPopupMenu nodePopup;    
    JPopupMenu edgePopup;    
    Node popupNode;
    Edge popupEdge;
    
    private TermsDisplay myDisplay;
    
    public GraphNavigateUI( GraphPanel glp ) {
        glPanel = glp;
        tgPanel = glPanel.getTGPanel();        
        
        localityScroll = glPanel.getLocalityScroll();
        hvDragUI = glPanel.getHVScroll().getHVDragUI();
        rotateDragUI = glPanel.getRotateScroll().getRotateDragUI();
        hvScrollToCenterUI = glPanel.getHVScroll().getHVScrollToCenterUI();
        dragNodeUI = new DragNodeUI(tgPanel);                    

        ml = new GLNavigateMouseListener();
        setUpNodePopup();
        setUpEdgePopup();
        //myDisplay = termsDisplay;
    }
    
    public void activate() {        
        tgPanel.addMouseListener(ml);
    }
    
    public void deactivate() {
        tgPanel.removeMouseListener(ml);
    }
    
    class GLNavigateMouseListener extends MouseAdapter {
    
        public void mousePressed(MouseEvent e) {
            Node mouseOverN = tgPanel.getMouseOverN();
            
            if (e.getModifiers() == MouseEvent.BUTTON1_MASK) { 
                if (mouseOverN == null) 
                    hvDragUI.activate(e);
                else 
                {
                    dragNodeUI.activate(e);
                }
            }
        }

        public void mouseClicked(MouseEvent e) {
            Node mouseOverN = tgPanel.getMouseOverN();
            if (mouseOverN == null)
            	return;
            int modifiers = e.getModifiers();
            if ((modifiers & MouseEvent.BUTTON1_MASK) == MouseEvent.BUTTON1_MASK) 
            {               	
            	// if shift key is pressed, adjust the locale
            	if (( modifiers & InputEvent.SHIFT_MASK) == InputEvent.SHIFT_MASK)
            	{
                    try {
                        tgPanel.setLocale(mouseOverN, localityScroll.getLocalityRadius());                        
                    }
                    catch (TGException ex) {
                       System.out.println("Error changing locale");
                       ex.printStackTrace();
                    } 
            	}
            	else
            	{		
            		SwoopNode n = (SwoopNode)mouseOverN;
            		n.fireHyperLinkEvent();
            	}        	
            }
        }    
        
        public void mouseReleased(MouseEvent e) {
            if (e.isPopupTrigger()) {
                popupNode = tgPanel.getMouseOverN();
                popupEdge = tgPanel.getMouseOverE();
                if (popupNode!=null) {
                    tgPanel.setMaintainMouseOver(true);
                    nodePopup.show(e.getComponent(), e.getX(), e.getY());
                }
                else if (popupEdge!=null) {
                    tgPanel.setMaintainMouseOver(true);
                    edgePopup.show(e.getComponent(), e.getX(), e.getY());
                }
                else {                    
                    glPanel.glPopup.show(e.getComponent(), e.getX(), e.getY());
                }
            }
        }    

    }

    private void setUpNodePopup() {        
        nodePopup = new JPopupMenu();
        JMenuItem menuItem;
        
        menuItem = new JMenuItem("Expand Node");
        ActionListener expandAction = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(popupNode!=null) {
                        tgPanel.expandNode(popupNode);
                    }
                }
            };
            
        menuItem.addActionListener(expandAction);
        nodePopup.add(menuItem);
         
        menuItem = new JMenuItem("Collapse Node");
        ActionListener collapseAction = new ActionListener() {
                public void actionPerformed(ActionEvent e) {                    
                    if(popupNode!=null) {
                        tgPanel.collapseNode(popupNode );
                    }
                }
            };
            
        menuItem.addActionListener(collapseAction);
        nodePopup.add(menuItem);

        menuItem = new JMenuItem("Hide Node");
        ActionListener hideAction = new ActionListener() {
                public void actionPerformed(ActionEvent e) {                    
                    if(popupNode!=null) {
                        tgPanel.hideNode(popupNode );
                    }
                }
            };
            
        menuItem.addActionListener(hideAction);
        nodePopup.add(menuItem);

        nodePopup.addPopupMenuListener(new PopupMenuListener() {
            public void popupMenuCanceled(PopupMenuEvent e) {}
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                tgPanel.setMaintainMouseOver(false);
                tgPanel.setMouseOverN(null);
                tgPanel.repaint();        
            }
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
        });
        
    }

    private void setUpEdgePopup() {        
        edgePopup = new JPopupMenu();
                 
        JMenuItem hideMenuItem = new JMenuItem("Hide Edge");
        ActionListener hideAction = new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(popupEdge!=null) {
                        tgPanel.hideEdge(popupEdge);
                    }
                }
            };
            
        JMenuItem loosenMenuItem = new JMenuItem("Loosen Edge");
        ActionListener loosenAction = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(popupEdge!=null) {
                	popupEdge.setLength( popupEdge.getLength() + 20 );
                	tgPanel.resetDamper();
                }
            }
        };
        
        JMenuItem tightenMenuItem = new JMenuItem("Tighten Edge");
        ActionListener tightenAction = new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                if(popupEdge!=null) 
                {
                	if (popupEdge.getLength() <= 20)
                		return;
                	popupEdge.setLength( popupEdge.getLength() - 20 );
                	tgPanel.resetDamper();
                }
            }
        };
        
        hideMenuItem.addActionListener( hideAction );
        loosenMenuItem.addActionListener( loosenAction );
        tightenMenuItem.addActionListener( tightenAction );
        
        edgePopup.add(hideMenuItem);        
        edgePopup.add(loosenMenuItem);
        edgePopup.add(tightenMenuItem);
        
        edgePopup.addPopupMenuListener(new PopupMenuListener() {
            public void popupMenuCanceled(PopupMenuEvent e) {}
            public void popupMenuWillBecomeInvisible(PopupMenuEvent e) {
                tgPanel.setMaintainMouseOver(false);
                tgPanel.setMouseOverE(null);
                tgPanel.repaint();
            }
            public void popupMenuWillBecomeVisible(PopupMenuEvent e) {}
        });
    }

    // We need to have TermsDisplay so we can send it
    //  HyperlinkEvents when a node is clicked.
    //  In TouchGraphEntityRenderer, we always call this
    //  this method when a render is invoked.
    public void setTermsDisplay( TermsDisplay display )
	{ myDisplay = display; }
    
} // end com.touchgraph.graphlayout.interaction.GLNavigateUI

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?