180 lines
6.4 KiB
Python
180 lines
6.4 KiB
Python
import sys
|
||
import os
|
||
import json
|
||
from PyQt5.QtWidgets import QApplication, QMainWindow, QFileDialog, QListWidgetItem, QLabel, QDesktopWidget
|
||
from PyQt5.QtCore import QDir, QFileSystemWatcher
|
||
from startWindow import Ui_startWindow as Ui_StartWindow
|
||
from mainWindow import Ui_MainWindow as Ui_MainWindow2
|
||
|
||
CONFIG_FILE = "catalogs.json"
|
||
|
||
class StartWindow(QMainWindow):
|
||
def __init__(self):
|
||
super().__init__()
|
||
self.ui = Ui_StartWindow()
|
||
self.ui.setupUi(self)
|
||
self.setWindowTitle("Start Window")
|
||
|
||
self.ui.createCatalog.clicked.connect(self.create_catalog)
|
||
self.ui.openCatalog.clicked.connect(self.open_catalog)
|
||
self.ui.startWindowList.itemClicked.connect(self.open_selected_catalog)
|
||
self.window_center()
|
||
|
||
self.load_catalogs()
|
||
|
||
def window_center(self):
|
||
qr = self.frameGeometry()
|
||
cp = QDesktopWidget().availableGeometry().center()
|
||
qr.moveCenter(cp)
|
||
self.move(qr.topLeft())
|
||
|
||
def create_catalog(self):
|
||
folder_path = QFileDialog.getSaveFileName(self, "Create New Catalog", "", "All Files (*);;Directory")[0]
|
||
if folder_path:
|
||
if not os.path.exists(folder_path):
|
||
os.makedirs(folder_path)
|
||
self.update_catalogs(folder_path)
|
||
self.open_main_window("New Catalog", folder_path)
|
||
|
||
def open_catalog(self):
|
||
folder_path = QFileDialog.getExistingDirectory(self, "Select Directory", "")
|
||
if folder_path:
|
||
self.update_catalogs(folder_path)
|
||
self.open_main_window("Existing Catalog", folder_path)
|
||
|
||
def open_main_window(self, catalog_name, folder_path):
|
||
self.main_window = MainWindow(catalog_name, folder_path)
|
||
self.main_window.show()
|
||
self.close()
|
||
|
||
def load_catalogs(self):
|
||
if os.path.exists(CONFIG_FILE):
|
||
with open(CONFIG_FILE, "r") as f:
|
||
catalogs = json.load(f)
|
||
for catalog in catalogs:
|
||
item = QListWidgetItem(catalog)
|
||
self.ui.startWindowList.addItem(item)
|
||
|
||
def update_catalogs(self, folder_path):
|
||
catalogs = []
|
||
if os.path.exists(CONFIG_FILE):
|
||
with open(CONFIG_FILE, "r") as f:
|
||
catalogs = json.load(f)
|
||
if folder_path not in catalogs:
|
||
catalogs.append(folder_path)
|
||
with open(CONFIG_FILE, "w") as f:
|
||
json.dump(catalogs, f)
|
||
|
||
def open_selected_catalog(self, item):
|
||
folder_path = item.text()
|
||
self.open_main_window("Existing Catalog", folder_path)
|
||
|
||
class MainWindow(QMainWindow):
|
||
def __init__(self, catalog_name, folder_path):
|
||
super().__init__()
|
||
self.ui = Ui_MainWindow2()
|
||
self.ui.setupUi(self)
|
||
self.setWindowTitle("Main Window")
|
||
self.showMaximized()
|
||
|
||
self.folder_path = folder_path
|
||
|
||
self.ui.createFile.clicked.connect(self.create_file)
|
||
self.ui.back.clicked.connect(self.back_to_start)
|
||
|
||
self.ui.mainList.itemClicked.connect(self.load_selected_note)
|
||
|
||
if catalog_name == "New Catalog":
|
||
self.create_file()
|
||
self.ui.noteTitleEdit.textChanged.connect(self.save_note_title)
|
||
self.ui.noteEdit.textChanged.connect(self.save_note_content)
|
||
else:
|
||
self.show_default_label()
|
||
|
||
self.show_directory_files()
|
||
|
||
self.file_watcher = QFileSystemWatcher()
|
||
self.file_watcher.addPath(self.folder_path)
|
||
self.file_watcher.directoryChanged.connect(self.show_directory_files)
|
||
|
||
def load_selected_note(self, item):
|
||
note_name = item.text()
|
||
self.default_note_path = os.path.join(self.folder_path, note_name)
|
||
self.load_note_content()
|
||
self.ui.noteTitleEdit.setPlainText(note_name)
|
||
self.ui.noteTitleEdit.show()
|
||
self.ui.noteEdit.show()
|
||
if hasattr(self, 'static_label'):
|
||
self.static_label.hide()
|
||
|
||
def create_file(self):
|
||
base_name = "Без_Имени"
|
||
extension = ".md"
|
||
note_title = base_name + extension
|
||
counter = 1
|
||
while os.path.exists(os.path.join(self.folder_path, note_title)):
|
||
note_title = f"{base_name}_{counter}{extension}"
|
||
counter += 1
|
||
|
||
self.default_note_path = os.path.join(self.folder_path, note_title)
|
||
with open(self.default_note_path, "w") as f:
|
||
f.write("")
|
||
|
||
self.ui.noteTitleEdit.setPlainText(note_title)
|
||
self.ui.noteEdit.setPlainText("")
|
||
self.ui.noteTitleEdit.show()
|
||
self.ui.noteEdit.show()
|
||
if hasattr(self, 'static_label'):
|
||
self.static_label.hide()
|
||
|
||
self.ui.noteTitleEdit.textChanged.connect(self.save_note_title)
|
||
self.ui.noteEdit.textChanged.connect(self.save_note_content)
|
||
|
||
def load_note_content(self):
|
||
if os.path.exists(self.default_note_path):
|
||
with open(self.default_note_path, "r") as f:
|
||
content = f.read()
|
||
self.ui.noteEdit.setPlainText(content)
|
||
|
||
def save_note_content(self):
|
||
content = self.ui.noteEdit.toPlainText()
|
||
with open(self.default_note_path, "w") as f:
|
||
f.write(content)
|
||
|
||
def save_note_title(self):
|
||
new_note_title = self.ui.noteTitleEdit.toPlainText()
|
||
new_note_path = os.path.join(self.folder_path, new_note_title)
|
||
if new_note_path != self.default_note_path:
|
||
if os.path.exists(self.default_note_path):
|
||
os.rename(self.default_note_path, new_note_path)
|
||
self.default_note_path = new_note_path
|
||
|
||
def show_directory_files(self):
|
||
if os.path.exists(self.folder_path):
|
||
self.ui.mainList.clear()
|
||
dir_content = QDir(self.folder_path).entryList(QDir.Files)
|
||
for file_name in dir_content:
|
||
item = QListWidgetItem(file_name)
|
||
self.ui.mainList.addItem(item)
|
||
|
||
def show_default_label(self):
|
||
self.ui.noteTitleEdit.hide()
|
||
self.ui.noteEdit.hide()
|
||
|
||
if not hasattr(self, 'static_label'):
|
||
self.static_label = QLabel("Выберите файл из списка или создайте новый")
|
||
self.ui.verticalLayout.addWidget(self.static_label)
|
||
else:
|
||
self.static_label.show()
|
||
|
||
def back_to_start(self):
|
||
self.start_window = StartWindow()
|
||
self.start_window.show()
|
||
self.close()
|
||
|
||
if __name__ == "__main__":
|
||
app = QApplication(sys.argv)
|
||
start_window = StartWindow()
|
||
start_window.show()
|
||
sys.exit(app.exec_())
|