Merge pull request #780 from manongjohn/allow_passthru_node_renaming

Allow renaming of revamped Pass Through Fx nodes
This commit is contained in:
manongjohn 2021-09-12 13:44:29 -04:00 committed by GitHub
commit 9356aa756a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 169 additions and 5 deletions

View file

@ -609,17 +609,21 @@ class FxPassThroughPainter final : public QObject, public QGraphicsItem {
Q_INTERFACES(QGraphicsItem) Q_INTERFACES(QGraphicsItem)
double m_width, m_height; double m_width, m_height;
QString m_name;
bool m_showName;
FxSchematicPassThroughNode *m_parent; FxSchematicPassThroughNode *m_parent;
public: public:
FxPassThroughPainter(FxSchematicPassThroughNode *parent, double width, FxPassThroughPainter(FxSchematicPassThroughNode *parent, double width,
double height); double height, const QString &name, bool showName);
~FxPassThroughPainter(); ~FxPassThroughPainter();
QRectF boundingRect() const override; QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget = 0) override; QWidget *widget = 0) override;
void setName(const QString &name) { m_name = name; }
void setShowName(bool showName) { m_showName = showName; }
protected: protected:
void contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) override; void contextMenuEvent(QGraphicsSceneContextMenuEvent *cme) override;
@ -632,6 +636,8 @@ protected:
class FxSchematicPassThroughNode final : public FxSchematicNode { class FxSchematicPassThroughNode final : public FxSchematicNode {
Q_OBJECT Q_OBJECT
bool m_showName;
FxPassThroughPainter *m_passThroughPainter; FxPassThroughPainter *m_passThroughPainter;
public: public:
@ -641,9 +647,15 @@ public:
QRectF boundingRect() const override; QRectF boundingRect() const override;
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
QWidget *widget = 0) override; QWidget *widget = 0) override;
bool isOpened() override { return false; }
protected: protected:
void mouseDoubleClickEvent(QGraphicsSceneMouseEvent *me) override;
void mousePressEvent(QGraphicsSceneMouseEvent *me) override; void mousePressEvent(QGraphicsSceneMouseEvent *me) override;
protected slots:
void onNameChanged();
}; };
#endif // FXSCHEMATICNODE_H #endif // FXSCHEMATICNODE_H

View file

