]> Creatis software - cpPlugins.git/blob - lib/cpPlugins/Interface/Interface.cxx
Base objects migration
[cpPlugins.git] / lib / cpPlugins / Interface / Interface.cxx
1 #include <cpPlugins/Interface/Interface.h>
2
3 // -------------------------------------------------------------------------
4 cpPlugins::Interface::Interface::
5 Interface( )
6 {
7   this->m_Pluma.acceptProviderType< ObjectProvider >( );
8 }
9
10 // -------------------------------------------------------------------------
11 cpPlugins::Interface::Interface::
12 ~Interface( )
13 {
14   this->UnloadAll( );
15 }
16
17 // -------------------------------------------------------------------------
18 cpPlugins::Interface::Interface::
19 TClasses& cpPlugins::Interface::Interface::
20 GetClasses( )
21 {
22   return( this->m_Classes );
23 }
24
25 // -------------------------------------------------------------------------
26 const cpPlugins::Interface::Interface::
27 TClasses& cpPlugins::Interface::Interface::
28 GetClasses( ) const
29 {
30   return( this->m_Classes );
31 }
32
33 // -------------------------------------------------------------------------
34 cpPlugins::Interface::Object* cpPlugins::Interface::Interface::
35 CreateObject( const std::string& name ) const
36 {
37   TClassesIterator cIt = this->m_Classes.find( name );
38   if( cIt != this->m_Classes.end( ) )
39   {
40     ObjectProvider* provider =
41       dynamic_cast< ObjectProvider* >( this->m_Providers[ cIt->second ] );
42     if( provider != NULL )
43       return( dynamic_cast< Object* >( provider->create( ) ) );
44
45   } // fi
46   return( NULL );
47 }
48
49 // -------------------------------------------------------------------------
50 bool cpPlugins::Interface::Interface::
51 Load( const std::string& path )
52 {
53   if( this->m_Pluma.load( path ) )
54   {
55     this->_LoadClasses( );
56     return( true );
57   }
58   else
59     return( false );
60 }
61
62 // -------------------------------------------------------------------------
63 bool cpPlugins::Interface::Interface::
64 Load( const std::string& folder, const std::string& name )
65 {
66   if( this->m_Pluma.load( folder, name ) )
67   {
68     this->_LoadClasses( );
69     return( true );
70   }
71   else
72     return( false );
73 }
74
75 // -------------------------------------------------------------------------
76 int cpPlugins::Interface::Interface::
77 LoadFromFolder( const std::string& folder, bool r )
78 {
79   if( this->m_Pluma.loadFromFolder( folder, r ) )
80   {
81     this->_LoadClasses( );
82     return( true );
83   }
84   else
85     return( false );
86 }
87
88 // -------------------------------------------------------------------------
89 bool cpPlugins::Interface::Interface::
90 Unload( const std::string& name )
91 {
92   if( this->m_Pluma.unload( name ) )
93   {
94     this->m_Providers.clear( );
95     this->m_Classes.clear( );
96     this->_LoadClasses( );
97     return( true );
98   }
99   else
100     return( false );
101 }
102
103 // -------------------------------------------------------------------------
104 void cpPlugins::Interface::Interface::
105 UnloadAll( )
106 {
107   this->m_Pluma.unloadAll( );
108   this->m_Providers.clear( );
109   this->m_Classes.clear( );
110 }
111
112 // -------------------------------------------------------------------------
113 void cpPlugins::Interface::Interface::
114 GetLoadedPlugins( std::vector< const std::string* >& names ) const
115 {
116   this->m_Pluma.getLoadedPlugins( names );
117 }
118
119 // -------------------------------------------------------------------------
120 bool cpPlugins::Interface::Interface::
121 IsLoaded( const std::string& name ) const
122 {
123   return( this->m_Pluma.isLoaded( name ) );
124 }
125
126 // -------------------------------------------------------------------------
127 void cpPlugins::Interface::Interface::
128 _LoadClasses( )
129 {
130   this->m_Providers.clear( );
131   this->m_Classes.clear( );
132   this->m_Pluma.getProviders( this->m_Providers );
133
134   // Get reader provider
135   for( unsigned int i = 0; i < this->m_Providers.size( ); ++i )
136   {
137     Object* dummy = this->m_Providers[ i ]->create( );
138     this->m_Classes[ dummy->GetClassName( ) ] = i;
139     delete dummy;
140
141   } // rof
142 }
143
144 // eof - $RCSfile$