Reviewers: nicoe, ced,
Please review this at http://codereview.tryton.org/420001/
Affected files:
A tryton/gui/window/view_form/view/timeline_widget.py
Index: tryton/gui/window/view_form/view/timeline_widget.py
===================================================================
new file mode 100644
--- /dev/null
+++ b/tryton/gui/window/view_form/view/timeline_widget.py
@@ -0,0 +1,76 @@
+#This file is part of Tryton. The COPYRIGHT file at the top level of
+#this repository contains the full copyright notices and license terms.
+from datetime import datetime
+import gtk
+from gettext import gettext as _
+from tryton.common import RPCExecute, RPCException
+
+class TimelineWidget(object):
+ '''
+ TODO:
+ After: Modify the look using graphics libraries (goocanvas,
+ graphviz,?) and add the "zooming" mechanism between the dates.
+ '''
+
+ def __init__(self, screen):
+ self.screen = screen
+ # history box
+ self.adjustment = gtk.Adjustment()
+ self.label = gtk.Label(_('This record contains data history:'))
+ self.label.set_justify(gtk.JUSTIFY_LEFT)
+ self.scale = gtk.HScale(self.adjustment)
+ self.scale.set_update_policy(gtk.UPDATE_DELAYED)
+ self.scale.set_draw_value(False)
+ self.scale_id = self.scale.connect('value-changed',
self.change_record)
+ self.time_label = gtk.Label('Current time')
+ self.widget = gtk.VBox()
+ self.widget.pack_start(self.label, False)
+ self.widget.pack_start(self.scale, False)
+ self.widget.pack_start(self.time_label, False)
+
+ def set_timeline(self, dates):
+ length = len(dates)
+ print length
+ self.scale.handler_block(self.scale_id)
+ self.adjustment.set_all(length, 0, length+1, 1, 1, 1)
+ self.scale.handler_unblock(self.scale_id)
+ self.scale.set_slider_size_fixed(1)
+ self.scale.clear_marks()
+ for i in range(length):
+ days = datetime.now().day - dates[i].day
+ if days == 0:
+ time_mark = dates[i].strftime('%H:%M')
+ elif days == 1:
+ time_mark = '1 day'
+ else:
+ time_mark = '%d days' % days
+ self.scale.add_mark(i, gtk.POS_BOTTOM, '<small>%s</small>' %
+ time_mark)
+ self.scale.add_mark(length+1,
gtk.POS_BOTTOM, '<small>Current</small>')
+
+ def display(self, record):
+ self.widget.hide()
+ if self.screen.views_preload:
+ info = self.screen.views_preload['form']
+ if info['type'] == 'form' and info['history'] and
hasattr(record,
+ 'model_name'):
+ try:
+ result = RPCExecute('model', record.model_name,
+ 'get_history_tables', record.id)
+ except RPCException:
+ return
+ else:
+ self.set_timeline(result)
+ self.widget.show()
+
+ def change_record(self, dt):
+ '''
+ TODO:
+ * set data record with chosen datetime in scale;
+ * if the chosen date is not current, it should disable the
form for
+ editing;
+ * Move scale cursor to right date when screen reloaded;
+ * Set label with correct chosen date;
+ * More?
+ '''
+ self.screen.reload()
\ No newline at end of file
--
[email protected] mailing list