@ -2483,6 +2483,7 @@ FxSchematicNormalFxNode::FxSchematicNormalFxNode(FxSchematicScene *scene,
m_linkedNode = 0; m_linkedNode = 0;
//----- //-----
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_renderToggle->setIsActive(m_fx->getAttributes()->isEnabled()); m_renderToggle->setIsActive(m_fx->getAttributes()->isEnabled());
@ -2765,6 +2766,7 @@ FxSchematicZeraryNode::FxSchematicZeraryNode(FxSchematicScene *scene,
m_linkedNode = 0; m_linkedNode = 0;
//--- //---
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_nameItem->hide(); m_nameItem->hide();
@ -3020,6 +3022,7 @@ FxSchematicColumnNode::FxSchematicColumnNode(FxSchematicScene *scene,
m_linkDock = 0; m_linkDock = 0;
//----- //-----
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
int levelType; int levelType;
@ -3308,6 +3311,7 @@ FxSchematicPaletteNode::FxSchematicPaletteNode(FxSchematicScene *scene,
QString paletteName = getPaletteName(); QString paletteName = getPaletteName();
setToolTip(QString("%1 : %2").arg(m_name, paletteName)); setToolTip(QString("%1 : %2").arg(m_name, paletteName));
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
addPort(0, m_outDock->getPort()); addPort(0, m_outDock->getPort());
@ -3504,6 +3508,7 @@ FxGroupNode::FxGroupNode(FxSchematicScene *scene, const QList<TFxP> &groupedFx,
m_linkDock = 0; m_linkDock = 0;
//----- //-----
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_renderToggle->setIsActive(m_fx->getAttributes()->isEnabled()); m_renderToggle->setIsActive(m_fx->getAttributes()->isEnabled());
@ -3737,10 +3742,13 @@ bool FxGroupNode::isCached() const {
//***************************************************** //*****************************************************
FxPassThroughPainter::FxPassThroughPainter(FxSchematicPassThroughNode *parent, FxPassThroughPainter::FxPassThroughPainter(FxSchematicPassThroughNode *parent,
double width, double height) double width, double height,
const QString &name, bool showName)
: QGraphicsItem(parent) : QGraphicsItem(parent)
, m_width(width) , m_width(width)
, m_height(height) , m_height(height)
, m_name(name)
, m_showName(showName)
, m_parent(parent) { , m_parent(parent) {
setFlag(QGraphicsItem::ItemIsMovable, false); setFlag(QGraphicsItem::ItemIsMovable, false);
setFlag(QGraphicsItem::ItemIsSelectable, false); setFlag(QGraphicsItem::ItemIsSelectable, false);
@ -3770,6 +3778,30 @@ void FxPassThroughPainter::paint(QPainter *painter,
painter->setBrush(viewer->getPassThroughColor()); painter->setBrush(viewer->getPassThroughColor());
painter->setPen(Qt::NoPen); painter->setPen(Qt::NoPen);
painter->drawRoundedRect(QRectF(0, 0, m_width, m_height), 5, 5); painter->drawRoundedRect(QRectF(0, 0, m_width, m_height), 5, 5);
if (!m_showName) return;
QFont fnt = painter->font();
int width = QFontMetrics(fnt).width(m_name) + 1;
QRectF nameArea(0, 0, width, 14);
if (m_parent->isNormalIconView()) {
nameArea.adjust(-(width / 2) + 6, -51, 0, 0);
} else {
nameArea = QRect(4, 2, 78, 22);
fnt.setPixelSize(fnt.pixelSize() * 2);
painter->setFont(fnt);
}
painter->setPen(viewer->getTextColor());
if (!m_parent->isNameEditing()) {
// if this is a current object
if (sceneFx->getCurrentFx() == m_parent->getFx())
painter->setPen(viewer->getSelectedNodeTextColor());
painter->drawText(nameArea, Qt::AlignLeft | Qt::AlignVCenter, m_name);
}
} }
//----------------------------------------------------- //-----------------------------------------------------
@ -3819,12 +3851,19 @@ void FxPassThroughPainter::contextMenuEvent(
FxSchematicPassThroughNode::FxSchematicPassThroughNode(FxSchematicScene *scene, FxSchematicPassThroughNode::FxSchematicPassThroughNode(FxSchematicScene *scene,
TFx *fx) TFx *fx)
: FxSchematicNode(scene, fx, 15, 15, eNormalFx) { : FxSchematicNode(scene, fx, 15, 15, eNormalFx) {
SchematicViewer *viewer = scene->getSchematicViewer();
m_linkedNode = 0; m_linkedNode = 0;
m_linkDock = 0; m_linkDock = 0;
m_showName = false;
m_name = QString::fromStdWString(fx->getName());
m_nameItem = new SchematicName(this, 72, 20); // for rename
m_outDock = new FxSchematicDock(this, "", 0, eFxOutputPort); m_outDock = new FxSchematicDock(this, "", 0, eFxOutputPort);
FxSchematicDock *inDock = new FxSchematicDock(this, "", 0, eFxInputPort); FxSchematicDock *inDock = new FxSchematicDock(this, "", 0, eFxInputPort);
m_passThroughPainter = new FxPassThroughPainter(this, m_width, m_height); m_passThroughPainter =
new FxPassThroughPainter(this, m_width, m_height, m_name, false);
m_outDock->getPort()->setIsPassThrough(); m_outDock->getPort()->setIsPassThrough();
inDock->getPort()->setIsPassThrough(); inDock->getPort()->setIsPassThrough();
@ -3841,7 +3880,36 @@ FxSchematicPassThroughNode::FxSchematicPassThroughNode(FxSchematicScene *scene,
inDock->setZValue(2); inDock->setZValue(2);
m_passThroughPainter->setZValue(1); m_passThroughPainter->setZValue(1);
setToolTip(tr("Pass Through")); if (!m_name.contains("PassThrough")) {
setToolTip(m_name + tr(" (Pass Through)"));
m_showName = true;
} else {
setToolTip(m_name);
m_showName = false;
}
m_passThroughPainter->setShowName(m_showName);
//---
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name);
m_nameItem->hide();
// define positions
if (m_isNormalIconView) {
QRectF recF = m_nameItem->boundingRect();
m_nameItem->setPos(-(recF.width() / 2) + 6, -30);
} else {
QFont fnt = m_nameItem->font();
fnt.setPixelSize(fnt.pixelSize() * 2);
m_nameItem->setFont(fnt);
m_nameItem->setPos(-1, 0);
}
m_nameItem->setZValue(3);
connect(m_nameItem, SIGNAL(focusOut()), this, SLOT(onNameChanged()));
} }
//----------------------------------------------------- //-----------------------------------------------------
@ -3851,7 +3919,17 @@ FxSchematicPassThroughNode::~FxSchematicPassThroughNode() {}
//----------------------------------------------------- //-----------------------------------------------------
QRectF FxSchematicPassThroughNode::boundingRect() const { QRectF FxSchematicPassThroughNode::boundingRect() const {
return QRectF(-5, -5, m_width + 10, m_height + 10); int xAdj = 0;
int yAdj = 0;
qreal width = m_width;
QRectF recF = m_nameItem->boundingRect();
if (m_showName) {
width = recF.width();
if (width > m_width) xAdj = (width - m_width) / 2;
yAdj = 30;
}
return QRectF(-5 - xAdj, -5 - yAdj, std::max(m_width, width) + 10,
m_height + 10 + yAdj);
} }
//----------------------------------------------------- //-----------------------------------------------------
@ -3864,6 +3942,28 @@ void FxSchematicPassThroughNode::paint(QPainter *painter,
//----------------------------------------------------- //-----------------------------------------------------
void FxSchematicPassThroughNode::mouseDoubleClickEvent(
QGraphicsSceneMouseEvent *me) {
QString fontName = Preferences::instance()->getInterfaceFont();
if (fontName == "") {
#ifdef _WIN32
fontName = "Arial";
#else
fontName = "Helvetica";
#endif
}
static QFont font(fontName, 10, QFont::Normal);
int width = QFontMetrics(font).width(m_name);
QRectF nameArea(0, 0, width, 14);
m_nameItem->setPlainText(m_name);
m_nameItem->show();
m_nameItem->setFocus();
setFlag(QGraphicsItem::ItemIsSelectable, false);
}
//-----------------------------------------------------
void FxSchematicPassThroughNode::mousePressEvent(QGraphicsSceneMouseEvent *me) { void FxSchematicPassThroughNode::mousePressEvent(QGraphicsSceneMouseEvent *me) {
FxSchematicNode::mousePressEvent(me); FxSchematicNode::mousePressEvent(me);
@ -3872,3 +3972,42 @@ void FxSchematicPassThroughNode::mousePressEvent(QGraphicsSceneMouseEvent *me) {
// this signal cause the update the contents of the FxSettings // this signal cause the update the contents of the FxSettings
if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked(); if (fxEditorPopup->isVisible()) emit fxNodeDoubleClicked();
} }
//-----------------------------------------------------
void FxSchematicPassThroughNode::onNameChanged() {
m_nameItem->hide();
m_name = m_nameItem->toPlainText();
if (m_name.isEmpty()) {
m_name = QString::fromStdWString(m_fx->getFxId());
m_nameItem->setPlainText(m_name);
}
m_passThroughPainter->setName(m_name);
if (m_isNormalIconView) {
QRectF recF = m_nameItem->boundingRect();
m_nameItem->setPos(-(recF.width() / 2) + 6, -30);
}
if (!m_name.contains("PassThrough")) {
setToolTip(m_name + tr(" (Pass Through)"));
m_showName = true;
} else {
setToolTip(m_name);
m_showName = false;
}
m_passThroughPainter->setShowName(m_showName);
setFlag(QGraphicsItem::ItemIsSelectable, true);
FxSchematicScene *fxScene = dynamic_cast<FxSchematicScene *>(scene());
if (!fxScene) return;
TFxCommand::renameFx(m_fx.getPointer(), m_name.toStdWString(),
fxScene->getXsheetHandle());
updateOutputDockToolTips(m_name);
prepareGeometryChange();
update();
}

View file

@ -1583,10 +1583,13 @@ void StageSchematicNode::onHandleReleased() {
StageSchematicPegbarNode::StageSchematicPegbarNode(StageSchematicScene *scene, StageSchematicPegbarNode::StageSchematicPegbarNode(StageSchematicScene *scene,
TStageObject *pegbar) TStageObject *pegbar)
: StageSchematicNode(scene, pegbar, 90, 18, false, false) { : StageSchematicNode(scene, pegbar, 90, 18, false, false) {
SchematicViewer *viewer = scene->getSchematicViewer();
std::string name = m_stageObject->getFullName(); std::string name = m_stageObject->getFullName();
std::string id = m_stageObject->getId().toString(); std::string id = m_stageObject->getId().toString();
m_name = QString::fromStdString(name); m_name = QString::fromStdString(name);
m_nameItem = new SchematicName(this, 72, 20); m_nameItem = new SchematicName(this, 72, 20);
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_nameItem->setPos(16, -1); m_nameItem->setPos(16, -1);
m_nameItem->setZValue(2); m_nameItem->setZValue(2);
@ -1728,6 +1731,7 @@ StageSchematicColumnNode::StageSchematicColumnNode(StageSchematicScene *scene,
SLOT(onChangedSize(bool))); SLOT(onChangedSize(bool)));
m_nameItem = new SchematicName(this, 54, 20); m_nameItem = new SchematicName(this, 54, 20);
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_nameItem->setPos(16, -1); m_nameItem->setPos(16, -1);
m_nameItem->setZValue(2); m_nameItem->setZValue(2);
@ -2027,10 +2031,13 @@ void StageSchematicColumnNode::onCameraStandToggleClicked(int state) {
StageSchematicCameraNode::StageSchematicCameraNode(StageSchematicScene *scene, StageSchematicCameraNode::StageSchematicCameraNode(StageSchematicScene *scene,
TStageObject *pegbar) TStageObject *pegbar)
: StageSchematicNode(scene, pegbar, 90, 18, false, false) { : StageSchematicNode(scene, pegbar, 90, 18, false, false) {
SchematicViewer *viewer = scene->getSchematicViewer();
std::string name = m_stageObject->getFullName(); std::string name = m_stageObject->getFullName();
m_name = QString::fromStdString(name); m_name = QString::fromStdString(name);
m_nameItem = new SchematicName(this, 54, 20); m_nameItem = new SchematicName(this, 54, 20);
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_nameItem->setPos(16, -2); m_nameItem->setPos(16, -2);
@ -2106,6 +2113,8 @@ void StageSchematicCameraNode::onNameChanged() {
StageSchematicSplineNode::StageSchematicSplineNode(StageSchematicScene *scene, StageSchematicSplineNode::StageSchematicSplineNode(StageSchematicScene *scene,
TStageObjectSpline *spline) TStageObjectSpline *spline)
: SchematicNode(scene), m_spline(spline), m_isOpened(false) { : SchematicNode(scene), m_spline(spline), m_isOpened(false) {
SchematicViewer *viewer = scene->getSchematicViewer();
m_width = 90; m_width = 90;
m_height = 18; m_height = 18;
assert(spline); assert(spline);
@ -2123,6 +2132,7 @@ StageSchematicSplineNode::StageSchematicSplineNode(StageSchematicScene *scene,
std::string name = m_spline->getName(); std::string name = m_spline->getName();
m_splineName = QString::fromStdString(name); m_splineName = QString::fromStdString(name);
m_nameItem = new SchematicName(this, 72, 20); m_nameItem = new SchematicName(this, 72, 20);
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_splineName); m_nameItem->setName(m_splineName);
m_nameItem->setPos(16, -1); m_nameItem->setPos(16, -1);
m_nameItem->setZValue(2); m_nameItem->setZValue(2);
@ -2239,6 +2249,8 @@ StageSchematicGroupNode::StageSchematicGroupNode(
: StageSchematicNode(scene, root, 90, 18, true) : StageSchematicNode(scene, root, 90, 18, true)
, m_root(root) , m_root(root)
, m_groupedObj(groupedObj) { , m_groupedObj(groupedObj) {
SchematicViewer *viewer = scene->getSchematicViewer();
int i; int i;
for (i = 0; i < m_groupedObj.size(); i++) m_groupedObj[i]->addRef(); for (i = 0; i < m_groupedObj.size(); i++) m_groupedObj[i]->addRef();
bool ret = true; bool ret = true;
@ -2246,6 +2258,7 @@ StageSchematicGroupNode::StageSchematicGroupNode(
m_name = QString::fromStdWString(name); m_name = QString::fromStdWString(name);
m_nameItem = new SchematicName(this, 72, 20); m_nameItem = new SchematicName(this, 72, 20);
m_nameItem->setDefaultTextColor(viewer->getTextColor());
m_nameItem->setName(m_name); m_nameItem->setName(m_name);
m_nameItem->setPos(16, -1); m_nameItem->setPos(16, -1);
m_nameItem->setZValue(2); m_nameItem->setZValue(2);