Add progressbar widget inspired from openerp rev571
This commit is contained in:
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)
|
||||
@@ -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,
|
||||
}
|
||||
Reference in new issue
Block a user