/* Copyright 2006-2026 The QElectroTech Team This file is part of QElectroTech. QElectroTech is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 2 of the License, or (at your option) any later version. QElectroTech 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 General Public License for more details. You should have received a copy of the GNU General Public License along with QElectroTech. If not, see . */ #include "pastenumberingimport.h" #include "../../diagram.h" #include "../../diagramcommands.h" #include "../../qetmessagebox.h" #include "../../qetproject.h" #include /// @return the numberings a copy carries, which pasted elements follow QList PasteNumberingImport::copiedBy(const QDomDocument &clipboard) { return ElementAutoNumSchemeCommand::copiedSchemes(clipboard.documentElement()); } /** @brief PasteNumberingImport::push Push the paste of @p content on the undo stack of @p diagram, after asking whether to import the numberings of @p copied which the pasted elements follow and the project does not have. @param parent : parent of the question @param copied : the numberings the copy carries */ void PasteNumberingImport::push(QWidget *parent, Diagram *diagram, const DiagramContent &content, const QList &copied) { QETProject *project = diagram->project(); auto *paste = new PasteDiagramCommand(diagram, content); QList missing; if (project && !copied.isEmpty() && QSettings().value("diagramcommands/autonumber-pasted-elements", true).toBool()) { missing = ElementAutoNumSchemeCommand::missingForPaste(project, copied, content.m_elements); } if (missing.isEmpty()) { diagram->undoStack().push(paste); return; } QStringList names; for (const auto &scheme : std::as_const(missing)) { names << QStringLiteral("« %1 »").arg(scheme.title); } const auto answer = QET::QetMessageBox::question( parent, tr("Numérotation absente de ce projet"), tr("Les éléments collés suivent %n numérotation(s) qui n'existe(nt) pas dans ce projet : %1.\n\n" "Les importer ? Les éléments recevront alors les prochains numéros, à partir de 1. " "Sinon ils seront collés sans numérotation.", "", static_cast(missing.size())) .arg(names.join(QStringLiteral(", "))), QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes); if (answer != QMessageBox::Yes) { diagram->undoStack().push(paste); return; } diagram->undoStack().beginMacro(paste->text()); for (const auto &scheme : std::as_const(missing)) { //Under its own name, or one which is free here QString title = scheme.title; for (int n = 2 ; !project->elementAutoNumNameClash(title).isEmpty() ; ++n) { title = QStringLiteral("%1 (%2)").arg(scheme.title).arg(n); } if (auto *cmd = ElementAutoNumSchemeCommand::create( project, title, ElementAutoNumSchemeCommand::resetForRenumber(scheme.context), scheme.id, false)) { diagram->undoStack().push(cmd); } } diagram->undoStack().push(paste); diagram->undoStack().endMacro(); }