новый файл: CMakeLists.txt

новый файл:    shell.nix
	новый файл:    src/MainWindow.cpp
	новый файл:    src/MainWindow.h
	новый файл:    src/items/ArrowItem.cpp
	новый файл:    src/items/ArrowItem.h
	новый файл:    src/items/BlockItem.cpp
	новый файл:    src/items/BlockItem.h
	новый файл:    src/items/DiagramScene.cpp
	новый файл:    src/items/DiagramScene.h
	новый файл:    src/items/JunctionItem.cpp
	новый файл:    src/items/JunctionItem.h
	новый файл:    src/main.cpp
	изменено:      src/items/ArrowItem.cpp
	изменено:      src/items/ArrowItem.h
	изменено:      src/items/BlockItem.h
	изменено:      src/items/DiagramScene.cpp
	изменено:      src/items/DiagramScene.h
This commit is contained in:
Gregory Bednov 2026-02-23 00:21:10 +03:00
commit 53afa3f728
87 changed files with 48249 additions and 0 deletions

32
src/items/JunctionItem.h Normal file
View file

@ -0,0 +1,32 @@
#pragma once
#include <QGraphicsObject>
#include <QSet>
class ArrowItem;
// Small movable node that lets several arrows meet at a single point.
class JunctionItem final : public QGraphicsObject {
Q_OBJECT
public:
enum { Type = UserType + 2 };
explicit JunctionItem(QGraphicsItem* parent = nullptr, int id = -1);
QRectF boundingRect() const override;
void paint(QPainter* p, const QStyleOptionGraphicsItem* opt, QWidget* widget) override;
int type() const override { return Type; }
void addArrow(ArrowItem* a);
void removeArrow(ArrowItem* a);
bool hitTest(const QPointF& scenePos, qreal radius) const;
int id() const { return m_id; }
void setId(int id) { m_id = id; }
protected:
QVariant itemChange(GraphicsItemChange change, const QVariant& value) override;
private:
qreal m_radius = 5.0;
int m_id;
QSet<ArrowItem*> m_arrows;
};