8
9
from gi.repository import Unity, GObject, Gtk, Notify, Gdk, Pango
10
BASE = os.path.expanduser("~/workspace/teatime/")
11
gettext.install("teatime")
13
from xdg.BaseDirectory import xdg_data_home
15
DATA = os.path.expanduser("~/workspace/teatime/")
17
if not os.path.exists(DATA):
18
DATA = "/usr/share/teatime/"
12
20
class Notification(Notify.Notification):
13
21
def __init__(self):
50
def __init__(self, obj):
58
def __init__(self, obj, model):
53
transl = (("name", ("Name")), ("duration", ("Duration")))
55
cell = Gtk.CellRendererText()
56
cell.set_property("ellipsize", Pango.EllipsizeMode.END)
63
self._obj.connect("key-press-event", self._on_key_press)
65
transl = (("name", _("Name")), ("duration", _("Duration")))
58
67
for key, title in transl:
68
cell = Gtk.CellRendererText()
69
cell.set_property("ellipsize", Pango.EllipsizeMode.END)
70
cell.set_property("editable", True)
71
cell.connect('edited', self._edited_cb, key)
59
73
col = Gtk.TreeViewColumn(title, cell)
60
74
col.set_sizing(Gtk.TreeViewColumnSizing.FIXED)
61
75
col.set_min_width(100)
62
76
col.set_fixed_width(200)
63
77
col.set_cell_data_func(cell, self._data_func, key)
64
78
self._obj.append_column(col)
80
def _on_key_press(self, caller, ev):
81
key = Gdk.keyval_name(ev.keyval)
84
model, paths = self._obj.get_selection().get_selected_rows()
85
paths = [model.get_iter(p) for p in paths]
87
model.remove(paths[0])
89
def add_addline(self):
90
self._model.append({"name": _("New Entry"), "duration":0})
92
def _edited_cb(self, cell, itr, value, key):
94
t = time.strptime(value, "%M:%S")
95
value = t.tm_sec + 60*t.tm_min
97
self._model[itr][key] = value
99
last = int(itr) == (len(self._model._obj)-1)
66
104
def _data_func(self, col, cell, model, itr, key):
67
105
v = model[itr][0][key]
69
107
if key == "duration":
70
108
v = time.strftime("%M:%S", time.localtime(v))
110
last = int(str(model.get_path(itr))) == (len(model)-1)
112
cell.set_property("style", Pango.Style.ITALIC if last else Pango.Style.NORMAL)
72
114
cell.set_property("text", v)
75
FILE = BASE+"timers.json"
117
FILE = xdg_data_home+"/teatime.js"
77
119
def __init__(self, obj):
85
for t in json.load(f):
128
for t in json.load(f):
91
136
f = file(self.FILE, "w")
93
json.dump([t[0] for t in self._obj], f)
138
json.dump([t[0] for t in self._obj][0:-1], f)
120
165
self.start_button = xml.get_object("button1")
121
166
self.start_button.connect("clicked", self.on_button_click)
123
self.list = TreeView(xml.get_object("treeview1"))
124
self.store = ListStore(xml.get_object("liststore1"))
168
self.store = ListStore(xml.get_object("liststore1"))
169
self.list = TreeView(xml.get_object("treeview1"), self.store)
170
self.list.add_addline()
126
172
self.window = xml.get_object("window1")
127
173
self.window.connect("delete-event", self.end)
140
186
def set_label_text(self):
141
187
name = self.timer.obj["name"]
142
188
remaining = time.strftime("%M:%S", time.localtime(self.timer.end - time.time()))
143
self.label.set_text("%s: %s remaining" % (name, remaining))
189
self.label.set_text(_("%s: %s remaining") % (name, remaining))
146
192
sel = self.list._obj.get_cursor()[0]
162
208
self.le.set_property("urgent", False)
163
209
self.le.set_property("progress_visible", False)
164
self.start_button.set_label("Start Timer")
210
self.start_button.set_label(_("Start Timer"))
165
211
self.list._obj.set_sensitive(True)
166
212
self.timer = None
167
self.label.set_text("No Running Timers")
213
self.label.set_text(_("No Running Timers"))