def create_dynamic_view(self, at): """Create a caption dynamic view for the given annotation-type. """ p=self.controller.package ident='v_caption_%s' % at.id if p.get(ident) is not None: dialog.message_dialog(_("A caption dynamic view for %s already seems to exist.") % self.get_title(at)) return True v=p.create_view(id=ident, mimetype='application/x-advene-ruleset') v.title=_("Caption %s annotations") % self.controller.get_title(at) # Build the ruleset r=RuleSet() catalog=self.controller.event_handler.catalog ra=catalog.get_action("AnnotationCaption") action=Action(registeredaction=ra, catalog=catalog) action.add_parameter('message', 'annotation/content/data') rule=Rule(name=_("Caption the annotation"), event=Event("AnnotationBegin"), condition=Condition(lhs='annotation/type/id', operator='equals', rhs='string:%s' % at.id), action=action) r.add_rule(rule) v.content.data=r.xml_repr() p.views.append(v) self.controller.notify('ViewCreate', view=v) self.controller.activate_stbv(v) return True
def update_value(self): if not self.editable: return False ra = self.catalog.get_action(self.current_name) self.model = Action(registeredaction=ra, catalog=self.catalog) regexp = re.compile('^(\(.+\)|)$') for n, v in self.current_parameters.items(): # We ignore parameters fields that are empty or that match '^\(.+\)$' if not regexp.match(v): self.model.add_parameter(n, v) return True
def add_rule_cb(button=None): if not self.editable: return True # Create a new default Rule event=Event("AnnotationBegin") ra=self.catalog.get_action("Message") action=Action(registeredaction=ra, catalog=self.catalog) for p in ra.parameters: action.add_parameter(p, ra.defaults.get(p, '')) # Find the next rulename index l=[ int(i) for i in re.findall(unicode(_('Rule')+'\s*(\d+)'), ''.join(r.name for r in self.model)) ] idx=max(l or [ 0 ] ) + 1 rule=Rule(name=_("Rule") + str(idx), event=event, action=action) self.add_rule(rule) return True
def add_rule_cb(button=None): if not self.editable: return True # Create a new default Rule event=Event("AnnotationBegin") ra=self.catalog.get_action("Message") action=Action(registeredaction=ra, catalog=self.catalog) for p in ra.parameters: action.add_parameter(p, ra.defaults.get(p, '')) # Find the next rulename index l=[ int(i) for i in re.findall(_('Rule')+r'\s*(\d+)', ''.join(r.name for r in self.model)) ] idx=max(l or [ 0 ] ) + 1 rule=Rule(name=_("Rule") + str(idx), event=event, action=action) self.add_rule(rule) return True
def update_value(self): if not self.editable: return False ra=self.catalog.get_action(self.current_name) self.model = Action(registeredaction=ra, catalog=self.catalog) regexp=re.compile('^(\(.+\)|)$') for n, v in self.current_parameters.items(): # We ignore parameters fields that are empty or that match '^\(.+\)$' if not regexp.match(v): self.model.add_parameter(n, v) return True
def create_follow_dynamic_view(self, rt): """Create a dynamic view for the given relation-type. """ p = self.controller.package ident = 'v_follow_%s' % rt.id if p.get_element_by_id(ident) is not None: dialog.message_dialog( _("A follow dynamic view for %s already seems to exist.") % self.get_title(rt)) return True v = p.createView(ident=ident, author=config.data.userid, date=self.controller.get_timestamp(), clazz='package', content_mimetype='application/x-advene-ruleset') v.title = _("Follow %s relation-type") % self.get_title(rt) # Build the ruleset r = RuleSet() catalog = self.controller.event_handler.catalog ra = catalog.get_action("PlayerGoto") action = Action(registeredaction=ra, catalog=catalog) action.add_parameter( 'position', 'annotation/typedRelatedOut/%s/first/fragment/begin' % rt.id) rule = Rule(name=_("Follow the relation"), event=Event("AnnotationEnd"), condition=Condition(lhs='annotation/typedRelatedOut/%s' % rt.id, operator='value'), action=action) r.add_rule(rule) v.content.data = r.xml_repr() p.views.append(v) self.controller.notify('ViewCreate', view=v) self.controller.activate_stbv(v) return True
def create_dynamic_view(self, at): """Create a caption dynamic view for the given annotation-type. """ p = self.controller.package ident = 'v_caption_%s' % at.id if p.get_element_by_id(ident) is not None: dialog.message_dialog( _("A caption dynamic view for %s already seems to exist.") % self.get_title(at)) return True v = p.createView(ident=ident, author=config.data.userid, date=self.controller.get_timestamp(), clazz='package', content_mimetype='application/x-advene-ruleset') v.title = _("Caption %s annotations") % self.get_title(at) # Build the ruleset r = RuleSet() catalog = self.controller.event_handler.catalog ra = catalog.get_action("AnnotationCaption") action = Action(registeredaction=ra, catalog=catalog) action.add_parameter('message', 'annotation/content/data') rule = Rule(name=_("Caption the annotation"), event=Event("AnnotationBegin"), condition=Condition(lhs='annotation/type/id', operator='equals', rhs='string:%s' % at.id), action=action) r.add_rule(rule) v.content.data = r.xml_repr() p.views.append(v) self.controller.notify('ViewCreate', view=v) self.controller.activate_stbv(v) return True
def create_follow_dynamic_view(self, rt): """Create a dynamic view for the given relation-type. """ p = self.controller.package ident = 'v_follow_%s' % rt.id if p.get_element_by_id(ident) is not None: dialog.message_dialog(_("A follow dynamic view for %s already seems to exist.") % self.get_title(rt)) return True v = p.createView( ident=ident, author=config.data.userid, date=self.controller.get_timestamp(), clazz='package', content_mimetype='application/x-advene-ruleset' ) v.title = _("Follow %s relation-type") % self.get_title(rt) # Build the ruleset r = RuleSet() catalog = self.controller.event_handler.catalog ra = catalog.get_action("PlayerGoto") action = Action(registeredaction=ra, catalog=catalog) action.add_parameter('position', 'annotation/typedRelatedOut/%s/first/fragment/begin' % rt.id) rule=Rule(name=_("Follow the relation"), event=Event("AnnotationEnd"), condition=Condition(lhs='annotation/typedRelatedOut/%s' % rt.id, operator='value'), action=action) r.add_rule(rule) v.content.data=r.xml_repr() p.views.append(v) self.controller.notify('ViewCreate', view=v) self.controller.activate_stbv(v) return True
class EditAction(EditGeneric): def __init__(self, action, catalog, editable=True, controller=None): self.model=action self.editable=editable self.current_name=action.name self.current_parameters=dict(action.parameters) # RegisteredAction matching the self.current_name self.registeredaction=catalog.get_action(self.current_name) self.controller=controller # Cache the parameters value. Indexed by action name. # Used when using the mousewheel on the action name list: # it should keep the parameters values self.cached_parameters={} # Dict of parameter widgets (modified when the action name changes) # indexed by parameter name. self.paramlist={} self.catalog=catalog self.widget=self.build_widget() def invalid_items(self): iv=[ _("Parameter %s") % n for n in self.paramlist if not self.paramlist[n].entry.is_valid() ] return iv def update_value(self): if not self.editable: return False ra=self.catalog.get_action(self.current_name) self.model = Action(registeredaction=ra, catalog=self.catalog) regexp=re.compile('^(\(.+\)|)$') for n, v in self.current_parameters.iteritems(): # We ignore parameters fields that are empty or that match '^\(.+\)$' if not regexp.match(v): #print "Updating %s = %s" % (n, v) self.model.add_parameter(n, v) return True def sorted(self, l): """Return a sorted version of the list.""" if isinstance(l, dict): res=l.keys() else: res=l[:] res.sort() return res def on_change_name(self, element): if element.name == self.current_name: return True # Cache the old parameters values self.cached_parameters[self.current_name]=self.current_parameters.copy() self.current_name=element.name for w in self.paramlist.values(): w.destroy() self.paramlist={} ra=self.catalog.get_action(self.current_name) self.registeredaction=ra if self.current_name in self.cached_parameters: self.current_parameters=self.cached_parameters[self.current_name] else: self.current_parameters={}.fromkeys(ra.parameters, "") for name in self.sorted(self.current_parameters): v=ra.default_value(name) p=self.build_parameter_widget(name, v, ra.describe_parameter(name)) self.current_parameters[name]=v self.paramlist[name]=p p.show() self.widget.add(p) return True def on_change_parameter(self, entry, talesentry, name): value=unicode(talesentry.get_text()) self.current_parameters[name]=value return True def build_parameter_widget(self, name, value, description): hbox=gtk.HBox() label=gtk.Label(name) hbox.pack_start(label, expand=False) ra=self.registeredaction if ra: # Get predefined values if callable(ra.predefined): predefined=ra.predefined(self.controller)[name] elif ra.predefined is not None: predefined=ra.predefined[name] else: predefined=None entry=TALESEntry(controller=self.controller, predefined=predefined) entry.set_text(value) entry.set_editable(self.editable) entry.entry.connect('changed', self.on_change_parameter, entry, name) entry.entry.set_tooltip_text(description) hbox.entry=entry hbox.pack_start(entry.widget) hbox.show_all() return hbox def build_widget(self): vbox=gtk.VBox() vbox.add(gtk.HSeparator()) def description_getter(element): if hasattr(element, 'description'): return element.description else: # it is a category return self.catalog.action_categories[element] c=self.catalog def expert_filter(l, attr=None): if config.data.preferences['expert-mode']: return l else: expert_categories = ('expert', 'gui', 'state') if attr is None: # No attribute, directly test value return [ e for e in l if not e in expert_categories ] else: return [ e for e in l if not getattr(e, attr) in expert_categories ] self.selector=dialog.CategorizedSelector(title=_("Select an action"), elements=expert_filter(sorted(c.actions.values()), 'category'), categories=expert_filter(c.action_categories.keys()), current=c.actions[self.current_name], description_getter=description_getter, category_getter=lambda e: e.category, callback=self.on_change_name, editable=self.editable) self.name=self.selector.get_button() vbox.add(self.name) if self.model.registeredaction: # Action is derived from a RegisteredAction # we have information about its parameters. ra=self.model.registeredaction for name in self.sorted(ra.parameters): try: v=self.model.parameters[name] except KeyError: v=ra.default_value(name) p=self.build_parameter_widget(name=name, value=v, description=ra.describe_parameter(name)) self.current_parameters[name]=v self.paramlist[name]=p vbox.add(p) else: # We display existing parameters for name in self.sorted(self.model.parameters): p=self.build_parameter_widget(name, self.model.parameters[name], "") self.paramlist[name]=p vbox.add(p) vbox.add(gtk.HSeparator()) vbox.show_all() return vbox
class EditAction(EditGeneric): def __init__(self, action, catalog, editable=True, controller=None): self.model = action self.editable = editable self.current_name = action.name self.current_parameters = dict(action.parameters) # RegisteredAction matching the self.current_name self.registeredaction = catalog.get_action(self.current_name) self.controller = controller # Cache the parameters value. Indexed by action name. # Used when using the mousewheel on the action name list: # it should keep the parameters values self.cached_parameters = {} # Dict of parameter widgets (modified when the action name changes) # indexed by parameter name. self.paramlist = {} self.catalog = catalog self.widget = self.build_widget() def invalid_items(self): iv = [ _("Parameter %s") % n for n in self.paramlist if not self.paramlist[n].entry.is_valid() ] return iv def update_value(self): if not self.editable: return False ra = self.catalog.get_action(self.current_name) self.model = Action(registeredaction=ra, catalog=self.catalog) regexp = re.compile('^(\(.+\)|)$') for n, v in self.current_parameters.items(): # We ignore parameters fields that are empty or that match '^\(.+\)$' if not regexp.match(v): self.model.add_parameter(n, v) return True def sorted(self, l): """Return a sorted version of the list.""" if isinstance(l, dict): res = list(l) else: res = l[:] res.sort() return res def on_change_name(self, element): if element.name == self.current_name: return True # Cache the old parameters values self.cached_parameters[ self.current_name] = self.current_parameters.copy() self.current_name = element.name for w in self.paramlist.values(): w.destroy() self.paramlist = {} ra = self.catalog.get_action(self.current_name) self.registeredaction = ra if self.current_name in self.cached_parameters: self.current_parameters = self.cached_parameters[self.current_name] else: self.current_parameters = {}.fromkeys(ra.parameters, "") for name in self.sorted(self.current_parameters): v = ra.default_value(name) p = self.build_parameter_widget(name, v, ra.describe_parameter(name)) self.current_parameters[name] = v self.paramlist[name] = p p.show() self.widget.add(p) return True def on_change_parameter(self, entry, talesentry, name): value = talesentry.get_text() self.current_parameters[name] = value return True def build_parameter_widget(self, name, value, description): hbox = Gtk.HBox() label = Gtk.Label(label=name) hbox.pack_start(label, False, True, 0) ra = self.registeredaction if ra: # Get predefined values if callable(ra.predefined): predefined = ra.predefined(self.controller)[name] elif ra.predefined is not None: predefined = ra.predefined[name] else: predefined = None entry = TALESEntry(controller=self.controller, predefined=predefined) entry.set_text(value) entry.set_editable(self.editable) entry.entry.connect('changed', self.on_change_parameter, entry, name) entry.entry.set_tooltip_text(description) hbox.entry = entry hbox.pack_start(entry.widget, True, True, 0) hbox.show_all() return hbox def build_widget(self): vbox = Gtk.VBox() vbox.add(Gtk.HSeparator()) def description_getter(element): if hasattr(element, 'description'): return element.description else: # it is a category return self.catalog.action_categories[element] c = self.catalog def expert_filter(l, attr=None): if config.data.preferences['expert-mode']: return l else: expert_categories = ('expert', 'gui', 'state') if attr is None: # No attribute, directly test value return [e for e in l if not e in expert_categories] else: return [ e for e in l if not getattr(e, attr) in expert_categories ] self.selector = dialog.CategorizedSelector( title=_("Select an action"), elements=expert_filter(sorted(c.actions.values()), 'category'), categories=expert_filter(list(c.action_categories)), current=c.actions[self.current_name], description_getter=description_getter, category_getter=lambda e: e.category, callback=self.on_change_name, editable=self.editable) self.name = self.selector.get_button() vbox.add(self.name) if self.model.registeredaction: # Action is derived from a RegisteredAction # we have information about its parameters. ra = self.model.registeredaction for name in self.sorted(ra.parameters): try: v = self.model.parameters[name] except KeyError: v = ra.default_value(name) p = self.build_parameter_widget( name=name, value=v, description=ra.describe_parameter(name)) self.current_parameters[name] = v self.paramlist[name] = p vbox.add(p) else: # We display existing parameters for name in self.sorted(self.model.parameters): p = self.build_parameter_widget(name, self.model.parameters[name], "") self.paramlist[name] = p vbox.add(p) vbox.add(Gtk.HSeparator()) vbox.show_all() return vbox
def add_action(self, widget, actionsbox): """Callback for the Add action button.""" ra = self.catalog.get_action("Message") action = Action(registeredaction=ra, catalog=self.catalog) self.add_action_widget(action, actionsbox)
def do_create_element(self): """Create the element according to the widget data. @return: the created element, None if an error occurred """ id_ = unicode(self.dialog.id_entry.get_text()) title_ = unicode(self.dialog.title_entry.get_text()) # Check validity of id. if not self.is_valid_id(id_): dialog.message_dialog( _("The identifier %s is not valid.\nIt must be composed of non-accentuated alphabetic characters\nUnderscore is allowed.") % id_) return None if self.controller.package._idgenerator.exists(id_): dialog.message_dialog( _("The identifier %s is already defined.") % id_) return None else: self.controller.package._idgenerator.add(id_) if self.dialog.type_combo: t = self.dialog.type_combo.get_current_element() if self.type_ == Annotation: if isinstance(self.parent, AnnotationType): parent=self.parent.rootPackage else: parent=self.parent el=parent.createAnnotation( ident=id_, type=t, author=config.data.userid, date=self.get_date(), fragment=MillisecondFragment(begin=0, duration=self.controller.player.stream_duration)) if el.type._fieldnames: el.content.data="\n".join( sorted(el.type._fieldnames) ) parent.annotations.append(el) self.controller.notify('AnnotationCreate', annotation=el) elif self.type_ == Relation: # Unused code: relations can not be created without annotations if isinstance(self.parent, RelationType): parent=self.parent.rootPackage else: parent=self.parent el=parent.createRelation( ident=id_, type=t, author=config.data.userid, date=self.get_date(), members=()) parent.relations.append(el) self.controller.notify('RelationCreate', relation=el) elif self.type_ == Query: el=self.parent.createQuery(ident=id_) el.author=config.data.userid el.date=self.get_date() el.title=title_ el.content.mimetype=t.id if t.id == 'application/x-advene-simplequery': # Create a basic query q=advene.rules.elements.SimpleQuery(sources=["here"]) el.content.data=q.xml_repr() el.content.mimetype=t.id self.parent.queries.append(el) self.controller.notify('QueryCreate', query=el) elif self.type_ == View: el=self.parent.createView( ident=id_, author=config.data.userid, date=self.get_date(), clazz=self.parent.viewableClass, content_mimetype=t.id, ) el.title=title_ if t.id == 'application/x-advene-ruleset': # Create an empty ruleset to begin with r=RuleSet() # Create a new default Rule rule=SubviewList(name=_("Subviews"), elements=[]) r.add_rule(rule) event=Event("AnnotationBegin") catalog=self.controller.event_handler.catalog ra=catalog.get_action("Message") action=Action(registeredaction=ra, catalog=catalog) for p in ra.parameters: action.add_parameter(p, ra.defaults.get(p, '')) rule=Rule(name=_("Rule") + '1', event=event, action=action) r.add_rule(rule) el.content.data=r.xml_repr() self.parent.views.append(el) self.controller.notify('ViewCreate', view=el) elif self.type_ == Schema: el=self.parent.createSchema( ident=id_) el.author=config.data.userid el.date=self.get_date() el.title=title_ self.parent.schemas.append(el) self.controller.notify('SchemaCreate', schema=el) elif self.type_ == AnnotationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el=None else: el=self.parent.createAnnotationType( ident=id_) el.author=config.data.userid el.date=self.get_date() el.title=title_ el.mimetype=t.id el.setMetaData(config.data.namespace, 'color', self.parent.rootPackage._color_palette.next()) el.setMetaData(config.data.namespace, 'item_color', 'here/tag_color') self.parent.annotationTypes.append(el) self.controller.notify('AnnotationTypeCreate', annotationtype=el) elif self.type_ == RelationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el=None else: el=self.parent.createRelationType( ident=id_) el.author=config.data.userid el.date=self.get_date() el.title=title_ el.mimetype=t.id el.setMetaData(config.data.namespace, 'color', self.parent.rootPackage._color_palette.next()) el.setMetaData(config.data.namespace, 'item_color', 'here/tag_color') # Create a generic binary relationType el.hackedMemberTypes=(u'', u'') self.parent.relationTypes.append(el) self.controller.notify('RelationTypeCreate', relationtype=el) elif self.type_ == Resources: # Create a new dir. # Parent should be a Resources self.parent[id_]=Resources.DIRECTORY_TYPE el=self.parent[id_] self.controller.notify('ResourceCreate', resource=el) elif self.type_ == ResourceData: # Create a new resource file self.parent[id_]=_("New resource data") el=self.parent[id_] self.controller.notify('ResourceCreate', resource=el) else: el=None print "Not implemented yet." return el
def do_create_element(self): """Create the element according to the widget data. @return: the created element, None if an error occurred """ id_ = unicode(self.dialog.id_entry.get_text()) title_ = unicode(self.dialog.title_entry.get_text()) # Check validity of id. if not self.is_valid_id(id_): dialog.message_dialog( _("The identifier %s is not valid.\nIt must be composed of non-accentuated alphabetic characters\nUnderscore is allowed." ) % id_) return None if self.controller.package._idgenerator.exists(id_): dialog.message_dialog( _("The identifier %s is already defined.") % id_) return None else: self.controller.package._idgenerator.add(id_) if self.dialog.type_combo: t = self.dialog.type_combo.get_current_element() if self.type_ == Annotation: if isinstance(self.parent, AnnotationType): parent = self.parent.rootPackage else: parent = self.parent el = parent.createAnnotation( ident=id_, type=t, author=config.data.userid, date=self.get_date(), fragment=MillisecondFragment( begin=0, duration=self.controller.player.stream_duration)) if el.type._fieldnames: el.content.data = "\n".join(sorted(el.type._fieldnames)) parent.annotations.append(el) self.controller.notify('AnnotationCreate', annotation=el) elif self.type_ == Relation: # Unused code: relations can not be created without annotations if isinstance(self.parent, RelationType): parent = self.parent.rootPackage else: parent = self.parent el = parent.createRelation(ident=id_, type=t, author=config.data.userid, date=self.get_date(), members=()) parent.relations.append(el) self.controller.notify('RelationCreate', relation=el) elif self.type_ == Query: el = self.parent.createQuery(ident=id_) el.author = config.data.userid el.date = self.get_date() el.title = title_ el.content.mimetype = t.id if t.id == 'application/x-advene-simplequery': # Create a basic query q = advene.rules.elements.SimpleQuery(sources=["here"]) el.content.data = q.xml_repr() el.content.mimetype = t.id self.parent.queries.append(el) self.controller.notify('QueryCreate', query=el) elif self.type_ == View: el = self.parent.createView( ident=id_, author=config.data.userid, date=self.get_date(), clazz=self.parent.viewableClass, content_mimetype=t.id, ) el.title = title_ if t.id == 'application/x-advene-ruleset': # Create an empty ruleset to begin with r = RuleSet() # Create a new default Rule rule = SubviewList(name=_("Subviews"), elements=[]) r.add_rule(rule) event = Event("AnnotationBegin") catalog = self.controller.event_handler.catalog ra = catalog.get_action("Message") action = Action(registeredaction=ra, catalog=catalog) for p in ra.parameters: action.add_parameter(p, ra.defaults.get(p, '')) rule = Rule(name=_("Rule") + '1', event=event, action=action) r.add_rule(rule) el.content.data = r.xml_repr() self.parent.views.append(el) self.controller.notify('ViewCreate', view=el) elif self.type_ == Schema: el = self.parent.createSchema(ident=id_) el.author = config.data.userid el.date = self.get_date() el.title = title_ self.parent.schemas.append(el) self.controller.notify('SchemaCreate', schema=el) elif self.type_ == AnnotationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el = None else: el = self.parent.createAnnotationType(ident=id_) el.author = config.data.userid el.date = self.get_date() el.title = title_ el.mimetype = t.id el.setMetaData(config.data.namespace, 'color', self.parent.rootPackage._color_palette.next()) el.setMetaData(config.data.namespace, 'item_color', 'here/tag_color') self.parent.annotationTypes.append(el) self.controller.notify('AnnotationTypeCreate', annotationtype=el) elif self.type_ == RelationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el = None else: el = self.parent.createRelationType(ident=id_) el.author = config.data.userid el.date = self.get_date() el.title = title_ el.mimetype = t.id el.setMetaData(config.data.namespace, 'color', self.parent.rootPackage._color_palette.next()) el.setMetaData(config.data.namespace, 'item_color', 'here/tag_color') # Create a generic binary relationType el.hackedMemberTypes = (u'', u'') self.parent.relationTypes.append(el) self.controller.notify('RelationTypeCreate', relationtype=el) elif self.type_ == Resources: # Create a new dir. # Parent should be a Resources self.parent[id_] = Resources.DIRECTORY_TYPE el = self.parent[id_] self.controller.notify('ResourceCreate', resource=el) elif self.type_ == ResourceData: # Create a new resource file self.parent[id_] = _("New resource data") el = self.parent[id_] self.controller.notify('ResourceCreate', resource=el) else: el = None print "Not implemented yet." return el
def do_create_element(self): """Create the element according to the widget data. @return: the created element, None if an error occurred """ id_ = self.dialog.id_entry.get_text() title_ = self.dialog.title_entry.get_text() # Check validity of id. if not self.is_valid_id(id_): dialog.message_dialog( _("The identifier %s is not valid.\nIt must be composed of non-accentuated alphabetic characters\nUnderscore is allowed.") % id_) return None if self.controller.package._idgenerator.exists(id_): dialog.message_dialog( _("The identifier %s is already defined.") % id_) return None else: self.controller.package._idgenerator.add(id_) if self.dialog.type_combo: t = self.dialog.type_combo.get_current_element() if self.type_ == Annotation: if isinstance(self.parent, AnnotationType): parent=self.controller.package else: parent=self.parent el=parent.create_annotation( id=id_, type=t, media=self.controller.current_media, begin=0, end=self.controller.player.stream_duration) if el.type._fieldnames: el.content.data="\n".join( "%s=" % f for f in sorted(el.type._fieldnames) ) self.controller.notify('AnnotationCreate', annotation=el) elif self.type_ == Query: el=self.parent.create_query(id=id_, mimetype=t.id) el.title=title_ if t.id == 'application/x-advene-simplequery': # Create a basic query q=SimpleQuery(source="here") el.content.data=q.xml_repr() self.controller.notify('QueryCreate', query=el) elif self.type_ == View: el=self.parent.create_view(id=id_, mimetype=t.id) el.title=title_ if t.id == 'application/x-advene-ruleset': # Create an empty ruleset to begin with r=RuleSet() # Create a new default Rule rule=SubviewList(name=_("Subviews"), elements=[]) r.add_rule(rule) event=Event("AnnotationBegin") catalog=self.controller.event_handler.catalog ra=catalog.get_action("Message") action=Action(registeredaction=ra, catalog=catalog) for p in ra.parameters: action.add_parameter(p, ra.defaults.get(p, '')) rule=Rule(name=_("Rule") + '1', event=event, action=action) r.add_rule(rule) el.content.data=r.xml_repr() self.controller.notify('ViewCreate', view=el) elif self.type_ == Schema: el=self.parent.create_schema(id=id_) el.title=title_ self.controller.notify('SchemaCreate', schema=el) elif self.type_ == AnnotationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el=None else: el=self.controller.package.create_annotation_type(id=id_) el.title=title_ el.mimetype=t.id el.color=self.controller.package._color_palette.next() el.element_color='here/tag_color' self.controller.notify('AnnotationTypeCreate', annotationtype=el) elif self.type_ == RelationType: if not isinstance(self.parent, Schema): print "Error: bad invocation of CreateElementPopup" el=None else: el=self.controller.package.create_relation_type(id=id_) el.title=title_ el.mimetype=t.id el.color=self.controller.package._color_palette.next() el.element_color='here/tag_color' self.controller.notify('RelationTypeCreate', relationtype=el) elif self.type_ == Resource: # Create a new resource file # FIXME: to implement self.parent[id_]=_("New resource data") el=self.parent[id_] self.controller.notify('ResourceCreate', resource=el) else: el=None print "Not implemented yet." return el