Added comdel system generation

// todo display generation
This commit is contained in:
Borna Rajković committed 2022-05-09 00:51:47 +02:00
1 parent 74a7ef3e7a
commit 45a668fc46
17 files changed
+450 -52

No files matched your search

+23 -3
View File
@@ -5,10 +5,30 @@
#include <QGraphicsScene>
#include <iostream>
#include "dialogmanager.h"
namespace display {
void Component::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
QMenu menu;
menu.addAction("Izmjeni ime", [this](){});
menu.addSeparator();
for(auto attr: this->instance->attributes) {
bool enabled = attr.attribute.getPopup().has_value();
auto action = menu.addAction(QString::fromStdString("Izmjeni " + attr.name),
[&attr, this]() {});
action->setEnabled(enabled);
}
menu.exec(event->screenPos());
}
void Bus::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
QMenu menu;
menu.addAction("Izmjeni ime", [this](){});
menu.exec(event->screenPos());
}
/*
ComponentWrapper *ComponentWrapper::ofWire(domain::WireInstance *wire) {
auto component = new ComponentWrapper();
component->wireInstance = wire;
@@ -125,5 +145,5 @@ void PinItem::clear() {
delete item;
}
}
*/
} // namespace display
+68
View File
@@ -8,6 +8,7 @@
namespace display {
/*
class ComponentItem: public QGraphicsItemGroup
{
public:
@@ -68,6 +69,73 @@ private:
ComponentItem *componentItem;
std::vector<PinItem*> pinItems;
};
*/
class Pin: public QGraphicsItemGroup
{
private:
domain::Pin pin;
public:
Pin(domain::Pin pin): pin(pin) {
pin.getDisplay().render(this);
}
};
class Component: public QGraphicsItemGroup
{
private:
std::shared_ptr<domain::ComponentInstance> instance;
public:
Component(const std::shared_ptr<domain::ComponentInstance>& instance): instance(instance) {
instance->component.getDisplay().render(this);
}
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
};
class Bus: public QGraphicsItemGroup
{
public:
Bus(const std::shared_ptr<domain::BusInstance>& instance) {
instance->bus.getDisplay()->render(this);
}
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
};
class ComponentGroup: public QGraphicsItemGroup
{
private:
std::shared_ptr<domain::ComponentInstance> componentInstance;
public:
explicit ComponentGroup(const std::shared_ptr<domain::ComponentInstance>& instance): componentInstance(instance) {
setFlag(ItemIsMovable, true);
setHandlesChildEvents(false);
addToGroup(new display::Component(instance));
for(auto &pin: instance->component.getPins()) {
addToGroup(new display::Pin(pin));
}
setPos(instance->position.first, instance->position.second);
}
};
class BusGroup: public QGraphicsItemGroup
{
private:
std::shared_ptr<domain::BusInstance> busInstance;
public:
explicit BusGroup(const std::shared_ptr<domain::BusInstance>& instance): busInstance(instance) {
setFlag(ItemIsMovable, true);
setHandlesChildEvents(false);
addToGroup(new display::Bus(instance));
setPos(instance->position.first, instance->position.second);
}
};
} // namespace display
+6 -8
View File
@@ -9,20 +9,18 @@ Schema::Schema()
}
void Schema::setSchema(domain::Schema* schema)
void Schema::setSchema(domain::Schema* _schema)
{
scene.clear();
this->schema = schema;
this->schema = _schema;
if(schema != nullptr) {
for(auto &instance: schema->componentInstances) {
ComponentWrapper *component = ComponentWrapper::ofComponent(instance.get());
component->setPos(instance->position.first, instance->position.second);
scene.addItem(component);
scene.addItem(new display::ComponentGroup(instance));
}
for(auto &instance: schema->busInstances) {
ComponentWrapper *bus = ComponentWrapper::ofBus(instance.get());
bus->setPos(instance->position.first, instance->position.second);
scene.addItem(bus);
if(instance->bus.getDisplay().has_value()) {
scene.addItem(new display::BusGroup(instance));
}
}
}
}
-1
View File
@@ -20,7 +20,6 @@ private:
QGraphicsScene scene;
domain::Schema* schema;
};
} // namespace display