21 return "Standard Layouter";
26 return "<p>PLACEHOLDER</p>";
36 log_warning(
"gui",
"Ignoring placement hint {} since no valid reference node was provided.",
44 addCompact(modules, gates, nets);
53 addGridPosition(modules, gates, nets, placement.
gridPosition());
71 for (
auto it = cfdMap.begin(); it != cfdMap.end(); ++it)
73 if (cfdMap.isPlacementComplete())
return;
78 WaitToBeSeatedList wtbsl;
82 if (cfdMap.good() && cfdMap.placedModules().contains(*it))
90 if (cfdMap.good() && cfdMap.placedGates().contains(*it))
92 wtbsl.add(
new WaitToBeSeatedEntry(
Node::Gate, *it));
99 while(!wtbsl.placementDone())
104 const WaitToBeSeatedEntry* wtbse = wtbsl.nextPlacement(p);
106 Node pNode = wtbse->getNode();
117 addWaitToBeSeated(modules, gates, nets);
122 for (
u32 id : modules)
127 PositionGenerator pg;
129 for (
const Node&
n : nodeList)
138 void StandardGraphLayouter::addGridPosition(
const QSet<u32>& modules,
const QSet<u32>& gates,
144 for (
u32 id : modules)
149 for (Node nd : nodeList)
151 auto it = pos.
find(nd);
168 for (Node nd : nodeNotPlaced)
172 modsNotPlaced.
insert(nd.id());
175 gatsNotPlaced.
insert(nd.id());
181 addCompact(modsNotPlaced,gatsNotPlaced,nets);
185 void StandardGraphLayouter::addVertical(
const QSet<u32>& modules,
const QSet<u32>& gates,
const QSet<u32>& nets,
bool left,
const Node &preferredOrigin) {
192 if (originPos.isUndefined())
202 x = originPos.x() + (
left ? -1 : 1);
204 int totalNodes = modules.
size() + gates.
size();
205 y = originPos.y() - (totalNodes-1)/2;
208 for (
const u32 mid : modules)
220 for (
const u32 gid : gates)
238 for (
u32 id : modules)
252 mParseLayout = enabled;
262 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)