+// -------------------------------------------------------------------------\r
+PipelineEditor::QNodesEditor::\r
+TWorkspace* PipelineEditor::QNodesEditor::\r
+workspace( )\r
+{\r
+ return( this->m_Workspace );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+const PipelineEditor::QNodesEditor::\r
+TWorkspace* PipelineEditor::QNodesEditor::\r
+workspace( ) const\r
+{\r
+ return( this->m_Workspace );\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+void PipelineEditor::QNodesEditor::\r
+setWorkspace( TWorkspace* ws )\r
+{\r
+ this->m_Workspace = ws;\r
+ this->m_Graph = TGraph::New( );\r
+\r
+ // Create blocks\r
+ auto vIt = this->m_Workspace->GetGraph( )->BeginVertices( );\r
+ auto vIt_end = this->m_Workspace->GetGraph( )->EndVertices( );\r
+ for( ; vIt != vIt_end; ++vIt )\r
+ {\r
+ this->_CreateBlock(\r
+ dynamic_cast< TFilter* >( vIt->second.GetPointer( ) ),\r
+ QPointF( vIt->second->GetViewX( ), vIt->second->GetViewY( ) )\r
+ );\r
+\r
+ } // rof\r
+\r
+ // Add edges\r
+ auto rIt = this->m_Workspace->GetGraph( )->BeginEdgesRows( );\r
+ auto rIt_end = this->m_Workspace->GetGraph( )->EndEdgesRows( );\r
+ for( ; rIt != rIt_end; ++rIt )\r
+ {\r
+ QNEBlock* orig = this->m_Graph->GetVertex( rIt->first );\r
+ auto cIt = rIt->second.begin( );\r
+ for( ; cIt != rIt->second.end( ); ++cIt )\r
+ {\r
+ QNEBlock* dest = this->m_Graph->GetVertex( cIt->first );\r
+ auto eIt = cIt->second.begin( );\r
+ for( ; eIt != cIt->second.end( ); ++eIt )\r
+ {\r
+ QNEOutputPort* op = orig->outputPort( eIt->first.c_str( ) );\r
+ QNEInputPort* ip = dest->inputPort( eIt->second.c_str( ) );\r
+ if( op == NULL || ip == NULL )\r
+ continue;\r
+\r
+ QNEConnection* c = new QNEConnection( 0, this->m_Scene );\r
+ c->setPort1( op );\r
+ c->setPort2( ip );\r
+ c->updatePosFromPorts( );\r
+ c->updatePath( );\r
+ this->m_Graph->AddConnection( rIt->first, cIt->first, c );\r
+\r
+ } // rof\r
+\r
+ } // rof\r
+\r
+ } // rof\r
+}\r
+\r
+// -------------------------------------------------------------------------\r
+std::string PipelineEditor::QNodesEditor::\r
+createFilter( const std::string& filter, const QPointF& pnt )\r
+{\r
+ std::string name = filter;\r
+ while( this->m_Workspace->HasFilter( name ) )\r
+ name += std::string( "_" );\r
+ if( this->m_Workspace->CreateFilter( filter, name ) )\r
+ {\r
+ this->_CreateBlock( this->m_Workspace->GetFilter( name ), pnt );\r
+ return( name );\r
+ }\r
+ else\r
+ return( "" );\r
+}\r
+\r