#!/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_file(self, path): oz_string = self.app.open_files[path].bit_editor.input.toPlainText() data = self.app.utils.oz_string_to_bstring(oz_string) file = open(path, "wb") file.write(data) file.close() self.app.open_files[path].bit_editor.not_saved = False def save_current_file(self): current_tab = self.app.gui.main_window.openFileTabs.currentWidget() current_file_path = current_tab.objectName() self.save_file(current_file_path) def close_file(self, path, tab_index): self.app.gui.main_window.openFileTabs.removeTab(tab_index) del self.app.open_files[path] def close_current_file(self): tab_index = self.app.gui.main_window.openFileTabs.currentIndex() 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.save_file(current_file_path) case "cancel": return self.close_file(current_file_path, tab_index) def save_all_files(self): for file_path in self.app.open_files: file = self.app.open_files[file_path] self.save_file(file.path) 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)