Updated name dialog
This commit is contained in:
parent
23764776f1
commit
65020c2b7f
|
@ -38,5 +38,5 @@ add_executable(SchemeEditor
|
||||||
comdel/parser/comdellexer.cpp
|
comdel/parser/comdellexer.cpp
|
||||||
main.cpp
|
main.cpp
|
||||||
mainwindow.ui
|
mainwindow.ui
|
||||||
comdel/domain/comdelvalidator.cpp comdel/domain/comdelvalidator.h comdel/display/dialogmanager.cpp comdel/display/dialogmanager.h comdel/display/attribute_dialog.cpp comdel/display/attribute_dialog.h comdel/display/name_dialog.cpp comdel/display/name_dialog.h comdel/domain/comdel_generator.cpp comdel/domain/comdel_generator.h)
|
comdel/domain/comdelvalidator.cpp comdel/domain/comdelvalidator.h comdel/display/attribute_dialog.cpp comdel/display/attribute_dialog.h comdel/display/name_dialog.cpp comdel/display/name_dialog.h comdel/domain/comdel_generator.cpp comdel/domain/comdel_generator.h)
|
||||||
target_link_libraries(SchemeEditor Qt5::Core Qt5::Gui Qt5::Widgets)
|
target_link_libraries(SchemeEditor Qt5::Core Qt5::Gui Qt5::Widgets)
|
||||||
|
|
|
@ -11,7 +11,10 @@ namespace display {
|
||||||
|
|
||||||
void Component::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
void Component::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
||||||
QMenu menu;
|
QMenu menu;
|
||||||
menu.addAction("Izmjeni ime", [this](){});
|
menu.addAction("Izmjeni ime", [this](){
|
||||||
|
auto dialog = new NameDialog(this->instance.get());
|
||||||
|
dialog->exec();
|
||||||
|
});
|
||||||
menu.addSeparator();
|
menu.addSeparator();
|
||||||
for(int i=0; i<this->instance->attributes.size(); i++) {
|
for(int i=0; i<this->instance->attributes.size(); i++) {
|
||||||
auto* attr = &this->instance->attributes[i];
|
auto* attr = &this->instance->attributes[i];
|
||||||
|
@ -30,126 +33,11 @@ void Component::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
||||||
|
|
||||||
void Bus::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
void Bus::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
||||||
QMenu menu;
|
QMenu menu;
|
||||||
menu.addAction("Izmjeni ime", [this](){});
|
menu.addAction("Izmjeni ime", [this](){
|
||||||
menu.exec(event->screenPos());
|
auto dialog = new NameDialog(this->busInstance.get());
|
||||||
}
|
dialog->exec();
|
||||||
|
|
||||||
/*
|
|
||||||
ComponentWrapper *ComponentWrapper::ofWire(domain::WireInstance *wire) {
|
|
||||||
auto component = new ComponentWrapper();
|
|
||||||
component->wireInstance = wire;
|
|
||||||
component->redraw();
|
|
||||||
return component;
|
|
||||||
}
|
|
||||||
ComponentWrapper *ComponentWrapper::ofComponent(domain::ComponentInstance *instance) {
|
|
||||||
auto component = new ComponentWrapper();
|
|
||||||
component->componentInstance = instance;
|
|
||||||
component->setFlag(QGraphicsItem::ItemIsMovable, true);
|
|
||||||
component->componentItem = new ComponentItem(instance, component);
|
|
||||||
|
|
||||||
for(auto& pin: instance->component.getPins()) {
|
|
||||||
component->pinItems.push_back(new PinItem(pin, component));
|
|
||||||
}
|
|
||||||
|
|
||||||
component->redraw();
|
|
||||||
return component;
|
|
||||||
}
|
|
||||||
ComponentWrapper *ComponentWrapper::ofBus(domain::BusInstance *instance) {
|
|
||||||
auto component = new ComponentWrapper();
|
|
||||||
component->busInstance = instance;
|
|
||||||
component->setFlag(QGraphicsItem::ItemIsMovable, true);
|
|
||||||
component->redraw();
|
|
||||||
return component;
|
|
||||||
}
|
|
||||||
void ComponentWrapper::clear() {
|
|
||||||
for(auto item: childItems()) {
|
|
||||||
this->removeFromGroup(item);
|
|
||||||
item->scene()->removeItem(item);
|
|
||||||
delete item;
|
|
||||||
}
|
|
||||||
if(componentInstance) {
|
|
||||||
componentItem->clear();
|
|
||||||
for(auto pinItem: pinItems) {
|
|
||||||
pinItem->clear();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComponentWrapper::redraw() {
|
|
||||||
|
|
||||||
if(componentInstance) {
|
|
||||||
addToGroup(componentItem);
|
|
||||||
componentItem->redraw();
|
|
||||||
for(auto pinItem: pinItems) {
|
|
||||||
addToGroup(pinItem);
|
|
||||||
pinItem->redraw();
|
|
||||||
}
|
|
||||||
this->addToGroup(new QGraphicsSimpleTextItem(QString::fromStdString(componentInstance->name)));
|
|
||||||
}
|
|
||||||
if(busInstance && busInstance->bus.getDisplay()) {
|
|
||||||
busInstance->bus.getDisplay()->render(this);
|
|
||||||
this->addToGroup(new QGraphicsSimpleTextItem(QString::fromStdString(busInstance->name)));
|
|
||||||
}
|
|
||||||
if(wireInstance) {
|
|
||||||
wireInstance->display.render(this);
|
|
||||||
this->addToGroup(new QGraphicsSimpleTextItem(QString::fromStdString(wireInstance->name)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
ComponentItem::ComponentItem(domain::ComponentInstance *instance, QGraphicsItem *parent): componentInstance(instance) {
|
|
||||||
setParentItem(parent);
|
|
||||||
redraw();
|
|
||||||
setToolTip(QString::fromStdString(this->componentInstance->component.getTooltip()));
|
|
||||||
}
|
|
||||||
void ComponentItem::redraw() {
|
|
||||||
componentInstance->component.getDisplay().render(this);
|
|
||||||
}
|
|
||||||
void ComponentItem::clear() {
|
|
||||||
for(auto item: childItems()) {
|
|
||||||
this->removeFromGroup(item);
|
|
||||||
item->scene()->removeItem(item);
|
|
||||||
delete item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void ComponentItem::contextMenuEvent(QGraphicsSceneContextMenuEvent *event) {
|
|
||||||
QMenu menu;
|
|
||||||
auto instance = this->componentInstance;
|
|
||||||
menu.addAction("Izmjeni ime", [instance, this](){
|
|
||||||
DialogManager::updateName(instance);
|
|
||||||
auto *wrapper = static_cast<ComponentWrapper*>(this->parentItem());
|
|
||||||
wrapper->clear();
|
|
||||||
wrapper->redraw();
|
|
||||||
});
|
});
|
||||||
menu.addSeparator();
|
|
||||||
for(auto attr: componentInstance->attributes) {
|
|
||||||
bool enabled = attr.attribute.getPopup().has_value();
|
|
||||||
|
|
||||||
auto action = menu.addAction(QString::fromStdString("Izmjeni " + attr.name),
|
|
||||||
[&attr, this]() {
|
|
||||||
DialogManager::updateAttribute(&attr);
|
|
||||||
|
|
||||||
this->redraw();
|
|
||||||
});
|
|
||||||
action->setEnabled(enabled);
|
|
||||||
}
|
|
||||||
menu.exec(event->screenPos());
|
menu.exec(event->screenPos());
|
||||||
}
|
}
|
||||||
|
|
||||||
PinItem::PinItem(domain::Pin pin, QGraphicsItem *parent): pin(pin) {
|
|
||||||
setParentItem(parent);
|
|
||||||
redraw();
|
|
||||||
setToolTip(QString::fromStdString(pin.getTooltip()));
|
|
||||||
}
|
|
||||||
void PinItem::redraw() {
|
|
||||||
pin.getDisplay().render(this);
|
|
||||||
}
|
|
||||||
void PinItem::clear() {
|
|
||||||
for(auto item: childItems()) {
|
|
||||||
this->removeFromGroup(item);
|
|
||||||
item->scene()->removeItem(item);
|
|
||||||
delete item;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
} // namespace display
|
} // namespace display
|
||||||
|
|
|
@ -8,69 +8,6 @@
|
||||||
|
|
||||||
namespace display {
|
namespace display {
|
||||||
|
|
||||||
/*
|
|
||||||
class ComponentItem: public QGraphicsItemGroup
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
ComponentItem(domain::ComponentInstance *instance, QGraphicsItem *parent);
|
|
||||||
void redraw();
|
|
||||||
void clear();
|
|
||||||
private:
|
|
||||||
domain::ComponentInstance *componentInstance;
|
|
||||||
|
|
||||||
public:
|
|
||||||
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
|
|
||||||
};
|
|
||||||
|
|
||||||
class PinItem: public QGraphicsItemGroup
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
PinItem(domain::Pin pin, QGraphicsItem *parent);
|
|
||||||
void redraw();
|
|
||||||
void clear();
|
|
||||||
private:
|
|
||||||
domain::Pin pin;
|
|
||||||
};
|
|
||||||
|
|
||||||
class ComponentWrapper: public QGraphicsItemGroup
|
|
||||||
{
|
|
||||||
public:
|
|
||||||
static ComponentWrapper *ofComponent(domain::ComponentInstance *instance);
|
|
||||||
static ComponentWrapper *ofBus(domain::BusInstance *instance);
|
|
||||||
static ComponentWrapper *ofWire(domain::WireInstance *wire);
|
|
||||||
|
|
||||||
ComponentWrapper() {
|
|
||||||
this->setHandlesChildEvents(false);
|
|
||||||
}
|
|
||||||
void redraw();
|
|
||||||
void clear();
|
|
||||||
|
|
||||||
|
|
||||||
QVariant itemChange( GraphicsItemChange change, const QVariant &value ) override
|
|
||||||
{
|
|
||||||
auto response = QGraphicsItem::itemChange(change, value);
|
|
||||||
if (change == ItemPositionChange){
|
|
||||||
if(componentInstance != nullptr) {
|
|
||||||
componentInstance->position.first = (int)scenePos().x();
|
|
||||||
componentInstance->position.second = (int)scenePos().y();
|
|
||||||
} else if(busInstance != nullptr) {
|
|
||||||
busInstance->position.first = (int)scenePos().x();
|
|
||||||
busInstance->position.second = (int)scenePos().y();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return response;
|
|
||||||
}
|
|
||||||
|
|
||||||
private:
|
|
||||||
domain::ComponentInstance *componentInstance = nullptr;
|
|
||||||
domain::BusInstance *busInstance = nullptr;
|
|
||||||
domain::WireInstance *wireInstance = nullptr;
|
|
||||||
|
|
||||||
ComponentItem *componentItem;
|
|
||||||
std::vector<PinItem*> pinItems;
|
|
||||||
};
|
|
||||||
*/
|
|
||||||
|
|
||||||
class Pin: public QGraphicsItemGroup
|
class Pin: public QGraphicsItemGroup
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
@ -94,8 +31,9 @@ public:
|
||||||
|
|
||||||
class Bus: public QGraphicsItemGroup
|
class Bus: public QGraphicsItemGroup
|
||||||
{
|
{
|
||||||
|
std::shared_ptr<domain::BusInstance> busInstance;
|
||||||
public:
|
public:
|
||||||
Bus(const std::shared_ptr<domain::BusInstance>& instance) {
|
Bus(const std::shared_ptr<domain::BusInstance>& instance): busInstance(instance) {
|
||||||
instance->bus.getDisplay()->render(this);
|
instance->bus.getDisplay()->render(this);
|
||||||
}
|
}
|
||||||
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
|
void contextMenuEvent(QGraphicsSceneContextMenuEvent *event) override;
|
||||||
|
|
|
@ -1,21 +0,0 @@
|
||||||
//
|
|
||||||
// Created by bbr on 18. 04. 2022..
|
|
||||||
//
|
|
||||||
|
|
||||||
#include "dialogmanager.h"
|
|
||||||
#include "attribute_dialog.h"
|
|
||||||
#include "name_dialog.h"
|
|
||||||
|
|
||||||
namespace display {
|
|
||||||
|
|
||||||
void DialogManager::updateAttribute(domain::InstanceAttribute *attribute) {
|
|
||||||
auto dialog = new AttributeDialog(attribute);
|
|
||||||
dialog->exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
void DialogManager::updateName(domain::ComponentInstance *instance) {
|
|
||||||
auto dialog = new NameDialog(instance);
|
|
||||||
dialog->exec();
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
|
@ -1,18 +0,0 @@
|
||||||
#ifndef DIALOG_MANAGER_H
|
|
||||||
#define DIALOG_MANAGER_H
|
|
||||||
|
|
||||||
#include <comdel/domain/instanceattribute.h>
|
|
||||||
#include <comdel/domain/instance.h>
|
|
||||||
|
|
||||||
namespace display {
|
|
||||||
|
|
||||||
class DialogManager {
|
|
||||||
public:
|
|
||||||
static void updateAttribute(domain::InstanceAttribute *attribute);
|
|
||||||
|
|
||||||
static void updateName(domain::ComponentInstance *instance);
|
|
||||||
};
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif //DIALOG_MANAGER_H
|
|
|
@ -13,12 +13,27 @@ namespace display {
|
||||||
|
|
||||||
class NameDialog: public QDialog {
|
class NameDialog: public QDialog {
|
||||||
|
|
||||||
QLineEdit *edit;
|
QLineEdit *edit = nullptr;
|
||||||
domain::ComponentInstance *instance;
|
domain::ComponentInstance *componentInstance = nullptr;
|
||||||
|
domain::BusInstance *busInstance = nullptr;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
NameDialog(domain::ComponentInstance *instance): instance(instance) {
|
NameDialog(domain::ComponentInstance *instance): componentInstance(instance) {
|
||||||
|
auto *layout = new QVBoxLayout(this);
|
||||||
|
layout->addWidget(new QLabel("Izmjeni ime", this));
|
||||||
|
|
||||||
|
edit = new QLineEdit(this);
|
||||||
|
edit->insert(instance->name.c_str());
|
||||||
|
layout->addWidget(edit);
|
||||||
|
this->setWindowTitle("Izmjeni ime");
|
||||||
|
auto *button = new QPushButton("Ažuriraj", this);
|
||||||
|
connect(button, &QPushButton::clicked, this, &NameDialog::onNameChange);
|
||||||
|
layout->addWidget(button);
|
||||||
|
this->setLayout(layout);
|
||||||
|
}
|
||||||
|
|
||||||
|
NameDialog(domain::BusInstance *instance): busInstance(instance) {
|
||||||
auto *layout = new QVBoxLayout(this);
|
auto *layout = new QVBoxLayout(this);
|
||||||
layout->addWidget(new QLabel("Izmjeni ime", this));
|
layout->addWidget(new QLabel("Izmjeni ime", this));
|
||||||
|
|
||||||
|
@ -34,7 +49,11 @@ public:
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void onNameChange() {
|
void onNameChange() {
|
||||||
instance->name = this->edit->text().toStdString();
|
if(componentInstance != nullptr) {
|
||||||
|
componentInstance->name = this->edit->text().toStdString();
|
||||||
|
} else if(busInstance != nullptr) {
|
||||||
|
busInstance->name = this->edit->text().toStdString();
|
||||||
|
}
|
||||||
this->close();
|
this->close();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
|
@ -1,19 +1,20 @@
|
||||||
@source "frisc_library.csl"
|
@source "frisc_library.csl"
|
||||||
|
|
||||||
@schema {
|
@schema {
|
||||||
@instance proc FRISC {
|
@instance procesor2 FRISC {
|
||||||
@position (0, 0)
|
@position (0, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
@instance mem Memorija {
|
@instance memorija2 Memorija {
|
||||||
@position (0, 250)
|
@position (0, 250)
|
||||||
@attribute brzina 25
|
@attribute sinkroniziran false
|
||||||
@attribute kapacitet 2048
|
@attribute brzina 1
|
||||||
|
@attribute kapacitet 1024
|
||||||
@attribute size 8
|
@attribute size 8
|
||||||
@attribute pocetnaAdresa 0
|
@attribute pocetnaAdresa 1023
|
||||||
}
|
}
|
||||||
|
|
||||||
@instance bus glavnaSabirnica {
|
@instance bus2 glavnaSabirnica {
|
||||||
@position (0, 200)
|
@position (0, 200)
|
||||||
@size 100
|
@size 100
|
||||||
}
|
}
|
||||||
|
@ -23,11 +24,11 @@
|
||||||
@size 0
|
@size 0
|
||||||
}
|
}
|
||||||
|
|
||||||
@connection (proc.glavniPin, bus) {
|
@connection (procesor2.glavniPin, bus2) {
|
||||||
}
|
}
|
||||||
@connection (mem.glavniPin, bus) {
|
@connection (memorija2.glavniPin, bus2) {
|
||||||
}
|
}
|
||||||
@connection (proc.glavniPin, testBus, mem.glavniPin) {
|
@connection (procesor2.glavniPin, testBus, memorija2.glavniPin) {
|
||||||
@attribute dmaPoveznica "READY"
|
@attribute dmaPoveznica "READY"
|
||||||
@attribute mmaPoveznica "PIO_DATA"
|
@attribute mmaPoveznica "PIO_DATA"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue