Fixed some small stuff
This commit is contained in:
1
BEdit/.gitignore
vendored
1
BEdit/.gitignore
vendored
@@ -8,3 +8,4 @@ dist/
|
||||
.idea/
|
||||
.vscode/*
|
||||
!.vscode/tasks.json
|
||||
.ruff_cache
|
||||
@@ -169,7 +169,8 @@ never own a graph. Vector icons can contain rectangles, circles, ellipses,
|
||||
lines, triangles, and text. Each element owns its geometry, fill, stroke, and
|
||||
line style; ports keep their icon anchor in `properties.iconPosition`. The
|
||||
port type registry controls which types may connect (currently `signal` only).
|
||||
Graph and icon grid sizes are configured independently in Settings. The
|
||||
The workspace grid size, its finer snapping size, and the icon grid size are
|
||||
configured independently in Settings. The
|
||||
recursive model is under `src/bedit/document/`, library loading
|
||||
and the live Current Document tree are under `src/bedit/library/`, and graphics
|
||||
are isolated under `src/bedit/workspace/`.
|
||||
|
||||
@@ -39,11 +39,11 @@ def apply_light_theme(app: QApplication) -> None:
|
||||
|
||||
|
||||
def main() -> int:
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationName("BEdit")
|
||||
app.setApplicationDisplayName("BEdit")
|
||||
app.setOrganizationName("BEdit")
|
||||
QCoreApplication.setApplicationName("BEdit")
|
||||
QCoreApplication.setOrganizationName("BEdit")
|
||||
QCoreApplication.setApplicationVersion("0.1.0")
|
||||
app = QApplication(sys.argv)
|
||||
app.setApplicationDisplayName("BEdit")
|
||||
|
||||
apply_light_theme(app)
|
||||
window = MainWindow()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
from copy import deepcopy
|
||||
|
||||
from PySide6.QtCore import QPointF, QRectF, QSettings, Qt
|
||||
from PySide6.QtCore import QPointF, QRectF, Qt
|
||||
from PySide6.QtGui import QColor, QPainter, QPen, QPolygonF
|
||||
from PySide6.QtWidgets import (
|
||||
QColorDialog,
|
||||
@@ -29,10 +29,11 @@ from PySide6.QtWidgets import (
|
||||
|
||||
from bedit.document.model import Component, Icon, Port
|
||||
from bedit.icon_renderer import _pen
|
||||
from bedit.preferences import application_settings
|
||||
|
||||
|
||||
def _icon_grid_size() -> int:
|
||||
return QSettings().value("grid/iconSize", 8, type=int)
|
||||
return application_settings().value("grid/iconSize", 8, type=int)
|
||||
|
||||
|
||||
def _snap(value: float) -> float:
|
||||
|
||||
@@ -2,7 +2,7 @@ import json
|
||||
from copy import deepcopy
|
||||
from pathlib import Path
|
||||
|
||||
from PySide6.QtCore import QSettings, QSize, Qt, Slot
|
||||
from PySide6.QtCore import QSize, Qt, Slot
|
||||
from PySide6.QtGui import QAction, QCloseEvent
|
||||
from PySide6.QtWidgets import QFileDialog, QMainWindow, QMenu, QMessageBox, QToolBar
|
||||
|
||||
@@ -21,6 +21,7 @@ from bedit.library.tree_model import (
|
||||
)
|
||||
from bedit.settings_dialog import SettingsDialog
|
||||
from bedit.port_options_dialog import PortOptionsDialog
|
||||
from bedit.preferences import application_settings
|
||||
from bedit.ui_main_window import Ui_MainWindow
|
||||
|
||||
|
||||
@@ -36,7 +37,7 @@ class MainWindow(QMainWindow):
|
||||
"background: transparent; color: #202020;"
|
||||
)
|
||||
self._create_camera_toolbar()
|
||||
self.settings = QSettings()
|
||||
self.settings = application_settings()
|
||||
|
||||
self.libraries = LibraryRepository(self)
|
||||
self.document_controller = DocumentController(self)
|
||||
|
||||
6
BEdit/src/bedit/preferences.py
Normal file
6
BEdit/src/bedit/preferences.py
Normal file
@@ -0,0 +1,6 @@
|
||||
from PySide6.QtCore import QSettings
|
||||
|
||||
|
||||
def application_settings() -> QSettings:
|
||||
"""Return BEdit's explicit, disk-backed settings store."""
|
||||
return QSettings("BEdit", "BEdit")
|
||||
@@ -4,6 +4,7 @@ from PySide6.QtCore import QSettings, Signal
|
||||
from PySide6.QtWidgets import QDialog, QFileDialog, QFormLayout, QGroupBox, QSpinBox
|
||||
|
||||
from bedit.library.repository import default_library_paths
|
||||
from bedit.preferences import application_settings
|
||||
from bedit.ui_settings_dialog import Ui_SettingsDialog
|
||||
|
||||
|
||||
@@ -19,15 +20,20 @@ class SettingsDialog(QDialog):
|
||||
self.grid_group = QGroupBox("Editor grids", self.ui.generalTab)
|
||||
grid_form = QFormLayout(self.grid_group)
|
||||
self.graph_grid_spin = QSpinBox()
|
||||
self.graph_grid_spin.setRange(2, 256)
|
||||
self.graph_grid_spin.setRange(8, 512)
|
||||
self.graph_grid_spin.setSuffix(" units")
|
||||
self.graph_snap_spin = QSpinBox()
|
||||
self.graph_snap_spin.setRange(1, 128)
|
||||
self.graph_snap_spin.setSuffix(" units")
|
||||
self.graph_grid_spin.valueChanged.connect(self.graph_snap_spin.setMaximum)
|
||||
self.icon_grid_spin = QSpinBox()
|
||||
self.icon_grid_spin.setRange(1, 64)
|
||||
self.icon_grid_spin.setSuffix(" units")
|
||||
grid_form.addRow("Graph grid size:", self.graph_grid_spin)
|
||||
grid_form.addRow("Workspace grid size:", self.graph_grid_spin)
|
||||
grid_form.addRow("Workspace snapping size:", self.graph_snap_spin)
|
||||
grid_form.addRow("Icon grid size:", self.icon_grid_spin)
|
||||
self.ui.generalLayout.insertWidget(1, self.grid_group)
|
||||
self.settings = QSettings()
|
||||
self.settings = application_settings()
|
||||
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)
|
||||
@@ -35,21 +41,32 @@ class SettingsDialog(QDialog):
|
||||
self._load_settings()
|
||||
|
||||
def _load_settings(self) -> None:
|
||||
enabled = self.settings.value("autosave/enabled", None)
|
||||
if enabled is None:
|
||||
enabled = self.settings.value("General/autosaveEnabled", False)
|
||||
interval = self.settings.value("autosave/intervalMinutes", None)
|
||||
if interval is None:
|
||||
interval = self.settings.value("General/autosaveInterval", 5)
|
||||
self.ui.autosaveGroupBox.setChecked(
|
||||
self.settings.value("general/autosaveEnabled", False, type=bool)
|
||||
)
|
||||
self.ui.autosaveIntervalSpinBox.setValue(
|
||||
self.settings.value("general/autosaveInterval", 5, type=int)
|
||||
self._as_bool(enabled)
|
||||
)
|
||||
self.ui.autosaveIntervalSpinBox.setValue(int(interval))
|
||||
self.ui.libraryPathsList.clear()
|
||||
self.ui.libraryPathsList.addItems(self.library_paths(self.settings))
|
||||
self.graph_grid_spin.setValue(self.graph_grid_size(self.settings))
|
||||
self.graph_snap_spin.setValue(self.graph_snap_size(self.settings))
|
||||
self.icon_grid_spin.setValue(self.icon_grid_size(self.settings))
|
||||
self._update_remove_button()
|
||||
|
||||
@staticmethod
|
||||
def _as_bool(value) -> bool:
|
||||
if isinstance(value, str):
|
||||
return value.strip().lower() in {"1", "true", "yes", "on"}
|
||||
return bool(value)
|
||||
|
||||
@staticmethod
|
||||
def library_paths(settings: QSettings | None = None) -> list[str]:
|
||||
settings = settings or QSettings()
|
||||
settings = settings if settings is not None else application_settings()
|
||||
value = settings.value("libraries/paths", default_library_paths())
|
||||
if isinstance(value, str):
|
||||
return [value]
|
||||
@@ -57,11 +74,18 @@ class SettingsDialog(QDialog):
|
||||
|
||||
@staticmethod
|
||||
def graph_grid_size(settings: QSettings | None = None) -> int:
|
||||
return (settings or QSettings()).value("grid/graphSize", 32, type=int)
|
||||
settings = settings if settings is not None else application_settings()
|
||||
return settings.value("grid/graphSize", 64, type=int)
|
||||
|
||||
@staticmethod
|
||||
def graph_snap_size(settings: QSettings | None = None) -> int:
|
||||
settings = settings if settings is not None else application_settings()
|
||||
return settings.value("grid/graphSnapSize", 8, type=int)
|
||||
|
||||
@staticmethod
|
||||
def icon_grid_size(settings: QSettings | None = None) -> int:
|
||||
return (settings or QSettings()).value("grid/iconSize", 8, type=int)
|
||||
settings = settings if settings is not None else application_settings()
|
||||
return settings.value("grid/iconSize", 8, type=int)
|
||||
|
||||
def _add_library_file(self) -> None:
|
||||
path, _ = QFileDialog.getOpenFileName(
|
||||
@@ -95,16 +119,19 @@ class SettingsDialog(QDialog):
|
||||
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("autosave/enabled", self.ui.autosaveGroupBox.isChecked())
|
||||
self.settings.setValue(
|
||||
"general/autosaveInterval", self.ui.autosaveIntervalSpinBox.value()
|
||||
"autosave/intervalMinutes", self.ui.autosaveIntervalSpinBox.value()
|
||||
)
|
||||
self.settings.remove("General/autosaveEnabled")
|
||||
self.settings.remove("General/autosaveInterval")
|
||||
paths = [
|
||||
self.ui.libraryPathsList.item(row).text()
|
||||
for row in range(self.ui.libraryPathsList.count())
|
||||
]
|
||||
self.settings.setValue("libraries/paths", paths)
|
||||
self.settings.setValue("grid/graphSize", self.graph_grid_spin.value())
|
||||
self.settings.setValue("grid/graphSnapSize", self.graph_snap_spin.value())
|
||||
self.settings.setValue("grid/iconSize", self.icon_grid_spin.value())
|
||||
self.settings.sync()
|
||||
self.settingsChanged.emit()
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
import json
|
||||
|
||||
from PySide6.QtCore import QMimeData, QPointF, QRectF, QSettings, Qt, Signal
|
||||
from PySide6.QtCore import QMimeData, QPointF, QRectF, Qt, Signal
|
||||
from PySide6.QtGui import (
|
||||
QColor,
|
||||
QDragEnterEvent,
|
||||
@@ -32,17 +32,22 @@ from bedit.document.controller import DocumentController
|
||||
from bedit.document.model import Component, Connection, Endpoint, Port
|
||||
from bedit.library.tree_model import COMPONENT_MIME_TYPE
|
||||
from bedit.icon_renderer import icon_bounds, paint_icon
|
||||
from bedit.preferences import application_settings
|
||||
|
||||
|
||||
SELECTION_MIME_TYPE = "application/x-bedit-selection"
|
||||
|
||||
|
||||
def _graph_snap_size() -> int:
|
||||
return application_settings().value("grid/graphSnapSize", 8, type=int)
|
||||
|
||||
|
||||
def _graph_grid_size() -> int:
|
||||
return QSettings().value("grid/graphSize", 32, type=int)
|
||||
return application_settings().value("grid/graphSize", 64, type=int)
|
||||
|
||||
|
||||
def _snapped(position: QPointF) -> QPointF:
|
||||
grid = _graph_grid_size()
|
||||
grid = _graph_snap_size()
|
||||
return QPointF(round(position.x() / grid) * grid, round(position.y() / grid) * grid)
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user