94 lines
3.0 KiB
Python
94 lines
3.0 KiB
Python
|
|
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)
|
|
|
|
# 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.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_table)
|
|
vbox.pack_start(gtk.HSeparator())
|
|
vbox.pack_start(hbox)
|
|
|
|
self.window.add(vbox)
|
|
|
|
def updateProjects(self):
|
|
self.projects = self.ds.getProjects()
|
|
col_headers = ('Project',
|
|
'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun', 'Tot')
|
|
self.projects_table = gtk.Table(rows = 2, 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('<b>%s</b>' % col_headers[i])
|
|
l.set_size_request(35 if i > 0 else 200, -1)
|
|
self.projects_table.attach(l, i, i + 1, 0, 1)
|
|
|
|
self.projects_table.attach(self.new_project_combobox, 0, 1, 1, 2)
|
|
hbox = gtk.HBox()
|
|
hbox.pack_start(self.add_project_button, expand = False)
|
|
self.projects_table.attach(hbox, 1, 9, 1, 2)
|
|
|
|
def main(self):
|
|
self.window.show_all()
|
|
gtk.main()
|
|
|
|
def add_project_event(self, button, data=None):
|
|
print "text:", self.new_project_combobox.get_active_text()
|
|
|
|
def project_key_press_event(self, widget, event, data=None):
|
|
if event.keyval == gtk.gdk.keyval_from_name("Return"):
|
|
self.add_project_event(1)
|
|
|
|
def delete_event(self, widget, event, data=None):
|
|
return False
|
|
|
|
def destroy_event(self, widget, data=None):
|
|
gtk.main_quit()
|