""" 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)