return( this->m_Editor );
}
-// -------------------------------------------------------------------------
-/* TODO
- void cpPipelineEditor::Canvas::
- keyPressEvent( QKeyEvent* event )
- {
- }
-
- // -------------------------------------------------------------------------
- void cpPipelineEditor::Canvas::
- timerEvent( QTimerEvent* event )
- {
- }
-*/
-
// -------------------------------------------------------------------------
void cpPipelineEditor::Canvas::
wheelEvent( QWheelEvent* event )
this->scale( scaleFactor, scaleFactor );
}
-// -------------------------------------------------------------------------
- /*
-void cpPipelineEditor::Canvas::
-_createBlock( TFilter* f )
-{
- if( f == NULL )
- return;
-
- // Add block
- Block* b = new Block( 0, this->scene( ) );
- b->addPort( f->GetName( ), 0, Port::NamePort );
- b->addPort( f->GetClassName( ).c_str( ), 0, Port::TypePort );
-
- // Add input ports
- std::set< std::string > inputs;
- f->GetInputsNames( inputs );
- for( auto iIt = inputs.begin( ); iIt != inputs.end( ); ++iIt )
- b->addInputPort( iIt->c_str( ) );
- //in_ports[ vIt->first ][ *iIt ] = b->addInputPort( iIt->c_str( ) );
-
- // Add output ports
- std::set< std::string > outputs;
- f->GetOutputsNames( outputs );
- for( auto oIt = outputs.begin( ); oIt != outputs.end( ); ++oIt )
- b->addOutputPort( oIt->c_str( ) );
- // out_ports[ vIt->first ][ *oIt ] = b->addOutputPort( oIt->c_str( ) );
-
- // Keep a trace of this visual graph
- this->m_Graph->InsertVertex( f->GetName( ), b );
-
- // Add vertices and keep track of ports
- std::map< std::string, std::map< std::string, Port* > >
- in_ports, out_ports;
- auto vIt = this->m_Workspace->GetGraph( )->BeginVertices( );
- auto vIt_end = this->m_Workspace->GetGraph( )->EndVertices( );
- for( ; vIt != vIt_end; ++vIt )
- {
- // Add block
- Block* b = new Block( 0, scene );
- b->addPort( vIt->second->GetName( ), 0, Port::NamePort );
- b->addPort( vIt->second->GetClassName( ).c_str( ), 0, Port::TypePort );
-
- // Get filter
- auto f = dynamic_cast< TFilter* >( vIt->second.GetPointer( ) );
- if( f == NULL )
- continue;
-
- // Add input ports
- std::set< std::string > inputs;
- f->GetInputsNames( inputs );
- for( auto iIt = inputs.begin( ); iIt != inputs.end( ); ++iIt )
- in_ports[ vIt->first ][ *iIt ] = b->addInputPort( iIt->c_str( ) );
-
- // Add output ports
- std::set< std::string > outputs;
- f->GetOutputsNames( outputs );
- for( auto oIt = outputs.begin( ); oIt != outputs.end( ); ++oIt )
- out_ports[ vIt->first ][ *oIt ] = b->addOutputPort( oIt->c_str( ) );
-
- // Keep a trace of this visual graph
- this->m_Graph->InsertVertex( vIt->first, b );
-
- } // rof
-}
- */
-
// eof - $RCSfile$
-
-
-/*
-
-// -------------------------------------------------------------------------
-void GraphWidget::
-draw( )
-{
- if( this->m_Workspace == NULL )
- return;
-}
-
-// -------------------------------------------------------------------------
-void GraphWidget::itemMoved()
-{
- if (!timerId)
- timerId = startTimer(1000 / 25);
-}
-
-void GraphWidget::keyPressEvent(QKeyEvent *event)
-{
- switch (event->key()) {
- case Qt::Key_Up:
- centerNode->moveBy(0, -20);
- break;
- case Qt::Key_Down:
- centerNode->moveBy(0, 20);
- break;
- case Qt::Key_Left:
- centerNode->moveBy(-20, 0);
- break;
- case Qt::Key_Right:
- centerNode->moveBy(20, 0);
- break;
- case Qt::Key_Plus:
- zoomIn();
- break;
- case Qt::Key_Minus:
- zoomOut();
- break;
- case Qt::Key_Space:
- case Qt::Key_Enter:
- shuffle();
- break;
- default:
- QGraphicsView::keyPressEvent(event);
- }
-}
-
-void GraphWidget::timerEvent(QTimerEvent *event)
-{
- Q_UNUSED(event);
-
- QList<Node *> nodes;
- foreach (QGraphicsItem *item, scene()->items()) {
- if (Node *node = qgraphicsitem_cast<Node *>(item))
- nodes << node;
- }
-
- foreach (Node *node, nodes)
- node->calculateForces();
-
- bool itemsMoved = false;
- foreach (Node *node, nodes) {
- if (node->advance())
- itemsMoved = true;
- }
-
- if (!itemsMoved) {
- killTimer(timerId);
- timerId = 0;
- }
-}
-
-void GraphWidget::wheelEvent(QWheelEvent *event)
-{
- scaleView(pow((double)2, -event->delta() / 240.0));
-}
-
-void GraphWidget::drawBackground(QPainter *painter, const QRectF &rect)
-{
- //Q_UNUSED(rect);
-
- // Shadow
- QRectF sceneRect = rect;//this->sceneRect();
- QRectF rightShadow(sceneRect.right(), sceneRect.top() + 5, 5, sceneRect.height());
- QRectF bottomShadow(sceneRect.left() + 5, sceneRect.bottom(), sceneRect.width(), 5);
- if (rightShadow.intersects(rect) || rightShadow.contains(rect))
- painter->fillRect(rightShadow, Qt::darkGray);
- if (bottomShadow.intersects(rect) || bottomShadow.contains(rect))
- painter->fillRect(bottomShadow, Qt::darkGray);
-
- // Fill
- QLinearGradient gradient(sceneRect.topLeft(), sceneRect.bottomRight());
- gradient.setColorAt(0, Qt::white);
- gradient.setColorAt(1, Qt::lightGray);
- painter->fillRect(rect.intersect(sceneRect), gradient);
- painter->setBrush(Qt::NoBrush);
- painter->drawRect(sceneRect);
-
-#if !defined(Q_OS_SYMBIAN) && !defined(Q_WS_MAEMO_5)
- // Text
- QRectF textRect(sceneRect.left() + 4, sceneRect.top() + 4,
- sceneRect.width() - 4, sceneRect.height() - 4);
- QString message(tr("Click and drag the nodes around, and zoom with the mouse "
- "wheel or the '+' and '-' keys"));
-
- QFont font = painter->font();
- font.setBold(true);
- font.setPointSize(14);
- painter->setFont(font);
- painter->setPen(Qt::lightGray);
- painter->drawText(textRect.translated(2, 2), message);
- painter->setPen(Qt::black);
- painter->drawText(textRect, message);
-#endif
-}
-
-void GraphWidget::scaleView(qreal scaleFactor)
-{
- qreal factor = transform().scale(scaleFactor, scaleFactor).mapRect(QRectF(0, 0, 1, 1)).width();
- if (factor < 0.07 || factor > 100)
- return;
-
- scale(scaleFactor, scaleFactor);
-}
-
-void GraphWidget::shuffle()
-{
- foreach (QGraphicsItem *item, scene()->items()) {
- if (qgraphicsitem_cast<Node *>(item))
- item->setPos(-150 + qrand() % 300, -150 + qrand() % 300);
- }
-}
-
-void GraphWidget::zoomIn()
-{
- scaleView(qreal(1.2));
-}
-
-void GraphWidget::zoomOut()
-{
- scaleView(1 / qreal(1.2));
-}
-
-
-*/
}\r
\r
// -------------------------------------------------------------------------\r
-void cpPipelineEditor::Editor::\r
+cpPipelineEditor::Block* cpPipelineEditor::Editor::\r
_createBlock( TFilter* f, const QPointF& pnt )\r
{\r
if( f == NULL )\r
- return;\r
+ return( NULL );\r
\r
// Add block\r
Block* b = new Block( f, 0, this->m_Scene );\r
b->setPos( pnt );\r
\r
+ // Mark exposed inputs\r
+ auto& e_in = this->m_Workspace->GetExposedInputPorts( );\r
+ std::set< std::string > f_in;\r
+ f->GetInputsNames( f_in );\r
+ for( auto iIt = f_in.begin( ); iIt != f_in.end( ); ++iIt )\r
+ {\r
+ auto eIt = e_in.begin( );\r
+ auto fIt = e_in.end( );\r
+ for( ; eIt != e_in.end( ) && fIt == e_in.end( ); ++eIt )\r
+ if( eIt->second.second == *iIt )\r
+ fIt = eIt;\r
+ if( fIt == e_in.end( ) )\r
+ continue;\r
+ \r
+ auto port = b->inputPort( iIt->c_str( ) );\r
+ port->setExtendedName( fIt->first.c_str( ) );\r
+ port->setExtend( true );\r
+\r
+ } // rof\r
+\r
+ // Mark exposed outputs\r
+ auto& e_out = this->m_Workspace->GetExposedOutputPorts( );\r
+ std::set< std::string > f_out;\r
+ f->GetOutputsNames( f_out );\r
+ for( auto iIt = f_out.begin( ); iIt != f_out.end( ); ++iIt )\r
+ {\r
+ auto eIt = e_out.begin( );\r
+ auto fIt = e_out.end( );\r
+ for( ; eIt != e_out.end( ) && fIt == e_out.end( ); ++eIt )\r
+ if( eIt->second.second == *iIt )\r
+ fIt = eIt;\r
+ if( fIt == e_out.end( ) )\r
+ continue;\r
+ \r
+ auto port = b->outputPort( iIt->c_str( ) );\r
+ port->setExtendedName( fIt->first.c_str( ) );\r
+ port->setExtend( true );\r
+\r
+ } // rof\r
+\r
// Keep a trace of this visual graph\r
this->m_Graph->SetVertex( f->GetName( ), b );\r
+ return( b );\r
}\r
\r
// -------------------------------------------------------------------------\r