| # SPDX-License-Identifier: LGPL-2.1-or-later | |
| # *************************************************************************** | |
| # * * | |
| # * Copyright (c) 2025 Samuel Abels <knipknap@gmail.com> * | |
| # * * | |
| # * This file is part of FreeCAD. * | |
| # * * | |
| # * FreeCAD is free software: you can redistribute it and/or modify it * | |
| # * under the terms of the GNU Lesser General Public License as * | |
| # * published by the Free Software Foundation, either version 2.1 of the * | |
| # * License, or (at your option) any later version. * | |
| # * * | |
| # * FreeCAD is distributed in the hope that it will be useful, but * | |
| # * WITHOUT ANY WARRANTY; without even the implied warranty of * | |
| # * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * | |
| # * Lesser General Public License for more details. * | |
| # * * | |
| # * You should have received a copy of the GNU Lesser General Public * | |
| # * License along with FreeCAD. If not, see * | |
| # * <https://www.gnu.org/licenses/>. * | |
| # * * | |
| # *************************************************************************** | |
| from PySide import QtWidgets | |
| import FreeCADGui | |
| import FreeCAD | |
| from ..models.library import Library | |
| class LibraryPropertyDialog(QtWidgets.QDialog): | |
| def __init__(self, library: Library, new=False, parent=None): | |
| super(LibraryPropertyDialog, self).__init__(parent) | |
| self.library = library | |
| # Load the UI file into a QWidget | |
| self.form = FreeCADGui.PySideUic.loadUi(":/panels/LibraryProperties.ui") | |
| # Create a layout for the dialog and add the loaded form widget | |
| layout = QtWidgets.QVBoxLayout(self) | |
| layout.addWidget(self.form) | |
| self.setLayout(layout) | |
| # Connect signals and set initial values using the loaded form | |
| self.form.lineEditLibraryName.setText(self.library.label) | |
| self.update_window_title() | |
| self.form.buttonBox.accepted.connect(self.save_properties) | |
| self.form.buttonBox.rejected.connect(self.reject) | |
| # Connect text changed signal to update window title | |
| self.form.lineEditLibraryName.textChanged.connect(self.update_window_title) | |
| # Make the OK button the default so Enter key works | |
| ok_button = self.form.buttonBox.button(QtWidgets.QDialogButtonBox.Ok) | |
| cancel_button = self.form.buttonBox.button(QtWidgets.QDialogButtonBox.Cancel) | |
| if cancel_button: | |
| cancel_button.setDefault(False) | |
| cancel_button.setAutoDefault(False) | |
| if ok_button: | |
| ok_button.setDefault(True) | |
| ok_button.setAutoDefault(True) | |
| ok_button.setFocus() # Also set focus to the OK button | |
| # Set minimum width for the dialog | |
| self.setMinimumWidth(450) | |
| # Set focus to the text input so user can start typing immediately | |
| self.form.lineEditLibraryName.setFocus() | |
| self.form.lineEditLibraryName.selectAll() # Select all text for easy replacement | |
| def update_window_title(self): | |
| # Update title based on current text in the line edit | |
| current_name = self.form.lineEditLibraryName.text() | |
| title = FreeCAD.Qt.translate( | |
| "LibraryPropertyDialog", f"Library Properties - {current_name or self.library.label}" | |
| ) | |
| self.setWindowTitle(title) | |
| def save_properties(self): | |
| new_name = self.form.lineEditLibraryName.text() | |
| if new_name != self.library.label: | |
| self.library._label = new_name | |
| # Additional logic to save other properties if added later | |
| self.accept() | |