mode buttons change SketchWidget mode

This commit is contained in:
Josh Holtrop 2011-07-27 16:40:39 -04:00
parent 99129c60e1
commit 1564fbbb74
2 changed files with 37 additions and 25 deletions

View File

@ -18,6 +18,7 @@ class SketchWidget:
self.panning = False
self.drawingLine = None
self.drawingCircle = None
self.mode = ''
# Configuration parameters
self.line_width = 1.5
@ -222,29 +223,31 @@ class SketchWidget:
def button_press_event(self, widget, event, data = None):
if event.button == 1:
start = self.screenPtToPt((event.x, self.size[1] - event.y))
if self.drawingLine is not None:
self.sketch.shapes.append(self.drawingLine)
if self.drawingLine.getPt(0)[0] == self.drawingLine.getPt(1)[0]:
self.sketch.constraints.append(
Vertical(self.drawingLine, 0,
self.drawingLine, 1))
elif (self.drawingLine.getPt(0)[1]
== self.drawingLine.getPt(1)[1]):
self.sketch.constraints.append(
Horizontal(self.drawingLine, 0,
self.drawingLine, 1))
start = self.drawingLine.getPt(1)
self.drawingLine = Line(start[0], start[1], start[0], start[1])
self.queue_redraw()
if self.mode == 'line':
start = self.screenPtToPt((event.x, self.size[1] - event.y))
if self.drawingLine is not None:
self.sketch.shapes.append(self.drawingLine)
if self.drawingLine.getPt(0)[0] == self.drawingLine.getPt(1)[0]:
self.sketch.constraints.append(
Vertical(self.drawingLine, 0,
self.drawingLine, 1))
elif (self.drawingLine.getPt(0)[1]
== self.drawingLine.getPt(1)[1]):
self.sketch.constraints.append(
Horizontal(self.drawingLine, 0,
self.drawingLine, 1))
start = self.drawingLine.getPt(1)
self.drawingLine = Line(start[0], start[1], start[0], start[1])
self.queue_redraw()
elif event.button == 2:
self.panning = True
self.panning_start = (event.x, self.size[1] - event.y)
elif event.button == 3:
if self.drawingLine is not None:
# cancel line currently being drawn
self.drawingLine = None
self.queue_redraw()
if self.mode == 'line':
if self.drawingLine is not None:
# cancel line currently being drawn
self.drawingLine = None
self.queue_redraw()
def button_release_event(self, widget, event, data = None):
if event.button == 2:
@ -362,3 +365,11 @@ class SketchWidget:
glVertex(pt[0] + self.line_width * 2, pt[1] - l/2)
glEnd()
glPopAttrib()
def set_mode(self, mode):
if mode != self.mode:
if self.mode == 'line':
self.drawingLine = None
elif self.mode == 'circle':
self.drawingCircle = None
self.mode = mode

View File

@ -19,38 +19,38 @@ class Window:
ss.solve()
sw = SketchWidget(ss, self.window)
self.sw = SketchWidget(ss, self.window)
self.toolbar = gtk.Toolbar()
self.toolbar.set_style(gtk.TOOLBAR_BOTH)
ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'select'
ttb.set_label('Select')
ttb.connect('toggled', self.mode_toggle_event)
ttb.set_active(True)
self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'select'
ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'line'
ttb.set_label('Line')
ttb.connect('toggled', self.mode_toggle_event)
self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'line'
ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'circle'
ttb.set_label('Circle')
ttb.connect('toggled', self.mode_toggle_event)
self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'circle'
self.statusbar = gtk.Statusbar()
vbox = gtk.VBox()
vbox.pack_start(self.toolbar, expand = False)
vbox.pack_start(sw.widget, expand = True)
vbox.pack_start(self.sw.widget, expand = True)
vbox.pack_start(self.statusbar, expand = False)
self.window.add(vbox)
self.window.show_all()
sw.widget.grab_focus()
self.sw.widget.grab_focus()
def main(self):
gtk.main()
@ -74,4 +74,5 @@ class Window:
for b in self.mode_buttons:
if b != ttb:
b.set_active(False)
self.sw.set_mode(self.mode_buttons[ttb])
return True