← Back to team overview

openerp-dev-web team mailing list archive

[Merge] lp:~tempo-openerp/openobject-client-web/gantt-grip-pane into lp:openobject-client-web

 

jftempo has proposed merging lp:~tempo-openerp/openobject-client-web/gantt-grip-pane into lp:openobject-client-web.

Requested reviews:
  OpenERP SA's Web Client R&D (openerp-dev-web)

For more details, see:
https://code.launchpad.net/~tempo-openerp/openobject-client-web/gantt-grip-pane/+merge/47546

Gantt view: add a grip to resize the left pane.
-- 
https://code.launchpad.net/~tempo-openerp/openobject-client-web/gantt-grip-pane/+merge/47546
Your team OpenERP SA's Web Client R&D is requested to review the proposed merge of lp:~tempo-openerp/openobject-client-web/gantt-grip-pane into lp:openobject-client-web.
=== modified file 'addons/openerp/controllers/impex.py'
--- addons/openerp/controllers/impex.py	2011-01-18 21:32:29 +0000
+++ addons/openerp/controllers/impex.py	2011-01-26 16:15:12 +0000
@@ -40,7 +40,7 @@
 def export_csv(fields, result):
     try:
         fp = StringIO.StringIO()
-        writer = csv.writer(fp)
+        writer = csv.writer(fp, quoting=csv.QUOTE_ALL)
 
         writer.writerow(fields)
 

=== modified file 'addons/openerp/controllers/search.py'
--- addons/openerp/controllers/search.py	2011-01-21 09:10:48 +0000
+++ addons/openerp/controllers/search.py	2011-01-26 16:15:12 +0000
@@ -54,7 +54,7 @@
         return dict(form=form, params=params, form_name = form.screen.widget.name)
 
     @expose()
