Basic document handling
This commit is contained in:
@@ -1,17 +1,26 @@
|
||||
from PySide6.QtCore import QSettings
|
||||
from PySide6.QtWidgets import QDialog
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import QSettings, Signal
|
||||
from PySide6.QtWidgets import QDialog, QFileDialog
|
||||
|
||||
from bedit.library.repository import default_library_paths
|
||||
from bedit.ui_settings_dialog import Ui_SettingsDialog
|
||||
|
||||
|
||||
class SettingsDialog(QDialog):
|
||||
"""Edit application preferences defined in the Designer form."""
|
||||
|
||||
settingsChanged = Signal()
|
||||
|
||||
def __init__(self, parent=None) -> None:
|
||||
super().__init__(parent)
|
||||
self.ui = Ui_SettingsDialog()
|
||||
self.ui.setupUi(self)
|
||||
self.settings = QSettings()
|
||||
self.ui.addLibraryFileButton.clicked.connect(self._add_library_file)
|
||||
self.ui.addLibraryFolderButton.clicked.connect(self._add_library_folder)
|
||||
self.ui.removeLibraryPathButton.clicked.connect(self._remove_library_path)
|
||||
self.ui.libraryPathsList.itemSelectionChanged.connect(self._update_remove_button)
|
||||
self._load_settings()
|
||||
|
||||
def _load_settings(self) -> None:
|
||||
@@ -21,10 +30,59 @@ class SettingsDialog(QDialog):
|
||||
self.ui.autosaveIntervalSpinBox.setValue(
|
||||
self.settings.value("general/autosaveInterval", 5, type=int)
|
||||
)
|
||||
self.ui.libraryPathsList.clear()
|
||||
self.ui.libraryPathsList.addItems(self.library_paths(self.settings))
|
||||
self._update_remove_button()
|
||||
|
||||
@staticmethod
|
||||
def library_paths(settings: QSettings | None = None) -> list[str]:
|
||||
settings = settings or QSettings()
|
||||
value = settings.value("libraries/paths", default_library_paths())
|
||||
if isinstance(value, str):
|
||||
return [value]
|
||||
return [str(path) for path in value]
|
||||
|
||||
def _add_library_file(self) -> None:
|
||||
path, _ = QFileDialog.getOpenFileName(
|
||||
self,
|
||||
"Add library",
|
||||
"",
|
||||
"BEdit libraries (*.json);;All files (*)",
|
||||
)
|
||||
if path:
|
||||
self._append_unique_path(path)
|
||||
|
||||
def _add_library_folder(self) -> None:
|
||||
path = QFileDialog.getExistingDirectory(self, "Add library folder")
|
||||
if path:
|
||||
self._append_unique_path(path)
|
||||
|
||||
def _append_unique_path(self, path: str) -> None:
|
||||
normalized = str(Path(path).expanduser().resolve())
|
||||
existing = {
|
||||
self.ui.libraryPathsList.item(row).text()
|
||||
for row in range(self.ui.libraryPathsList.count())
|
||||
}
|
||||
if normalized not in existing:
|
||||
self.ui.libraryPathsList.addItem(normalized)
|
||||
|
||||
def _remove_library_path(self) -> None:
|
||||
for item in self.ui.libraryPathsList.selectedItems():
|
||||
self.ui.libraryPathsList.takeItem(self.ui.libraryPathsList.row(item))
|
||||
|
||||
def _update_remove_button(self) -> None:
|
||||
self.ui.removeLibraryPathButton.setEnabled(bool(self.ui.libraryPathsList.selectedItems()))
|
||||
|
||||
def accept(self) -> None:
|
||||
self.settings.setValue("general/autosaveEnabled", self.ui.autosaveGroupBox.isChecked())
|
||||
self.settings.setValue(
|
||||
"general/autosaveInterval", self.ui.autosaveIntervalSpinBox.value()
|
||||
)
|
||||
paths = [
|
||||
self.ui.libraryPathsList.item(row).text()
|
||||
for row in range(self.ui.libraryPathsList.count())
|
||||
]
|
||||
self.settings.setValue("libraries/paths", paths)
|
||||
self.settings.sync()
|
||||
self.settingsChanged.emit()
|
||||
super().accept()
|
||||
|
||||
Reference in New Issue
Block a user