20 return "Standard Layouter";
25 return "<p>PLACEHOLDER</p>";
35 log_warning(
"gui",
"Ignoring placement hint {} since no valid reference node was provided.",
43 addCompact(modules, gates, nets);
52 addGridPosition(modules, gates, nets, placement.
gridPosition());
70 for (
auto it = cfdMap.begin(); it != cfdMap.end(); ++it)
72 if (cfdMap.isPlacementComplete())
return;
77 WaitToBeSeatedList wtbsl;
81 if (cfdMap.good() && cfdMap.placedModules().contains(*it))
89 if (cfdMap.good() && cfdMap.placedGates().contains(*it))
91 wtbsl.add(
new WaitToBeSeatedEntry(
Node::Gate, *it));
98 while(!wtbsl.placementDone())
103 const WaitToBeSeatedEntry* wtbse = wtbsl.nextPlacement(p);
105 Node pNode = wtbse->getNode();
116 addWaitToBeSeated(modules, gates, nets);
121 for (
u32 id : modules)
126 PositionGenerator pg;
128 for (
const Node&
n : nodeList)
137 void StandardGraphLayouter::addGridPosition(
const QSet<u32>& modules,
const QSet<u32>& gates,
143 for (
u32 id : modules)
148 for (Node nd : nodeList)
150 auto it = pos.
find(nd);
167 for (Node nd : nodeNotPlaced)
171 modsNotPlaced.
insert(nd.id());
174 gatsNotPlaced.
insert(nd.id());
180 addCompact(modsNotPlaced,gatsNotPlaced,nets);
184 void StandardGraphLayouter::addVertical(
const QSet<u32>& modules,
const QSet<u32>& gates,
const QSet<u32>& nets,
bool left,
const Node &preferredOrigin) {
191 if (originPos.isUndefined())
201 x = originPos.x() + (
left ? -1 : 1);
203 int totalNodes = modules.
size() + gates.
size();
204 y = originPos.y() - (totalNodes-1)/2;
207 for (
const u32 mid : modules)
219 for (
const u32 gid : gates)
237 for (
u32 id : modules)
251 mParseLayout = enabled;
261 mLayoutBoxes = enabled;
Utility class that stores the nodes that contained existing x and y coordinates.
bool modifiedFilesExisting() const
Logical container for modules, gates, and nets.
Base class for all specific layouters.
QVector< qreal > yValues() const
void setNodePosition(const Node &n, const QPoint &p)
void removeNodeFromMaps(const Node &n)
QVector< qreal > xValues() const
QMap< QPoint, Node > mPositionToNodeMap
const QMap< QPoint, Node > positionToNodeMap() const
NetLayoutPoint positonForNode(const Node &nd) const
The Node class object represents a module or a gate.
NodeType type() const
type getter for type information
u32 id() const
id getter for ID information
The PlacementHint class object provides hints for the layouter how new box objects are placed on a vi...
Node preferredOrigin() const
preferredOrigin getter for placement origin if any.
PlacementModeType mode() const
mode getter for placement mode type
PlacementModeType
The PlacementModeType enum either most compact arrangement (Standard) or to the left or right of give...
const QHash< Node, QPoint > & gridPosition() const
StandardGraphLayouter(GraphContext *context)
void add(const QSet< u32 > modules, const QSet< u32 > gates, const QSet< u32 > nets, PlacementHint placement) override
bool parseLayoutEnabled()
bool layoutBoxesEnabled()
void remove(const QSet< u32 > modules, const QSet< u32 > gates, const QSet< u32 > nets) override
void setParseLayoutEnabled(bool enabled)
QString name() const override
void setLayoutBoxesEnabled(bool enabled)
QString mDescription() const override
#define log_warning(channel,...)
FileStatusManager * gFileStatusManager
QHash::const_iterator constEnd() const const
QHash::iterator find(const Key &key)
void append(const T &value)
bool isEmpty() const const
QSet::const_iterator constBegin() const const
QSet::const_iterator constEnd() const const
QSet::iterator insert(const T &value)
QTextStream & left(QTextStream &stream)