RGA(Open ERP) has proposed merging 
lp:~openerp-dev/openobject-client/list_view_fixes into 
lp:~openerp-dev/openobject-client/trunk-dev-client.

Requested reviews:
  OpenERP sa GTK client R&D (openerp-dev-gtk)


Following bugs are fixed by this branch

* Switch to graph does not work in group_by views
* In One2many list editable, the last column was prefilled instead of
  empty when clicking enter.
-- 
https://code.launchpad.net/~openerp-dev/openobject-client/list_view_fixes/+merge/28623
Your team OpenERP sa GTK client R&D is requested to review the proposed merge 
of lp:~openerp-dev/openobject-client/list_view_fixes into 
lp:~openerp-dev/openobject-client/trunk-dev-client.
=== modified file 'bin/po/ja.po'
--- bin/po/ja.po	2010-06-09 03:35:14 +0000
+++ bin/po/ja.po	2010-06-28 11:25:45 +0000
@@ -8,13 +8,13 @@
 "Project-Id-Version: openobject-client\n"
 "Report-Msgid-Bugs-To: FULL NAME <em...@address>\n"
 "POT-Creation-Date: 2009-11-25 02:00+0530\n"
-"PO-Revision-Date: 2010-06-08 04:08+0000\n"
+"PO-Revision-Date: 2010-06-20 03:54+0000\n"
 "Last-Translator: OpenERP Administrators <Unknown>\n"
 "Language-Team: Japanese <[email protected]>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2010-06-09 03:35+0000\n"
+"X-Launchpad-Export-Date: 2010-06-21 03:42+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #: bin/plugins/__init__.py:29

=== modified file 'bin/po/mn.po'
--- bin/po/mn.po	2009-12-02 04:54:27 +0000
+++ bin/po/mn.po	2010-06-28 11:25:45 +0000
@@ -8,13 +8,13 @@
 "Project-Id-Version: openobject-client\n"
 "Report-Msgid-Bugs-To: FULL NAME <em...@address>\n"
 "POT-Creation-Date: 2009-11-25 02:00+0530\n"
-"PO-Revision-Date: 2009-12-01 05:48+0000\n"
-"Last-Translator: Munkhbayar Batkhuu <[email protected]>\n"
+"PO-Revision-Date: 2010-06-16 04:09+0000\n"
+"Last-Translator: oogii <[email protected]>\n"
 "Language-Team: Mongolian <[email protected]>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Launchpad-Export-Date: 2009-12-02 04:54+0000\n"
+"X-Launchpad-Export-Date: 2010-06-17 03:33+0000\n"
 "X-Generator: Launchpad (build Unknown)\n"
 
 #: bin/plugins/__init__.py:28
@@ -1789,7 +1789,7 @@
 
 #: bin/openerp.glade:5130
 msgid "New"
-msgstr ""
+msgstr "Шинэ"
 
 #: bin/openerp.glade:5145
 msgid "<Ctrl> + N"
@@ -1985,7 +1985,7 @@
 
 #: bin/openerp.glade:6715
 msgid "New database name:"
-msgstr ""
+msgstr "Шинэ датабаазын нэр:"
 
 #: bin/openerp.glade:6815 bin/openerp.glade:6961 bin/openerp.glade:7460
 msgid "http://localhost:8069";
@@ -1993,7 +1993,7 @@
 
 #: bin/openerp.glade:6889
 msgid "Create a new database"
-msgstr ""
+msgstr "Шинэ датабааз үүсгэх"
 
 #: bin/openerp.glade:6902
 msgid "<b>Create a new database</b>"
@@ -2028,7 +2028,7 @@
 
 #: bin/openerp.glade:7110
 msgid "New Database Name:"
-msgstr ""
+msgstr "Шинэ Датабаазын Нэр"
 
 #: bin/openerp.glade:7134
 msgid ""

=== modified file 'bin/widget/model/record.py'
--- bin/widget/model/record.py	2010-05-11 05:50:42 +0000
+++ bin/widget/model/record.py	2010-06-28 11:25:45 +0000
@@ -206,10 +206,12 @@
         return value
 
     def set_default(self, val):
-        for fieldname, value in val.items():
+        a = val.items()
+        for fieldname, value in a: #val.items():
             if fieldname not in self.mgroup.mfields:
                 continue
             self.mgroup.mfields[fieldname].set_default(self, value)
+            self.mgroup.mfields[fieldname].set_default(self, value)
         self._loaded = True
         self.signal('record-changed')
 
@@ -280,7 +282,7 @@
         if not match:
             raise Exception, 'ERROR: Wrong on_change trigger: %s' % callback
         func_name = match.group(1)
-        arg_names = [n.strip() for n in match.group(2).split(',')]
+        arg_names = [n.strip() for n in match.group(2).split(',') if n.strip()]
         args = [self.expr_eval(arg) for arg in arg_names]
         ids = self.id and [self.id] or []
         response = getattr(self.rpc, func_name)(ids, *args)
@@ -300,13 +302,14 @@
         self.signal('attrs-changed')
 
     def cond_default(self, field, value):