-    def new(self, model, source=None, kind=0, text=None, domain=[], context={}, **kw):
+    def new(self, model, source=None, kind=0, text=None, domain=None, context=None, **kw):
         """Create new search view...
 
         @param model: the model
@@ -68,8 +68,8 @@
         params = TinyDict()
 
         params.model = model
-        params.domain = domain
-        params.context = context
+        params.domain = domain or []
+        params.context = context or {}
 
         params.source = source
         params.selectable = kind
@@ -79,14 +79,14 @@
                    **(params.context or {}))
         params.ids = []
         proxy = rpc.RPCProxy(model)
-        ids = proxy.name_search(text or '', params.domain or [], 'ilike', ctx)
+        ids = proxy.name_search(text or '', params.domain, 'ilike', ctx)
         params.search_text = False
         
         if ids:
             params.ids = [id[0] for id in ids]
             
             # For m2o, when name_search is called, then its result will be added to existing domain
-            params.domain += [('id','in', params.ids)]
+            params.domain.append(('id','in', params.ids))
             
             if len(ids) < params.limit or text:
                 count = len(ids)

=== modified file 'addons/view_calendar/static/css/calendar_gantt.css'
--- addons/view_calendar/static/css/calendar_gantt.css	2010-12-02 17:08:21 +0000
+++ addons/view_calendar/static/css/calendar_gantt.css	2011-01-26 16:15:12 +0000
@@ -159,7 +159,12 @@
 td#calOptions dd {
 	padding-left: 0;
 }
-
+.calGantt .grip {
+    background:#EEEEEE url(../images/vertical-grip.png) no-repeat scroll center 2px;
+    width: 5px;
+    height: 27px;
+    cursor:e-resize;
+}
 /**
  * vim: sts=4 st=4 et
  *

=== added file 'addons/view_calendar/static/images/vertical-grip.png'
Binary files addons/view_calendar/static/images/vertical-grip.png	1970-01-01 00:00:00 +0000 and addons/view_calendar/static/images/vertical-grip.png	2011-01-26 16:15:12 +0000 differ
=== modified file 'addons/view_calendar/static/javascript/calendar_gantt.js'
--- addons/view_calendar/static/javascript/calendar_gantt.js	2010-12-27 10:13:07 +0000
+++ addons/view_calendar/static/javascript/calendar_gantt.js	2011-01-26 16:15:12 +0000
@@ -39,14 +39,15 @@
         this._makeEvents();
 
         MochiKit.DOM.removeElement('calBodySect');
-
+        this.gripper = DIV({'class': 'grip'});
         var tbl = TABLE(null,
                 TBODY(null,
                         TR(null,
-                                TD({'width': 200, 'nowrap': 'nowrap'}),
+                                TD({'width': 200, 'nowrap': 'nowrap', 'colspan': 2}),
                                 TD({}, DIV({'id': 'calHeaderC'}, this.header.elements))),
                         TR(null,
                                 TD({'width': 200, 'nowrap': 'nowrap'}, DIV({'id': 'calListC'})),
+                                TD({'width': 5, 'nowrap': 'nowrap'}, this.gripper),
                                 TD({}, DIV({'id': 'calGridC'})))));
 
         tbl.cellPadding = 0;
@@ -63,7 +64,8 @@
         this.gc = openobject.dom.get('calGridC');
         this.hc = openobject.dom.get('calHeaderC');
         this.lc = openobject.dom.get('calListC');
-
+        
+        this.mingripsize = getElementDimensions(this.lc).w;
         this.attachSignals();
 
     },
@@ -83,6 +85,7 @@
         this.evtEventDrag = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'drag', this, 'onEventDrag');
         this.evtEventDragged = MochiKit.Signal.connect(MochiKit.DragAndDrop.Draggables, 'end', this, 'onEventDragged');
         this.evtEventResized = MochiKit.Signal.connect(MochiKit.DragAndDrop.Resizables, 'end', this, 'onEventResized');
+        this.evtGripDown = MochiKit.Signal.connect(this.gripper, 'onmousedown', this, 'gripStart');
     },
 
     dettachSignals: function() {
@@ -93,6 +96,7 @@
         MochiKit.Signal.disconnect(this.evtEventDrag);
         MochiKit.Signal.disconnect(this.evtEventDragged);
         MochiKit.Signal.disconnect(this.evtEventResized);
+        MochiKit.Signal.disconnect(this.evtGripDown);
     },
 
     onResize: function(evt) {
@@ -333,7 +337,27 @@
                 self.grid.adjust();
             });
         }
-    }
+    },
+
+    gripStart : function(evt){
+        this.offset = elementDimensions(this.lc).w - evt.mouse().page.x;
+        this.signGridUpdate = MochiKit.Signal.connect(document, 'onmousemove', this, "gripUpdate");
+        this.signGridStop = MochiKit.Signal.connect(document, 'onmouseup', this, "gripStop");
+        evt.stop();
+    },
+
+    gripUpdate : function(evt){
+        var w = Math.max(this.mingripsize, this.offset + evt.mouse().page.x);
+        this.lc.style.width = w + 'px';
+        evt.stop();
+    },
+
+    gripStop : function(evt){
+        MochiKit.Signal.disconnect(this.signGridUpdate);
+        MochiKit.Signal.disconnect(this.signGridStop);
+        evt.stop();
+    },
+
 };
 
 /**

=== modified file 'openobject/i18n/_gettext.py'
--- openobject/i18n/_gettext.py	2011-01-13 09:40:38 +0000
+++ openobject/i18n/_gettext.py	2011-01-26 16:15:12 +0000
@@ -82,8 +82,9 @@
 
     catalog = _translations.setdefault(domain, {})
     for locale in locales:
+        translation = None
         try:
-            tr = _load_translation(path, locale, domain)
+            translation = _load_translation(path, locale, domain)
         except babel.core.UnknownLocaleError, e:
             # don't load unknown locales such as Klingon (tlh)
             cherrypy.log.error("%s, ignoring translation file" % e, context='i18n', severity=logging.WARN)
@@ -97,12 +98,11 @@
                     severity=logging.WARNING)
             cherrypy.log.error(context='i18n', severity=logging.DEBUG,
                                traceback=True)
-            tr = None
-        if isinstance(tr, babel.support.Translations):
+        if isinstance(translation, babel.support.Translations):
             if locale in catalog:
-                catalog[locale].merge(tr)
+                catalog[locale].merge(translation)
             else:
-                catalog[locale] = tr
+                catalog[locale] = translation
 
 def load_translations(path, locales=None, domain="messages"):
     """


Follow ups