import gtk import gobject from datetime import * class Window: def __init__(self, ds): self.ds = ds self.shown_projects = [] now = datetime.now() self.monday = now.date() - timedelta(now.weekday()) # Top-level Window creation self.window = gtk.Window(gtk.WINDOW_TOPLEVEL) self.window.set_geometry_hints(); self.window.connect("delete_event", self.delete_event) self.window.connect("destroy", self.destroy_event) self.window.connect("key-press-event", self.window_key_press_event) # Menu Bar self.menubar = gtk.MenuBar() mi = gtk.MenuItem('_File') self.menubar.append(mi) mi = gtk.MenuItem('_Report') self.menubar.append(mi) mi = gtk.MenuItem('_Help') self.menubar.append(mi) # Projects Table self.projects_present = False self.projects_container = gtk.VBox() self.updateProjects() # Bottom Control Bar self.mark_label = gtk.Label() adjust_button = gtk.Button('Adjust') in_button = gtk.Button('In') out_button = gtk.Button('Out') hbox = gtk.HBox() hbox.pack_start(self.mark_label) hbox.pack_start(adjust_button) hbox.pack_start(in_button) hbox.pack_start(out_button) vbox = gtk.VBox() vbox.pack_start(self.menubar) vbox.pack_start(self.projects_container) vbox.pack_start(gtk.HSeparator()) vbox.pack_start(hbox) self.window.add(vbox) def updateProjects(self): if self.projects_present: self.projects_container.remove(self.projects_table) self.projects = self.ds.getProjects() projects_to_show = {} for p in self.shown_projects: projects_to_show[p] = 1 col_headers = ('Project', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Tot') rows = 2 + len(projects_to_show) self.projects_table = gtk.Table(rows = rows, columns = len(col_headers)) self.new_project_combobox = gtk.combo_box_entry_new_text() self.new_project_combobox.connect("key-release-event", self.project_key_press_event) self.add_project_button = gtk.Button('Add') self.add_project_button.connect('clicked', self.add_project_event) project_names = self.projects.values() project_names.sort() for project in project_names: self.new_project_combobox.append_text(project) for i in range(len(col_headers)): l = gtk.Label() l.set_markup('%s' % col_headers[i]) l.set_size_request(35 if i > 0 else 200, -1) self.projects_table.attach(l, i, i + 1, 0, 1) row = 1 for p in projects_to_show: self.projects_table.attach(gtk.Label(p), 0, 1, row, row + 1) self.projects_table.attach(self.new_project_combobox, 0, 1, rows - 1, rows) hbox = gtk.HBox() hbox.pack_start(self.add_project_button, expand = False) self.projects_table.attach(hbox, 1, 9, rows - 1, rows) self.projects_container.pack_start(self.projects_table) self.projects_present = True self.projects_table.show_all() def main(self): self.window.show_all() gtk.main() def add_project_event(self, button, data=None): pname = self.new_project_combobox.get_active_text() if not pname in self.projects.values(): self.ds.createProject(pname) self.shown_projects.append(pname) self.updateProjects() def project_key_press_event(self, widget, event, data=None): if event.keyval == gtk.gdk.keyval_from_name("Return"): self.add_project_event(1) return True return False def delete_event(self, widget, event, data=None): return False def destroy_event(self, widget, data=None): gtk.main_quit() def window_key_press_event(self, widget, event, data=None): if event.keyval == gtk.gdk.keyval_from_name("Escape"): gtk.main_quit()