Пример #1
0
    def update_xsd_files_information(self):
        '''
        update 函数直接与vs类关联,得到所有的文件类,这样只用update就能更新最新
        :return:
        '''

        if self.vsp == None:
            QMessageBox.information(self.main_window, "提示", "没有加载项目,无法获得xsd文件")
            return
        self.xsd_files_item = []

        try:
            filenames = list(self.vsp.relative_path_XVI_dict.keys())
            filenames = sorted(filenames)
            tw = self.main_window_ui.xsdFileTreeWidget
            index = 0
            tw.clear()
            # TODO :这里让用户自选显示的顺序和内容
            tw.setHeaderLabels(self.xsd_file_headers)
            tw.setColumnCount(len(self.xsd_file_headers))
            file_name_item_dict = {}
            root = QTreeWidgetItem(tw)
            root.setText(0, self.vsp.local_project_dir)

            for file in filenames:

                l = [root]
                trees = file.split("/")[1:]  # 第一个元素是""

                for i in range(len(trees) + 1):
                    node_name = "/".join(trees[:i])
                    try:
                        node = file_name_item_dict[node_name]

                    except:
                        node = QTreeWidgetItem(l[-1])
                        index += 1
                        node.setText(0, node_name.split("/")[-1])
                        file_name_item_dict[node_name] = node
                        try:
                            xvi_item = self.vsp.relative_path_XVI_dict[
                                "/" + node_name]
                            for i in range(len(self.xsd_file_contents)):
                                #if getattr(xvi_item,"type","") == "":xvi_item.type = Type.Origin
                                node.setText(
                                    i + 1,
                                    getattr(xvi_item,
                                            self.xsd_file_contents[i], "None"))
                                if self.xsd_file_contents[i] == "status":

                                    node.setBackground(
                                        i + 1,
                                        QBrush(STATUS_COLOR[xvi_item.status]))
                                if self.xsd_file_contents[i] == "type":
                                    try:
                                        node.setBackground(
                                            i + 1,
                                            QBrush(Type_Color[xvi_item.type]))
                                    except:  # 这个是应对之前没有这个attr的项目,之后可以删除此
                                        node.setBackground(
                                            i + 1,
                                            QBrush(Type_Color[Type.Origin]))
                                if self.xsd_file_contents[i] == "mark_text":
                                    node.setText(
                                        i + 1,
                                        getattr(xvi_item,
                                                self.xsd_file_contents[i],
                                                "None"))
                                    try:
                                        node.setBackground(
                                            i + 1,
                                            QBrush(QColor(
                                                xvi_item.mark_color)))

                                    except:
                                        traceback.print_exc()
                                        node.setBackground(
                                            i + 1,
                                            QBrush(QColor(255, 255, 255)))

                            node.file_path = "/" + node_name  # 这里强行给这个实例增加了属性,之后直接调用,这里相当于继承
                            self.xsd_files_item.append(node)
                        except KeyError:
                            pass
                        except:
                            traceback.print_exc()
                    l.append(node)

                    l[-2].addChild(l[-1])

            def load_column_status():
                try:
                    info = self.vsp.xsd_tree_widget_param["column_status"]
                    for i in range(tw.columnCount()):
                        tw.setColumnWidth(i, info[i])
                except:
                    return

            load_column_status()

            tw.expandAll()
            print(tw.rootIndex())
            return

        except:
            QMessageBox.information(self.main_window, "提示", "No xsd files.")
            traceback.print_exc()
            return