[hamster-applet] copy/pasting of activities. added some todos that i hopefully will remember of
- From: Toms Baugis <tbaugis src gnome org>
- To: svn-commits-list gnome org
- Subject: [hamster-applet] copy/pasting of activities. added some todos that i hopefully will remember of
- Date: Tue, 16 Jun 2009 06:54:48 -0400 (EDT)
commit 398fdb34489cb108a239a90f7b7645a97d56c50d
Author: Toms Bauģis <toms baugis gmail com>
Date: Tue Jun 16 11:23:32 2009 +0100
copy/pasting of activities. added some todos that i hopefully will remember of
hamster/stats.py | 86 ++++++++++++++++++++++++++++++++++++++++++++++++++----
1 files changed, 80 insertions(+), 6 deletions(-)
---
diff --git a/hamster/stats.py b/hamster/stats.py
index 2729844..3e0cb9e 100644
--- a/hamster/stats.py
+++ b/hamster/stats.py
@@ -310,7 +310,7 @@ class StatsViewer(object):
self.stat_facts = None
#id, caption, duration, date (invisible), description, category
- self.fact_store = gtk.TreeStore(int, str, str, str, str, str)
+ self.fact_store = gtk.TreeStore(int, str, str, str, str, str, gobject.TYPE_PYOBJECT)
self.setup_tree()
self.background = (0.975,0.975,0.975)
@@ -847,7 +847,9 @@ than 15 minutes you seem to be a busy bee." % ("<b>%d</b>" % short_percent))
fact_date,
"",
current_date.strftime('%Y-%m-%d'),
- "", ""])
+ "",
+ "",
+ None])
by_day[self.start_date + dt.timedelta(i)] = {"duration": 0, "row_pointer": day_row}
@@ -867,7 +869,8 @@ than 15 minutes you seem to be a busy bee." % ("<b>%d</b>" % short_percent))
stuff.format_duration(duration),
fact["start_time"].strftime('%Y-%m-%d'),
fact["description"],
- fact["category"]
+ fact["category"],
+ fact
])
if duration:
@@ -1113,10 +1116,81 @@ than 15 minutes you seem to be a busy bee." % ("<b>%d</b>" % short_percent))
storage.remove_fact(model[iter][0])
+ def copy_selected(self):
+ selection = self.fact_tree.get_selection()
+ (model, iter) = selection.get_selected()
+
+ fact = model[iter][6]
+ if not fact:
+ return #not a fact
+
+ fact_str = "%s-%s %s" % (fact["start_time"].strftime("%H:%M"),
+ (fact["end_time"] or dt.datetime.now()).strftime("%H:%M"),
+ fact["name"])
+
+ if fact["category"]:
+ fact_str += "@%s" % fact["category"]
+
+ if fact["description"]:
+ fact_str += ", %s" % fact["description"]
+
+ clipboard = gtk.Clipboard()
+ clipboard.set_text(fact_str)
+
+ def check_clipboard(self):
+ clipboard = gtk.Clipboard()
+ clipboard.request_text(self.on_clipboard_text)
+
+ def on_clipboard_text(self, clipboard, text, data):
+ # first check that we have a date selected
+ selection = self.fact_tree.get_selection()
+ (model, iter) = selection.get_selected()
+
+ selected_date = self.view_date
+ if iter:
+ selected_date = model[iter][3].split("-")
+ selected_date = dt.date(int(selected_date[0]),
+ int(selected_date[1]),
+ int(selected_date[2]))
+ if not selected_date:
+ return
+
+ res = stuff.parse_activity_input(text)
+
+ if res.start_time is None or res.end_time is None:
+ return
+
+ start_time = res.start_time.replace(year = selected_date.year,
+ month = selected_date.month,
+ day = selected_date.day)
+ end_time = res.end_time.replace(year = selected_date.year,
+ month = selected_date.month,
+ day = selected_date.day)
+
+ activity_name = res.activity_name
+ if res.category_name:
+ activity_name += "@%s" % res.category_name
+
+ if res.description:
+ activity_name += "@%s" % res.description
+
+ # TODO - avoid future facts
+ # TODO - set cursor to the pasted entry when done
+ # TODO - revisit parsing of selected date
+ # TODO - check if clipboard should be utf8 decoded
+ storage.add_fact(activity_name, start_time, end_time)
+
+
+
+
"""keyboard events"""
- def on_key_pressed(self, tree, event_key):
- if (event_key.keyval == gtk.keysyms.Delete):
- self.delete_selected()
+ def on_key_pressed(self, tree, event):
+ if (event.keyval == gtk.keysyms.Delete):
+ self.delete_selected()
+ elif event.keyval == gtk.keysyms.c and event.state & gtk.gdk.CONTROL_MASK:
+ self.copy_selected()
+ elif event.keyval == gtk.keysyms.v and event.state & gtk.gdk.CONTROL_MASK:
+ self.check_clipboard()
def on_fact_selection_changed(self, selection, model):
""" enables and disables action buttons depending on selected item """
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]