jpcad/Window.py

99 lines
3.2 KiB
Python

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)