From da3786d2fbcc93d80020928afd4af7e1302da5e2 Mon Sep 17 00:00:00 2001 From: Gonzalo Odiard Date: Tue, 18 Jun 2013 12:23:00 -0300 Subject: [PATCH] Add filter_type optative parameter to objectchooser Constants are defined to select the different filter_type values. A comment was added to document the use. Signed-off-by: Gonzalo Odiard --- src/sugar3/graphics/objectchooser.py | 53 ++++++++++++++++++++++++++-- 1 file changed, 51 insertions(+), 2 deletions(-) diff --git a/src/sugar3/graphics/objectchooser.py b/src/sugar3/graphics/objectchooser.py index 0e6cbc95..f025363c 100644 --- a/src/sugar3/graphics/objectchooser.py +++ b/src/sugar3/graphics/objectchooser.py @@ -33,10 +33,49 @@ J_DBUS_SERVICE = 'org.laptop.Journal' J_DBUS_INTERFACE = 'org.laptop.Journal' J_DBUS_PATH = '/org/laptop/Journal' +FILTER_TYPE_MIME_BY_ACTIVITY = 'mime_by_activity' +FILTER_TYPE_GENERIC_MIME = 'generic_mime' +FILTER_TYPE_ACTIVITY = 'activity' + class ObjectChooser(object): - def __init__(self, parent=None, what_filter=None): + def __init__(self, parent=None, what_filter=None, filter_type=None): + """Initialise the ObjectChoser + + parent -- the widget calling ObjectChooser + + what_filter -- string + + string should be an activity bundle_id or a generic mime + type as defined in mime.py used to determine which objects + will be presented in the object chooser + + filter_type -- string + + string should be one of [None, FILTER_TYPE_GENERIC_MIME, + FILTER_TYPE_ACTIVITY, FILTER_TYPE_MIME_BY_ACTIVITY] + + If filter_type is None, the default behavior of the + what_filter is applied (for backward compatibility), + this option is DEPRECATED. + + If filter_type is FILTER_TYPE_GENERIC_MIME, the + what_filter should be a generic mime type defined in + mime.py; the object chooser will filter based in the + 'mime_type' metadata field. + + If filter_type is FILTER_TYPE_ACTIVITY, the what_filter + should by an activity bundle_id; the object chooser + will filter based in the 'activity' metadata field. + + If filter_type is FILTER_TYPE_MIME_BY_ACTIVITY, the + what_filter should be an activity bundle_id; the object + chooser will filter based on the 'mime_type' metadata + field and the mime types defined by the activity in the + activity.info file. + """ + if parent is None: parent_xid = 0 elif hasattr(parent, 'get_window') and hasattr(parent.get_window(), @@ -52,6 +91,15 @@ class ObjectChooser(object): self._chooser_id = None self._response_code = Gtk.ResponseType.NONE self._what_filter = what_filter + if filter_type is not None: + # verify is one of the availables types + # add here more types if needed + if filter_type not in [FILTER_TYPE_MIME_BY_ACTIVITY, + FILTER_TYPE_GENERIC_MIME, + FILTER_TYPE_ACTIVITY]: + raise Exception('filter_type not implemented') + + self._filter_type = filter_type def run(self): self._object_id = None @@ -77,7 +125,8 @@ class ObjectChooser(object): else: what_filter = self._what_filter - self._chooser_id = journal.ChooseObject(self._parent_xid, what_filter) + self._chooser_id = journal.ChooseObjectWithFilter( + self._parent_xid, what_filter, self._filter_type) Gdk.threads_leave() try: