#!/usr/bin/python3 from PyQt6.QtWidgets import QFileDialog from editor import BitEditor class FileActions: def __init__(self, app): self.app = app def open_files(self): dialog = QFileDialog(self.app.gui.QTMainWindow) dialog.setDirectory(self.app.utils.home_path) dialog.setFileMode(QFileDialog.FileMode.ExistingFiles) dialog.setNameFilters(["Binary (*.bin)", "Any (*)"]) dialog.setViewMode(QFileDialog.ViewMode.List) if dialog.exec(): for file_path in dialog.selectedFiles(): if not file_path in self.app.open_files: # dont open file twice self.app.open_files[file_path] = File(self.app, file_path, file_path.split("/")[-1]) def save_current_file(self): current_tab = self.app.gui.main_window.openFileTabs.currentWidget() current_file_path = current_tab.objectName() self.app.open_files[current_file_path].save() def close_current_file(self): current_file_path = self.app.gui.main_window.openFileTabs.currentWidget().objectName() if self.app.open_files[current_file_path].bit_editor.not_saved: save_or_not = self.app.utils.unsaved_changes_popup() match save_or_not: case "save": self.app.open_files[current_file_path].save() case "cancel": return self.app.open_files[current_file_path].close() def save_all_files(self): for file_path in self.app.open_files: self.app.open_files[file_path].save() class File: def __init__(self, app, path, name): self.app = app self.path = path self.name = name file = open(path, "rb") file_content = file.read() file.close() self.content = file_content self.bit_editor = BitEditor(self.app, self) def close(self): self.app.gui.main_window.openFileTabs.removeTab(self.bit_editor.tab_index) del self.app.open_files[self.path] def save(self): oz_string = self.app.open_files[self.path].bit_editor.input.toPlainText() data = self.app.utils.oz_string_to_bstring(oz_string) file = open(self.path, "wb") file.write(data) file.close() self.app.open_files[self.path].bit_editor.not_saved = False