-        ir = RPCProxy('ir.values')
-        values = ir.get('default', '%s=%s' % (field, value),
-                        [(self.resource, False)], False, {})
-        data = {}
-        for index, fname, value in values:
-            data[fname] = value
-        self.set_default(data)
+        pass
+        #ir = RPCProxy('ir.values')
+        #values = ir.get('default', '%s=%s' % (field, value),
+        #                [(self.resource, False)], False, {})
+        #data = {}
+        #for index, fname, value in values:
+        #    data[fname] = value
+        #self.set_default(data)
 
     # Performing button clicks on both forms of view: list and form.
     def get_button_action(self, screen, id=None, attrs={}):

=== modified file 'bin/widget/screen/screen.py'
--- bin/widget/screen/screen.py	2010-06-24 06:37:47 +0000
+++ bin/widget/screen/screen.py	2010-06-28 11:25:45 +0000
@@ -229,7 +229,12 @@
             self.auto_search = True
             return
         val = self.filter_widget and self.filter_widget.value or {}
-        self.context_update(val.get('context',{}), val.get('domain',[]) + self.sort_domain)
+        if self.current_view.view_type == 'graph':
+            self.domain = self.domain_init[:]
+            self.domain += val.get('domain',[]) + self.sort_domain
+        else:
+            self.context_update(val.get('context',{}), val.get('domain',[]) + self.sort_domain)
+            
         v = self.domain
         limit=self.screen_container.get_limit()
         if self.current_view.view_type == 'calendar':
@@ -248,7 +253,7 @@
             self.offset = 0
         offset=self.offset
         self.latest_search = v
-        if self.context.get('group_by',False):
+        if self.context.get('group_by',False) and not self.current_view.view_type == 'graph':
             self.current_view.reload = True
             self.display()
             return True
@@ -421,7 +426,7 @@
 
     # mode: False = next view, value = open this view
     def switch_view(self, screen=None, mode=False):
-        if isinstance(self.current_model,group_record):
+        if isinstance(self.current_model, group_record) and mode != 'graph':
           return
         self.current_view.set_value()
         self.fields = {}

=== modified file 'bin/widget/view/form_gtk/calendar.py'
--- bin/widget/view/form_gtk/calendar.py	2010-06-02 07:10:21 +0000
+++ bin/widget/view/form_gtk/calendar.py	2010-06-28 11:25:45 +0000
@@ -301,6 +301,8 @@
         self.format = '%H:%M:%S'
         self.widget = date_widget.ComplexEntry(self.format, spacing=3)
         self.entry = self.widget.widget
+        self.entry.connect('focus-in-event', lambda x,y: self._focus_in())
+        self.entry.connect('focus-out-event', lambda x,y: self._focus_out())
         self.value=False
 
     def _readonly_set(self, value):

=== modified file 'bin/widget/view/graph_gtk/graph.py'
--- bin/widget/view/graph_gtk/graph.py	2010-04-26 14:05:54 +0000
+++ bin/widget/view/graph_gtk/graph.py	2010-06-28 11:25:45 +0000
@@ -71,6 +71,7 @@
         self.axis = axis
         self.old_axis = axis
         self.editable = False
+        self.key = False
         self.widget.editable = False
         self.axis_data = axis_data
         self.axis_group = {}
@@ -86,9 +87,15 @@
         self.axis = copy.copy(self.old_axis)
         group_by = self.widget.screen.context.get('group_by', False)
         if group_by:
-            models = models.models or models.list_group.lst
+            if not self.key:
+                del self.widget.screen.context['group_by']
+                self.widget.screen.search_filter()
+                models = self.widget.screen.models
+                self.key = True
+                self.widget.screen.context['group_by'] = group_by
             self.axis[0] = group_by[0]
             self.axis_data[group_by[0]] = {}
+
         for m in models:
             res = {}
             for x in self.axis_data.keys():
@@ -96,10 +103,7 @@
                 if self.fields[x]['type'] in ('many2one', 'char','time','text'):
                     res[x] = field_val and str(field_val) or 'Undefined'
                 elif self.fields[x]['type'] == 'selection':
-                    if group_by and isinstance(m, group_record):
-                        selection = dict(m.children[0][x].attrs['selection'])
-                    else:
-                        selection = dict(m[x].attrs['selection'])
+                    selection = dict(m[x].attrs['selection'])
                     if field_val:
                         val = str(field_val)
                         res[x] = selection.get(val, val)

=== modified file 'bin/widget/view/list.py'
--- bin/widget/view/list.py	2010-04-26 09:39:39 +0000
+++ bin/widget/view/list.py	2010-06-28 11:25:45 +0000
@@ -695,10 +695,11 @@
                 if isinstance(renderer, gtk.CellRendererToggle):
                     renderer.set_property('activatable', value)
                 elif not isinstance(renderer, gtk.CellRendererProgress) and not isinstance(renderer, gtk.CellRendererPixbuf):
