コード例 #1
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
    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
コード例 #2
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
    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
        ])
コード例 #3
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
    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
コード例 #4
0
 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
コード例 #5
0
 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
コード例 #6
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
    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
コード例 #7
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
 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_)
コード例 #8
0
ファイル: fs_node_tool.py プロジェクト: TimothyZhang/structer
 def get_id(self, node):
     if fs_util.is_object(node):
         obj = self._get_object_by_node(node)
         if obj:
             return obj.id