/*
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 "scaleelementdialog.h"
#include "../symbolscale.h"
#include
#include
#include
#include
#include
#include
#include
#include
/**
@brief ScaleElementDialog::ScaleElementDialog
@param terminals : positions of the element's terminals, in scene
coordinates (relative to the hotspot)
@param parent
*/
ScaleElementDialog::ScaleElementDialog(const QList &terminals, QWidget *parent) :
QDialog(parent)
{
setWindowTitle(tr("Mettre l'élément à l'échelle"));
auto layout = new QVBoxLayout(this);
auto form = new QFormLayout();
layout->addLayout(form);
m_factor = new QComboBox(this);
const auto factors = SymbolScale::safeFactors(terminals);
for (const qreal f : factors) {
m_factor->addItem(QStringLiteral("× %1").arg(QLocale().toString(f)), f);
}
const int two = m_factor->findData(2.0);
if (two >= 0) {
m_factor->setCurrentIndex(two);
}
form->addRow(tr("Facteur :"), m_factor);
m_scale_text = new QCheckBox(tr("Mettre aussi les textes à l'échelle"), this);
m_scale_text->setChecked(true);
form->addRow(m_scale_text);
QString explanation;
const int off_grid = SymbolScale::offGridCount(terminals);
if (off_grid && factors.isEmpty()) {
explanation = tr("%n borne(s) de cet élément ne sont pas sur la grille, "
"et aucun facteur ne les y amène.", "", off_grid);
} else if (off_grid) {
explanation = tr("%n borne(s) de cet élément ne sont pas sur la grille. "
"Seuls les facteurs qui les y amènent sont proposés.", "", off_grid);
} else {
explanation = tr("Seuls les facteurs qui gardent les bornes sur la grille "
"sont proposés. L'élément est mis à l'échelle autour de son point de saisie.");
}
auto label = new QLabel(explanation, this);
label->setWordWrap(true);
layout->addWidget(label);
auto buttons = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, this);
buttons->button(QDialogButtonBox::Ok)->setEnabled(!factors.isEmpty());
connect(buttons, &QDialogButtonBox::accepted, this, &QDialog::accept);
connect(buttons, &QDialogButtonBox::rejected, this, &QDialog::reject);
layout->addWidget(buttons);
m_factor->setEnabled(!factors.isEmpty());
m_scale_text->setEnabled(!factors.isEmpty());
}
/**
@return the chosen factor, or 1 if none could be offered
*/
qreal ScaleElementDialog::factor() const
{
return m_factor->count() ? m_factor->currentData().toReal() : 1.0;
}
bool ScaleElementDialog::scaleText() const
{
return m_scale_text->isChecked();
}