45 #include <QTextCursor>
46 #include <QGraphicsSceneMouseEvent>
63 PluginScene::PluginScene(QMenu *pMenuPluginItem,
PluginGui *pPluginGui)
64 : QGraphicsScene(pPluginGui)
65 , m_pPluginGui(pPluginGui)
67 m_pMenuPluginItem = pMenuPluginItem;
68 m_mode = MovePluginItem;
71 m_qColorLine = QColor(65,113,156);
77 PluginScene::~PluginScene()
91 case InsertPluginItem:
94 name = m_pActionPluginItem->text();
95 item =
new PluginItem(pPlugin, m_pMenuPluginItem);
98 emit itemInserted(item);
103 m_pActionPluginItem->setEnabled(
false);
107 line =
new QGraphicsLineItem(QLineF(pos,pos));
108 line->setPen(QPen(m_qColorLine, 1));
120 if(pActionPluginItem->isEnabled())
122 QString name = pActionPluginItem->text();
123 qint32 idx = m_pPluginGui->m_pPluginManager->
findByName(name);
126 if(m_pPluginGui->m_pPluginSceneManager->
addPlugin(pPlugin, pAddedPlugin))
130 pActionPluginItem->setEnabled(
false);
142 void PluginScene::mousePressEvent(QGraphicsSceneMouseEvent *mouseEvent)
144 if (mouseEvent->button() != Qt::LeftButton)
149 QGraphicsScene::mousePressEvent(mouseEvent);
155 void PluginScene::mouseMoveEvent(QGraphicsSceneMouseEvent *mouseEvent)
157 if (m_mode == InsertLine && line != 0) {
158 QLineF newLine(line->line().p1(), mouseEvent->scenePos());
159 line->setLine(newLine);
160 }
else if (m_mode == MovePluginItem) {
161 QGraphicsScene::mouseMoveEvent(mouseEvent);
168 void PluginScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)
170 if (line != 0 && m_mode == InsertLine) {
171 QList<QGraphicsItem *> startItems = items(line->line().p1());
172 if (startItems.count() && startItems.first() == line)
173 startItems.removeFirst();
174 QList<QGraphicsItem *> endItems = items(line->line().p2());
175 if (endItems.count() && endItems.first() == line)
176 endItems.removeFirst();
182 if (startItems.count() > 0 && endItems.count() > 0 &&
183 startItems.first()->type() == PluginItem::Type &&
184 endItems.first()->type() == PluginItem::Type &&
185 startItems.first() != endItems.first()) {
192 if(pConnection->isConnected())
194 Arrow *arrow =
new Arrow(startItem, endItem, pConnection);
195 arrow->setColor(m_qColorLine);
196 startItem->addArrow(arrow);
197 endItem->addArrow(arrow);
198 arrow->setZValue(-1000.0);
200 arrow->updatePosition();
207 QGraphicsScene::mouseReleaseEvent(mouseEvent);
virtual bool multiInstanceAllowed() const =0
int findByName(const QString &name)
QSharedPointer< PluginConnectorConnection > SPtr
void insertItem(const QPointF &pos)
const QVector< IPlugin * > & getPlugins()
PluginGui class declaration.
static QSharedPointer< PluginConnectorConnection > create(IPlugin::SPtr sender, IPlugin::SPtr receiver, QObject *parent=0)
The IPlugin class is the base interface class of all plugins.
QSharedPointer< IPlugin > SPtr
PluginScene class declaration.
bool insertPlugin(QAction *pActionPluginItem, IPlugin::SPtr &pAddedPlugin)
bool addPlugin(const IPlugin *pPlugin, IPlugin::SPtr &pAddedPlugin)