File: parse.py

package info (click to toggle)
tinyerp-client 3.4.2-3
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 4,832 kB
  • ctags: 1,024
  • sloc: python: 7,566; sh: 2,253; makefile: 81
file content (97 lines) | stat: -rw-r--r-- 3,315 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
##############################################################################
#
# Copyright (c) 2004 TINY SPRL. (http://tiny.be) All Rights Reserved.
#                    Fabien Pinckaers <fp@tiny.Be>
#
# WARNING: This program as such is intended to be used by professional
# programmers who take the whole responsability of assessing all potential
# consequences resulting from its eventual inadequacies and bugs
# End users who are looking for a ready-to-use solution with commercial
# garantees and support are strongly adviced to contract a Free Software
# Service Company
#
# This program is Free Software; you can redistribute it and/or
# modify it under the terms of the GNU General Public License
# as published by the Free Software Foundation; either version 2
# of the License, or (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
#
##############################################################################

import gtk
import gobject
from xml.parsers import expat

import gettext

class parse(object):
	def __init__(self, fields):
		self.fields = fields
		self.pixbufs = {}

	def _psr_start(self, name, attrs):
		if name=='tree':
			self.title = attrs.get('string',_('Tree'))
		elif name=='field':
			type = self.fields[attrs['name']]['type']
			if type!='checkbox':
				column = gtk.TreeViewColumn(self.fields[attrs['name']]['string']) #, cell, text=self.pos)
				if 'icon' in attrs:
					render_pixbuf = gtk.CellRendererPixbuf()
					column.pack_start(render_pixbuf, expand=False)
					column.add_attribute(render_pixbuf, 'pixbuf', self.pos)
					self.fields_order.append(str(attrs['icon']))
					self.pixbufs[self.pos]=True
					self.pos+=1

				cell = gtk.CellRendererText()
				cell.set_fixed_height_from_font(1)
				if type=='float':
					cell.set_property('xalign', 1.0)
				column.pack_start(cell, expand=False)
				column.add_attribute(cell, 'text', self.pos)
			else:
				cell = gtk.CellRendererToggle()
				column = gtk.TreeViewColumn (self.fields[attrs['name']]['string'], cell, active=self.pos)
			self.pos+=1
			column.set_resizable(1)
			self.fields_order.append(str(attrs['name']))
			self.tree.append_column(column)
		else:
			import logging
			log = logging.getLogger('view')
			log.error('unknown tag: '+str(name))
			del log
	def _psr_end(self, name):
		pass
	def _psr_char(self, char):
		pass
	def parse(self, xml_data, tree):
		cell = gtk.CellRendererText()
		cell.set_fixed_height_from_font(1)
		column = gtk.TreeViewColumn('ID', cell, text=0)
		column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
		column.set_fixed_width(60)
		column.set_visible(False)
		tree.append_column(column)
		self.tree = tree
		self.pos = 1

		self.fields_order=[]

		psr = expat.ParserCreate()
		psr.StartElementHandler = self._psr_start
		psr.EndElementHandler = self._psr_end
		psr.CharacterDataHandler = self._psr_char
		psr.Parse(xml_data)
		return self.pos