5 #include <QApplication>
10 :
QObject(parent), mGraphWidget(gw), mDragNodeBox(nullptr), mShadowScene(nullptr)
15 mDragNodeBox =
nullptr;
16 mAdditionalBoxes.clear();
25 if (sc && sc == mShadowScene)
36 mShadowScene =
nullptr;
57 bool isAlreadySelected =
false;
63 if (selMods.
contains(drgItem->
id())) isAlreadySelected =
true;
67 if (selGats.
contains(drgItem->
id())) isAlreadySelected =
true;
73 if (isAlreadySelected)
76 for (
u32 mid : selMods)
80 for (
u32 gid : selGats)
88 if (!layouter->
done())
return;
90 mMousedownPosition = eventPos;
92 for (
const Node& nd : nodesToMove)
96 if (nb->
item() == drgItem)
99 mAdditionalBoxes.insert(nb);
102 if (!mAdditionalBoxes.isEmpty()) mWantSwap =
false;
105 void DragController::setSwapIntent(
bool wantSwap)
107 if (wantSwap == mWantSwap)
return;
111 if (sc && sc == mShadowScene)
113 for (
NodeBox* nb : mAdditionalBoxes)
124 mAdditionalBoxes.clear();
126 mWantSwap = wantSwap;
129 void DragController::addShadow(
const NodeBox* nb)
131 NodeDragShadow* nds =
new NodeDragShadow;
133 nds->start(nb->item()->pos(), nb->item()->boundingRect().size());
139 mShadows.insert(nb,nds);
147 if (!mDragNodeBox)
return;
148 setSwapIntent(wantSwap);
150 mDropAllowed =
false;
151 addShadow(mDragNodeBox);
152 for (
NodeBox* nb : mAdditionalBoxes)
159 if (!mDragNodeBox || (wantSwap == mWantSwap && gridPos == mCurrentGridpos))
return;
161 setSwapIntent(wantSwap);
162 mCurrentGridpos = gridPos;
166 for (
auto it = mShadows.constBegin(); it != mShadows.constEnd(); ++it)
168 it.value()->setVisualCue(
dragCue());
169 QPoint p = it.key()->gridPosition() + delta;
172 it.value()->setPos(
QPointF(x,y));
178 if (!mDragNodeBox)
return false;
184 if (!mDragNodeBox)
return false;
185 if (mDragNodeBox->
gridPosition() == mCurrentGridpos)
return false;
190 return (boxes.
boxForPoint(mCurrentGridpos) !=
nullptr);
195 pointsToCheck.
append(mCurrentGridpos);
199 for (
const NodeBox* nb : mAdditionalBoxes)
201 pointsToCheck.
append(nb->gridPosition() + delta);
202 freedPositions.
insert(nb->gridPosition());
205 for (
const QPoint& p : pointsToCheck)
207 if (freedPositions.
contains(p))
continue;
216 retval->operator[](mDragNodeBox->
getNode()) = mCurrentGridpos;
221 retval->operator[](targetNode) = mDragNodeBox->
gridPosition();
224 if (!mAdditionalBoxes.isEmpty())
227 for (
const NodeBox* nb : mAdditionalBoxes)
229 retval->operator[](nb->getNode()) = nb->gridPosition() + delta;
GridPlacement * finalGridPlacement() const
void move(const QPoint &eventPos, bool wantSwap, const QPoint &gridPos)
bool hasDragged(const QPoint &eventPos)
void set(GraphicsNode *drgItem, const QPoint &eventPos)
bool isDropAllowed() const
DragController(GraphWidget *gw, QObject *parent=nullptr)
NodeDragShadow::DragCue dragCue() const
void enterDrag(bool wantSwap)
void clearShadows(GraphicsScene *sc)
GraphLayouter * getLayouter() const
Base class for all specific layouters.
qreal gridXposition(int ix) const
qreal gridYposition(int iy) const
Node nodeAtPosition(const QPoint &p) const
GridPlacement * gridPlacementFactory() const
GraphicsScene * scene() const
const NodeBoxes & boxes() const
ItemType itemType() const
Abstract base class for nodes (e.g. gates, modules)
Container for a GraphGraphicsView containing gates, nets, and modules.
void setDragController(DragController *dc)
The NodeBox class represents a node placed at a grid position within a hal view.
GraphicsNode * item() const
item getter for graphics item object
Node getNode() const
getNode getter for node information
QPoint gridPosition() const
The NodeBoxes class owns all NodeBox'es from hal view.
NodeBox * boxForNode(const Node &n) const
boxForNode find NodeBox by node
NodeBox * boxForPoint(const QPoint &p) const
boxForPoint find NodeBox by grid position
An item that is drawn when a node is dragged through the scene.
void setVisualCue(const DragCue cue)
The Node class object represents a module or a gate.
bool isNull() const
isNull test for null-Node object typically returned from functions
const QSet< u32 > & selectedGates() const
const QSet< u32 > & selectedModules() const
SelectionRelay * gSelectionRelay
void addItem(QGraphicsItem *item)
void removeItem(QGraphicsItem *item)
void append(const T &value)
bool contains(const T &value) const const
QSet::iterator insert(const T &value)