-                    renderer.set_property('editable', value)
+                    old_value = renderer.get_property('editable')
+                    renderer.set_property('editable', value and old_value)
                 if value in ('top','bottom'):
                     if isinstance(renderer, (gtk.CellRendererText, gtk.CellRendererCombo, date_renderer.DecoratorRenderer)):
-                        renderer.set_property('editable', value)
+                        renderer.set_property('editable', value and old_value)
                     if value:
                         if self.widget_tree.handlers.has_key(col):
                             if self.widget_tree.handlers[col]:

=== modified file 'bin/widget/view/tree_gtk/editabletree.py'
--- bin/widget/view/tree_gtk/editabletree.py	2010-04-21 15:19:27 +0000
+++ bin/widget/view/tree_gtk/editabletree.py	2010-06-28 11:25:45 +0000
@@ -45,7 +45,6 @@
         # The value has not changed ... do nothing.
         if value == cell.get_textual_value(current_model):
             return
-
         try:
             real_value = cell.value_from_text(current_model, value)
             modelfield.set_client(current_model, real_value)
@@ -187,7 +186,7 @@
                 txt = entry.get_active_text()
             entry.disconnect(entry.editing_done_id)
             self.on_quit_cell(model, column.name, txt)
-            entry.editing_done_id = entry.connect('editing_done', self.on_editing_done)
+            entry.editing_done_id = entry.connect('editing_done', self.on_editing_done, model, txt)
         if event.keyval in self.leaving_model_events:
             if model.validate() and self.screen.tree_saves:
                 id = model.save()
@@ -204,7 +203,7 @@
                     if col.name in invalid_fields:
                         break
                 self.set_cursor(path, col, True)
-                msg = _('Warning; field %s is required!') % ('<b>%s</b>' % invalid_fields[col.name])
+                msg = _('Warning; field %s is required!') % ('<b>%s</b>' % invalid_fields[col.name]) 
                 self.warn('misc-message', msg, "red")
                 return True
 
@@ -217,12 +216,12 @@
         elif event.keyval == gtk.keysyms.Up:
             self._key_up(path, store, column)
         elif event.keyval == gtk.keysyms.Down:
-            self._key_down(path,store,column)
+            self._key_down(path, store, column)
         elif event.keyval in (gtk.keysyms.Return, gtk.keysyms.KP_Enter):
             if self.editable == 'top':
                 new_path = self._key_up(path, store, column)
             else:
-                new_path = self._key_down(path,store,column)
+                new_path = self._key_down(path, store, column)
             col = self.get_columns(False, False)[0]
             self.set_cursor(new_path, col, True)
         elif event.keyval == gtk.keysyms.Escape:
@@ -277,16 +276,21 @@
         self.set_cursor(new_path, column, True)
         return new_path
 
-    def on_editing_done(self, entry):
+    def on_editing_done(self, entry, model=None, txt=""):
         path, column = self.get_cursor()
         if not path:
             return True
-        store = self.get_model()
-        model = store.get_value(store.get_iter(path), 0)
+        if not model:
+            store = self.get_model()
+            model = store.get_value(store.get_iter(path), 0)
+            if isinstance(entry, gtk.Entry):
+                txt = entry.get_text()
+            elif isinstance(entry, gtk.ComboBoxEntry):
+                txt = entry.get_active_text()
         if isinstance(entry, gtk.Entry):
-            self.on_quit_cell(model, column.name, entry.get_text())
+            self.on_quit_cell(model, column.name, txt)
         elif isinstance(entry, gtk.ComboBoxEntry):
-            self.on_quit_cell(model, column.name, entry.get_active_text())
+            self.on_quit_cell(model, column.name, txt)
 
 
 # vim:expandtab:smartindent:tabstop=4:softtabstop=4:shiftwidth=4:

=== modified file 'bin/widget_search/char.py'
--- bin/widget_search/char.py	2010-05-26 07:12:35 +0000
+++ bin/widget_search/char.py	2010-06-28 11:25:45 +0000
@@ -23,7 +23,7 @@
 import rpc
 import wid_int
 import tools
-
+import common
 
 class char(wid_int.wid_int):
     def __init__(self, name, parent, attrs={}, screen=None):
@@ -34,7 +34,15 @@
         self.widget.set_width_chars(15)
         self.widget.set_property('activates_default', True)
         if self.default_search:
-            self.widget.set_text(str(self.default_search) or '')
+            model = self.attrs.get('relation', '')
+            if attrs.get('type','') == 'many2one' and model:
+                try:
+                    value = rpc.session.rpc_exec_auth('/object', 'execute', model, 'name_get', self.default_search)
+                except rpc.rpc_exception, e:
+                    common.error(_('Error: ')+str(e.type), e.message, e.data)
+                    value = []
+                self.default_search = value and value[0] and value[0][1] or ''
+            self.widget.set_text(self.default_search or '')
 
     def _value_get(self):
         s = self.widget.get_text()

_______________________________________________
Mailing list: https://launchpad.net/~openerp-dev-gtk
Post to     : [email protected]
Unsubscribe : https://launchpad.net/~openerp-dev-gtk
More help   : https://help.launchpad.net/ListHelp

Reply via email to