20 #include <QGraphicsSceneMouseEvent>
28 qreal GraphicsScene::sLod = 0;
30 const qreal GraphicsScene::sGridFadeStart = 0.4;
31 const qreal GraphicsScene::sGridFadeEnd = 1.0;
33 bool GraphicsScene::sGridEnabled =
true;
34 bool GraphicsScene::sGridClustersEnabled =
true;
41 if (lod >= sGridFadeStart && lod <= sGridFadeEnd)
43 const qreal alpha = (lod - sGridFadeStart) / (sGridFadeEnd - sGridFadeStart);
49 const int alpha = 255;
62 sGridClustersEnabled = value;
72 int adjusted_x = qRound(pos.
x() / graph_widget_constants::sGridSize) * graph_widget_constants::sGridSize;
73 int adjusted_y = qRound(pos.
y() / graph_widget_constants::sGridSize) * graph_widget_constants::sGridSize;
74 return QPoint(adjusted_x, adjusted_y);
78 mDebugGridEnable(false),
79 mDragController(nullptr),
80 mSelectionStatus(NotPressed)
94 if (mDragController) mDragController->clearShadows(
this);
105 mDragController = dc;
123 while (i < mGateItems.size())
125 if (
g->id() < mGateItems.at(i)->id())
130 mGateItems.insert(i,
g);
137 while (i < mNetItems.size())
139 if (
n->id() < mNetItems.at(i)->id())
144 mNetItems.insert(i,
n);
151 while (i < mModuleItems.size())
153 if (m->
id() < mModuleItems.at(i)->id())
158 mModuleItems.insert(i, m);
183 while (i < mGateItems.size())
185 if (mGateItems.at(i)->id() ==
id)
187 mGateItems.remove(i);
203 while (i < mNetItems.size())
205 if (mNetItems.at(i)->id() ==
id)
223 while (i < mModuleItems.size())
225 if (mModuleItems.at(i)->id() ==
id)
227 mModuleItems.remove(i);
318 if (mDragController) mDragController->clearShadows(
this);
320 for (
auto item :
items())
325 mModuleItems.clear();
360 if (mSelectionStatus != SelectionChanged)
361 mSelectionStatus = BeginPressed;
366 if (mSelectionStatus == SelectionChanged)
368 mSelectionStatus = EndPressed;
371 mSelectionStatus = NotPressed;
378 switch (mSelectionStatus)
380 case SelectionChanged:
383 mSelectionStatus = SelectionChanged;
400 switch (
static_cast<const GraphicsItem*
>(item)->itemType())
500 if (sti) highlightSet[(int)sti->getType()].
insert(sti->id());
529 gm->setSelected(
true);
541 gg->setSelected(
true);
553 gn->setSelected(
true);
579 void GraphicsScene::drawBackground(
QPainter* painter,
const QRectF& rect)
584 if (sLod < sGridFadeStart)
594 const int overdraw = 2;
596 const int x_from = rect.
left() - overdraw;
597 const int x_to = rect.
right() + overdraw;
599 const int y_from = rect.
top() - overdraw;
600 const int y_to = rect.
bottom() + overdraw;
602 const int xOffset = x_from % graph_widget_constants::sGridSize;
603 const int yOffset = y_from % graph_widget_constants::sGridSize;
607 case GraphicsScene::GridType::None:
609 case GraphicsScene::GridType::Lines:
614 for (
int x = x_from - xOffset; x < x_to; x += graph_widget_constants::sGridSize)
616 QLine line(x, y_from, x, y_to);
617 if (x % (graph_widget_constants::sGridSize * graph_widget_constants::sClusterSize))
620 cluster_lines.
append(line);
623 for (
int y = y_from - yOffset; y < y_to; y += graph_widget_constants::sGridSize)
625 QLine line(x_from, y, x_to, y);
626 if (y % (graph_widget_constants::sGridSize * graph_widget_constants::sClusterSize))
629 cluster_lines.
append(line);
637 if (sGridClustersEnabled)
647 case GraphicsScene::GridType::Dots:
652 for (
int x = x_from - xOffset; x < x_to; x += graph_widget_constants::sGridSize)
653 for (
int y = y_from - yOffset; y < y_to; y += graph_widget_constants::sGridSize)
655 if ((x % (graph_widget_constants::sGridSize * graph_widget_constants::sClusterSize)) && (y % (graph_widget_constants::sGridSize * graph_widget_constants::sClusterSize)))
666 if (sGridClustersEnabled)
677 #ifdef GUI_DEBUG_GRID
678 if (mDebugGridEnable)
679 debugDrawLayouterGrid(painter, x_from, x_to, y_from, y_to);
685 #ifdef GUI_DEBUG_GRID
686 void GraphicsScene::debugSetLayouterGrid(
const QVector<qreal>& debug_x_lines,
const QVector<qreal>& debug_y_lines, qreal debug_default_height, qreal debug_default_width)
688 mDebugXLines = debug_x_lines;
689 mDebugYLines = debug_y_lines;
690 mDebugDefaultHeight = debug_default_height;
691 mDebugDefaultWidth = debug_default_width;
694 void GraphicsScene::debugDrawLayouterGrid(
QPainter* painter,
const int x_from,
const int x_to,
const int y_from,
const int y_to)
696 if (mDebugXLines.isEmpty() || mDebugYLines.isEmpty())
return;
699 for (qreal x : mDebugXLines)
701 QLineF line(x, y_from, x, y_to);
705 for (qreal y : mDebugYLines)
707 QLineF line(x_from, y, x_to, y);
713 qreal x = mDebugXLines.last() + mDebugDefaultWidth;
717 QLineF line(x, y_from, x, y_to);
719 x += mDebugDefaultWidth;
722 x = mDebugXLines.first() - mDebugDefaultWidth;
726 QLineF line(x, y_from, x, y_to);
728 x -= mDebugDefaultWidth;
731 qreal y = mDebugYLines.last() + mDebugDefaultHeight;
735 QLineF line(x_from, y, x_to, y);
737 y += mDebugDefaultHeight;
740 y = mDebugYLines.first() - mDebugDefaultHeight;
744 QLineF line(x_from, y, x_to, y);
746 y -= mDebugDefaultHeight;
750 void GraphicsScene::setDebugGridEnabled(
bool enabled)
752 mDebugGridEnable = enabled;
755 bool GraphicsScene::debugGridEnabled()
757 return mDebugGridEnable;
GroupingManagerWidget * getGroupingManagerWidget()
static SettingsItemCheckbox * sSettingNetGroupingToPins
Abstract base class for gates.
Superclass for all graphic items used ins the GraphicsScene. It contains information about the underl...
ItemType itemType() const
Abstract base class for modules.
The basic net class all other nets inherit from.
void setGridAlpha(int alpha)
static GraphicsQssAdapter * instance()
void setGridAlphaF(qreal alpha)
void removeGraphItem(GraphicsItem *item)
void mousePressEvent(QGraphicsSceneMouseEvent *event) override
const GraphicsGate * getGateItem(const u32 id) const
void updateVisuals(const GraphShader::Shading &s)
static void setLod(const qreal &lod)
void handleGroupingAssignNet(Grouping *grp, u32 id)
void setMousePressed(bool isPressed)
void handleGroupingAssignModule(Grouping *grp, u32 id)
const GraphicsModule * getModuleItem(const u32 id) const
void handleHighlight(const QVector< const ModuleItem * > &highlightItems)
void handleGroupingAssignGate(Grouping *grp, u32 id)
void handleExternSelectionChanged(void *sender)
static void setGridEnabled(const bool &value)
void handleGroupingColorChanged(Grouping *grp)
static void setGridType(const GridType &gridType)
void addGraphItem(GraphicsItem *item)
void handleInternSelectionChanged()
const GraphicsNet * getNetItem(const u32 id) const
static QPointF snapToGrid(const QPointF &pos) Q_DECL_DEPRECATED
void handleExternSubfocusChanged(void *sender)
void setDragController(DragController *dc)
static void setGridClustersEnabled(const bool &value)
void moveNetsToBackground()
GraphicsScene(QObject *parent=nullptr)
void groupingColorChanged(Grouping *grp)
An item in the ModuleModel.
void groupingGateAssigned(Grouping *grp, u32 id) const
void groupingModuleAssigned(Grouping *grp, u32 id) const
void groupingModuleRemoved(Grouping *grp, u32 id) const
void groupingNetAssigned(Grouping *grp, u32 id) const
void groupingNetRemoved(Grouping *grp, u32 id) const
void groupingGateRemoved(Grouping *grp, u32 id) const
int numberSelectedGates() const
void setFocus(ItemType ftype, u32 fid, Subfocus sfoc=Subfocus::None, u32 sfinx=0)
void selectionChanged(void *sender)
bool isNetSelected(u32 id) const
void relaySelectionChanged(void *sender)
int numberSelectedNets() const
int numberSelectedModules() const
void setSelectedGates(const QSet< u32 > &ids)
bool isModuleSelected(u32 id) const
void setSelectedNets(const QSet< u32 > &ids)
void subfocusChanged(void *sender)
void registerSender(void *sender, QString name)
bool isGateSelected(u32 id) const
void setSelectedModules(const QSet< u32 > &ids)
ContentManager * gContentManager
GraphContextManager * gGraphContextManager
SelectionRelay * gSelectionRelay
NetlistRelay * gNetlistRelay
void update(const QRectF &rect)
void addItem(QGraphicsItem *item)
virtual bool event(QEvent *event) override
QList< QGraphicsItem * > items(Qt::SortOrder order) const const
virtual void mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
void removeItem(QGraphicsItem *item)
QList< QGraphicsItem * > selectedItems() const const
bool blockSignals(bool block)
QMetaObject::Connection connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
bool disconnect(const QObject *sender, const char *signal, const QObject *receiver, const char *method)
QObject * sender() const const
void drawLine(const QLineF &line)
void drawLines(const QLineF *lines, int lineCount)
void drawPoints(const QPointF *points, int pointCount)
QPainter::RenderHints renderHints() const const
void setPen(const QColor &color)
void setRenderHint(QPainter::RenderHint hint, bool on)
void setRenderHints(QPainter::RenderHints hints, bool on)
void setColor(const QColor &color)
qreal bottom() const const
qreal right() const const
bool contains(const T &value) const const
QSet::iterator insert(const T &value)
bool isEmpty() const const
void append(const T &value)
QMap< u32, GraphicsNode::Visuals > mGateVisuals
QMap< u32, GraphicsNet::Visuals > mNetVisuals
QMap< u32, GraphicsNode::Visuals > mOduleVisuals