import gtk from Sketch import Sketch from SampleSketch import SampleSketch from SketchWidget import SketchWidget class Window: def __init__(self, title): self.mode_buttons_to_names = {} self.mode_names_to_buttons = {} self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_size_request(600, 500) self.window.set_title(title) self.window.connect("destroy", self.destroy_event) self.window.connect("key-press-event", self.key_press_event) ss = SampleSketch() self.sw = SketchWidget(ss, self) self.toolbar = gtk.Toolbar() self.toolbar.set_style(gtk.TOOLBAR_BOTH) ttb = gtk.ToggleToolButton() self.mode_buttons_to_names[ttb] = 'select' self.mode_names_to_buttons['select'] = ttb ttb.set_label('Select') ttb.connect('toggled', self.mode_toggle_event) ttb.set_active(True) self.toolbar.insert(ttb, -1) ttb = gtk.ToggleToolButton() self.mode_buttons_to_names[ttb] = 'line' self.mode_names_to_buttons['line'] = ttb ttb.set_label('Line') ttb.connect('toggled', self.mode_toggle_event) self.toolbar.insert(ttb, -1) ttb = gtk.ToggleToolButton() self.mode_buttons_to_names[ttb] = 'circle' self.mode_names_to_buttons['circle'] = ttb ttb.set_label('Circle') ttb.connect('toggled', self.mode_toggle_event) self.toolbar.insert(ttb, -1) self.status_lbl = gtk.Label() self.status_lbl.set_alignment(0.0, 0.5) self.sketch_status_icon = gtk.Label() self.sketch_status_text = gtk.Label() self.statusbar = gtk.HBox() self.statusbar.pack_start(self.status_lbl, expand = True) self.statusbar.pack_start(self.sketch_status_icon, expand = False) self.statusbar.pack_start(self.sketch_status_text, expand = False) vbox = gtk.VBox() vbox.pack_start(self.toolbar, expand = False) vbox.pack_start(self.sw.widget, expand = True) vbox.pack_start(self.statusbar, expand = False) self.window.add(vbox) self.window.show_all() self.sw.widget.grab_focus() def main(self): gtk.main() def destroy_event(self, widget, data=None): gtk.main_quit() def key_press_event(self, widget, event, data=None): if event.keyval == gtk.gdk.keyval_from_name("Escape"): gtk.main_quit() return False def mode_toggle_event(self, ttb): if not ttb.get_active(): for b in self.mode_buttons_to_names: if b.get_active(): break else: ttb.set_active(True) else: for b in self.mode_buttons_to_names: if b != ttb: b.set_active(False) self.sw.set_mode(self.mode_buttons_to_names[ttb]) return True def set_mode(self, mode): if mode == '': mode = 'select' # default mode if mode in self.mode_names_to_buttons: self.mode_names_to_buttons[mode].set_active(True) else: raise ValueError('Unknown mode') def update_sketch_status(self, valid, text): self.sketch_status_text.set_text(text)