Exemple #1
0
 def set_path(self):
     """Set file directory."""
     node = self.tree_main.currentItem()
     file_name, ok = QFileDialog.getOpenFileName(self, "Open File",
                                                 self.env,
                                                 SUPPORT_FILE_FORMATS)
     if not ok:
         return
     self.env = QFileInfo(file_name).absolutePath()
     project_path = QDir(_get_root(node).text(1))
     project_path.cdUp()
     node.setText(1, project_path.relativeFilePath(file_name))
Exemple #2
0
    def __accepted(self):
        """Use the file path to export the project."""
        qdir = QDir(_get_name(self.path_edit, ispath=True))
        if self.newfolder_option.isChecked():
            new_folder = self.filename_edit.placeholderText()
            if (not qdir.mkdir(new_folder)) and self.warn_radio.isChecked():
                self.exist_warning(new_folder, folder=True)
                return
            qdir.cd(new_folder)

        try:
            ok = self.do(qdir)
        except PermissionError as error:
            QMessageBox.warning(self, "Permission error", str(error))
        else:
            if ok:
                self.accept()
Exemple #3
0
def getpath(node: QTreeWidgetItem) -> str:
    """Get the path of current node."""
    parent = node.parent()
    file_name = node.text(1)
    if parent:
        return QFileInfo(QDir(
            node_getpath(parent)).filePath(file_name)).absoluteFilePath()
    return file_name
Exemple #4
0
def node_getpath(node: QTreeWidgetItem) -> str:
    """Recursive return the path of the node."""
    path = node.text(1)
    parent = node.parent()
    if parent is None:
        if file_suffix(path) == 'kmol':
            return QFileInfo(path).absolutePath()
        else:
            return path
    return QDir(node_getpath(parent)).filePath(path)
Exemple #5
0
    def do(self, dir_str: QDir) -> Optional[bool]:
        """Output types:

        + Assembly
        + Only wire frame
        """
        file_name = dir_str.filePath(_get_name(self.filename_edit) + '.slvs')
        if isfile(file_name) and self.warn_radio.isChecked():
            self.exist_warning(file_name)
            return

        # Wire frame
        slvs_frame(self.vpoints, self.v_to_slvs, file_name)

        # Open Solvespace by commend line if available.
        cmd = shutil.which("solvespace")
        if cmd:
            Popen([cmd, file_name], stdout=DEVNULL, stderr=DEVNULL)

        if self.frame_radio.isChecked():
            self.accept()
            return

        # Assembly
        vlinks = {}
        for i, vpoint in enumerate(self.vpoints):
            for link in vpoint.links:
                if link in vlinks:
                    vlinks[link].add(i)
                else:
                    vlinks[link] = {i}
        for name, points in vlinks.items():
            if name == 'ground':
                continue
            file_name = dir_str.filePath(name + '.slvs')
            if isfile(file_name) and self.warn_radio.isChecked():
                self.exist_warning(file_name)
                return
            slvs_part([self.vpoints[i] for i in points],
                      self.link_radius.value(), file_name)

        return True
Exemple #6
0
 def add_node(node: QTreeWidgetItem) -> NodeDict:
     code_int = int(node.text(2))
     node_dict: NodeDict = {
         'code': code_int,
         'name': node.text(0),
         'path': node.text(1),
         'sub': [],
     }
     if file_suffix(node.text(1)) not in _SUPPORTED_FILE_SUFFIX:
         my_codes.append(code_int)
     if QFileInfo(QDir(node_getpath(node.parent())).filePath(node.text(1))).isFile():
         # Files do not need to make a copy.
         return node_dict
     for j in range(node.childCount()):
         node_dict['sub'].append(add_node(node.child(j)))
     return node_dict
Exemple #7
0
def save_file(node: QTreeWidgetItem, data: DataDict) -> Tuple[str, bool]:
    """Recursive to all the contents of nodes."""
    text_data = []
    all_saved = data.is_saved(int(node.text(2)))
    for i in range(node.childCount()):
        doc, saved = save_file(node.child(i), data)
        text_data.append(doc)
        all_saved &= saved
    my_content = data[int(node.text(2))].splitlines()
    for i in range(len(my_content)):
        content_text = my_content[i]
        if content_text.endswith("@others"):
            preffix = content_text[:-len("@others")]
            my_content[i] = '\n\n'.join(preffix + t for t in text_data)
    my_content = '\n'.join(my_content)
    path_text = QFileInfo(node.text(1)).fileName()
    if path_text and not all_saved:
        suffix_text = QFileInfo(path_text).suffix()
        if suffix_text == 'kmol':
            # Save project.
            _write_tree(node.text(1), node, data)
        else:
            # File path.
            file_path = QDir(QFileInfo(node_getpath(node)).absolutePath())
            if not file_path.exists():
                file_path.mkpath('.')
                print("Create Folder: {}".format(file_path.absolutePath()))
            file_name = file_path.filePath(path_text)

            if suffix_text in _SUPPORTED_FILE_SUFFIX:
                # Add end new line.
                if my_content and (my_content[-1] != '\n'):
                    my_content += '\n'
                try:
                    with open(file_name, 'w', encoding='utf-8') as f:
                        f.write(my_content)
                except UnicodeError:
                    print(f"Unicode Error in: {file_name}")
                else:
                    print(f"Saved: {file_name}")
            elif suffix_text:
                print(f"Ignore file: {file_name}")

    return my_content, all_saved
Exemple #8
0
    def do(self, dir_str: QDir) -> Optional[bool]:
        """Output types:

        + Boundary
        + Frame
        """
        file_name = dir_str.filePath(_get_name(self.filename_edit) + '.dxf')
        if isfile(file_name) and self.warn_radio.isChecked():
            self.exist_warning(file_name)
            return

        version = self.version_option.currentText().split()[0]

        if self.frame_radio.isChecked():
            # Frame
            dxf_frame(self.vpoints, self.v_to_slvs, version, file_name)
        elif self.assembly_radio.isChecked():
            # Boundary
            dxf_boundary(
                self.vpoints, self.link_radius.value(),
                self.interval_option.value() if
                self.interval_enable.isChecked() else None, version, file_name)

        return True