added cmdline.h/.cpp to the makefiles
[wxWidgets.git] / utils / wxPython / demo / wxOGL.py
CommitLineData
e91a9dfc
RD
1
2from wxPython.wx import *
3from wxPython.ogl import *
4
5#----------------------------------------------------------------------
6# This creates some pens and brushes that the OGL library uses.
7
8wxOGLInitialize()
9
10#----------------------------------------------------------------------
11
12class DiamondShape(wxPolygonShape):
13 def __init__(self, w=0.0, h=0.0):
14 wxPolygonShape.__init__(self)
15 if w == 0.0:
16 w = 60.0
17 if h == 0.0:
18 h = 60.0
19
20 ## Either wxRealPoints or 2-tuples of floats works.
21
22 #points = [ wxRealPoint(0.0, -h/2.0),
23 # wxRealPoint(w/2.0, 0.0),
24 # wxRealPoint(0.0, h/2.0),
25 # wxRealPoint(-w/2.0, 0.0),
26 # ]
27 points = [ (0.0, -h/2.0),
28 (w/2.0, 0.0),
29 (0.0, h/2.0),
30 (-w/2.0, 0.0),
31 ]
32
33 self.Create(points)
34
35
36#----------------------------------------------------------------------
37
38class RoundedRectangleShape(wxRectangleShape):
39 def __init__(self, w=0.0, h=0.0):
40 wxRectangleShape.__init__(self, w, h)
41 self.SetCornerRadius(-0.3)
42
43
44#----------------------------------------------------------------------
45
46class MyEvtHandler(wxShapeEvtHandler):
47 def __init__(self, log, frame):
48 wxShapeEvtHandler.__init__(self)
49 self.log = log
50 self.statbarFrame = frame
51
52
53 def UpdateStatusBar(self, shape):
54 x,y = shape.GetX(), shape.GetY()
55 width, height = shape.GetBoundingBoxMax()
56 self.statbarFrame.SetStatusText("Pos: (%d,%d) Size: (%d, %d)" %
57 (x, y, width, height))
58
59
60 def OnLeftClick(self, x, y, keys = 0, attachment = 0):
61 shape = self.GetShape()
62 canvas = shape.GetCanvas()
63 dc = wxClientDC(canvas)
64 canvas.PrepareDC(dc)
65
66 if shape.Selected():
67 shape.Select(false, dc)
68 canvas.Redraw(dc)
69 else:
70 redraw = false
71 shapeList = canvas.GetDiagram().GetShapeList()
72 toUnselect = []
73 for s in shapeList:
74 if s.Selected():
75 # If we unselect it now then some of the objects in
76 # shapeList will become invalid (the control points are
77 # shapes too!) and bad things will happen...
78 toUnselect.append(s)
79
80 shape.Select(true, dc)
81
82 if toUnselect:
83 for s in toUnselect:
84 s.Select(false, dc)
85 canvas.Redraw(dc)
86
87 self.UpdateStatusBar(shape)
88
89
90 def OnEndDragLeft(self, x, y, keys = 0, attachment = 0):
91 shape = self.GetShape()
92 self.base_OnEndDragLeft(x, y, keys, attachment)
93 if not shape.Selected():
94 self.OnLeftClick(x, y, keys, attachment)
95 self.UpdateStatusBar(shape)
96
97
98 def OnSize(self, x, y):
99 self.base_OnSize(x, y)
100 self.UpdateStatusBar(self.GetShape())
101
102
103# def OnMovePost(self, dc, x, y, oldX, oldY, display):
104# self.base_OnMovePost(dc, x, y, oldX, oldY, display)
105# self.UpdateStatusBar(self.GetShape())
106
107
108 def OnRightClick(self, *dontcare):
109 self.log.WriteText("%s\n" % self.GetShape())
110
111
112#----------------------------------------------------------------------
113
114class TestWindow(wxShapeCanvas):
115 def __init__(self, parent, log, frame):
116 wxShapeCanvas.__init__(self, parent)
117
118 self.log = log
119 self.frame = frame
120 self.SetBackgroundColour(wxWHITE)
121 self.diagram = wxDiagram()
122 self.SetDiagram(self.diagram)
123 self.diagram.SetCanvas(self)
124 self.shapes = []
125
2f90df85
RD
126 rRectBrush = wxBrush(wxNamedColour("MEDIUM TURQUOISE"), wxSOLID)
127
128 self.MyAddShape(wxCircleShape(80), 100, 100, wxPen(wxBLUE, 3), wxGREEN_BRUSH, "Circle")
129 self.MyAddShape(wxRectangleShape(85, 50), 305, 60, wxBLACK_PEN, wxLIGHT_GREY_BRUSH, "Rectangle")
130 self.MyAddShape(DiamondShape(90, 90), 345, 235, wxPen(wxBLUE, 3, wxDOT), wxRED_BRUSH, "Polygon")
131 self.MyAddShape(RoundedRectangleShape(95,70), 140, 255, wxPen(wxRED, 1), rRectBrush, "Rounded Rect")
e91a9dfc
RD
132
133 dc = wxClientDC(self)
134 self.PrepareDC(dc)
135 for x in range(len(self.shapes)):
136 fromShape = self.shapes[x]
137 if x+1 == len(self.shapes):
138 toShape = self.shapes[0]
139 else:
140 toShape = self.shapes[x+1]
141 line = wxLineShape()
142 line.SetCanvas(self)
143 line.SetPen(wxBLACK_PEN)
144 line.SetBrush(wxBLACK_BRUSH)
145 line.AddArrow(ARROW_ARROW)
146 line.MakeLineControlPoints(2)
147 fromShape.AddLine(line, toShape)
148 self.diagram.AddShape(line)
149 line.Show(true)
150
151 # for some reason, the shapes have to be moved for the line to show up...
152 fromShape.Move(dc, fromShape.GetX(), fromShape.GetY())
153
154
155
2f90df85 156 def MyAddShape(self, shape, x, y, pen, brush, text):
e91a9dfc
RD
157 shape.SetDraggable(true)
158 shape.SetCanvas(self)
159 shape.SetX(x)
160 shape.SetY(y)
161 shape.SetPen(pen)
162 shape.SetBrush(brush)
2f90df85 163 shape.AddText(text)
e91a9dfc
RD
164 #shape.SetShadowMode(SHADOW_RIGHT)
165 self.diagram.AddShape(shape)
166 shape.Show(true)
167
168 evthandler = MyEvtHandler(self.log, self.frame)
169 evthandler.SetShape(shape)
170 evthandler.SetPreviousHandler(shape.GetEventHandler())
171 shape.SetEventHandler(evthandler)
172
173 self.shapes.append(shape)
174
175
176 def __del__(self):
177 for shape in self.diagram.GetShapeList():
178 if shape.GetParent() == None:
179 shape.SetCanvas(None)
180 shape.Destroy()
181
182
183#----------------------------------------------------------------------
184
185def runTest(frame, nb, log):
186 win = TestWindow(nb, log, frame)
187 return win
188
189#----------------------------------------------------------------------
190
191class __Cleanup:
192 cleanup = wxOGLCleanUp
193 def __del__(self):
194 self.cleanup()
195
196# when this module gets cleaned up then wxOGLCleanUp() will get called
197__cu = __Cleanup()
198
199
200
201
202
203
204
205
206overview = """\
207The Object Graphics Library is a library supporting the creation and
208manipulation of simple and complex graphic images on a canvas.
209
210"""
211
212