97 lines
3.2 KiB
Python
97 lines
3.2 KiB
Python
|
|
import gtk
|
|
|
|
from Sketch import Sketch
|
|
from SampleSketch import SampleSketch
|
|
from SketchWidget import SketchWidget
|
|
|
|
class Window(object):
|
|
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)
|
|
def addButton(name, caption, active=False):
|
|
ttb = gtk.ToggleToolButton()
|
|
self.mode_buttons_to_names[ttb] = name
|
|
self.mode_names_to_buttons[name] = ttb
|
|
ttb.set_label(caption)
|
|
ttb.connect('toggled', self.mode_toggle_event)
|
|
ttb.set_active(active)
|
|
self.toolbar.insert(ttb, -1)
|
|
addButton('select', 'Select')
|
|
addButton('line', 'Line')
|
|
addButton('circle', 'Circle')
|
|
addButton('connect', 'Connect')
|
|
addButton('horizontal', 'Horiz')
|
|
addButton('vertical', 'Vert')
|
|
|
|
self.status_lbl = gtk.Label()
|
|
self.status_lbl.set_alignment(0.0, 0.5)
|
|
self.sketch_status_icon = gtk.Image()
|
|
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):
|
|
stock_name = gtk.STOCK_YES if valid else gtk.STOCK_NO
|
|
size = gtk.ICON_SIZE_SMALL_TOOLBAR
|
|
self.sketch_status_icon.set_from_stock(stock_name, size)
|
|
self.sketch_status_text.set_text(text)
|