diff --git a/SketchWidget.py b/SketchWidget.py index c97af0e..cf23799 100644 --- a/SketchWidget.py +++ b/SketchWidget.py @@ -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 diff --git a/Window.py b/Window.py index 288daa0..a900e62 100644 --- a/Window.py +++ b/Window.py @@ -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