/*
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();
}