📄 eventdispatcher.java
字号:
if (moveLabel!=null && m_selection.size()==1){
m_graphEventDispatcher.fireLabelSelected(moveLabel,mouseX,mouseY);
}
}
}
}
}
g.dispose();
m_lastMousePos.setValue(mouseX,mouseY);
//m_drawCanvas.lastMousePos is used to pre-decide a mouse position for menu actions.
m_drawCanvas.setLastMousePos(mouseX,mouseY);
m_lastSelectionBounds =m_selection.getBounds();
if (isRightDown(e)){
showPopupMenus(e.getX(),e.getY());
}
break;
case MouseEvent.MOUSE_RELEASED:
clearPort(true);
snapPos =gridFormat.getSnapPos(mouseX,mouseY);
mouseX =(int)snapPos.getX();
mouseY =(int)snapPos.getY();
if (m_startPick){
finishRangePick(mouseX,mouseY);
m_selection.setOriginalPoint();
//first graph event: shape selected
m_graphEventDispatcher.fireShapeSelected(m_selection.getList(),mouseX,mouseY);
}else{
//Graphics context
g =m_drawCanvas.getGraphics();
//if there are some shapes in this selection, repaint it.
if (m_selection.size()>0){
//finish dragging node.
if (m_startDraggingNode){
m_page.setModified(true);
dragNode =m_selection.getDraggingNode();
AbstractShape parent =(AbstractShape)dragNode.getParent();
if (lastPort!=null){
mouseX =(int)lastPort.getXOffset();
mouseY =(int)lastPort.getYOffset();
}else{
//get an actual moving position
m_movingPoint.setValue(mouseX,mouseY);
m_movingPoint =parent.getMoveNodePos(dragNode,m_movingPoint,moveCase);
mouseX =(int)m_movingPoint.getX();
mouseY =(int)m_movingPoint.getY();
}
m_selection.finishDragNode(mouseX,mouseY,g);
if (lastPort!=null){
if (parent!=null){
Port port =parent.portIntersects(new JFPoint(mouseX,mouseY),null);
if (port!=null){
port.attachPort(lastPort);
}
}
}
//register a finish move node operations to operation manager.
m_drawCanvas.getOperationManager().addFinishMoveNode( dragNode,lastPort,
m_drawCanvas.getLastMousePos().getX(),
m_drawCanvas.getLastMousePos().getY(),
mouseX,mouseY);
//first graph event: node moved
m_graphEventDispatcher.fireNodeMoved(dragNode,m_drawCanvas.getLastMousePos().getX(),m_drawCanvas.getLastMousePos().getY(),mouseX,mouseY);
m_page.clearAccessTimes();
m_selection.moveRelationalPorts();
m_selection.setDraggingNode(null);
m_drawState.setDrawState(DrawConst.DRAWSTATE_NONE,ShapeConst.SHAPETYPE_NONE);
m_startDraggingNode =false;
}else if (m_startMoveLabel){
//register a move label operations to operation manager.
double xOffset =mouseX - m_drawCanvas.getLastMousePos().getX();
double yOffset =mouseY - m_drawCanvas.getLastMousePos().getY();
m_drawCanvas.getOperationManager().addMoveLabel(m_selection.getFirstObj(),xOffset,yOffset);
//first graph event: label moved
m_graphEventDispatcher.fireLabelMoved(m_selection.getMoveLabel(),m_drawCanvas.getLastMousePos().getX(),m_drawCanvas.getLastMousePos().getY(),mouseX,mouseY);
m_page.setModified(true);
m_selection.setMoveLabel(null);
}else if (m_startRotation){
m_page.setModified(true);
mouseX =actualMouseX;
mouseY =actualMouseY;
//register a rotate operations to operation manager.
JFPoint originalCenter =m_selection.getOriginalCenter();
JFPoint originalPoint =m_selection.getOriginalPoint();
m_drawCanvas.getOperationManager().addRotate(m_selection.getList().getList(),originalCenter,originalPoint.getX(),originalPoint.getY(),mouseX,mouseY);
//first graph event: shape rotated
m_graphEventDispatcher.fireShapeRotated(m_selection.getList(),originalPoint.getX(),originalPoint.getY(),mouseX,mouseY);
m_page.clearAccessTimes();
m_selection.moveRelationalPorts();
m_startRotation =false;
}else if (m_startMove){
m_page.setModified(true);
Rect newBounds =m_selection.getBounds();
//register a move operations to operation manager.
double xOffset =newBounds.getX()-m_lastSelectionBounds.getX();
double yOffset =newBounds.getY()-m_lastSelectionBounds.getY();
m_drawCanvas.getOperationManager().addMove(m_selection.getList().getList(),xOffset,yOffset);
//first graph event: shape moved
m_graphEventDispatcher.fireShapeMoved(m_selection.getList(),m_drawCanvas.getLastMousePos().getX(),m_drawCanvas.getLastMousePos().getY(),mouseX,mouseY);
m_page.clearAccessTimes();
m_selection.moveRelationalPorts();
m_startMove =false;
}
m_drawCanvas.repaint();
}
g.dispose();
}
m_lastMousePos.setValue(mouseX,mouseY);
m_drawCanvas.setLastMousePos(mouseX,mouseY);
m_lastSelectionBounds =m_selection.getBounds();
GUIUtils.garbageCollection();
break;
}
}
/** dispatch an mouse event*/
private void dispatchEvent(MouseEvent e){
m_page.setModified(true);
//get a mouse event type
int eventType =e.getID();
AbstractDrawEvent drawEvent =EventFactory.getEvent(m_drawState.getShapeType(),m_drawCanvas);
//store draw event object to m_drawState that can be re-called by DrawCanvas in its repaint event.
m_drawState.setCurrentDrawEvent(drawEvent);
if (drawEvent==null)
return;
//do routine for each event type.
switch (eventType){
case MouseEvent.MOUSE_CLICKED:
drawEvent.doMouseClick(e,lastPort);
break;
case MouseEvent.MOUSE_DRAGGED:
drawEvent.doMouseDrag(e);
break;
case MouseEvent.MOUSE_ENTERED:
drawEvent.doMouseEnter(e);
break;
case MouseEvent.MOUSE_EXITED:
drawEvent.doMouseExit(e);
break;
case MouseEvent.MOUSE_MOVED:
Cursor cursor =m_drawCanvas.getCursor();
if (cursor.getType()!=Cursor.CROSSHAIR_CURSOR)
m_drawCanvas.setCursor(new Cursor(Cursor.CROSSHAIR_CURSOR));
double zoom =m_drawCanvas.getZoomScale();
float x =(float)(e.getX()/zoom);
float y =(float)(e.getY()/zoom);
catchPort(x,y);
drawEvent.doMouseMove(e);
break;
case MouseEvent.MOUSE_PRESSED:
if (m_selection.size()>0){
m_selection.clear();
m_drawCanvas.repaint();
}
drawEvent.doMousePress(e,lastPort);
break;
case MouseEvent.MOUSE_RELEASED:
clearPort(true);
drawEvent.doMouseRelease(e,lastPort);
clearPort(false);
GUIUtils.garbageCollection();
break;
}
}
//show popup menus
private void showPopupMenus(int x,int y){
//if hide popupmenus, return silently.
if (m_drawCanvas.isHidePopupMenus()){
return;
}
//base position for a JFrame or JApplet.
int baseX=0;
int baseY=0;
//try to create and show the popup menus
JPopupMenu pMenu;
JFrame f =GUIUtils.getJFrame(m_drawCanvas);
if (f!=null){
baseX =f.getX();
baseY =f.getY();
}else{
JApplet applet =(JApplet)GUIUtils.getParent(m_drawCanvas,".JApplet");
if (applet!=null){
baseX =applet.getX();
baseY =applet.getY();
}
}
//directly create graph menu
ToolFactory toolFactory =new ToolFactory();
pMenu = toolFactory.createGraphMenu(m_drawCanvas.getParentDrawPane(),true);
//consider to get a proper position to show popupmenu, don't be covered by screen.
Dimension menuD =pMenu.getPreferredSize();
Dimension screenD =java.awt.Toolkit.getDefaultToolkit().getScreenSize();
int x1 =(int)(baseX+x+menuD.getWidth());
int y1 =(int)(baseY+y+menuD.getHeight());
if (x1>screenD.getWidth())
x =(int)(screenD.getWidth()-menuD.getWidth()-baseX);
if (y1>screenD.getHeight()-150)
y =(int)(screenD.getHeight()-150-menuD.getHeight()-baseY);
pMenu.show(m_drawCanvas,x,y);
}
/**
* When use want to move a selection by keyboard key,
* you can call this method tomove this selection
* @param moveCase A KeyEvent virtual key
*/
public void moveSelectionByKeyboard(int keyCode){
if (m_selection.size()==0)
return;
int x =0;
int y =0;
int step =1;
//read a grid size from grid format
GridFormat gridFormat =m_drawCanvas.getGridFormat();
int gridSize =(int)gridFormat.getSnapSizeInPixels(m_drawCanvas.getZoomScale());
if (gridFormat.getSnapToGrid()){
step =gridSize;
}
switch (keyCode){
case KeyEvent.VK_LEFT:
x =-step;
break;
case KeyEvent.VK_RIGHT:
x =step;
break;
case KeyEvent.VK_UP:
y =-step;
break;
case KeyEvent.VK_DOWN:
y =step;
break;
default:
break;
}
if (x!=0 || y!=0){
m_page.setModified(true);
m_selection.moveBy(x,y);
m_drawCanvas.getOperationManager().addMove(m_selection.getList().getList(),x,y);
//first graph event: shape moved
//set last mouse x and mouse y to the center of m_selection.bounds
//set current mouse x and mouse y to a relative pos from center of this bounds
Rect bounds =m_selection.getBounds();
JFPoint center =bounds.getCenter();
m_graphEventDispatcher.fireShapeMoved(m_selection.getList(),center.getX(),center.getY(),center.getX()+x,center.getY()+y);
m_page.clearAccessTimes();
m_selection.moveRelationalPorts();
m_startMove =false;
m_drawCanvas.repaint();
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -