forked from qt-creator/qt-creator
SxmlEditor: Fix crash with transitions and onEntry events
Fixed a crash in SxmlEditor that occurred when transitions and onEntry/onExit events were displayed together. Fixes: QTCREATORBUG-29429 Change-Id: Idca72ac1a661355a2caaa3f16457e4cfb9aaa785 Reviewed-by: <github-actions-qt-creator@cristianadam.eu> Reviewed-by: Eike Ziller <eike.ziller@qt.io>
This commit is contained in:
@@ -18,7 +18,7 @@ EventItem::EventItem(const QPointF &pos, BaseItem *parent)
|
|||||||
{
|
{
|
||||||
m_eventNameItem = new TextItem(this);
|
m_eventNameItem = new TextItem(this);
|
||||||
m_eventNameItem->setParentItem(this);
|
m_eventNameItem->setParentItem(this);
|
||||||
QFont serifFont("Times", 13, QFont::Normal);
|
QFont serifFont("Times", 10, QFont::Normal);
|
||||||
m_eventNameItem->setFont(serifFont);
|
m_eventNameItem->setFont(serifFont);
|
||||||
|
|
||||||
QString color = editorInfo("fontColor");
|
QString color = editorInfo("fontColor");
|
||||||
@@ -49,7 +49,7 @@ OnEntryExitItem::OnEntryExitItem(BaseItem *parent)
|
|||||||
{
|
{
|
||||||
m_eventNameItem = new TextItem(this);
|
m_eventNameItem = new TextItem(this);
|
||||||
m_eventNameItem->setParentItem(this);
|
m_eventNameItem->setParentItem(this);
|
||||||
QFont serifFont("Times", 13, QFont::Normal);
|
QFont serifFont("Times", 10, QFont::Normal);
|
||||||
m_eventNameItem->setFont(serifFont);
|
m_eventNameItem->setFont(serifFont);
|
||||||
m_eventNameItem->setDefaultTextColor(Qt::black);
|
m_eventNameItem->setDefaultTextColor(Qt::black);
|
||||||
m_eventNameItem->setTextInteractionFlags(Qt::NoTextInteraction);
|
m_eventNameItem->setTextInteractionFlags(Qt::NoTextInteraction);
|
||||||
|
@@ -232,6 +232,9 @@ void StateItem::transitionsChanged()
|
|||||||
}
|
}
|
||||||
|
|
||||||
m_transitionRect = rectInternalTransitions;
|
m_transitionRect = rectInternalTransitions;
|
||||||
|
positionOnEntryItems();
|
||||||
|
positionOnExitItems();
|
||||||
|
|
||||||
updateBoundingRect();
|
updateBoundingRect();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -437,8 +440,7 @@ void StateItem::updatePolygon()
|
|||||||
f.setPixelSize(m_titleRect.height() * 0.65);
|
f.setPixelSize(m_titleRect.height() * 0.65);
|
||||||
m_stateNameItem->setFont(f);
|
m_stateNameItem->setFont(f);
|
||||||
|
|
||||||
if (m_onEntryItem)
|
positionOnEntryItems();
|
||||||
m_onEntryItem->setPos(m_titleRect.x(), m_titleRect.bottom());
|
|
||||||
positionOnExitItems();
|
positionOnExitItems();
|
||||||
|
|
||||||
updateTextPositions();
|
updateTextPositions();
|
||||||
@@ -552,7 +554,7 @@ void StateItem::addChild(ScxmlTag *child)
|
|||||||
item->setTag(child);
|
item->setTag(child);
|
||||||
item->finalizeCreation();
|
item->finalizeCreation();
|
||||||
item->updateAttributes();
|
item->updateAttributes();
|
||||||
m_onEntryItem->setPos(m_titleRect.x(), m_titleRect.bottom());
|
positionOnEntryItems();
|
||||||
} else if (child->tagName() == "onexit") {
|
} else if (child->tagName() == "onexit") {
|
||||||
OnEntryExitItem *item = new OnEntryExitItem(this);
|
OnEntryExitItem *item = new OnEntryExitItem(this);
|
||||||
m_onExitItem = item;
|
m_onExitItem = item;
|
||||||
@@ -566,8 +568,18 @@ void StateItem::addChild(ScxmlTag *child)
|
|||||||
void StateItem::positionOnExitItems()
|
void StateItem::positionOnExitItems()
|
||||||
{
|
{
|
||||||
int offset = m_onEntryItem ? m_onEntryItem->boundingRect().height() : 0;
|
int offset = m_onEntryItem ? m_onEntryItem->boundingRect().height() : 0;
|
||||||
if (m_onExitItem)
|
if (m_onExitItem) {
|
||||||
m_onExitItem->setPos(m_titleRect.x(), m_titleRect.bottom() + offset);
|
auto x = m_transitionRect.isValid() ? m_transitionRect.right() : m_titleRect.x();
|
||||||
|
m_onExitItem->setPos(x, m_titleRect.bottom() + offset);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void StateItem::positionOnEntryItems()
|
||||||
|
{
|
||||||
|
if (m_onEntryItem) {
|
||||||
|
auto x = m_transitionRect.isValid() ? m_transitionRect.right() : m_titleRect.x();
|
||||||
|
m_onEntryItem->setPos(x, m_titleRect.bottom());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
QString StateItem::itemId() const
|
QString StateItem::itemId() const
|
||||||
|
@@ -75,6 +75,7 @@ private:
|
|||||||
void checkParentBoundingRect();
|
void checkParentBoundingRect();
|
||||||
void checkWarningItems();
|
void checkWarningItems();
|
||||||
void positionOnExitItems();
|
void positionOnExitItems();
|
||||||
|
void positionOnEntryItems();
|
||||||
|
|
||||||
TextItem *m_stateNameItem;
|
TextItem *m_stateNameItem;
|
||||||
StateWarningItem *m_stateWarningItem = nullptr;
|
StateWarningItem *m_stateWarningItem = nullptr;
|
||||||
|
Reference in New Issue
Block a user