diff --git a/bin/addons/base/ir/ir.xml b/bin/addons/base/ir/ir.xml
index 9c8ec022d4a..267fa92bc78 100644
--- a/bin/addons/base/ir/ir.xml
+++ b/bin/addons/base/ir/ir.xml
@@ -1379,6 +1379,12 @@
+
+
+
+
+
+
diff --git a/bin/addons/base/ir/ir_ui_menu.py b/bin/addons/base/ir/ir_ui_menu.py
index f79493b4813..cdde195e14f 100644
--- a/bin/addons/base/ir/ir_ui_menu.py
+++ b/bin/addons/base/ir/ir_ui_menu.py
@@ -22,6 +22,7 @@
from osv import fields, osv
import re
import tools
+import base64
def one_in(setA, setB):
"""Check the presence of an element of setA in setB
@@ -260,8 +261,26 @@ class ir_ui_menu(osv.osv):
return False
level -= 1
return True
-
-
+
+ def read_image(self, path):
+ icon = tools.file_open(path,'rb').read()
+ return base64.encodestring(icon)
+
+ def _get_image_icon(self, cr, uid, ids, name, args, context=None):
+ if context.get('bin_size', False):
+ context.update({'bin_size':False})
+ res = {}
+ for menu in self.browse(cr, uid, ids, context=context):
+ res[menu.id] = {
+ 'web_icon_data': False,
+ 'web_icon_hover_data': False,
+ }
+ if not menu.parent_id:
+ if menu.web_icon_hover:
+ res[menu.id]['web_icon_hover_data'] = self.read_image(menu.web_icon_hover)
+ if menu.web_icon:
+ res[menu.id]['web_icon_data'] = self.read_image(menu.web_icon)
+ return res
_columns = {
'name': fields.char('Menu', size=64, required=True, translate=True),
@@ -275,6 +294,10 @@ class ir_ui_menu(osv.osv):
string='Complete Name', type='char', size=128),
'icon': fields.selection(tools.icons, 'Icon', size=64),
'icon_pict': fields.function(_get_icon_pict, method=True, type='char', size=32),
+ 'web_icon': fields.char('Icon File', size=128),
+ 'web_icon_hover':fields.char('Icon hover File', size=128),
+ 'web_icon_data': fields.function(_get_image_icon, string='Web Icons', type='binary', method=True, readonly=True, store=True, multi='icon'),
+ 'web_icon_hover_data':fields.function(_get_image_icon, string='Web Icons Hover', type='binary', method=True, readonly=True, store=True,multi='icon'),
'action': fields.function(_action, fnct_inv=_action_inv,
method=True, type='reference', string='Action',
selection=[
diff --git a/bin/import_xml.rng b/bin/import_xml.rng
index 7b5a889a110..0495b334f78 100644
--- a/bin/import_xml.rng
+++ b/bin/import_xml.rng
@@ -176,6 +176,8 @@
+
+
diff --git a/bin/tools/convert.py b/bin/tools/convert.py
index d6f935a7251..f549478bba5 100644
--- a/bin/tools/convert.py
+++ b/bin/tools/convert.py
@@ -25,6 +25,7 @@ import logging
import os.path
import pickle
import re
+import addons
# for eval context:
import time
@@ -284,7 +285,7 @@ form: module.record_id""" % (xml_id,)
d_search = rec.get("search",'').encode('utf-8')
d_id = rec.get("id",'')
ids = []
-
+
if d_search:
idref = _get_idref(self, cr, self.uid, d_model, context={}, idref={})
ids = self.pool.get(d_model).search(cr, self.uid, unsafe_eval(d_search, idref))
@@ -556,7 +557,7 @@ form: module.record_id""" % (xml_id,)
values = {'parent_id': False}
if rec.get('parent', False) is False and len(m_l) > 1:
- # No parent attribute specified and the menu name has several menu components,
+ # No parent attribute specified and the menu name has several menu components,
# try to determine the ID of the parent according to menu path
pid = False
res = None
@@ -638,6 +639,11 @@ form: module.record_id""" % (xml_id,)
if rec.get('icon'):
values['icon'] = str(rec.get('icon'))
+ if rec.get('web_icon'):
+ values['web_icon'] = addons.get_module_resource(self.module,str(rec.get('web_icon')))
+ if rec.get('web_icon_hover'):
+ values['web_icon_hover'] = addons.get_module_resource(self.module,str(rec.get('web_icon_hover')))
+
if rec.get('groups'):
g_names = rec.get('groups','').split(',')
groups_value = []