From 3ac87d29be6f3484efcfb3bcc204b7f99faa1eed Mon Sep 17 00:00:00 2001 From: Leonardo Florez-Valencia Date: Fri, 15 Jan 2016 09:57:21 -0500 Subject: [PATCH 1/1] Editor finished --- lib/cpPipelineEditor/Block.cxx | 11 -- lib/cpPipelineEditor/Canvas.cxx | 227 ------------------------ lib/cpPipelineEditor/Editor.cxx | 45 ++++- lib/cpPipelineEditor/Editor.h | 2 +- lib/cpPlugins/Interface/Workspace.cxx | 16 ++ lib/cpPlugins/Interface/Workspace.h | 3 + lib/cpPlugins/Interface/WorkspaceIO.cxx | 5 +- 7 files changed, 65 insertions(+), 244 deletions(-) diff --git a/lib/cpPipelineEditor/Block.cxx b/lib/cpPipelineEditor/Block.cxx index 96e60f8..6d473ef 100644 --- a/lib/cpPipelineEditor/Block.cxx +++ b/lib/cpPipelineEditor/Block.cxx @@ -233,17 +233,6 @@ _configPort( Port* port ) i->setPos( -this->m_Width / 2 - 2 * port->radius( ), y ); else if( dynamic_cast< OutputPort* >( i ) != NULL ) i->setPos( this->m_Width / 2, y ); - - /* TODO - Port* p = dynamic_cast< Port* >( i ); - if( p == NULL ) - continue; - - if( dynamic_cast< OutputPort* >( p ) != NULL ) - p->setPos( this->m_Width / 2 + port->radius( ), y ); - else - p->setPos( -this->m_Width / 2 - port->radius( ), y ); - */ y += h; } // rof diff --git a/lib/cpPipelineEditor/Canvas.cxx b/lib/cpPipelineEditor/Canvas.cxx index a5fcc3f..29897fb 100644 --- a/lib/cpPipelineEditor/Canvas.cxx +++ b/lib/cpPipelineEditor/Canvas.cxx @@ -44,20 +44,6 @@ editor( ) const return( this->m_Editor ); } -// ------------------------------------------------------------------------- -/* TODO - void cpPipelineEditor::Canvas:: - keyPressEvent( QKeyEvent* event ) - { - } - - // ------------------------------------------------------------------------- - void cpPipelineEditor::Canvas:: - timerEvent( QTimerEvent* event ) - { - } -*/ - // ------------------------------------------------------------------------- void cpPipelineEditor::Canvas:: wheelEvent( QWheelEvent* event ) @@ -121,217 +107,4 @@ _scaleView( qreal scaleFactor ) 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 nodes; - foreach (QGraphicsItem *item, scene()->items()) { - if (Node *node = qgraphicsitem_cast(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(item)) - item->setPos(-150 + qrand() % 300, -150 + qrand() % 300); - } -} - -void GraphWidget::zoomIn() -{ - scaleView(qreal(1.2)); -} - -void GraphWidget::zoomOut() -{ - scaleView(1 / qreal(1.2)); -} - - -*/ diff --git a/lib/cpPipelineEditor/Editor.cxx b/lib/cpPipelineEditor/Editor.cxx index 237bb58..9ab6b35 100644 --- a/lib/cpPipelineEditor/Editor.cxx +++ b/lib/cpPipelineEditor/Editor.cxx @@ -148,18 +148,59 @@ itemAt( const QPointF& pos ) } // ------------------------------------------------------------------------- -void cpPipelineEditor::Editor:: +cpPipelineEditor::Block* cpPipelineEditor::Editor:: _createBlock( TFilter* f, const QPointF& pnt ) { if( f == NULL ) - return; + return( NULL ); // Add block Block* b = new Block( f, 0, this->m_Scene ); b->setPos( pnt ); + // Mark exposed inputs + auto& e_in = this->m_Workspace->GetExposedInputPorts( ); + std::set< std::string > f_in; + f->GetInputsNames( f_in ); + for( auto iIt = f_in.begin( ); iIt != f_in.end( ); ++iIt ) + { + auto eIt = e_in.begin( ); + auto fIt = e_in.end( ); + for( ; eIt != e_in.end( ) && fIt == e_in.end( ); ++eIt ) + if( eIt->second.second == *iIt ) + fIt = eIt; + if( fIt == e_in.end( ) ) + continue; + + auto port = b->inputPort( iIt->c_str( ) ); + port->setExtendedName( fIt->first.c_str( ) ); + port->setExtend( true ); + + } // rof + + // Mark exposed outputs + auto& e_out = this->m_Workspace->GetExposedOutputPorts( ); + std::set< std::string > f_out; + f->GetOutputsNames( f_out ); + for( auto iIt = f_out.begin( ); iIt != f_out.end( ); ++iIt ) + { + auto eIt = e_out.begin( ); + auto fIt = e_out.end( ); + for( ; eIt != e_out.end( ) && fIt == e_out.end( ); ++eIt ) + if( eIt->second.second == *iIt ) + fIt = eIt; + if( fIt == e_out.end( ) ) + continue; + + auto port = b->outputPort( iIt->c_str( ) ); + port->setExtendedName( fIt->first.c_str( ) ); + port->setExtend( true ); + + } // rof + // Keep a trace of this visual graph this->m_Graph->SetVertex( f->GetName( ), b ); + return( b ); } // ------------------------------------------------------------------------- diff --git a/lib/cpPipelineEditor/Editor.h b/lib/cpPipelineEditor/Editor.h index 51c8768..f7a2615 100644 --- a/lib/cpPipelineEditor/Editor.h +++ b/lib/cpPipelineEditor/Editor.h @@ -64,7 +64,7 @@ namespace cpPipelineEditor private: QGraphicsItem* itemAt( const QPointF& pos ); - inline void _createBlock( TFilter* f, const QPointF& pnt ); + inline Block* _createBlock( TFilter* f, const QPointF& pnt ); protected: typedef QGraphicsSceneDragDropEvent QGraphicsSceneDragEnterEvent; diff --git a/lib/cpPlugins/Interface/Workspace.cxx b/lib/cpPlugins/Interface/Workspace.cxx index be724ac..022f9fa 100644 --- a/lib/cpPlugins/Interface/Workspace.cxx +++ b/lib/cpPlugins/Interface/Workspace.cxx @@ -276,6 +276,22 @@ RenameExposedOutputPort( return( false ); } +// ------------------------------------------------------------------------- +const cpPlugins::Interface::Workspace:: +TExposedPorts& cpPlugins::Interface::Workspace:: +GetExposedInputPorts( ) const +{ + return( this->m_ExposedInputPorts ); +} + +// ------------------------------------------------------------------------- +const cpPlugins::Interface::Workspace:: +TExposedPorts& cpPlugins::Interface::Workspace:: +GetExposedOutputPorts( ) const +{ + return( this->m_ExposedOutputPorts ); +} + // ------------------------------------------------------------------------- /* TODO cpPlugins::Interface::Workspace:: diff --git a/lib/cpPlugins/Interface/Workspace.h b/lib/cpPlugins/Interface/Workspace.h index 1f2fada..92315d7 100644 --- a/lib/cpPlugins/Interface/Workspace.h +++ b/lib/cpPlugins/Interface/Workspace.h @@ -102,6 +102,9 @@ namespace cpPlugins const std::string& new_name ); + const TExposedPorts& GetExposedInputPorts( ) const; + const TExposedPorts& GetExposedOutputPorts( ) const; + TData* GetExposedInput( const std::string& name ); const TData* GetExposedInput( const std::string& name ) const; TData* GetExposedOutput( const std::string& name ); diff --git a/lib/cpPlugins/Interface/WorkspaceIO.cxx b/lib/cpPlugins/Interface/WorkspaceIO.cxx index 1d0ea81..dcf6c68 100644 --- a/lib/cpPlugins/Interface/WorkspaceIO.cxx +++ b/lib/cpPlugins/Interface/WorkspaceIO.cxx @@ -77,12 +77,11 @@ LoadWorkspace( const std::string& fname ) port->Attribute( "filter" ), port->Attribute( "filter_port_name" ) ); - port = connection->NextSiblingElement( "exposed_input_port" ); + port = port->NextSiblingElement( "exposed_input_port" ); } // elihw // Read exposed outputs -#error ACA VOY port = root->FirstChildElement( "exposed_output_port" ); while( port != NULL ) { @@ -91,7 +90,7 @@ LoadWorkspace( const std::string& fname ) port->Attribute( "filter" ), port->Attribute( "filter_port_name" ) ); - port = connection->NextSiblingElement( "exposed_output_port" ); + port = port->NextSiblingElement( "exposed_output_port" ); } // elihw -- 2.45.2