def get_objects_within_nodes(self, nodes): """ Returns all the objects, which is one of the nodes, or is the descendant of one of the nodes. :type nodes: list[FSNode] :rtype: list[Object] """ objects = [] for node in nodes: if fs_util.is_object(node): objects.append(self._get_object_by_node(node)) elif isinstance(node, Folder): for child in self.project.fs_manager.walk(node, False): if fs_util.is_object(child): objects.append(self._get_object_by_node(child)) return objects
def open(self, fs_nodes): """Open one or more nodes Args: fs_nodes: a FSNode, or a list of FSNodes """ assert self.can_open(fs_nodes) fsm = self.project.fs_manager # Only 1 node # if len(fs_nodes)==1: if type(fs_nodes) is not list: fs_node = fs_nodes # folder or filter if self.is_container(fs_node): self.explorer.set_path(fs_node) return # edit the object if fs_util.is_object(fs_node): # only if it's not recycled if not fsm.is_recycled(fs_node): obj = self.project.get_object_by_fsfile(fs_node) self.explorer.show_editor(obj) return raise Exception('invalid node to open: %s' % fs_node) # multiple nodes, can only open if all nodes are objects with the same Clazz self.explorer.show_editor([ self.project.get_object_by_fsfile(fs_node) for fs_node in fs_nodes ])
def can_open(self, fs_nodes): """ Args: fs_nodes: a FSNode, or a list of FSNodes """ # Only 1 node # if len(fs_nodes)==1: if type(fs_nodes) is not list: fs_node = fs_nodes if self.is_container(fs_node): return True return self.is_project_editable() if len(fs_nodes) == 0: return False if not self.is_project_editable(): return False # multiple nodes, can only open if all nodes are objects with the same Clazz clazz_name = set() for fs_node in fs_nodes: if fs_util.is_object( fs_node ) and not self.project.fs_manager.is_recycled(fs_node): clazz_name.add(fs_util.get_object_clazz_name(fs_node)) else: clazz_name.add(None) if len(clazz_name) == 1: return True return False
def OnGetItemAttr(self, item): fs_node = self._fs_nodes[item] if fs_util.is_object(fs_node): obj = self.project.get_object_by_fsfile(fs_node) if obj: # nodes in Recycle will return None if obj.has_error(): return self.attr_error return self.attr_normal
def get_name(self, node): if fs_util.is_object(node): obj = self._get_object_by_node(node) if obj: # return obj.name return obj.get_label() return 'Unknown' return node.name
def iter_maker(): for node_ in self.project.fs_manager.walk(node, False): if fs_util.is_object(node_): yield self.project.get_object_by_fsfile(node_)
def get_id(self, node): if fs_util.is_object(node): obj = self._get_object_by_node(node) if obj: return obj.id