0.3.1
[qanava.git] / src / qanNode.cpp
blobd68d9affecea04eaae6ac883eb0dc03e09d9c4e8
1 /*
2 Qanava - Graph drawing library for QT
3 Copyright (C) 2006 Benoit AUTHEMAN
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Lesser General Public
7 License as published by the Free Software Foundation; either
8 version 2.1 of the License, or (at your option) any later version.
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Lesser General Public License for more details.
15 You should have received a copy of the GNU Lesser General Public
16 License along with this library; if not, write to the Free Software
17 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20 //-----------------------------------------------------------------------------
21 // This file is a part of the Qanava software.
23 // \file laNode.cpp
24 // \author Benoit Autheman (authem_b@epita.fr)
25 // \date 2004 February 15
26 //-----------------------------------------------------------------------------
29 // Qanava headers
30 #include "./qanNode.h"
31 #include "./qanGraph.h"
34 // Std headers
35 #include <algorithm>
36 #include <iterator>
39 namespace qan { // ::qan
42 /* Node Constructor/Destructor *///--------------------------------------------
43 Node::Node( const QString& label ) : AttrFunc( )
45 initAttributes( 5 );
46 setLabel( label );
47 setType( -1 );
48 VectorF v( 2 ); v( 0 ) = 0.f; v( 0 ) = 0.f;
49 setPosition( v );
50 setDimension( v );
53 Node::Node( const QString& label, int type ) : AttrFunc( )
55 initAttributes( 5 );
56 setLabel( label );
57 setType( type );
58 VectorF v( 2 ); v( 0 ) = 0.f; v( 0 ) = 0.f;
59 setPosition( v );
60 setDimension( v );
62 //-----------------------------------------------------------------------------
66 /* Node Edges Management *///--------------------------------------------------
67 void Node::collectOutNodes( Node::List& outNodes )
69 foreach ( Edge* outEdge, _outEdges )
70 outNodes << &outEdge->getDst( );
71 //for ( Edge::List::iterator outEdgeIter = _outEdges.begin( ); outEdgeIter != _outEdges.end( ); outEdgeIter++ )
72 //outNodes << &( ( *outEdgeIter )->getDst( ) );
75 void Node::collectInNodes( Node::List& inNodes )
77 for ( Edge::List::iterator intEdgeIter = _inEdges.begin( ); intEdgeIter != _inEdges.end( ); intEdgeIter++ )
78 inNodes << &( ( *intEdgeIter )->getSrc( ) );
81 void Node::collectOutNodesSet( Node::Set& outNodes ) const
83 // Add all edge destination to the out nodes set
84 const Edge::List& edges = getOutEdges( );
85 Edge::List::const_iterator edgeIter = edges.begin( );
86 for ( ; edgeIter != edges.end( ); edgeIter++ )
87 outNodes.insert( &( *edgeIter )->getDst( ) );
90 void Node::collectInNodesSet( Node::Set& inNodes ) const
92 // Add all edge destination to the out nodes set
93 const Edge::List& edges = getInEdges( );
94 Edge::List::const_iterator edgeIter = edges.begin( );
95 for ( ; edgeIter != edges.end( ); edgeIter++ )
96 inNodes.insert( &( *edgeIter )->getSrc( ) );
99 void Node::getAdjacentNodesSet( Node::Set& adjacentNodes ) const
101 Node::Set outNodes; collectOutNodesSet( outNodes );
102 Node::Set inNodes; collectInNodesSet( inNodes );
104 adjacentNodes.unite( outNodes );
105 adjacentNodes.unite( inNodes );
108 void Node::getNonAdjacentNodesSet( Node::Set& nonAdjacentNodes, const Node::Set& graphNodes ) const
110 Node::Set adjacentNodes; getAdjacentNodesSet( adjacentNodes );
111 nonAdjacentNodes.unite( graphNodes );
112 nonAdjacentNodes.subtract( adjacentNodes );
114 // Remove the node idself from to non adjacent nodes list
115 nonAdjacentNodes.remove( const_cast< Node* >( this ) );
117 //-----------------------------------------------------------------------------
121 /* Node Attributes Management *///---------------------------------------------
122 void Node::setDate( const QString& date )
124 QDateTime dt = QDateTime::fromString( date.toAscii( ), Qt::ISODate );
125 if ( dt.isValid( ) )
126 setAttribute< QDateTime >( Node::DATE, dt );
128 //-----------------------------------------------------------------------------
131 } // ::qan