editors/Viewer.py
branchwxPython4
changeset 3303 0ffb41625592
parent 3300 95fe62bfe920
child 3304 3d736248ab3b
equal deleted inserted replaced
3302:c89fc366bebd 3303:0ffb41625592
    58 
    58 
    59 def ResetCursors():
    59 def ResetCursors():
    60     global CURSORS
    60     global CURSORS
    61     if CURSORS is None:
    61     if CURSORS is None:
    62         CURSORS = [wx.NullCursor,
    62         CURSORS = [wx.NullCursor,
    63                    wx.StockCursor(wx.CURSOR_HAND),
    63                    wx.Cursor(wx.CURSOR_HAND),
    64                    wx.StockCursor(wx.CURSOR_SIZENWSE),
    64                    wx.Cursor(wx.CURSOR_SIZENWSE),
    65                    wx.StockCursor(wx.CURSOR_SIZENESW),
    65                    wx.Cursor(wx.CURSOR_SIZENESW),
    66                    wx.StockCursor(wx.CURSOR_SIZEWE),
    66                    wx.Cursor(wx.CURSOR_SIZEWE),
    67                    wx.StockCursor(wx.CURSOR_SIZENS)]
    67                    wx.Cursor(wx.CURSOR_SIZENS)]
    68 
    68 
    69 
    69 
    70 if wx.Platform == '__WXMSW__':
    70 if wx.Platform == '__WXMSW__':
    71     faces = {
    71     faces = {
    72         'times': 'Times New Roman',
    72         'times': 'Times New Roman',
   408                 tree = dict([(var.Name, var.Tree) for var in self.ParentWindow.Controler.GetEditedElementInterfaceVars(tagname, True, self.ParentWindow.Debug)]).get(values[0], None)
   408                 tree = dict([(var.Name, var.Tree) for var in self.ParentWindow.Controler.GetEditedElementInterfaceVars(tagname, True, self.ParentWindow.Debug)]).get(values[0], None)
   409                 if tree is not None:
   409                 if tree is not None:
   410                     if len(tree[0]) > 0:
   410                     if len(tree[0]) > 0:
   411                         menu = wx.Menu(title='')
   411                         menu = wx.Menu(title='')
   412                         self.GenerateTreeMenu(x, y, scaling, menu, "", var_class, [(values[0], values[2], tree)])
   412                         self.GenerateTreeMenu(x, y, scaling, menu, "", var_class, [(values[0], values[2], tree)])
   413                         self.ParentWindow.PopupMenuXY(menu)
   413                         self.ParentWindow.PopupMenu(menu)
   414                     else:
   414                     else:
   415                         self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, values[0], values[2])
   415                         self.ParentWindow.AddVariableBlock(x, y, scaling, var_class, values[0], values[2])
   416                 else:
   416                 else:
   417                     message = _("Unknown variable \"%s\" for this POU!") % values[0]
   417                     message = _("Unknown variable \"%s\" for this POU!") % values[0]
   418             else:
   418             else:
   710             width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
   710             width, _height = dc.GetTextExtent("ABCDEFGHIJKLMNOPQRSTUVWXYZ")
   711             if width < 260:
   711             if width < 260:
   712                 break
   712                 break
   713             faces["size"] -= 1
   713             faces["size"] -= 1
   714         self.Editor.SetFont(font)
   714         self.Editor.SetFont(font)
   715         self.MiniTextDC = wx.MemoryDC(wx.EmptyBitmap(1, 1))
   715         self.MiniTextDC = wx.MemoryDC(wx.Bitmap(1, 1))
   716         self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"]))
   716         self.MiniTextDC.SetFont(wx.Font(faces["size"] * 0.75, wx.SWISS, wx.NORMAL, wx.NORMAL, faceName=faces["helv"]))
   717 
   717 
   718         self.CurrentScale = None
   718         self.CurrentScale = None
   719         self.SetScale(ZOOM_FACTORS.index(1.0), False)
   719         self.SetScale(ZOOM_FACTORS.index(1.0), False)
   720 
   720 
   825     def GetViewScale(self):
   825     def GetViewScale(self):
   826         return self.ViewScale
   826         return self.ViewScale
   827 
   827 
   828     def GetLogicalDC(self, buffered=False):
   828     def GetLogicalDC(self, buffered=False):
   829         if buffered:
   829         if buffered:
   830             bitmap = wx.EmptyBitmap(*self.Editor.GetClientSize())
   830             bitmap = wx.Bitmap(*self.Editor.GetClientSize())
   831             dc = wx.MemoryDC(bitmap)
   831             dc = wx.MemoryDC(bitmap)
   832         else:
   832         else:
   833             dc = wx.ClientDC(self.Editor)
   833             dc = wx.ClientDC(self.Editor)
   834         dc.SetFont(self.GetFont())
   834         dc.SetFont(self.GetFont())
   835         self.Editor.DoPrepareDC(dc)
   835         self.Editor.DoPrepareDC(dc)
  1056         # Reset selection
  1056         # Reset selection
  1057         if self.Mode != MODE_SELECTION and self.SelectedElement:
  1057         if self.Mode != MODE_SELECTION and self.SelectedElement:
  1058             self.SelectedElement.SetSelected(False)
  1058             self.SelectedElement.SetSelected(False)
  1059             self.SelectedElement = None
  1059             self.SelectedElement = None
  1060         if self.Mode == MODE_MOTION:
  1060         if self.Mode == MODE_MOTION:
  1061             wx.CallAfter(self.Editor.SetCursor, wx.StockCursor(wx.CURSOR_HAND))
  1061             wx.CallAfter(self.Editor.SetCursor, wx.Cursor(wx.CURSOR_HAND))
  1062             self.SavedMode = True
  1062             self.SavedMode = True
  1063 
  1063 
  1064     # Return current drawing mode
  1064     # Return current drawing mode
  1065     def GetDrawingMode(self):
  1065     def GetDrawingMode(self):
  1066         return self.ParentWindow.GetDrawingMode()
  1066         return self.ParentWindow.GetDrawingMode()
  1114         if scaling[0] != 0 and scaling[1] != 0:
  1114         if scaling[0] != 0 and scaling[1] != 0:
  1115             self.Scaling = scaling
  1115             self.Scaling = scaling
  1116             if self.DrawGrid:
  1116             if self.DrawGrid:
  1117                 width = max(2, int(scaling[0] * self.ViewScale[0]))
  1117                 width = max(2, int(scaling[0] * self.ViewScale[0]))
  1118                 height = max(2, int(scaling[1] * self.ViewScale[1]))
  1118                 height = max(2, int(scaling[1] * self.ViewScale[1]))
  1119                 bitmap = wx.EmptyBitmap(width, height)
  1119                 bitmap = wx.Bitmap(width, height)
  1120                 dc = wx.MemoryDC(bitmap)
  1120                 dc = wx.MemoryDC(bitmap)
  1121                 dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
  1121                 dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
  1122                 dc.Clear()
  1122                 dc.Clear()
  1123                 dc.SetPen(MiterPen(wx.Colour(180, 180, 180)))
  1123                 dc.SetPen(MiterPen(wx.Colour(180, 180, 180)))
  1124                 dc.DrawPoint(0, 0)
  1124                 dc.DrawPoint(0, 0)
  1125                 self.GridBrush = wx.BrushFromBitmap(bitmap)
  1125                 self.GridBrush = wx.Brush(bitmap)
  1126             else:
  1126             else:
  1127                 self.GridBrush = wx.TRANSPARENT_BRUSH
  1127                 self.GridBrush = wx.TRANSPARENT_BRUSH
  1128         else:
  1128         else:
  1129             self.Scaling = None
  1129             self.Scaling = None
  1130             self.GridBrush = wx.TRANSPARENT_BRUSH
  1130             self.GridBrush = wx.TRANSPARENT_BRUSH
  3377     def Paste(self, bbx=None):
  3377     def Paste(self, bbx=None):
  3378         if not self.Debug:
  3378         if not self.Debug:
  3379             element = self.ParentWindow.GetCopyBuffer()
  3379             element = self.ParentWindow.GetCopyBuffer()
  3380             if bbx is None:
  3380             if bbx is None:
  3381                 mouse_pos = self.Editor.ScreenToClient(wx.GetMousePosition())
  3381                 mouse_pos = self.Editor.ScreenToClient(wx.GetMousePosition())
  3382                 middle = wx.Rect(0, 0, *self.Editor.GetClientSize()).InsideXY(mouse_pos.x, mouse_pos.y)
  3382                 middle = wx.Rect(0, 0, *self.Editor.GetClientSize()).Contains(mouse_pos.x, mouse_pos.y)
  3383                 if middle:
  3383                 if middle:
  3384                     x, y = self.CalcUnscrolledPosition(mouse_pos.x, mouse_pos.y)
  3384                     x, y = self.CalcUnscrolledPosition(mouse_pos.x, mouse_pos.y)
  3385                 else:
  3385                 else:
  3386                     x, y = self.CalcUnscrolledPosition(0, 0)
  3386                     x, y = self.CalcUnscrolledPosition(0, 0)
  3387                 new_pos = [int(x / self.ViewScale[0]), int(y / self.ViewScale[1])]
  3387                 new_pos = [int(x / self.ViewScale[0]), int(y / self.ViewScale[1])]
  3631             else:
  3631             else:
  3632                 dc.SetFont(self.GetFont())
  3632                 dc.SetFont(self.GetFont())
  3633         else:
  3633         else:
  3634             dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
  3634             dc.SetBackground(wx.Brush(self.Editor.GetBackgroundColour()))
  3635             dc.Clear()
  3635             dc.Clear()
  3636             dc.BeginDrawing()
       
  3637         if self.Scaling is not None and self.DrawGrid and not printing:
  3636         if self.Scaling is not None and self.DrawGrid and not printing:
  3638             dc.SetPen(wx.TRANSPARENT_PEN)
  3637             dc.SetPen(wx.TRANSPARENT_PEN)
  3639             dc.SetBrush(self.GridBrush)
  3638             dc.SetBrush(self.GridBrush)
  3640             xstart, ystart = self.GetViewStart()
  3639             xstart, ystart = self.GetViewStart()
  3641             window_size = self.Editor.GetClientSize()
  3640             window_size = self.Editor.GetClientSize()
  3678         if not printing:
  3677         if not printing:
  3679             if self.Debug:
  3678             if self.Debug:
  3680                 self.InstanceName.Draw(dc)
  3679                 self.InstanceName.Draw(dc)
  3681             if self.rubberBand.IsShown():
  3680             if self.rubberBand.IsShown():
  3682                 self.rubberBand.Draw(dc)
  3681                 self.rubberBand.Draw(dc)
  3683             dc.EndDrawing()
       
  3684 
  3682 
  3685     def OnPaint(self, event):
  3683     def OnPaint(self, event):
  3686         dc = self.GetLogicalDC(True)
  3684         dc = self.GetLogicalDC(True)
  3687         self.DoDrawing(dc)
  3685         self.DoDrawing(dc)
  3688         wx.BufferedPaintDC(self.Editor, dc.GetAsBitmap())
  3686         wx.BufferedPaintDC(self.Editor, dc.GetAsBitmap())