diff --git a/openerp/addons/base/res/res_company.py b/openerp/addons/base/res/res_company.py index 3524bb2e519..2fe3ab04219 100644 --- a/openerp/addons/base/res/res_company.py +++ b/openerp/addons/base/res/res_company.py @@ -27,24 +27,43 @@ from openerp.osv import fields, osv from openerp.tools.translate import _ from openerp.tools.safe_eval import safe_eval as eval from openerp.tools import image_resize_image +from reportlab import rl_config +from openerp.tools import config +import platform +import glob +from openerp.report.render.rml2pdf import customfonts -_select_font=[ ('DejaVu Sans',"DejaVu Sans"), - ('DejaVu Sans Bold',"DejaVu Sans Bold"), - ('DejaVu Sans Oblique',"DejaVu Sans Oblique"), - ('DejaVu Sans BoldOblique',"DejaVu Sans BoldOblique"), - ('Liberation Serif',"Liberation Serif"), - ('Liberation Serif Bold',"Liberation Serif Bold"), - ('Liberation Serif Italic',"Liberation Serif Italic"), - ('Liberation Serif BoldItalic',"Liberation Serif BoldItalic"), - ('Liberation Serif',"Liberation Serif"), - ('Liberation Serif Bold',"Liberation Serif Bold"), - ('Liberation Serif Italic',"Liberation Serif Italic"), - ('Liberation Serif BoldItalic',"Liberation Serif BoldItalic"), - ('FreeMono',"FreeMono"), - ('FreeMono Bold',"FreeMono Bold"), - ('FreeMono Oblique',"FreeMono Oblique"), - ('FreeMono BoldOblique',"FreeMono BoldOblique"), -] +def get_font_list(): + _lst_font=[] + TTFSearchPath_Linux = customfonts.TTFSearchPath_Linux + TTFSearchPath_Darwin = customfonts.TTFSearchPath_Darwin + TTFSearchPath_Windows = customfonts.TTFSearchPath_Windows + TTFSearchPathMap = customfonts.TTFSearchPathMap + searchpath = [] + select_font = [] + if config.get('fonts_search_path'): + searchpath += map(str.strip, config.get('fonts_search_path').split(',')) + + local_platform = platform.system() + if local_platform in TTFSearchPathMap: + searchpath += TTFSearchPathMap[local_platform] + + searchpath += rl_config.TTFSearchPath + + for dirglob in searchpath: + dirglob = os.path.expanduser(dirglob) + for dirname in glob.iglob(dirglob): + abp = os.path.abspath(dirname) + if os.path.isdir(abp): + for f in os.listdir(abp): + abs_filename = os.path.join(abp, f) + from PIL import ImageFont + if f.find('.ttf') != -1: + f_test = ImageFont.truetype(abs_filename, 1) + font_family = f_test.font.family + font_familystyle = f_test.font.family +" "+ f_test.font.style.replace(" ","") + _lst_font.append((font_familystyle,font_familystyle)) + return _lst_font class multi_company_default(osv.osv): """ @@ -92,7 +111,7 @@ class res_company(osv.osv): _name = "res.company" _description = 'Companies' _order = 'name' - + def _get_address_data(self, cr, uid, ids, field_names, arg, context=None): """ Read the 'address' functional fields. """ result = {} @@ -129,6 +148,10 @@ class res_company(osv.osv): def _get_companies_from_partner(self, cr, uid, ids, context=None): return self.pool['res.company'].search(cr, uid, [('partner_id', 'in', ids)], context=context) + + def _get_font(self, cr, uid, context=None): + font_list = get_font_list() + return font_list _columns = { 'name': fields.related('partner_id', 'name', string='Company Name', size=128, required=True, store=True, type='char'), @@ -165,7 +188,7 @@ class res_company(osv.osv): 'vat': fields.related('partner_id', 'vat', string="Tax ID", type="char", size=32), 'company_registry': fields.char('Company Registry', size=64), 'paper_format': fields.selection([('a4', 'A4'), ('us_letter', 'US Letter')], "Paper Format", required=True), - 'font': fields.selection(_select_font, "Select Font",help="Set your favorite font into company header"), + 'font': fields.selection(_get_font, "Font",help="Set your favorite font into company header"), } _sql_constraints = [ ('name_uniq', 'unique (name)', 'The company name must be unique !') diff --git a/openerp/addons/base/res/res_company_view.xml b/openerp/addons/base/res/res_company_view.xml index c386dd27698..e9acf7940b3 100644 --- a/openerp/addons/base/res/res_company_view.xml +++ b/openerp/addons/base/res/res_company_view.xml @@ -80,12 +80,10 @@ + - - -