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))
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()
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
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)
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
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
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
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