summaryrefslogtreecommitdiff
path: root/weave/examples/wx_example.py
diff options
context:
space:
mode:
Diffstat (limited to 'weave/examples/wx_example.py')
-rw-r--r--weave/examples/wx_example.py229
1 files changed, 229 insertions, 0 deletions
diff --git a/weave/examples/wx_example.py b/weave/examples/wx_example.py
new file mode 100644
index 000000000..e24d62cd8
--- /dev/null
+++ b/weave/examples/wx_example.py
@@ -0,0 +1,229 @@
+""" This is taken from the scrolled window example from the demo.
+
+ Take a look at the DoDrawing2() method below. The first 6 lines
+ or so have been translated into C++.
+
+"""
+
+
+import sys
+sys.path.insert(0,'..')
+import inline_tools
+
+from wxPython.wx import *
+
+class MyCanvas(wxScrolledWindow):
+ def __init__(self, parent, id = -1, size = wxDefaultSize):
+ wxScrolledWindow.__init__(self, parent, id, wxPoint(0, 0), size, wxSUNKEN_BORDER)
+
+ self.lines = []
+ self.maxWidth = 1000
+ self.maxHeight = 1000
+
+ self.SetBackgroundColour(wxNamedColor("WHITE"))
+ EVT_LEFT_DOWN(self, self.OnLeftButtonEvent)
+ EVT_LEFT_UP(self, self.OnLeftButtonEvent)
+ EVT_MOTION(self, self.OnLeftButtonEvent)
+
+ EVT_PAINT(self, self.OnPaint)
+
+
+ self.SetCursor(wxStockCursor(wxCURSOR_PENCIL))
+ #bmp = images.getTest2Bitmap()
+ #mask = wxMaskColour(bmp, wxBLUE)
+ #bmp.SetMask(mask)
+ #self.bmp = bmp
+
+ self.SetScrollbars(20, 20, self.maxWidth/20, self.maxHeight/20)
+
+ def getWidth(self):
+ return self.maxWidth
+
+ def getHeight(self):
+ return self.maxHeight
+
+
+ def OnPaint(self, event):
+ dc = wxPaintDC(self)
+ self.PrepareDC(dc)
+ self.DoDrawing2(dc)
+
+
+ def DoDrawing(self, dc):
+ dc.BeginDrawing()
+ dc.SetPen(wxPen(wxNamedColour('RED')))
+ dc.DrawRectangle(5, 5, 50, 50)
+
+ dc.SetBrush(wxLIGHT_GREY_BRUSH)#
+ dc.SetPen(wxPen(wxNamedColour('BLUE'), 4))
+ dc.DrawRectangle(15, 15, 50, 50)
+
+ dc.SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL))
+ dc.SetTextForeground(wxColour(0xFF, 0x20, 0xFF))
+ te = dc.GetTextExtent("Hello World")
+ dc.DrawText("Hello World", 60, 65)
+
+ dc.SetPen(wxPen(wxNamedColour('VIOLET'), 4))
+ dc.DrawLine(5, 65+te[1], 60+te[0], 65+te[1])
+
+ lst = [(100,110), (150,110), (150,160), (100,160)]
+ dc.DrawLines(lst, -60)
+ dc.SetPen(wxGREY_PEN)
+ dc.DrawPolygon(lst, 75)
+ dc.SetPen(wxGREEN_PEN)
+ dc.DrawSpline(lst+[(100,100)])
+
+ #dc.DrawBitmap(self.bmp, 200, 20, true)
+ #dc.SetTextForeground(wxColour(0, 0xFF, 0x80))
+ #dc.DrawText("a bitmap", 200, 85)
+
+ font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL)
+ dc.SetFont(font)
+ dc.SetTextForeground(wxBLACK)
+ for a in range(0, 360, 45):
+ dc.DrawRotatedText("Rotated text...", 300, 300, a)
+
+ dc.SetPen(wxTRANSPARENT_PEN)
+ dc.SetBrush(wxBLUE_BRUSH)
+ dc.DrawRectangle(50,500,50,50)
+ dc.DrawRectangle(100,500,50,50)
+
+ dc.SetPen(wxPen(wxNamedColour('RED')))
+ dc.DrawEllipticArc(200, 500, 50, 75, 0, 90)
+
+ self.DrawSavedLines(dc)
+ dc.EndDrawing()
+
+ def DoDrawing2(self, dc):
+
+ red = wxNamedColour("RED");
+ blue = wxNamedColour("BLUE");
+ grey_brush = wxLIGHT_GREY_BRUSH;
+ code = \
+ """
+ #line 108 "wx_example.py"
+ dc->BeginDrawing();
+ dc->SetPen(wxPen(*red,4,wxSOLID));
+ dc->DrawRectangle(5, 5, 50, 50);
+
+ dc->SetBrush(*grey_brush);
+ dc->SetPen(wxPen(*blue, 4,wxSOLID));
+ dc->DrawRectangle(15, 15, 50, 50);
+ """
+ inline_tools.inline(code,['dc','red','blue','grey_brush'],compiler='msvc')
+
+ dc.SetFont(wxFont(14, wxSWISS, wxNORMAL, wxNORMAL))
+ dc.SetTextForeground(wxColour(0xFF, 0x20, 0xFF))
+ te = dc.GetTextExtent("Hello World")
+ dc.DrawText("Hello World", 60, 65)
+
+ dc.SetPen(wxPen(wxNamedColour('VIOLET'), 4))
+ dc.DrawLine(5, 65+te[1], 60+te[0], 65+te[1])
+
+ lst = [(100,110), (150,110), (150,160), (100,160)]
+ dc.DrawLines(lst, -60)
+ dc.SetPen(wxGREY_PEN)
+ dc.DrawPolygon(lst, 75)
+ dc.SetPen(wxGREEN_PEN)
+ dc.DrawSpline(lst+[(100,100)])
+
+ #dc.DrawBitmap(self.bmp, 200, 20, true)
+ #dc.SetTextForeground(wxColour(0, 0xFF, 0x80))
+ #dc.DrawText("a bitmap", 200, 85)
+
+ font = wxFont(20, wxSWISS, wxNORMAL, wxNORMAL)
+ dc.SetFont(font)
+ dc.SetTextForeground(wxBLACK)
+ for a in range(0, 360, 45):
+ dc.DrawRotatedText("Rotated text...", 300, 300, a)
+
+ dc.SetPen(wxTRANSPARENT_PEN)
+ dc.SetBrush(wxBLUE_BRUSH)
+ dc.DrawRectangle(50,500,50,50)
+ dc.DrawRectangle(100,500,50,50)
+
+ dc.SetPen(wxPen(wxNamedColour('RED')))
+ dc.DrawEllipticArc(200, 500, 50, 75, 0, 90)
+
+ self.DrawSavedLines(dc)
+ dc.EndDrawing()
+
+
+ def DrawSavedLines(self, dc):
+ dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
+ for line in self.lines:
+ for coords in line:
+ apply(dc.DrawLine, coords)
+
+
+ def SetXY(self, event):
+ self.x, self.y = self.ConvertEventCoords(event)
+
+ def ConvertEventCoords(self, event):
+ xView, yView = self.GetViewStart()
+ xDelta, yDelta = self.GetScrollPixelsPerUnit()
+ return (event.GetX() + (xView * xDelta),
+ event.GetY() + (yView * yDelta))
+
+ def OnLeftButtonEvent(self, event):
+ if event.LeftDown():
+ self.SetXY(event)
+ self.curLine = []
+ self.CaptureMouse()
+
+ elif event.Dragging():
+ dc = wxClientDC(self)
+ self.PrepareDC(dc)
+ dc.BeginDrawing()
+ dc.SetPen(wxPen(wxNamedColour('MEDIUM FOREST GREEN'), 4))
+ coords = (self.x, self.y) + self.ConvertEventCoords(event)
+ self.curLine.append(coords)
+ apply(dc.DrawLine, coords)
+ self.SetXY(event)
+ dc.EndDrawing()
+
+ elif event.LeftUp():
+ self.lines.append(self.curLine)
+ self.curLine = []
+ self.ReleaseMouse()
+
+#---------------------------------------------------------------------------
+# This example isn't currently used.
+
+class py_canvas(wx.wxWindow):
+ def __init__(self, parent, id = -1, pos=wx.wxPyDefaultPosition,
+ size=wx.wxPyDefaultSize, **attr):
+ wx.wxWindow.__init__(self, parent, id, pos,size)
+ #wx.EVT_PAINT(self,self.on_paint)
+ background = wx.wxNamedColour('white')
+
+ code = """
+ self->SetBackgroundColour(*background);
+ """
+ inline_tools.inline(code,['self','background'],compiler='msvc')
+#----------------------------------------------------------------------------
+
+class MyFrame(wxFrame):
+ def __init__(self, parent, ID, title, pos=wxDefaultPosition,
+ size=wxDefaultSize, style=wxDEFAULT_FRAME_STYLE):
+ wxFrame.__init__(self, parent, ID, title, pos, size, style)
+ #panel = wxPanel(self, -1)
+ self.GetSize()
+ #button = wxButton(panel, 1003, "Close Me")
+ #button.SetPosition(wxPoint(15, 15))
+ #EVT_BUTTON(self, 1003, self.OnCloseMe)
+ #EVT_CLOSE(self, self.OnCloseWindow)
+ #canvas = py_canvas(self,-1)
+ canvas = MyCanvas(self,-1)
+ canvas.Show(true)
+
+class MyApp(wxApp):
+ def OnInit(self):
+ win = MyFrame(NULL, -1, "This is a wxFrame", size=(350, 200),
+ style = wxDEFAULT_FRAME_STYLE)# | wxFRAME_TOOL_WINDOW )
+ win.Show(true)
+ return true
+
+if __name__ == "__main__":
+ app = MyApp(0)
+ app.MainLoop()