⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 eventdispatcher.java

📁 用Java开发的、实现类似Visio功能的应用程序源码
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
		int actualMouseY	=mouseY;

		//get a move case of normal, shift down or control down.		
		int moveCase		=ShapeConst.MOVEMENT_NORMAL;
		if (e.isShiftDown())
			moveCase	=ShapeConst.MOVEMENT_SHIFTDOWN;
		if (e.isControlDown())
			moveCase	=ShapeConst.MOVEMENT_CTRLDOWN;

  		
    		//Graphics context
    		Graphics	g;
    		AbstractShape	drawObj;
		Node 		dragNode;
		Label		moveLabel;

   		
    		//do routine for each event type.		
		switch (eventType){
			case MouseEvent.MOUSE_CLICKED:
				if (isLeftDown(e)){
					if (e.getClickCount()==2){
						if (m_selection.size()>0){
							if (m_selection.modifyLabel(m_drawCanvas,m_drawCanvas.getOperationManager())){
				  				//first graph event: shape property changed
				  				m_graphEventDispatcher.fireShapePropertyChanged(m_selection.getList());
								m_drawCanvas.repaint();
							}
						}
					}
				}
				break;
			case MouseEvent.MOUSE_DRAGGED:

				snapPos		=gridFormat.getSnapPos(mouseX,mouseY);
				mouseX		=(int)snapPos.getX();
				mouseY		=(int)snapPos.getY();

				if (m_startPick){
					rangePickTo(mouseX,mouseY);
				}else{
    					//Graphics context
    					g	=m_drawCanvas.getGraphics();
					//if there are some shapes in selection, drag them here.
					if (m_selection.size()>0){
						dragNode   = m_selection.getDraggingNode();
						moveLabel  = m_selection.getMoveLabel();
						
						//if current dragging node's parent is rotatable.
						boolean parentRotatable =false;
						AbstractShape shape	=null;
						if (dragNode!=null){
							AbstractObject parent	=dragNode.getParent();
							if (parent!=null && parent instanceof AbstractShape){
								shape  =(AbstractShape)parent;
								parentRotatable	=((AbstractShape)parent).isRotatable();
							}
							
						}
						
						

						if (m_selection.size()>0  && dragNode!=null  && m_drawState.isRotating() && parentRotatable && dragNode.isRotatable()){
							
						        if (shape!=null && shape.isDisableMotion()){
						        	//disabled motion here, so clear dragnode
						        	dragNode	=null;
						        }else{
						        	//drag to rotate objects
						        	m_startRotation =true;
						        	mouseX		=actualMouseX;
								mouseY		=actualMouseY;
				  				//first graph event: shape rotating
				  				m_graphEventDispatcher.fireShapeRotating(m_selection.getList(),m_lastMousePos.getX(),m_lastMousePos.getY(),mouseX,mouseY);
								m_selection.rotateObjects(mouseX,mouseY,g);
								
							}
						
						}else if (dragNode!=null && m_selection.size()==1 && !m_drawState.isRotating()){
						        if (shape!=null && shape.isDisableScaling()){
						        	//disabled scaling here, so clear dragnode
						        	dragNode		=null;
						        	m_startDraggingNode	=false;

								//change roate action to move selection action now.
								if (!shape.isDisableMotion()){
									m_startMove     =true;
				  					//first graph event: shape moving
				  					m_graphEventDispatcher.fireShapeMoving(m_selection.getList(),m_lastMousePos.getX(),m_lastMousePos.getY(),mouseX,mouseY);
									m_selection.moveTo(mouseX,mouseY,g);
								}
						        }else{
    						        	//register a start move node operations to operation manager.
    						        	if (!m_startDraggingNode){
    						        		m_drawCanvas.getOperationManager().addStartMoveNode(dragNode);
    						        	}
						
                                                                
                                                                //get an actual moving position
                                                                m_movingPoint.setValue(mouseX,mouseY);
                                                                m_movingPoint		=shape.getMoveNodePos(dragNode,m_movingPoint,moveCase);
                                                                mouseX			=(int)m_movingPoint.getX();
                                                                mouseY			=(int)m_movingPoint.getY();
 
 								m_startDraggingNode	=true;
                                                               
				  				//first graph event: node moving
				  				m_graphEventDispatcher.fireNodeMoving(dragNode,m_lastMousePos.getX(),m_lastMousePos.getY(),mouseX,mouseY);
								//dragging node of one shape now.
								m_selection.dragNode(mouseX,mouseY,g);
								catchPort(actualMouseX,actualMouseY);
							}
						
						}else if (moveLabel!=null && m_selection.size()==1 && !m_drawState.isRotating()){
							//assume not disabled modifying properties:
							if (shape!=null && shape.isDisableModifyingProperties()){
								dragNode		=null;
								//change roate action to move selection action now.
								if (!shape.isDisableMotion()){
									m_startMove     =true;
				  					//first graph event: shape moving
				  					m_graphEventDispatcher.fireShapeMoving(m_selection.getList(),m_lastMousePos.getX(),m_lastMousePos.getY(),mouseX,mouseY);
									m_selection.moveTo(mouseX,mouseY,g);
								}
							}else{
								m_startMoveLabel	=true;
								JFPoint lastMouse	=m_lastMousePos;
				  				//first graph event: label moving
				  				m_graphEventDispatcher.fireLabelMoving(m_selection.getMoveLabel(),lastMouse.getX(),lastMouse.getY(),mouseX,mouseY);
								m_selection.dragLabel(lastMouse.getX(),lastMouse.getY(),mouseX,mouseY,g);
							}
						
						}else{  
							if (shape!=null && shape.isDisableMotion()){
								//disabled motion
								dragNode	=null;
							}else{
					
								//move selection now.
								m_startMove     =true;
				  				//first graph event: shape moving
				  				m_graphEventDispatcher.fireShapeMoving(m_selection.getList(),m_lastMousePos.getX(),m_lastMousePos.getY(),mouseX,mouseY);
								m_selection.moveTo(mouseX,mouseY,g);
							}
						}
					}
					g.dispose();
				} 

				m_lastMousePos.setValue(mouseX,mouseY);
				break;
			case MouseEvent.MOUSE_ENTERED:
				break;
			case MouseEvent.MOUSE_EXITED:
				break;
			case MouseEvent.MOUSE_MOVED:
				//set current mouse cursor
				if (m_selection.size()==0){
					Cursor cursor	=m_drawCanvas.getCursor();
					if (cursor.getType()!=Cursor.DEFAULT_CURSOR)
						m_drawCanvas.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
				}else{
    					JFPoint pnt 		=new JFPoint(mouseX,mouseY);
    					Node node;
    					Label aLabel	=null;
    					if (m_drawState.isRotating()){
    						node	=m_selection.nodeIntersects(pnt,Node.NODEUSAGE_ROTATE);
    						if (node!=null){
    							AbstractShape shape	=(AbstractShape)node.getParent();
    							if (!node.isRotatable() || !shape.isRotatable())
    								m_drawCanvas.setCursor(new Cursor(Cursor.MOVE_CURSOR));
    							else
    								m_drawCanvas.setCursor(new Cursor(Cursor.HAND_CURSOR));
    						}else{
    							g	=m_drawCanvas.getGraphics();
    							aLabel	=m_selection.labelIntersects(g,pnt);
    						}
    					}else{
    						node	=m_selection.nodeIntersects(pnt,Node.NODEUSAGE_MOVE);
    						if (node!=null){
    							if (m_selection.size()==1)
    								m_drawCanvas.setCursor(new Cursor(Cursor.NW_RESIZE_CURSOR));
    							else
    								m_drawCanvas.setCursor(new Cursor(Cursor.MOVE_CURSOR));
    						}else{
    							g	=m_drawCanvas.getGraphics();
    							aLabel	=m_selection.labelIntersects(g,pnt);
    						}
    					}
    					
    					if (node==null){
    						if (aLabel!=null){
    							if (m_selection.size()>1 || m_drawState.isRotating())
    								m_drawCanvas.setCursor(new Cursor(Cursor.MOVE_CURSOR));	
    							else
    								m_drawCanvas.setCursor(new Cursor(Cursor.HAND_CURSOR));	
    						}else{
    							AbstractObject obj	=m_selection.intersects(pnt);
    							if (obj==null)
    								m_drawCanvas.setCursor(new Cursor(Cursor.DEFAULT_CURSOR));
    							else
    								m_drawCanvas.setCursor(new Cursor(Cursor.MOVE_CURSOR));
    						}
    					}
				}
				break;
			case MouseEvent.MOUSE_PRESSED:
				clearPort(false);

			
    				//Graphics context
    				g	=m_drawCanvas.getGraphics();
    				JFPoint pnt 		=new JFPoint(mouseX,mouseY);

				//try to pick up some shapes.
    				AbstractObject obj;
    				Node	node =null; 
    				Label   aLabel=null;
				
				//firstly try to pickup nodes from selection.    				
    				if (m_drawState.isRotating())
    					node	=m_selection.nodeIntersects(pnt,Node.NODEUSAGE_ROTATE);
    				else{
    					node	=m_selection.nodeIntersects(pnt,Node.NODEUSAGE_MOVE);
    					aLabel	=m_selection.labelIntersects(g,pnt);
    				}

    				if (node!=null){
    					obj	=node.getParent();
				
				}else if (aLabel!=null){
					obj	=aLabel.getParent();
				
				}else{
					obj	=m_selection.intersects(pnt);
					if (obj==null)
						obj	=m_page.pickBy(g,pnt);
				}	

    				
    				//no objects selected.
    				if (obj==null){
    					
   					if (m_selection.size()>0){
						m_selection.clear();
    						m_drawCanvas.repaint();
    					}
    					//try to start a rectangle range start
					m_startPick	=true;    	
					m_pickStartPoint.setValue(mouseX,mouseY);
					m_pickEndPoint.setValue(mouseX,mouseY);

    				}else{
					//if this new object selected is already existed in the selection.
					boolean existentObj	=false;
					//if re-selected an object that is already inside the selection.
					boolean reselected	=false;
					//if ctrl of shift key down.
					boolean ctrlDown	=e.isControlDown() || e.isShiftDown();

					if (m_selection.contains(obj)){
						existentObj	=true;
						//re-select an object while ctrl down will remove it from selection.
    						if (ctrlDown && (node==null || m_selection.size()>1)){
    							m_selection.remove(obj);
    							reselected	=true;
    							m_drawCanvas.repaint();
    						}
    					}else{
    						//obj is not inside the selection,so
    						//if not CTRL or SHIFT key down, then clear the old selection,
    						//otherwise we should treat that as a MULTI-CHOOSE operation.
    						if (!ctrlDown)
    							m_selection.clear();
    						m_selection.add(obj);
    						m_drawAdapter.notifyObjectSelected(m_selection.getList());
    						if (obj instanceof AbstractShape){
    							((AbstractShape)obj).drawPicked(g,m_drawState.isRotating());
    						}
    					}
				  	
					if (reselected){
				  		//first graph event: shape selected 
				  		m_graphEventDispatcher.fireShapeSelected(m_selection.getList(),mouseX,mouseY);
					}else{
    						//set an original point for selection. 
    						if (node!=null && m_selection.size()==1){
    							m_selection.setOriginalPoint(new JFPoint(node.getXOffset(),node.getYOffset()));
				  			//first graph event: node selected 
				  			m_graphEventDispatcher.fireNodeSelected(node,node.getXOffset(),node.getYOffset());
    						}else{
    							m_selection.setOriginalPoint(new JFPoint(mouseX,mouseY));
				  			//first graph event: shape selected 
				  			m_graphEventDispatcher.fireShapeSelected(m_selection.getList(),mouseX,mouseY);
    						}

    						//if only an object selected, then try to find out if the node of current shape will be dragged.
    						m_selection.setDraggingNode(null);
    						m_startDraggingNode	=false;
    						//if only an object selected, then try to find out if the internal label of current shape will be dragged.
    						m_selection.setMoveLabel(null);
    						m_startMoveLabel	=false;

    						if (m_selection.size()>=1){

    							if (obj instanceof AbstractShape && existentObj){
    								drawObj	=(AbstractShape)obj;
    								moveLabel =null;
    								node	 =null;
    								if (m_drawState.isRotating() && drawObj.isRotatable()){
    									node	=drawObj.nodeIntersects(pnt,Node.NODEUSAGE_ROTATE);
    								}else{
    									node	=drawObj.nodeIntersects(pnt,Node.NODEUSAGE_MOVE);
    									drawObj.startMoveNode(node); 
    									if (node==null){
    										moveLabel	=drawObj.labelIntersects(g,pnt);
    									}

    								}
    								m_selection.setDraggingNode(node);
								m_selection.setMoveLabel(moveLabel);	

				  				//first graph event: label selected 

⌨️ 快捷键说明

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