Files
aza/APP/logo-tool/ui/toolbar.py

106 lines
3.3 KiB
Python
Raw Normal View History

2026-03-30 07:59:11 +02:00
"""
Toolbar am oberen Rand: Datei-Aktionen, Zoom-Kontrolle, Ansichtsoptionen.
"""
from __future__ import annotations
from PySide6.QtWidgets import (
QToolBar, QLabel, QSlider, QPushButton, QWidget, QHBoxLayout,
QCheckBox,
)
from PySide6.QtCore import Signal, Qt
class MainToolbar(QToolBar):
open_file_requested = Signal()
save_file_requested = Signal()
zoom_to_fit_requested = Signal()
zoom_value_changed = Signal(float)
show_original_toggled = Signal(bool)
show_vectors_toggled = Signal(bool)
def __init__(self, parent=None):
super().__init__("Hauptwerkzeugleiste", parent)
self.setMovable(False)
self.setStyleSheet("""
QToolBar {
background: #1e1e1e;
border-bottom: 1px solid #333;
padding: 4px 8px;
spacing: 8px;
}
""")
self._build()
def _build(self):
btn_style = """
QPushButton {
background: #3c3c3c; color: #ddd; border: 1px solid #555;
border-radius: 3px; padding: 5px 12px; font-size: 12px;
}
QPushButton:hover { background: #505050; }
"""
# Datei öffnen
self.btn_open = QPushButton("PNG laden")
self.btn_open.setStyleSheet(btn_style)
self.btn_open.clicked.connect(self.open_file_requested.emit)
self.addWidget(self.btn_open)
# Speichern
self.btn_save = QPushButton("Speichern")
self.btn_save.setStyleSheet(btn_style)
self.btn_save.clicked.connect(self.save_file_requested.emit)
self.addWidget(self.btn_save)
self.addSeparator()
# Zoom
zoom_widget = QWidget()
zl = QHBoxLayout(zoom_widget)
zl.setContentsMargins(4, 0, 4, 0)
zl.setSpacing(6)
zl.addWidget(QLabel("Zoom:"))
self.zoom_slider = QSlider(Qt.Orientation.Horizontal)
self.zoom_slider.setRange(10, 3200)
self.zoom_slider.setValue(100)
self.zoom_slider.setFixedWidth(150)
self.zoom_slider.valueChanged.connect(
lambda v: self.zoom_value_changed.emit(v / 100.0)
)
zl.addWidget(self.zoom_slider)
self.zoom_label = QLabel("100%")
self.zoom_label.setFixedWidth(50)
zl.addWidget(self.zoom_label)
self.btn_fit = QPushButton("Einpassen")
self.btn_fit.setStyleSheet(btn_style)
self.btn_fit.clicked.connect(self.zoom_to_fit_requested.emit)
zl.addWidget(self.btn_fit)
self.addWidget(zoom_widget)
self.addSeparator()
# Ansichts-Toggles
self.chk_original = QCheckBox("Original")
self.chk_original.setChecked(True)
self.chk_original.setStyleSheet("color: #ccc;")
self.chk_original.toggled.connect(self.show_original_toggled.emit)
self.addWidget(self.chk_original)
self.chk_vectors = QCheckBox("Vektoren")
self.chk_vectors.setChecked(True)
self.chk_vectors.setStyleSheet("color: #ccc;")
self.chk_vectors.toggled.connect(self.show_vectors_toggled.emit)
self.addWidget(self.chk_vectors)
def update_zoom_display(self, zoom: float):
pct = int(zoom * 100)
self.zoom_label.setText(f"{pct}%")
self.zoom_slider.blockSignals(True)
self.zoom_slider.setValue(pct)
self.zoom_slider.blockSignals(False)