#include "util/selectorManager.h" #include "util/creatingSelector.h" #include "util/movingSelector.h" #include "util/subMovingSelector.h" #include "util/linkMovingSelector.h" #include "util/rotationSelector.h" #include "util/scalingSelector.h" #include "util/editingSelector.h" #include "util/connectingSelector.h" SelectorManager::SelectorManager(FixedPortsModel* model,QObject *parent) : _graphModel(model) ,QObject(parent) { //创建所有的selector BaseSelector* baseSelector = new BaseSelector(model,this); connect(baseSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(baseSelector); CreatingSelector* creatingSelector = new CreatingSelector(model,this); connect(creatingSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(creatingSelector); MovingSelector* movingSelector = new MovingSelector(model,this); connect(movingSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(movingSelector); SubMovingSelector* subMovSelector = new SubMovingSelector(model,this); connect(subMovSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(subMovSelector); LinkMovingSelector* linkMovSelector = new LinkMovingSelector(model,this); connect(linkMovSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(linkMovSelector); RotationSelector* rotationSelector = new RotationSelector(model,this); connect(rotationSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(rotationSelector); ScalingSelector* scalingSelector = new ScalingSelector(model,this); connect(scalingSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(scalingSelector); EditingSelector* editingSelector = new EditingSelector(model,this); connect(editingSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(editingSelector); ConnectingSelector* connectingSelector = new ConnectingSelector(model,this); connect(connectingSelector, SIGNAL(setWorkingSelector(SelectorType)), this, SLOT(onSignal_setWorkingSelector(SelectorType))); m_vecSelectors.push_back(connectingSelector); m_curSelector = ST_base; } SelectorManager::~SelectorManager() { //析构所有的selector,因为是通过基类指针析构,所以基类的析构函数必须为虚函数 // for(auto it = m_vecSelectors.begin(); it != m_vecSelectors.end(); it++) // delete (*it); } BaseSelector* SelectorManager::getWorkingSelector() { for(auto it = m_vecSelectors.begin(); it != m_vecSelectors.end(); it++) { if((*it)->getSelectorType()==m_curSelector) { return (*it); } } return nullptr; } void SelectorManager::setDrawGraphicsItem(GraphicsItemType item) { for(auto it = m_vecSelectors.begin(); it != m_vecSelectors.end(); it++) { if((*it)->getSelectorType()==ST_cerating) { CreatingSelector* creatingSelector = dynamic_cast(*it); creatingSelector->setCreatingItem(item); } } } void SelectorManager::setName(const QString& str) { for(auto iter:m_vecSelectors) { iter->setSceneName(str); } } void SelectorManager::onSignal_setWorkingSelector(SelectorType s) { setWorkingSelector(s); }