""" It removes "from __future__ import division", fixes a couple of bugs and adds a lot of whitespace. Since I also removed an instance of [::-1] for list reversing, I think this ought to work on older pythons (I have not tested though). """ git-svn-id: https://svn.wxwidgets.org/svn/wx/wxWidgets/trunk@27884 c3d73ce0-8a6f-49c7-b76d-6d57e0e08775
		
			
				
	
	
		
			159 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			159 lines
		
	
	
		
			5.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# -*- coding: iso-8859-1 -*-
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
# Name:         diagram.py
 | 
						|
# Purpose:      Diagram class
 | 
						|
#
 | 
						|
# Author:       Pierre Hjälm (from C++ original by Julian Smart)
 | 
						|
#
 | 
						|
# Created:      2004-05-08
 | 
						|
# RCS-ID:       $Id$
 | 
						|
# Copyright:    (c) 2004 Pierre Hjälm - 1998 Julian Smart
 | 
						|
# Licence:      wxWindows license
 | 
						|
#----------------------------------------------------------------------------
 | 
						|
 | 
						|
import wx
 | 
						|
 | 
						|
DEFAULT_MOUSE_TOLERANCE = 3
 | 
						|
 | 
						|
 | 
						|
 | 
						|
class Diagram(object):
 | 
						|
    """Encapsulates an entire diagram, with methods for drawing. A diagram has
 | 
						|
    an associated ShapeCanvas.
 | 
						|
 | 
						|
    Derived from:
 | 
						|
      Object
 | 
						|
    """
 | 
						|
    def __init__(self):
 | 
						|
        self._diagramCanvas = None
 | 
						|
        self._quickEditMode = False
 | 
						|
        self._snapToGrid = True
 | 
						|
        self._gridSpacing = 5.0
 | 
						|
        self._shapeList = []
 | 
						|
        self._mouseTolerance = DEFAULT_MOUSE_TOLERANCE
 | 
						|
 | 
						|
    def Redraw(self, dc):
 | 
						|
        """Draw the shapes in the diagram on the specified device context."""
 | 
						|
        if self._shapeList:
 | 
						|
            if self.GetCanvas():
 | 
						|
                self.GetCanvas().SetCursor(wx.HOURGLASS_CURSOR)
 | 
						|
            for object in self._shapeList:
 | 
						|
                object.Draw(dc)
 | 
						|
            if self.GetCanvas():
 | 
						|
                self.GetCanvas().SetCursor(wx.STANDARD_CURSOR)
 | 
						|
 | 
						|
    def Clear(self, dc):
 | 
						|
        """Clear the specified device context."""
 | 
						|
        dc.Clear()
 | 
						|
 | 
						|
    def AddShape(self, object, addAfter = None):
 | 
						|
        """Adds a shape to the diagram. If addAfter is not None, the shape
 | 
						|
        will be added after addAfter.
 | 
						|
        """
 | 
						|
        if not object in self._shapeList:
 | 
						|
            if addAfter:
 | 
						|
                self._shapeList.insert(self._shapeList.index(addAfter) + 1, object)
 | 
						|
            else:
 | 
						|
                self._shapeList.append(object)
 | 
						|
 | 
						|
            object.SetCanvas(self.GetCanvas())
 | 
						|
 | 
						|
    def InsertShape(self, object):
 | 
						|
        """Insert a shape at the front of the shape list."""
 | 
						|
        self._shapeList.insert(0, object)
 | 
						|
 | 
						|
    def RemoveShape(self, object):
 | 
						|
        """Remove the shape from the diagram (non-recursively) but do not
 | 
						|
        delete it.
 | 
						|
        """
 | 
						|
        if object in self._shapeList:
 | 
						|
            self._shapeList.remove(object)
 | 
						|
            
 | 
						|
    def RemoveAllShapes(self):
 | 
						|
        """Remove all shapes from the diagram but do not delete the shapes."""
 | 
						|
        self._shapeList = []
 | 
						|
 | 
						|
    def DeleteAllShapes(self):
 | 
						|
        """Remove and delete all shapes in the diagram."""
 | 
						|
        for shape in self._shapeList[:]:
 | 
						|
            if not shape.GetParent():
 | 
						|
                self.RemoveShape(shape)
 | 
						|
                
 | 
						|
    def ShowAll(self, show):
 | 
						|
        """Call Show for each shape in the diagram."""
 | 
						|
        for shape in self._shapeList:
 | 
						|
            shape.Show()
 | 
						|
 | 
						|
    def DrawOutLine(self, dc, x1, y1, x2, y2):
 | 
						|
        """Draw an outline rectangle on the current device context."""
 | 
						|
        dc.SetPen(wx.Pen(wx.Color(0, 0, 0), 1, wx.DOT))
 | 
						|
        dc.SetBrush(wx.TRANSPARENT_BRUSH)
 | 
						|
 | 
						|
        dc.DrawLines([[x1, y1], [x2, y1], [x2, y2], [x1, y2], [x1, y1]])
 | 
						|
 | 
						|
    def RecentreAll(self, dc):
 | 
						|
        """Make sure all text that should be centred, is centred."""
 | 
						|
        for shape in self._shapeList:
 | 
						|
            shape.Recentre(dc)
 | 
						|
 | 
						|
    def SetCanvas(self, canvas):
 | 
						|
        """Set the canvas associated with this diagram."""
 | 
						|
        self._diagramCanvas = canvas
 | 
						|
 | 
						|
    def GetCanvas(self):
 | 
						|
        """Return the shape canvas associated with this diagram."""
 | 
						|
        return self._diagramCanvas
 | 
						|
        
 | 
						|
    def FindShape(self, id):
 | 
						|
        """Return the shape for the given identifier."""
 | 
						|
        for shape in self._shapeList:
 | 
						|
            if shape.GetId() == id:
 | 
						|
                return shape
 | 
						|
        return None
 | 
						|
 | 
						|
    def Snap(self, x, y):
 | 
						|
        """'Snaps' the coordinate to the nearest grid position, if
 | 
						|
        snap-to-grid is on."""
 | 
						|
        if self._snapToGrid:
 | 
						|
            return self._gridSpacing * int(x / self._gridSpacing + 0.5), self._gridSpacing * int(y / self._gridSpacing + 0.5)
 | 
						|
        return x, y
 | 
						|
 | 
						|
    def GetGridSpacing(self):
 | 
						|
        """Return the grid spacing."""
 | 
						|
        return self._gridSpacing
 | 
						|
 | 
						|
    def GetSnapToGrid(self):
 | 
						|
        """Return snap-to-grid mode."""
 | 
						|
        return self._snapToGrid
 | 
						|
 | 
						|
    def SetQuickEditMode(self, mode):
 | 
						|
        """Set quick-edit-mode on of off.
 | 
						|
 | 
						|
        In this mode, refreshes are minimized, but the diagram may need
 | 
						|
        manual refreshing occasionally.
 | 
						|
        """
 | 
						|
        self._quickEditMode = mode
 | 
						|
 | 
						|
    def GetQuickEditMode(self):
 | 
						|
        """Return quick edit mode."""
 | 
						|
        return self._quickEditMode
 | 
						|
 | 
						|
    def SetMouseTolerance(self, tolerance):
 | 
						|
        """Set the tolerance within which a mouse move is ignored.
 | 
						|
 | 
						|
        The default is 3 pixels.
 | 
						|
        """
 | 
						|
        self._mouseTolerance = tolerance
 | 
						|
 | 
						|
    def GetMouseTolerance(self):
 | 
						|
        """Return the tolerance within which a mouse move is ignored."""
 | 
						|
        return self._mouseTolerance
 | 
						|
 | 
						|
    def GetShapeList(self):
 | 
						|
        """Return the internal shape list."""
 | 
						|
        return self._shapeList
 | 
						|
 | 
						|
    def GetCount(self):
 | 
						|
        """Return the number of shapes in the diagram."""
 | 
						|
        return len(self._shapeList)
 |