Add progressbar widget inspired from openerp rev571

This commit is contained in:
Cédric Krier committed 2008-08-25 11:54:09 +02:00
1 parent 70f3d3d69d
commit 72901758ba
5 files changed
+91

No files matched your search

@@ -752,6 +752,7 @@ from many2many import Many2Many
from many2one import Many2One
from url import Email, URL, CallTo, SIP
from image import Image as Image2
from progressbar import ProgressBar
WIDGETS_TYPE = {
@@ -776,4 +777,5 @@ WIDGETS_TYPE = {
'callto' : (CallTo, 1, False, False),
'sip' : (SIP, 1, False, False),
'image' : (Image2, 1, False, False),
'progressbar': (ProgressBar, 1, False, False),
}
@@ -0,0 +1,37 @@
#This file is part of Tryton. The COPYRIGHT file at the top level of this repository contains the full copyright notices and license terms.
import gtk
from interface import WidgetInterface
import locale
class ProgressBar(WidgetInterface):
'Progress Bar'
orientations = {
'left_to_right': gtk.PROGRESS_LEFT_TO_RIGHT,
'right_to_left': gtk.PROGRESS_RIGHT_TO_LEFT,
'bottom_to_top': gtk.PROGRESS_BOTTOM_TO_TOP,
'top_to_bottom': gtk.PROGRESS_TOP_TO_BOTTOM,
}
def __init__(self, window, parent, model, attrs=None):
super(ProgressBar, self).__init__(window, parent, model=model, attrs=attrs)
self.digits = attrs.get('digits', (14, 2))
self.widget = gtk.ProgressBar()
orientation = self.orientations.get(attrs.get('orientation',
'left_to_right'), gtk.PROGRESS_LEFT_TO_RIGHT)
self.widget.set_orientation(orientation)
def display(self, model, model_field):
super(ProgressBar, self).display(model, model_field)
if not model_field:
self.widget.set_text('')
self.widget.set_fraction(0.0)
return False
value = float(model_field.get(model) or 0.0)
if isinstance(self.digits, str):
digits = self._view.model.expr_eval(self.digits)
else:
digits = self.digits
self.widget.set_text(locale.format('%.' + str(digits[1]) + 'f',
value, True))
self.widget.set_fraction(value / 100.0)
+4
View File
@@ -504,6 +504,8 @@ class ViewList(ParserView):
renderer = renderers[0]
if isinstance(renderer, gtk.CellRendererToggle):
editable = renderer.get_property('activatable')
elif isinstance(renderer, gtk.CellRendererProgress):
editable = False
else:
editable = renderer.get_property('editable')
if column.get_visible() and editable:
@@ -535,5 +537,7 @@ class ViewList(ParserView):
for renderer in col.get_cell_renderers():
if isinstance(renderer, gtk.CellRendererToggle):
renderer.set_property('activatable', False)
elif isinstance(renderer, gtk.CellRendererProgress):
pass
else:
renderer.set_property('editable', False)
@@ -74,6 +74,8 @@ class EditableTreeView(gtk.TreeView):
renderer = cols[idx].get_cell_renderers()[0]
if isinstance(renderer, gtk.CellRendererToggle):
editable = renderer.get_property('activatable')
elif isinstance(renderer, gtk.CellRendererProgress):
editable = False
else:
editable = renderer.get_property('editable')
if cols[idx].get_visible() and editable:
@@ -88,6 +90,8 @@ class EditableTreeView(gtk.TreeView):
renderer = cols[idx].get_cell_renderers()[0]
if isinstance(renderer, gtk.CellRendererToggle):
editable = renderer.get_property('activatable')
elif isinstance(renderer, gtk.CellRendererProgress):
editable = False
else:
editable = renderer.get_property('editable')
if cols[idx].get_visible() and editable:
@@ -183,6 +187,8 @@ class EditableTreeView(gtk.TreeView):
renderer = column.get_cell_renderers()[0]
if isinstance(renderer, gtk.CellRendererToggle):
editable = renderer.get_property('activatable')
elif isinstance(renderer, gtk.CellRendererProgress):
editable = False
else:
editable = renderer.get_property('editable')
if column.get_visible() and editable:
@@ -101,6 +101,8 @@ class ParserTree(ParserInterface):
if editable and not node_attrs.get('readonly', False):
if isinstance(renderer, gtk.CellRendererToggle):
renderer.set_property('activatable', True)
elif isinstance(renderer, gtk.CellRendererProgress):
pass
else:
renderer.set_property('editable', True)
renderer.connect_after('editing-started', send_keys,
@@ -592,6 +594,45 @@ class Selection(Char):
return res
class ProgressBar(object):
orientations = {
'left_to_right': gtk.PROGRESS_LEFT_TO_RIGHT,
'right_to_left': gtk.PROGRESS_RIGHT_TO_LEFT,
'bottom_to_top': gtk.PROGRESS_BOTTOM_TO_TOP,
'top_to_bottom': gtk.PROGRESS_TOP_TO_BOTTOM,
}
def __init__(self, field_name, model, treeview=None, attrs=None, window=None):
self.field_name = field_name
self.model = model
self.attrs = attrs or {}
self.renderer = gtk.CellRendererProgress()
orientation = self.orientations.get(self.attrs.get('orientation',
'left_to_right'), gtk.PROGRESS_LEFT_TO_RIGHT)
self.renderer.set_property('orientation', orientation)
self.treeview = treeview
self.window = window
def setter(self, column, cell, store, iter):
model = store.get_value(iter, 0)
value = float(self.get_textual_value(model) or 0.0)
cell.set_property('value', value)
if isinstance(self.attrs.get('digits'), str):
digit = model.expr_eval(self.attrs['digits'])[1]
else:
digit = self.attrs.get('digits', (16, 2))[1]
text = locale.format('%.' + str(digit) + 'f', value, True)
cell.set_property('text', text + '%')
def open_remote(self, model, create, changed=False, text=None):
raise NotImplementedError
def get_textual_value(self, model):
return model[self.field_name].get_client(model) or ''
def value_from_text(self, model, text):
return float(text)
CELLTYPES = {
'char': Char,
'many2one': M2O,
@@ -610,4 +651,5 @@ CELLTYPES = {
'email': Char,
'callto': Char,
'sip': Char,
'progressbar': ProgressBar,
}