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.panning = False
self.drawingLine = None self.drawingLine = None
self.drawingCircle = None self.drawingCircle = None
self.mode = ''
# Configuration parameters # Configuration parameters
self.line_width = 1.5 self.line_width = 1.5
@ -222,29 +223,31 @@ class SketchWidget:
def button_press_event(self, widget, event, data = None): def button_press_event(self, widget, event, data = None):
if event.button == 1: if event.button == 1:
start = self.screenPtToPt((event.x, self.size[1] - event.y)) if self.mode == 'line':
if self.drawingLine is not None: start = self.screenPtToPt((event.x, self.size[1] - event.y))
self.sketch.shapes.append(self.drawingLine) if self.drawingLine is not None:
if self.drawingLine.getPt(0)[0] == self.drawingLine.getPt(1)[0]: self.sketch.shapes.append(self.drawingLine)
self.sketch.constraints.append( if self.drawingLine.getPt(0)[0] == self.drawingLine.getPt(1)[0]:
Vertical(self.drawingLine, 0, self.sketch.constraints.append(
self.drawingLine, 1)) Vertical(self.drawingLine, 0,
elif (self.drawingLine.getPt(0)[1] self.drawingLine, 1))
== self.drawingLine.getPt(1)[1]): elif (self.drawingLine.getPt(0)[1]
self.sketch.constraints.append( == self.drawingLine.getPt(1)[1]):
Horizontal(self.drawingLine, 0, self.sketch.constraints.append(
self.drawingLine, 1)) Horizontal(self.drawingLine, 0,
start = self.drawingLine.getPt(1) self.drawingLine, 1))
self.drawingLine = Line(start[0], start[1], start[0], start[1]) start = self.drawingLine.getPt(1)
self.queue_redraw() self.drawingLine = Line(start[0], start[1], start[0], start[1])
self.queue_redraw()
elif event.button == 2: elif event.button == 2:
self.panning = True self.panning = True
self.panning_start = (event.x, self.size[1] - event.y) self.panning_start = (event.x, self.size[1] - event.y)
elif event.button == 3: elif event.button == 3:
if self.drawingLine is not None: if self.mode == 'line':
# cancel line currently being drawn if self.drawingLine is not None:
self.drawingLine = None # cancel line currently being drawn
self.queue_redraw() self.drawingLine = None
self.queue_redraw()
def button_release_event(self, widget, event, data = None): def button_release_event(self, widget, event, data = None):
if event.button == 2: if event.button == 2:
@ -362,3 +365,11 @@ class SketchWidget:
glVertex(pt[0] + self.line_width * 2, pt[1] - l/2) glVertex(pt[0] + self.line_width * 2, pt[1] - l/2)
glEnd() glEnd()
glPopAttrib() 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() ss.solve()
sw = SketchWidget(ss, self.window) self.sw = SketchWidget(ss, self.window)
self.toolbar = gtk.Toolbar() self.toolbar = gtk.Toolbar()
self.toolbar.set_style(gtk.TOOLBAR_BOTH) self.toolbar.set_style(gtk.TOOLBAR_BOTH)
ttb = gtk.ToggleToolButton() ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'select'
ttb.set_label('Select') ttb.set_label('Select')
ttb.connect('toggled', self.mode_toggle_event) ttb.connect('toggled', self.mode_toggle_event)
ttb.set_active(True) ttb.set_active(True)
self.toolbar.insert(ttb, -1) self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'select'
ttb = gtk.ToggleToolButton() ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'line'
ttb.set_label('Line') ttb.set_label('Line')
ttb.connect('toggled', self.mode_toggle_event) ttb.connect('toggled', self.mode_toggle_event)
self.toolbar.insert(ttb, -1) self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'line'
ttb = gtk.ToggleToolButton() ttb = gtk.ToggleToolButton()
self.mode_buttons[ttb] = 'circle'
ttb.set_label('Circle') ttb.set_label('Circle')
ttb.connect('toggled', self.mode_toggle_event) ttb.connect('toggled', self.mode_toggle_event)
self.toolbar.insert(ttb, -1) self.toolbar.insert(ttb, -1)
self.mode_buttons[ttb] = 'circle'
self.statusbar = gtk.Statusbar() self.statusbar = gtk.Statusbar()
vbox = gtk.VBox() vbox = gtk.VBox()
vbox.pack_start(self.toolbar, expand = False) 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) vbox.pack_start(self.statusbar, expand = False)
self.window.add(vbox) self.window.add(vbox)
self.window.show_all() self.window.show_all()
sw.widget.grab_focus() self.sw.widget.grab_focus()
def main(self): def main(self):
gtk.main() gtk.main()
@ -74,4 +74,5 @@ class Window:
for b in self.mode_buttons: for b in self.mode_buttons:
if b != ttb: if b != ttb:
b.set_active(False) b.set_active(False)
self.sw.set_mode(self.mode_buttons[ttb])
return True return True