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

📄 abstracteditor.py

📁 wxPython的基本示例程序
💻 PY
📖 第 1 页 / 共 3 页
字号:
#----------------------------------------------------------------------------# Name:         AbstractEditor.py# Purpose:      Non-text editor for DataModel and Process## Author:       Peter Yared, Morgan Hua## Created:      7/28/04# CVS-ID:       $Id: AbstractEditor.py,v 1.7 2006/04/20 06:26:01 RD Exp $# Copyright:    (c) 2004-2005 ActiveGrid, Inc.# License:      wxWindows License#----------------------------------------------------------------------------import wximport wx.lib.docviewimport wx.lib.ogl as oglimport PropertyService_ = wx.GetTranslationSELECT_BRUSH = wx.Brush("BLUE", wx.SOLID)SHAPE_BRUSH = wx.Brush("WHEAT", wx.SOLID)LINE_BRUSH = wx.BLACK_BRUSHINACTIVE_SELECT_BRUSH = wx.Brush("LIGHT BLUE", wx.SOLID)NORMALFONT = wx.SystemSettings.GetFont(wx.SYS_DEFAULT_GUI_FONT)SLANTFONT = wx.Font(NORMALFONT.GetPointSize(), NORMALFONT.GetFamily(), wx.SLANT, NORMALFONT.GetWeight())BOLDFONT = wx.Font(NORMALFONT.GetPointSize(), NORMALFONT.GetFamily(), NORMALFONT.GetStyle(), wx.BOLD)DEFAULT_BACKGROUND_COLOR = wx.Colour(0xEE, 0xEE, 0xEE)HEADER_BRUSH = wx.Brush(wx.Colour(0xDB, 0xEB, 0xFF), wx.SOLID)BODY_BRUSH = wx.Brush(wx.WHITE, wx.SOLID)PARKING_VERTICAL = 1PARKING_HORIZONTAL = 2PARKING_OFFSET = 30    # space between shapesFORCE_REDRAW_METHOD = "ForceRedraw"def GetRawModel(model):    if hasattr(model, "GetRawModel"):        rawModel = model.GetRawModel()    else:        rawModel = model    return rawModeldef GetLabel(model):    model = GetRawModel(model)    if hasattr(model, "__xmlname__"):        label = model.__xmlname__        try:            if (len(label) > 0):                label = label[0].upper() + label[1:]            if (hasattr(model, "complexType")):                label += ': %s/%s' % (model.complexType.name, model.name)            else:                if model.name:                    label += ': %s' % model.name                elif model.ref:                    label += ': %s' % model.ref        except AttributeError:            pass    else:        label = str(model)    return labelclass CanvasView(wx.lib.docview.View):    #----------------------------------------------------------------------------    # Overridden methods    #----------------------------------------------------------------------------    def __init__(self, brush=SHAPE_BRUSH, background=DEFAULT_BACKGROUND_COLOR):        wx.lib.docview.View.__init__(self)        self._brush = brush        self._backgroundColor = background        self._canvas = None        self._pt1 = None        self._pt2 = None        self._needEraseLasso = False        self._propShape = None        self._maxWidth = 2000        self._maxHeight = 16000        self._valetParking = False    def OnDraw(self, dc):        """ for Print Preview and Print """        dc.BeginDrawing()        self._canvas.Redraw(dc)        dc.EndDrawing()            def OnCreate(self, doc, flags):        frame = wx.GetApp().CreateDocumentFrame(self, doc, flags)        frame.Show()        sizer = wx.BoxSizer()        self._CreateCanvas(frame)        sizer.Add(self._canvas, 1, wx.EXPAND, 0)        frame.SetSizer(sizer)        frame.Layout()                self.Activate()        wx.EVT_RIGHT_DOWN(self._canvas, self.OnRightClick)        return True            def OnActivateView(self, activate, activeView, deactiveView):        if activate and self._canvas:            # In MDI mode just calling set focus doesn't work and in SDI mode using CallAfter causes an endless loop            if self.GetDocumentManager().GetFlags() & wx.lib.docview.DOC_SDI:                self.SetFocus()            else:                wx.CallAfter(self.SetFocus)    def SetFocus(self):        if self._canvas:            self._canvas.SetFocus()    def OnFocus(self, event):        self.FocusColorPropertyShape(True)        event.Skip()    def FocusOnClick(self, event):        self.SetFocus()        event.Skip()    def OnKillFocus(self, event):        self.FocusColorPropertyShape(False)        event.Skip()    def HasFocus(self):        winWithFocus = wx.Window.FindFocus()        if not winWithFocus:            return False        while winWithFocus:            if winWithFocus == self._canvas:                return True            winWithFocus = winWithFocus.GetParent()        return False    def OnClose(self, deleteWindow = True):        statusC = wx.GetApp().CloseChildDocuments(self.GetDocument())        statusP = wx.lib.docview.View.OnClose(self, deleteWindow = deleteWindow)        if hasattr(self, "ClearOutline"):            wx.CallAfter(self.ClearOutline)  # need CallAfter because when closing the document, it is Activated and then Close, so need to match OnActivateView's CallAfter        if not (statusC and statusP):            return False        self.Activate(False)        if deleteWindow and self.GetFrame():            self.GetFrame().Destroy()        return True    def _CreateCanvas(self, parent):        self._canvas = ogl.ShapeCanvas(parent)        wx.EVT_LEFT_DOWN(self._canvas, self.OnLeftClick)        wx.EVT_LEFT_UP(self._canvas, self.OnLeftUp)        wx.EVT_MOTION(self._canvas, self.OnLeftDrag)        wx.EVT_LEFT_DCLICK(self._canvas, self.OnLeftDoubleClick)        wx.EVT_KEY_DOWN(self._canvas, self.OnKeyPressed)                # need this otherwise mouse clicks don't set focus to this view        wx.EVT_LEFT_DOWN(self._canvas, self.FocusOnClick)        wx.EVT_LEFT_DCLICK(self._canvas, self.FocusOnClick)        wx.EVT_RIGHT_DOWN(self._canvas, self.FocusOnClick)        wx.EVT_RIGHT_DCLICK(self._canvas, self.FocusOnClick)        wx.EVT_MIDDLE_DOWN(self._canvas, self.FocusOnClick)        wx.EVT_MIDDLE_DCLICK(self._canvas, self.FocusOnClick)                wx.EVT_KILL_FOCUS(self._canvas, self.OnKillFocus)        wx.EVT_SET_FOCUS(self._canvas, self.OnFocus)        self._canvas.SetScrollbars(20, 20, self._maxWidth / 20, self._maxHeight / 20)                self._canvas.SetBackgroundColour(self._backgroundColor)        self._diagram = ogl.Diagram()        self._canvas.SetDiagram(self._diagram)        self._diagram.SetCanvas(self._canvas)        self._canvas.SetFont(NORMALFONT)    def OnClear(self, event):        """ Deletion of selected objects from view.        *Must Override*        """        self.SetPropertyModel(None)                      def SetLastRightClick(self, x, y):        self._lastRightClick = (x,y)            def GetLastRightClick(self):        if hasattr(self, "_lastRightClick"):            return self._lastRightClick        return (-1,-1)            def OnKeyPressed(self, event):        key = event.KeyCode()        if key == wx.WXK_DELETE:            self.OnClear(event)        else:            event.Skip()    def OnRightClick(self, event):        """ force selection underneath right click position. """        self.Activate()        self._canvas.SetFocus()        dc = wx.ClientDC(self._canvas)        self._canvas.PrepareDC(dc)        x, y = event.GetLogicalPosition(dc)  # this takes into account scrollbar offset        self.SetLastRightClick(x, y)        shape = self._canvas.FindShape(x, y)[0]                model = None        if not shape:            self.SetSelection(None)            self.SetPropertyShape(None)        elif hasattr(shape, "GetModel"):            self.BringToFront(shape)            self.SetPropertyShape(shape)            self.SetSelection(shape)            shape.Select(True, dc)            model = shape.GetModel()        elif shape.GetParent() and isinstance(shape.GetParent(), ogl.CompositeShape):  # ComplexTypeHeader for ComplexTypeShape            self.BringToFront(shape)            self.SetPropertyShape(shape.GetParent())            self.SetSelection(shape.GetParent())            shape.GetParent().Select(True, dc)            model = shape.GetParent().GetModel()        self.SetPropertyModel(model)                return (shape, model)    def OnLeftClick(self, event):        self.Activate()        self._canvas.SetFocus()                self.EraseRubberBand()        dc = wx.ClientDC(self._canvas)        self._canvas.PrepareDC(dc)        # keep track of mouse down for group select        self._pt1 = event.GetLogicalPosition(dc)  # this takes into account scrollbar offset        self._pt2 = None        shape = self._canvas.FindShape(self._pt1[0], self._pt1[1])[0]        if shape:            self.BringToFront(shape)            self._pt1 = None            event.Skip()  # pass on event to shape handler to take care of selection            return        elif event.ControlDown() or event.ShiftDown():    # extend select, don't deselect            pass        else:            # click on empty part of canvas, deselect everything            forceRedrawShapes = []            needRefresh = False            for shape in self._diagram.GetShapeList():                if hasattr(shape, "GetModel"):                    if shape.Selected():                        needRefresh = True                        shape.Select(False, dc)                        if hasattr(shape, FORCE_REDRAW_METHOD):                            forceRedrawShapes.append(shape)            if needRefresh:                self._canvas.Redraw(dc)            self.SetPropertyModel(None)        if len(self.GetSelection()) == 0:            self.SetPropertyShape(None)

⌨️ 快捷键说明

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