From 78fdc2acf519c8e796460e2a871c39881989df59 Mon Sep 17 00:00:00 2001 From: Ratche Date: Mon, 15 Apr 2019 20:42:28 +0300 Subject: [PATCH 1/4] Refactoring CommandHandlerView --- OpticalExperiment.pro | 6 +- ui/commandhandlerview.cpp | 118 ++---------------------------- ui/commandhandlerview.h | 18 ----- ui/commandviewmanager.cpp | 114 +++++++++++++++++++++++++++++ ui/commandviewmanager.h | 32 ++++++++ ui/mainwindow.cpp | 3 +- utility/constructorserializer.cpp | 3 +- 7 files changed, 160 insertions(+), 134 deletions(-) create mode 100644 ui/commandviewmanager.cpp create mode 100644 ui/commandviewmanager.h diff --git a/OpticalExperiment.pro b/OpticalExperiment.pro index c321380..f225934 100644 --- a/OpticalExperiment.pro +++ b/OpticalExperiment.pro @@ -58,7 +58,8 @@ SOURCES += \ ui/commandhandlerchart.cpp \ ui/chartview.cpp \ ui/parametersmanager.cpp \ - utility/constructorserializer.cpp + utility/constructorserializer.cpp \ + ui/commandviewmanager.cpp HEADERS += \ command/command.h \ @@ -94,7 +95,8 @@ HEADERS += \ ui/commandhandlerchart.h \ ui/chartview.h \ ui/parametersmanager.h \ - utility/constructorserializer.h + utility/constructorserializer.h \ + ui/commandviewmanager.h FORMS += \ ui/mainwindow.ui diff --git a/ui/commandhandlerview.cpp b/ui/commandhandlerview.cpp index 8a5f3cc..26a1fb6 100644 --- a/ui/commandhandlerview.cpp +++ b/ui/commandhandlerview.cpp @@ -1,32 +1,26 @@ #include #include "commandhandlerview.h" -#include "laseritem.h" -#include "shielditem.h" -#include "genericitem.h" -#include "connectionitem.h" +#include "ui/commandviewmanager.h" CommandHandlerView::CommandHandlerView() : CommandHandler(nullptr), Singleton(*this) {} -void CommandHandlerView::setScene(QGraphicsScene *scene) { - _scene = scene; -} //ToDo: Вполне возможно, что нужно перенести этот метод в CommandHandler bool CommandHandlerView::handle(std::shared_ptr cmnd) { switch (cmnd->typeCommand) { case TypeCommand::CMND_ADD_DEVICE: - return addItem(cmnd); + return CommandViewManager::i()->addItem(cmnd); case TypeCommand::CMND_ADD_CONNECTION: - return addConnection(cmnd); + return CommandViewManager::i()->addConnection(cmnd); case TypeCommand::CMND_DELETE_DEVICE: - return removeItem(cmnd); + return CommandViewManager::i()->removeItem(cmnd); case TypeCommand::CMND_DELETE_CONNECTION: - return removeConnection(cmnd); + return CommandViewManager::i()->removeConnection(cmnd); case TypeCommand::CMND_CHANGE_VARIABLE: - return changeVariables(cmnd); + return CommandViewManager::i()->changeVariables(cmnd); case TypeCommand::CMND_REFRESH_DEVICE: return true; default: @@ -34,103 +28,3 @@ bool CommandHandlerView::handle(std::shared_ptr cmnd) { } } -QPointF CommandHandlerView::getDevicePos(int id) { - auto item = findItemWithId(id); - - if (!item) { - throw std::logic_error("can't find device with id"); - } - - return item->pos(); -} - -bool CommandHandlerView::addItem(std::shared_ptr cmnd) { - ConstructorItem *newDevice = nullptr; - - if (cmnd->data.ad.typeItemId == deviceType::TYPE_LASER) { - newDevice = new LaserItem(cmnd->data.ad.pos(), cmnd->data.ad.id); - } else if (cmnd->data.ad.typeItemId == deviceType::TYPE_SHIELD) { - newDevice = new ShieldItem(cmnd->data.ad.pos(), cmnd->data.ad.id); - } else { - newDevice = new GenericItem(cmnd->data.ad.pos(), cmnd->data.ad.id, - cmnd->data.ad.typeItemId); - } - - _scene->addItem(newDevice); - - _devices.push_back(newDevice); - - return true; -} - -bool CommandHandlerView::addConnection(std::shared_ptr cmnd) { - auto source = findItemWithId(cmnd->data.ac.sourceId); - auto dest = findItemWithId(cmnd->data.ac.destId); - - if (!source || !dest) { - return false; - } - - auto v1 = source->getOutput(cmnd->data.ac.sourceNum); - auto v2 = dest->getInput(cmnd->data.ac.destNum); - - _scene->addItem(new ConnectionItem(v1, v2)); - - /* ToDo: Точно ли так надо возвращать?*/ - return true; -} - -bool CommandHandlerView::removeItem(std::shared_ptr cmnd) { - auto iter = std::find_if(_devices.begin(), _devices.end(), - [cmnd](ConstructorItem *item) - { return item->getId() == cmnd->data.dd.id; }); - - if (iter == _devices.end()) { - return false; - } - - delete *iter; - _devices.erase(iter); - - return true; -} - -bool CommandHandlerView::removeConnection(std::shared_ptr cmnd) { - auto vertex = findItemWithId(cmnd->data.dc.sourceId); - - if (!vertex) { - // что-то поломалось - return false; - } - - auto out = vertex->getOutput(cmnd->data.dc.sourceNum); - - delete out->getConnection(); - - return true; -} - -bool CommandHandlerView::changeVariables(std::shared_ptr cmnd) { - auto device = findItemWithId(cmnd->data.cv.id); - - if (!device) { - return false; - } - - QMap properties; - - for (const auto &i: cmnd->varList) { - properties[i.first.c_str()] = i.second; - } - - device->setProperties(properties); - - return true; -} - -ConstructorItem *CommandHandlerView::findItemWithId(int id) { - auto iter = std::find_if(_devices.begin(), _devices.end(), - [id](ConstructorItem *item){ return item->getId() == id; }); - - return iter != _devices.end() ? *iter : nullptr; -} diff --git a/ui/commandhandlerview.h b/ui/commandhandlerview.h index 8d7006c..991f1e4 100644 --- a/ui/commandhandlerview.h +++ b/ui/commandhandlerview.h @@ -16,25 +16,7 @@ class CommandHandlerView :CommandHandler, public Singleton public: CommandHandlerView(); - void setScene(QGraphicsScene *scene); bool handle(std::shared_ptr cmnd) override; - - // FIXME: этот метод должен быть в другом классе - QPointF getDevicePos(int id); - -private: - bool addItem(std::shared_ptr cmnd); - bool addConnection(std::shared_ptr cmnd); - bool removeItem(std::shared_ptr cmnd); - bool removeConnection(std::shared_ptr cmnd); - bool changeVariables(std::shared_ptr cmnd); - - ConstructorItem *findItemWithId(int id); - -private: - QGraphicsScene *_scene; - - QList _devices; }; #endif // COMANDHANDLERVIEW_H diff --git a/ui/commandviewmanager.cpp b/ui/commandviewmanager.cpp new file mode 100644 index 0000000..74bdbdb --- /dev/null +++ b/ui/commandviewmanager.cpp @@ -0,0 +1,114 @@ +#include "commandviewmanager.h" + +#include "laseritem.h" +#include "shielditem.h" +#include "genericitem.h" +#include "connectionitem.h" + +CommandViewManager::CommandViewManager() : Singleton (*this) { } + +QPointF CommandViewManager::getDevicePos(int id) const { + auto item = findItemWithId(id); + + if (!item) { + throw std::logic_error("can't find device with id"); + } + + return item->pos(); +} + +void CommandViewManager::setScene(QGraphicsScene *scene) { + Q_ASSERT(_scene != nullptr); + _scene = scene; +} + +bool CommandViewManager::addItem(std::shared_ptr cmnd) { + ConstructorItem *newDevice = nullptr; + + if (cmnd->data.ad.typeItemId == deviceType::TYPE_LASER) { + newDevice = new LaserItem(cmnd->data.ad.pos(), cmnd->data.ad.id); + } else if (cmnd->data.ad.typeItemId == deviceType::TYPE_SHIELD) { + newDevice = new ShieldItem(cmnd->data.ad.pos(), cmnd->data.ad.id); + } else { + newDevice = new GenericItem(cmnd->data.ad.pos(), cmnd->data.ad.id, + cmnd->data.ad.typeItemId); + } + + _scene->addItem(newDevice); + + _devices.push_back(newDevice); + + return true; +} + +bool CommandViewManager::addConnection(std::shared_ptr cmnd) { + auto source = findItemWithId(cmnd->data.ac.sourceId); + auto dest = findItemWithId(cmnd->data.ac.destId); + + if (!source || !dest) { + return false; + } + + auto v1 = source->getOutput(cmnd->data.ac.sourceNum); + auto v2 = dest->getInput(cmnd->data.ac.destNum); + + _scene->addItem(new ConnectionItem(v1, v2)); + + /* ToDo: Точно ли так надо возвращать?*/ + return true; +} + +bool CommandViewManager::removeItem(std::shared_ptr cmnd) { + auto iter = std::find_if(_devices.begin(), _devices.end(), + [cmnd](ConstructorItem *item) + { return item->getId() == cmnd->data.dd.id; }); + + if (iter == _devices.end()) { + return false; + } + + delete *iter; + _devices.erase(iter); + + return true; +} + +bool CommandViewManager::removeConnection(std::shared_ptr cmnd) { + auto vertex = findItemWithId(cmnd->data.dc.sourceId); + + if (!vertex) { + // что-то поломалось + return false; + } + + auto out = vertex->getOutput(cmnd->data.dc.sourceNum); + + delete out->getConnection(); + + return true; +} + +bool CommandViewManager::changeVariables(std::shared_ptr cmnd) { + auto device = findItemWithId(cmnd->data.cv.id); + + if (!device) { + return false; + } + + QMap properties; + + for (const auto &i: cmnd->varList) { + properties[i.first.c_str()] = i.second; + } + + device->setProperties(properties); + + return true; +} + +ConstructorItem *CommandViewManager::findItemWithId(int id) const { + auto iter = std::find_if(_devices.begin(), _devices.end(), + [id](ConstructorItem *item){ return item->getId() == id; }); + + return iter != _devices.end() ? *iter : nullptr; +} diff --git a/ui/commandviewmanager.h b/ui/commandviewmanager.h new file mode 100644 index 0000000..edafcc6 --- /dev/null +++ b/ui/commandviewmanager.h @@ -0,0 +1,32 @@ +#ifndef COMMANDVIEWMANAGER_H +#define COMMANDVIEWMANAGER_H +#include + +#include "constructoritem.h" +#include "utility/singleton.hpp" +#include "command/command.h" + +class CommandViewManager : public Singleton +{ +public: + CommandViewManager(); + + void setScene(QGraphicsScene *scene); + + QPointF getDevicePos(int id) const; + + bool addItem(std::shared_ptr cmnd); + bool addConnection(std::shared_ptr cmnd); + bool removeItem(std::shared_ptr cmnd); + bool removeConnection(std::shared_ptr cmnd); + bool changeVariables(std::shared_ptr cmnd); + + ConstructorItem *findItemWithId(int id) const; + +private: + QList _devices; + QGraphicsScene *_scene; + +}; + +#endif // COMMANDVIEWMANAGER_H diff --git a/ui/mainwindow.cpp b/ui/mainwindow.cpp index 69adef1..ec15f98 100644 --- a/ui/mainwindow.cpp +++ b/ui/mainwindow.cpp @@ -10,6 +10,7 @@ #include "commandhandlerview.h" #include "command/commandhanlerglobal.h" #include "ui/commandhandlerchart.h" +#include "ui/commandviewmanager.h" #include "utility/constructorserializer.h" MainWindow::MainWindow(QWidget *parent) : @@ -46,7 +47,7 @@ MainWindow::MainWindow(QWidget *parent) : ui->graphicsView->resize(this->height() * 4 / 5, 0); // ToDo: Скорее всего эту строчку куда-то нужно перенести - CommandHandlerView::i()->setScene(ui->graphicsView->scene()); + CommandViewManager::i()->setScene(ui->graphicsView->scene()); CommandHandlerChart::i()->setTabWidget(ui->tabWidget); } diff --git a/utility/constructorserializer.cpp b/utility/constructorserializer.cpp index b97cc4c..4a4e4a8 100644 --- a/utility/constructorserializer.cpp +++ b/utility/constructorserializer.cpp @@ -11,6 +11,7 @@ #include "deviceconfigs/device.h" #include "devicemanager.h" #include "ui/commandhandlerview.h" +#include "ui/commandviewmanager.h" #include "deviceconfigs/deviceconfiglist.h" #include "command/commandhanlerglobal.h" @@ -30,7 +31,7 @@ QByteArray ConstructorSerializer::serialize() { jsonDevice["id"] = device->getId(); jsonDevice["type"]= device->getType(); - QPointF pos = CommandHandlerView::i()->getDevicePos(device->getId()); + QPointF pos = CommandViewManager::i()->getDevicePos(device->getId()); jsonDevice["pos"] = QJsonArray{ pos.x(), pos.y() }; From 0a443d67073ec200d601c8d45bf0a7c77f56bec8 Mon Sep 17 00:00:00 2001 From: Ratche Date: Mon, 15 Apr 2019 21:50:19 +0300 Subject: [PATCH 2/4] CommandViewManager replacement --- ui/commandhandlerview.cpp | 97 +++++++++++++++++++++++++++++++++++++-- ui/commandhandlerview.h | 10 +++- ui/commandviewmanager.cpp | 91 +++--------------------------------- ui/commandviewmanager.h | 10 ++-- 4 files changed, 110 insertions(+), 98 deletions(-) diff --git a/ui/commandhandlerview.cpp b/ui/commandhandlerview.cpp index 26a1fb6..d4f60f4 100644 --- a/ui/commandhandlerview.cpp +++ b/ui/commandhandlerview.cpp @@ -1,6 +1,11 @@ #include #include "commandhandlerview.h" +#include "laseritem.h" +#include "shielditem.h" +#include "genericitem.h" +#include "connectionitem.h" + #include "ui/commandviewmanager.h" CommandHandlerView::CommandHandlerView() @@ -12,15 +17,15 @@ CommandHandlerView::CommandHandlerView() bool CommandHandlerView::handle(std::shared_ptr cmnd) { switch (cmnd->typeCommand) { case TypeCommand::CMND_ADD_DEVICE: - return CommandViewManager::i()->addItem(cmnd); + return addItem(cmnd); case TypeCommand::CMND_ADD_CONNECTION: - return CommandViewManager::i()->addConnection(cmnd); + return addConnection(cmnd); case TypeCommand::CMND_DELETE_DEVICE: - return CommandViewManager::i()->removeItem(cmnd); + return removeItem(cmnd); case TypeCommand::CMND_DELETE_CONNECTION: - return CommandViewManager::i()->removeConnection(cmnd); + return removeConnection(cmnd); case TypeCommand::CMND_CHANGE_VARIABLE: - return CommandViewManager::i()->changeVariables(cmnd); + return changeVariables(cmnd); case TypeCommand::CMND_REFRESH_DEVICE: return true; default: @@ -28,3 +33,85 @@ bool CommandHandlerView::handle(std::shared_ptr cmnd) { } } +bool CommandHandlerView::addItem(std::shared_ptr cmnd) { + ConstructorItem *newDevice = nullptr; + + if (cmnd->data.ad.typeItemId == deviceType::TYPE_LASER) { + newDevice = new LaserItem(cmnd->data.ad.pos(), cmnd->data.ad.id); + } else if (cmnd->data.ad.typeItemId == deviceType::TYPE_SHIELD) { + newDevice = new ShieldItem(cmnd->data.ad.pos(), cmnd->data.ad.id); + } else { + newDevice = new GenericItem(cmnd->data.ad.pos(), cmnd->data.ad.id, + cmnd->data.ad.typeItemId); + } + + CommandViewManager::i()->scene()->addItem(newDevice); + + CommandViewManager::i()->devices().push_back(newDevice); + + return true; +} + +bool CommandHandlerView::addConnection(std::shared_ptr cmnd) { + auto source = CommandViewManager::i()->findItemWithId(cmnd->data.ac.sourceId); + auto dest = CommandViewManager::i()->findItemWithId(cmnd->data.ac.destId); + + if (source == nullptr || dest == nullptr) { + return false; + } + + auto v1 = source->getOutput(cmnd->data.ac.sourceNum); + auto v2 = dest->getInput(cmnd->data.ac.destNum); + + CommandViewManager::i()->scene()->addItem(new ConnectionItem(v1, v2)); + + return true; +} + +bool CommandHandlerView::removeItem(std::shared_ptr cmnd) { + auto iter = std::find_if(CommandViewManager::i()->devices().begin(), CommandViewManager::i()->devices().end(), + [cmnd](ConstructorItem *item) + { return item->getId() == cmnd->data.dd.id; }); + + if (iter == CommandViewManager::i()->devices().end()) { + return false; + } + + delete *iter; + CommandViewManager::i()->devices().erase(iter); + + return true; +} + +bool CommandHandlerView::removeConnection(std::shared_ptr cmnd) { + auto vertex = CommandViewManager::i()->findItemWithId(cmnd->data.dc.sourceId); + + if (!vertex) { + // что-то поломалось + return false; + } + + auto out = vertex->getOutput(cmnd->data.dc.sourceNum); + + delete out->getConnection(); + + return true; +} + +bool CommandHandlerView::changeVariables(std::shared_ptr cmnd) { + auto device = CommandViewManager::i()->findItemWithId(cmnd->data.cv.id); + + if (!device) { + return false; + } + + QMap properties; + + for (const auto &i: cmnd->varList) { + properties[i.first.c_str()] = i.second; + } + + device->setProperties(properties); + + return true; +} diff --git a/ui/commandhandlerview.h b/ui/commandhandlerview.h index 991f1e4..dbf6751 100644 --- a/ui/commandhandlerview.h +++ b/ui/commandhandlerview.h @@ -14,9 +14,17 @@ class ConstructorItem; class CommandHandlerView :CommandHandler, public Singleton { public: - CommandHandlerView(); + CommandHandlerView(); bool handle(std::shared_ptr cmnd) override; + +private: + bool addItem(std::shared_ptr cmnd); + bool addConnection(std::shared_ptr cmnd); + bool removeItem(std::shared_ptr cmnd); + bool removeConnection(std::shared_ptr cmnd); + bool changeVariables(std::shared_ptr cmnd); + }; #endif // COMANDHANDLERVIEW_H diff --git a/ui/commandviewmanager.cpp b/ui/commandviewmanager.cpp index 74bdbdb..126e2cf 100644 --- a/ui/commandviewmanager.cpp +++ b/ui/commandviewmanager.cpp @@ -1,10 +1,5 @@ #include "commandviewmanager.h" -#include "laseritem.h" -#include "shielditem.h" -#include "genericitem.h" -#include "connectionitem.h" - CommandViewManager::CommandViewManager() : Singleton (*this) { } QPointF CommandViewManager::getDevicePos(int id) const { @@ -22,88 +17,14 @@ void CommandViewManager::setScene(QGraphicsScene *scene) { _scene = scene; } -bool CommandViewManager::addItem(std::shared_ptr cmnd) { - ConstructorItem *newDevice = nullptr; - - if (cmnd->data.ad.typeItemId == deviceType::TYPE_LASER) { - newDevice = new LaserItem(cmnd->data.ad.pos(), cmnd->data.ad.id); - } else if (cmnd->data.ad.typeItemId == deviceType::TYPE_SHIELD) { - newDevice = new ShieldItem(cmnd->data.ad.pos(), cmnd->data.ad.id); - } else { - newDevice = new GenericItem(cmnd->data.ad.pos(), cmnd->data.ad.id, - cmnd->data.ad.typeItemId); - } - - _scene->addItem(newDevice); - - _devices.push_back(newDevice); - - return true; -} - -bool CommandViewManager::addConnection(std::shared_ptr cmnd) { - auto source = findItemWithId(cmnd->data.ac.sourceId); - auto dest = findItemWithId(cmnd->data.ac.destId); - - if (!source || !dest) { - return false; - } - - auto v1 = source->getOutput(cmnd->data.ac.sourceNum); - auto v2 = dest->getInput(cmnd->data.ac.destNum); - - _scene->addItem(new ConnectionItem(v1, v2)); - - /* ToDo: Точно ли так надо возвращать?*/ - return true; -} - -bool CommandViewManager::removeItem(std::shared_ptr cmnd) { - auto iter = std::find_if(_devices.begin(), _devices.end(), - [cmnd](ConstructorItem *item) - { return item->getId() == cmnd->data.dd.id; }); - - if (iter == _devices.end()) { - return false; - } - - delete *iter; - _devices.erase(iter); - - return true; -} - -bool CommandViewManager::removeConnection(std::shared_ptr cmnd) { - auto vertex = findItemWithId(cmnd->data.dc.sourceId); - - if (!vertex) { - // что-то поломалось - return false; - } - - auto out = vertex->getOutput(cmnd->data.dc.sourceNum); - - delete out->getConnection(); - - return true; +QGraphicsScene *CommandViewManager::scene() const +{ + return _scene; } -bool CommandViewManager::changeVariables(std::shared_ptr cmnd) { - auto device = findItemWithId(cmnd->data.cv.id); - - if (!device) { - return false; - } - - QMap properties; - - for (const auto &i: cmnd->varList) { - properties[i.first.c_str()] = i.second; - } - - device->setProperties(properties); - - return true; +QList& CommandViewManager::devices() +{ + return _devices; } ConstructorItem *CommandViewManager::findItemWithId(int id) const { diff --git a/ui/commandviewmanager.h b/ui/commandviewmanager.h index edafcc6..9a5c55d 100644 --- a/ui/commandviewmanager.h +++ b/ui/commandviewmanager.h @@ -12,15 +12,11 @@ class CommandViewManager : public Singleton CommandViewManager(); void setScene(QGraphicsScene *scene); + QGraphicsScene * scene() const; + + QList &devices(); QPointF getDevicePos(int id) const; - - bool addItem(std::shared_ptr cmnd); - bool addConnection(std::shared_ptr cmnd); - bool removeItem(std::shared_ptr cmnd); - bool removeConnection(std::shared_ptr cmnd); - bool changeVariables(std::shared_ptr cmnd); - ConstructorItem *findItemWithId(int id) const; private: From 067c192947332763fb08305f8e4916f5e299e910 Mon Sep 17 00:00:00 2001 From: Ratche Date: Mon, 15 Apr 2019 23:19:04 +0300 Subject: [PATCH 3/4] Refactoring CommandViewManager --- deviceconfigs/commandhadlermodel.h | 1 - ui/commandhandlerview.cpp | 29 +++++------------------ ui/commandhandlerview.h | 1 - ui/commandviewmanager.cpp | 37 ++++++++++++++++++++++-------- ui/commandviewmanager.h | 12 +++++----- 5 files changed, 40 insertions(+), 40 deletions(-) diff --git a/deviceconfigs/commandhadlermodel.h b/deviceconfigs/commandhadlermodel.h index 1ecb886..1a33f6d 100644 --- a/deviceconfigs/commandhadlermodel.h +++ b/deviceconfigs/commandhadlermodel.h @@ -19,7 +19,6 @@ class CommandHadlerModel : CommandHandler, public Singleton bool deleteConnection(pCommand cmnd); bool changeVariables(pCommand cmnd); bool refreshItem(pCommand cmnd); - }; #endif // COMANDHADLERMODEL_H diff --git a/ui/commandhandlerview.cpp b/ui/commandhandlerview.cpp index d4f60f4..094ddbf 100644 --- a/ui/commandhandlerview.cpp +++ b/ui/commandhandlerview.cpp @@ -45,9 +45,8 @@ bool CommandHandlerView::addItem(std::shared_ptr cmnd) { cmnd->data.ad.typeItemId); } - CommandViewManager::i()->scene()->addItem(newDevice); - - CommandViewManager::i()->devices().push_back(newDevice); + CommandViewManager::i()->addItemToScene(newDevice); + CommandViewManager::i()->addDevice(newDevice); return true; } @@ -63,36 +62,22 @@ bool CommandHandlerView::addConnection(std::shared_ptr cmnd) { auto v1 = source->getOutput(cmnd->data.ac.sourceNum); auto v2 = dest->getInput(cmnd->data.ac.destNum); - CommandViewManager::i()->scene()->addItem(new ConnectionItem(v1, v2)); + CommandViewManager::i()->addItemToScene(new ConnectionItem(v1, v2)); return true; } bool CommandHandlerView::removeItem(std::shared_ptr cmnd) { - auto iter = std::find_if(CommandViewManager::i()->devices().begin(), CommandViewManager::i()->devices().end(), - [cmnd](ConstructorItem *item) - { return item->getId() == cmnd->data.dd.id; }); - - if (iter == CommandViewManager::i()->devices().end()) { - return false; - } - - delete *iter; - CommandViewManager::i()->devices().erase(iter); - - return true; + return CommandViewManager::i()->removeDevice(cmnd->data.dd.id); } bool CommandHandlerView::removeConnection(std::shared_ptr cmnd) { auto vertex = CommandViewManager::i()->findItemWithId(cmnd->data.dc.sourceId); - if (!vertex) { - // что-то поломалось + if (vertex == nullptr) return false; - } auto out = vertex->getOutput(cmnd->data.dc.sourceNum); - delete out->getConnection(); return true; @@ -101,12 +86,10 @@ bool CommandHandlerView::removeConnection(std::shared_ptr cmnd) { bool CommandHandlerView::changeVariables(std::shared_ptr cmnd) { auto device = CommandViewManager::i()->findItemWithId(cmnd->data.cv.id); - if (!device) { + if (device == nullptr) return false; - } QMap properties; - for (const auto &i: cmnd->varList) { properties[i.first.c_str()] = i.second; } diff --git a/ui/commandhandlerview.h b/ui/commandhandlerview.h index dbf6751..a09de7c 100644 --- a/ui/commandhandlerview.h +++ b/ui/commandhandlerview.h @@ -24,7 +24,6 @@ class CommandHandlerView :CommandHandler, public Singleton bool removeItem(std::shared_ptr cmnd); bool removeConnection(std::shared_ptr cmnd); bool changeVariables(std::shared_ptr cmnd); - }; #endif // COMANDHANDLERVIEW_H diff --git a/ui/commandviewmanager.cpp b/ui/commandviewmanager.cpp index 126e2cf..637bfd9 100644 --- a/ui/commandviewmanager.cpp +++ b/ui/commandviewmanager.cpp @@ -2,10 +2,10 @@ CommandViewManager::CommandViewManager() : Singleton (*this) { } -QPointF CommandViewManager::getDevicePos(int id) const { +QPointF CommandViewManager::getDevicePos(int id) { auto item = findItemWithId(id); - if (!item) { + if (item == nullptr) { throw std::logic_error("can't find device with id"); } @@ -17,17 +17,36 @@ void CommandViewManager::setScene(QGraphicsScene *scene) { _scene = scene; } -QGraphicsScene *CommandViewManager::scene() const -{ - return _scene; +bool CommandViewManager::addItemToScene(QGraphicsItem * const item) { + if (item == nullptr) + return false; + + _scene->addItem(item); + return true; } -QList& CommandViewManager::devices() -{ - return _devices; +bool CommandViewManager::addDevice(ConstructorItem *dev) { + if (dev == nullptr) + return false; + + _devices.push_back(dev); + return true; } -ConstructorItem *CommandViewManager::findItemWithId(int id) const { +bool CommandViewManager::removeDevice(int id) { + auto iter = std::find_if(_devices.begin(), _devices.end(), + [id](ConstructorItem *item){ return item->getId() == id; }); + + if (iter == _devices.end()) + return false; + + delete *iter; + _devices.erase(iter); + + return true; +} + +ConstructorItem *CommandViewManager::findItemWithId(int id) { auto iter = std::find_if(_devices.begin(), _devices.end(), [id](ConstructorItem *item){ return item->getId() == id; }); diff --git a/ui/commandviewmanager.h b/ui/commandviewmanager.h index 9a5c55d..5d2c66c 100644 --- a/ui/commandviewmanager.h +++ b/ui/commandviewmanager.h @@ -11,18 +11,18 @@ class CommandViewManager : public Singleton public: CommandViewManager(); - void setScene(QGraphicsScene *scene); - QGraphicsScene * scene() const; + void setScene(QGraphicsScene *scene); + bool addItemToScene(QGraphicsItem * const item); - QList &devices(); + bool addDevice(ConstructorItem *dev); + bool removeDevice(int id); - QPointF getDevicePos(int id) const; - ConstructorItem *findItemWithId(int id) const; + QPointF getDevicePos(int id); + ConstructorItem * findItemWithId(int id); private: QList _devices; QGraphicsScene *_scene; - }; #endif // COMMANDVIEWMANAGER_H From f4e11b87564d6452a4552e2c5b34d43296e55322 Mon Sep 17 00:00:00 2001 From: Ratche Date: Mon, 15 Apr 2019 23:47:17 +0300 Subject: [PATCH 4/4] Refactoring code style --- ui/commandhandlerview.h | 5 +---- ui/commandviewmanager.h | 5 ++--- 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/ui/commandhandlerview.h b/ui/commandhandlerview.h index a09de7c..68e59a9 100644 --- a/ui/commandhandlerview.h +++ b/ui/commandhandlerview.h @@ -1,9 +1,6 @@ #ifndef COMANDHANDLERVIEW_H #define COMANDHANDLERVIEW_H #include -#include -#include -#include #include "command/commandhandler.h" #include "utility/singleton.hpp" @@ -12,7 +9,7 @@ class ConstructorItem; -class CommandHandlerView :CommandHandler, public Singleton { +class CommandHandlerView : CommandHandler, public Singleton { public: CommandHandlerView(); diff --git a/ui/commandviewmanager.h b/ui/commandviewmanager.h index 5d2c66c..279bcae 100644 --- a/ui/commandviewmanager.h +++ b/ui/commandviewmanager.h @@ -1,13 +1,12 @@ #ifndef COMMANDVIEWMANAGER_H #define COMMANDVIEWMANAGER_H #include +#include #include "constructoritem.h" #include "utility/singleton.hpp" -#include "command/command.h" -class CommandViewManager : public Singleton -{ +class CommandViewManager : public Singleton { public: CommandViewManager();