1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
|
from app.wxviews.panels import *
from wx.lib.floatcanvas import FloatCanvas
from app.wxviews.items.noderepr import NodeRepr
from app.wxviews.drawers.nodedrawer import NodeDrawer
from app.wxviews.items.userrepr import UserRepr
from app.wxviews.drawers.userdrawer import UserDrawer
class PaintPanel(wx.Panel):
"""Canvas to let people draw networks"""
def __init__(self, parent):
super(PaintPanel, self).__init__(parent=parent)
self.network = Engine.Instance().network
szr = wx.BoxSizer()
self.canvas = FloatCanvas.FloatCanvas(parent=self)
szr.Add(self.canvas, proportion=1, flag=wx.EXPAND)
self.SetSizer(szr)
self.Bind(wx.EVT_RIGHT_UP, Engine.Instance().OnRightClick)
self.canvas.Bind(wx.EVT_RIGHT_UP, Engine.Instance().OnRightClick)
# The following is called a lambda expression:
# It allows us to define functions on-the-go.
# It is no more than a function without definition.
self.canvas.Bind(wx.EVT_LEFT_UP, lambda event, panel=self.canvas: self.OnLeftClick(event))
self.canvas.Bind(wx.EVT_PAINT, self.OnWindowBack)
#self.canvas.Bind(wx.EVT_HIBERNATE)
def OnWindowBack(self, event):
self.Update()
print("Refresh panel")
def OnLeftClick(self, event):
if Engine.Instance().toolbarClicked:
dc = wx.ClientDC(self.canvas)
if Engine.Instance().item == "Node":
x, y = event.GetX(), event.GetY()
frontNode = NodeRepr()
frontNode.circle = FC.Circle(XY=(x, y), Diameter=NodeDrawer.size)
dc.DrawCircle(frontNode.circle.XY[0], frontNode.circle.XY[1], NodeDrawer.size/2)
Engine.Instance().releaseFocus()
Engine.Instance().AddNode(frontNode)
if Engine.Instance().item == "User":
x, y = event.GetX(), event.GetY()
frontUser = UserRepr()
frontUser.rectangle = FC.Rectangle(XY=(x, y),WH=(100,100), FillColor='Blue' )
dc.DrawRectangle(frontUser.rectangle.XY[0], frontUser.rectangle.XY[1])
Engine.Instance().releaseFocus()
#Engine.Instance().AddUser(frontUser)
if Engine.Instance().item == "Branch":
x, y = event.GetX(), event.GetY()
if __name__ == '__main__':
pass |
Partager