mirror of
https://github.com/qelectrotech/qelectrotech-source-mirror.git
synced 2026-08-13 10:04:13 +02:00
29ba7c9636
Drawing tools on the diagram canvas always started new shapes and free text from a fixed hardcoded default (Qt's plain QPen()/QBrush(), and the static Preferences font) -- changing a shape's color or a text's font had zero effect on what the next new item of that type got, even within the same editing session. Add LastUsedStyle: a small in-memory, session-scoped static helper (no QSettings, no persistence across restarts -- this is a live "what did I just use" value, not a new app-wide default). Write side hooks capture the value right where the properties editors already apply a change (ShapeGraphicsItemPropertiesWidget::associatedUndo(), both the live-edit dock path and the modal editProperty() dialog path; and IndiTextPropertiesWidget::on_m_font_pb_clicked() right after the font dialog returns). Read side hooks apply the stored value, if any, to a newly created item: DiagramEventAddShape::mousePressEvent for shapes, IndependentTextItem's constructor for free text (falling back to the existing QETApp::indiTextsItemFont() Preferences default otherwise). Doesn't touch the element/symbol editor's own drawing tools (a separate subsystem) or add last-used text color (no color control exists in the text properties UI to originate it from yet).
100 lines
3.1 KiB
C++
100 lines
3.1 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/>.
|
|
*/
|
|
#include "independenttextitem.h"
|
|
|
|
#include "../diagram.h"
|
|
#include "../diagramcommands.h"
|
|
#include "../lastusedstyle.h"
|
|
#include "../qet.h"
|
|
#include "../qetapp.h"
|
|
#include "../utils/qetutils.h"
|
|
|
|
#include <QDomElement>
|
|
#include <QSettings>
|
|
|
|
/**
|
|
Constructeur
|
|
@param parent_diagram Le schema auquel est rattache le champ de texte
|
|
*/
|
|
IndependentTextItem::IndependentTextItem() :
|
|
DiagramTextItem(nullptr)
|
|
{
|
|
//Start from the font last applied to a text item this session,
|
|
//falling back to the app-wide Preferences default otherwise.
|
|
setFont(LastUsedStyle::hasTextFont() ? LastUsedStyle::textFont()
|
|
: QETApp::indiTextsItemFont());
|
|
QSettings settings;
|
|
setRotation(settings.value("diagrameditor/independent_text_rotation", 0).toInt());
|
|
}
|
|
|
|
/**
|
|
@brief IndependentTextItem::IndependentTextItem
|
|
Constructeur
|
|
@param text Le texte affiche par le champ de texte
|
|
*/
|
|
IndependentTextItem::IndependentTextItem(const QString &text) :
|
|
DiagramTextItem(text, nullptr)
|
|
{}
|
|
|
|
/// Destructeur
|
|
IndependentTextItem::~IndependentTextItem()
|
|
{
|
|
}
|
|
|
|
/**
|
|
Permet de lire le texte a mettre dans le champ a partir d'un element XML.
|
|
Cette methode se base sur la position du champ pour assigner ou non la
|
|
valeur a ce champ.
|
|
@param e L'element XML representant le champ de texte
|
|
*/
|
|
void IndependentTextItem::fromXml(const QDomElement &e) {
|
|
setPos(e.attribute("x").toDouble(), e.attribute("y").toDouble());
|
|
setHtml(e.attribute("text"));
|
|
setRotation(e.attribute("rotation").toDouble());
|
|
if (e.hasAttribute("font"))
|
|
{
|
|
QFont font;
|
|
QETUtils::fontFromString(font, e.attribute("font"));
|
|
setFont(font);
|
|
}
|
|
}
|
|
|
|
/**
|
|
@param document Le document XML a utiliser
|
|
@return L'element XML representant ce champ de texte
|
|
*/
|
|
QDomElement IndependentTextItem::toXml(QDomDocument &document) const
|
|
{
|
|
QDomElement result = document.createElement("input");
|
|
result.setAttribute("x", QString("%1").arg(pos().x()));
|
|
result.setAttribute("y", QString("%1").arg(pos().y()));
|
|
result.setAttribute("text", toHtml());
|
|
result.setAttribute("rotation", QString::number(QET::correctAngle(rotation())));
|
|
result.setAttribute("font", QETUtils::fontToString(font()));
|
|
|
|
return(result);
|
|
}
|
|
|
|
void IndependentTextItem::focusOutEvent(QFocusEvent *event)
|
|
{
|
|
DiagramTextItem::focusOutEvent(event);
|
|
if (diagram() && (m_previous_html_text != this->toHtml())) {
|
|
diagram()->undoStack().push(new ChangeDiagramTextCommand(this, m_previous_html_text, this->toHtml()));
|
|
}
|
|
}
|