4 #include <QRegularExpression>
5 #include <QGraphicsView>>
6 #include "QGVCore/QGVEdge.h"
7 #include "QGVCore/QGVNode.h"
14 SolveFsmInteractionRegistration SolveFsmInteractionRegistration::sRegistration;
27 : QGVInteraction(parent), mScene(parent)
31 connect(parent, &QGVScene::edgeContextMenu,
this, &SolveFsmInteraction::handleEdgeContextMenu);
39 void SolveFsmInteraction::handleSceneChanged(
const QList<QRectF>& changedArea)
41 Q_UNUSED(changedArea);
48 view->ensureVisible(mItemArea);
56 mItemArea = edge->boundingRect();
58 mItemArea = mItemArea.
united(edge->boundingRect());
66 if (!ok || !netId)
continue;
69 mNetHash.
insert(netId, edge);
76 mItemArea = node->boundingRect();
78 mItemArea = mItemArea.
united(node->boundingRect());
81 QMap<Net*, int> SolveFsmInteraction::transitionValues(QGVEdge* edge)
const
83 if (!edge || edge->label().isNull())
92 config.with_model_generation();
96 auto solverResult = resSv.get();
97 if (!solverResult.model.has_value())
99 auto model = solverResult.model.value();
101 for (
auto jt = model.model.begin(); jt != model.model.end(); ++jt)
111 retval[n] = std::get<0>(jt->second);
116 void SolveFsmInteraction::handleEdgeContextMenu(QGVEdge* edge)
118 resetEdgeHighlight();
125 mDisableHandler =
true;
132 for (
auto jt = tvals.
begin(); jt != tvals.
end(); ++jt)
135 act = menu.
addAction(icons[jt.value()],
QString(
" %1 [ID=%2]").arg(n->get_name().c_str()).
arg(n->get_id()));
139 mDisableHandler =
false;
142 void SolveFsmInteraction::handleQGVSelectionChanged()
144 if (mDisableHandler)
return;
145 mDisableHandler =
true;
146 resetEdgeHighlight();
152 bool hasTransitions =
false;
156 QGVEdge* edge =
dynamic_cast<QGVEdge*
>(it);
158 for (
auto jt = tvals.
begin(); jt != tvals.
end(); ++jt)
160 netValueHash[jt.key()] = jt.
value() + 1;
161 hasTransitions =
true;
167 const char* color[] = {
"#707071",
"#102080",
"#802010" };
168 static const char* grpNames[3] = {
"x state",
"0 state",
"1 state"};
170 for (
int i=0; i<3; i++)
183 gtm->recolorGrouping(grp[i]->get_id(),
QColor(color[i]));
192 Q_ASSERT(it.value() >= 0 && it.value() <= 2);
193 grp[it.value()]->assign_net(
const_cast<Net*
>(it.key()),
true);
196 mDisableHandler =
false;
199 void SolveFsmInteraction::resetEdgeHighlight()
201 for (QGVEdge* edge : mNetHash.
values())
202 edge->setHightlight(
QString());
205 void SolveFsmInteraction::handleHALSelectionChanged(
void* sender)
207 if (mDisableHandler)
return;
210 resetEdgeHighlight();
212 mDisableHandler =
true;
213 mScene->clearSelection();
217 for (QGVEdge * edge : mNetHash.
values(netId))
219 edge->setHightlight(
QString(
"net_%1").arg(netId));
222 gv->ensureVisible(edge);
227 mDisableHandler =
false;
static Result< BooleanFunction > Eq(BooleanFunction &&p0, BooleanFunction &&p1, u16 size)
static Result< BooleanFunction > from_string(const std::string &expression)
static BooleanFunction Const(const BooleanFunction::Value &value)
GroupingManagerWidget * getGroupingManagerWidget()
Grouping * groupingByName(const QString &name) const
void selectNet(u32 netId, bool clear_current_selection=true, bool navigate_to_selection=true)
Grouping * create_grouping(const u32 grouping_id, const std::string &name="")
bool delete_grouping(Grouping *grouping)
Net * get_net_by_id(u32 net_id) const
const std::vector< Net * > & get_nets() const
void selectionChanged(void *sender)
QList< u32 > selectedNetsList() const
void registerNode(QGVNode *node) override
SolveFsmInteraction(QGVScene *parent)
void registerEdge(QGVEdge *edge) override
SolveFsmInteractionRegistration()
ContentManager * gContentManager
QGVInteraction * constructSolveFsmInteraction(QGVScene *parent)
SelectionRelay * gSelectionRelay
void triggered(bool checked)
void changed(const QList< QRectF > ®ion)
QHash::const_iterator constBegin() const const
QHash::const_iterator constEnd() const const
const T value(const Key &key) const const
typename QHash< Key, T >::iterator insert(const Key &key, const T &value)
QList< T > values(const Key &key) const const
bool isNull() const const
QRectF united(const QRectF &rectangle) const const
QRegularExpressionMatchIterator globalMatch(const QString &subject, int offset, QRegularExpression::MatchType matchType, QRegularExpression::MatchOptions matchOptions) const const
QString captured(int nth) const const
bool hasNext() const const
QRegularExpressionMatch next()
QString arg(qlonglong a, int fieldWidth, int base, QChar fillChar) const const
QString fromStdString(const std::string &str)
QString & remove(int position, int n)
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
uint toUInt(bool *ok, int base) const const