Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/sugar
diff options
context:
space:
mode:
authorMarco Pesenti Gritti <marco@localhost.localdomain>2007-04-11 12:06:27 (GMT)
committer Marco Pesenti Gritti <marco@localhost.localdomain>2007-04-11 12:06:27 (GMT)
commit73f2577397dce7bcccc19c66dc8b3a0d227a62af (patch)
tree291e2244cf5a37184409c80c7cc13c9700840e26 /sugar
parentdefd9f76e3fd3fab2fbedadd0d948ea26fb7704c (diff)
First go at the new type registry.
Diffstat (limited to 'sugar')
-rw-r--r--sugar/activity/bundle.py18
-rw-r--r--sugar/activity/bundleregistry.py18
-rw-r--r--sugar/objects/Makefile.am5
-rw-r--r--sugar/objects/typeinfo.py58
-rw-r--r--sugar/objects/typeregistry.py99
5 files changed, 197 insertions, 1 deletions
diff --git a/sugar/activity/bundle.py b/sugar/activity/bundle.py
index 2ea5a54..b8172e0 100644
--- a/sugar/activity/bundle.py
+++ b/sugar/activity/bundle.py
@@ -1,4 +1,22 @@
+# Copyright (C) 2007, Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
"""Metadata description of a given application/activity"""
+
import logging
import locale
import os
diff --git a/sugar/activity/bundleregistry.py b/sugar/activity/bundleregistry.py
index 58b1700..8469688 100644
--- a/sugar/activity/bundleregistry.py
+++ b/sugar/activity/bundleregistry.py
@@ -1,5 +1,21 @@
+# Copyright (C) 2007, Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
import os
-from ConfigParser import ConfigParser
import gobject
diff --git a/sugar/objects/Makefile.am b/sugar/objects/Makefile.am
new file mode 100644
index 0000000..c93713b
--- /dev/null
+++ b/sugar/objects/Makefile.am
@@ -0,0 +1,5 @@
+sugardir = $(pythondir)/sugar/objects
+sugar_PYTHON = \
+ __init__.py \
+ typeregistry.py \
+ typeinfo.py
diff --git a/sugar/objects/typeinfo.py b/sugar/objects/typeinfo.py
new file mode 100644
index 0000000..8ac8471
--- /dev/null
+++ b/sugar/objects/typeinfo.py
@@ -0,0 +1,58 @@
+# Copyright (C) 2007, Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+class TypeInfo(object):
+ def __init__(self, info_dict=None):
+ self.type_id = None
+ self.name = None
+ self.icon = 'theme:stock-missing'
+ self.parent = None
+ self.formats = []
+
+ if info_dict:
+ self._read_from_dict(info_dict)
+
+ def get_default_activity(self):
+ return None
+
+ def get_activities(self):
+ return []
+
+ def _read_from_config(self, section, items, l_items):
+ self.type_id = section
+
+ for item in items:
+ if item[0] == 'name':
+ self.name = item[1]
+ elif item[0] == 'icon':
+ self.icon = item[1]
+ elif item[0] == 'parent':
+ self.parent = item[1]
+ elif item[0] == 'formats':
+ self.formats = item[1].split(';')
+
+ for item in litems:
+ if item[0] == 'name':
+ self.name = item[1]
+
+ return (self.name and self.parent and self.formats)
+
+ def _read_from_dict(self, info_dict):
+ self.type_id = info_dict['type_id']
+ self.name = info_dict['name']
+ self.icon = info_dict['icon']
+ self.formats = info_dict['formats']
diff --git a/sugar/objects/typeregistry.py b/sugar/objects/typeregistry.py
new file mode 100644
index 0000000..342c50e
--- /dev/null
+++ b/sugar/objects/typeregistry.py
@@ -0,0 +1,99 @@
+# Copyright (C) 2007, Red Hat, Inc.
+#
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of the GNU Lesser General Public
+# License as published by the Free Software Foundation; either
+# version 2 of the License, or (at your option) any later version.
+#
+# This library 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
+# Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public
+# License along with this library; if not, write to the
+# Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+# Boston, MA 02111-1307, USA.
+
+from gettext import gettext as _
+from ConfigParser import ConfigParser
+
+from sugar.objects.typeinfo import TypeInfo
+from sugar.activity import bundleregistry
+
+_text_type = {
+ 'type_id' : 'Text',
+ 'name' : _('Text'),
+ 'icon' : 'theme:object-text',
+ 'formats' : [ 'text/plain', 'application/pdf' ]
+}
+
+_image_type = {
+ 'type_id' : 'Image',
+ 'name' : _('Image'),
+ 'icon' : 'theme:object-image',
+ 'formats' : [ 'image/jpeg', 'image/gif', 'image/png' ]
+}
+
+class _RootNode(_TypeNode):
+ def __init__(self):
+ _TypeNode.__init__('')
+
+ def append_primitive(self, info_dict):
+ self.append(TypeInfo(info_dict)
+
+class _TypeNode(list):
+ def __init__(self, type_info):
+ self.type_info = type_info
+
+ def get_node_from_type(self, type_id):
+ for node in self:
+ if node.type_info.type_id == type_id:
+ return node
+
+ for node in self:
+ child = node.get_node_from_type()
+ if child:
+ return child
+
+ return None
+
+class TypeRegistry(object):
+ def __init__(self):
+ self._tree = _RootNode()
+ self._tree.append_primitive(_image_type)
+ self._tree.append_primitive(_text_type)
+
+ self._bundle_registry = bundleregistry.get_registry()
+ for bundle in self._bundle_registry:
+ self._read_from_bundle(bundle)
+ self._bundle_registry.connect('bundle-added', self._bundle_added_cb)
+
+ def _bundle_added_cb (self, registry, bundle):
+ self._read_from_bundle(bundle)
+
+ def _read_from_bundle(self, bundle):
+ cp = ConfigParser()
+ path = bundle.get_path()
+ cp.read([os.path.join(path, 'activity', 'object_types.info')])
+ items = cp.items()
+
+ cp = ConfigParser()
+ path = bundle.get_locale_path()
+ cp.read([os.path.join(path, 'object_types.linfo')])
+ l_items = cp.items()
+
+ for section in cp.sections():
+ type_info = TypeInfo()
+ if type_info.read_from_config(section, items, l_items)
+ parent_node = self._tree.get_node_from_type(type_info.parent)
+ if parent_node:
+ parent_node.append(_TypeNode(type_info)
+ return True
+
+ return False
+
+def get_registry():
+ return _type_registry
+
+_type_registry = TypeRegistry()