mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-10-23 07:04:14 +02:00
36b1cb08ff
A target typed in by hand was split into its fields on " / ", which broke as soon as a field itself contained a slash: an installation named "ASP/01" gave the box two lines with half a name in each, and nothing to tell a separator apart from the name. Only a line break now breaks the text into fields (RealTerminal::cableTarget()), and the Target cell shows the fields the very same way, one line each (modelRealTerminalData::targetText()), so the cell and the box under the cable always read the same text. The Target cell is edited line by line to go with that: it takes a multi line editor where Return writes a new line, Ctrl+Return hands the cell back to the table and Escape throws the text away (TerminalStripModelDelegate), and the rows of the table are as tall as the lines their cell shows, so the fields below the first one are never cut off -- a cell without a target keeps the row it has always had. The text copied to the clipboard keeps one line per row, the fields of such a cell joined with " / " again, or a spreadsheet would take them for several rows. tst_terminalcableauto reads the three fields of a target of the drawing back one line each, checks a "/" typed inside a field stays part of it -- one line holding it, slashes and all -- checks the editor of the cell is the multi line one, hands its text back untouched, gives the cell back on Ctrl+Return while Return keeps writing a new line, and checks the rows grow with the lines the cell holds and shrink back afterwards. tst_cabletarget paints a strip whose cable ends on a field containing a slash: the box is no deeper than with one plain field.
124 lines
4.3 KiB
C
124 lines
4.3 KiB
C
/*
|
|
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 <http://www.gnu.org/licenses/>.
|
|
*/
|
|
#ifndef MODELTERMINALDATA_H
|
|
#define MODELTERMINALDATA_H
|
|
|
|
#include <QColor>
|
|
#include <QString>
|
|
#include <QStringList>
|
|
#include "../../qetgraphicsitem/element.h"
|
|
#include "../realterminal.h"
|
|
|
|
struct modelRealTerminalData
|
|
{
|
|
///The Installation, Location and Label (BMK) of the piece the cable
|
|
///lands on, one line by field : what the strip draws in the box
|
|
///under its cable (RealTerminal::cableTarget) and what the Target
|
|
///cell shows, both read line by line. A "/" written inside a field
|
|
///is part of that field, never a separator.
|
|
///A target typed in by hand is kept as it was written, and nothing
|
|
///is shown when the cable lands on nothing worth naming and no text
|
|
///was ever written in.
|
|
static QString targetText(const QVector<QString> &target_)
|
|
{
|
|
QStringList fields_;
|
|
for (const QString &field_ : target_)
|
|
{
|
|
if (!field_.isEmpty()) {
|
|
fields_ << field_;
|
|
}
|
|
}
|
|
return fields_.join(QLatin1Char('\n'));
|
|
}
|
|
|
|
static modelRealTerminalData data(const QSharedPointer<RealTerminal> &real_t)
|
|
{
|
|
modelRealTerminalData mrtd;
|
|
if (!real_t.isNull())
|
|
{
|
|
mrtd.level_ = real_t->level();
|
|
mrtd.label_ = real_t->label();
|
|
mrtd.Xref_ = real_t->Xref();
|
|
mrtd.cable_ = real_t->cable();
|
|
mrtd.cable_wire = real_t->cableWire();
|
|
mrtd.cable_target_ = targetText(real_t->cableTarget());
|
|
mrtd.cable_target_auto_ = real_t->cableTargetIsAutomatic();
|
|
mrtd.cable_auto_ = real_t->cableIsAutomatic();
|
|
mrtd.conductor_ = real_t->conductor();
|
|
mrtd.led_ = real_t->isLed();
|
|
mrtd.shield_ = real_t->isShield();
|
|
mrtd.separator_ = real_t->hasSeparatorAfter();
|
|
mrtd.color_ = real_t->color();
|
|
mrtd.stripe_color_ = real_t->stripeColor();
|
|
mrtd.section_ = real_t->section();
|
|
mrtd.width_mm_ = real_t->widthMm();
|
|
mrtd.catalog_entry_ = real_t->catalogEntry();
|
|
mrtd.type_ = real_t->type();
|
|
mrtd.function_ = real_t->function();
|
|
mrtd.element_ = real_t->element();
|
|
mrtd.real_terminal = real_t.toWeakRef();
|
|
mrtd.bridged_ = real_t->isBridged();
|
|
mrtd.spare_ = real_t->isSpare();
|
|
}
|
|
|
|
return mrtd;
|
|
}
|
|
|
|
int level_ = -1;
|
|
QString label_;
|
|
QString Xref_;
|
|
QString cable_;
|
|
QString cable_wire;
|
|
//Where the cable lands, past this strip : Installation / Location / Label
|
|
QString cable_target_;
|
|
//True when cable_target_ comes from the project (read only),
|
|
//false when it is empty or was typed in by hand (editable)
|
|
bool cable_target_auto_ = false;
|
|
bool cable_auto_ = false; //True when cable_ and cable_wire come from the cables of the project
|
|
QString conductor_;
|
|
bool led_ = false;
|
|
bool shield_ = false;
|
|
bool separator_ = false; //A separator plate is mounted after the terminal
|
|
QColor color_; //Invalid = no color set by the user
|
|
QColor stripe_color_; //Second color of a two-tone color, invalid if plain
|
|
qreal section_ = 0; //In mm2, 0 = no section set by the user
|
|
qreal width_mm_ = 0; //In mm, 0 = no width set by the user
|
|
QString catalog_entry_; //Terminal chosen in the catalog, empty if the width was typed
|
|
bool bridged_ = false;
|
|
bool spare_ = false; //Spare terminal, on no folio (RealTerminal::isSpare())
|
|
|
|
ElementData::TerminalType type_ = ElementData::TerminalType::TTGeneric;
|
|
ElementData::TerminalFunction function_ = ElementData::TerminalFunction::TFGeneric;
|
|
QPointer<Element> element_;
|
|
|
|
QWeakPointer<RealTerminal> real_terminal;
|
|
};
|
|
|
|
struct modelPhysicalTerminalData
|
|
{
|
|
QVector<modelRealTerminalData> real_data;
|
|
int pos_ = -1;
|
|
QUuid uuid_;
|
|
};
|
|
|
|
inline bool operator == (const modelPhysicalTerminalData &data_1, const modelPhysicalTerminalData &data_2) {
|
|
return data_1.uuid_ == data_2.uuid_;
|
|
}
|
|
|
|
#endif // MODELTERMINALDATA_H
|