00001 00002 /************************************************************************/ 00003 /* This file is part of openMask(c) INRIA, CNRS, Universite de Rennes 1 */ 00004 /* 1993-2002, thereinafter the Software */ 00005 /* */ 00006 /* The Software has been developped within the Siames Project. */ 00007 /* INRIA, the University of Rennes 1 and CNRS jointly hold intellectual */ 00008 /* property rights */ 00009 /* */ 00010 /* The Software has been registered with the Agence pour la Protection */ 00011 /* des Programmes (APP) under registration number */ 00012 /* IDDN.FR.001.510008.00.S.P.2001.000.41200 */ 00013 /* */ 00014 /* This file may be distributed under the terms of the Q Public License */ 00015 /* version 1.0 as defined by Trolltech AS of Norway and appearing in */ 00016 /* the file LICENSE.QPL included in the packaging of this file. */ 00017 /* */ 00018 /* Licensees holding valid specific licenses issued by INRIA, CNRS or */ 00019 /* Universite Rennes 1 for the software may use this file in */ 00020 /* acordance with that specific license */ 00021 /************************************************************************/ 00022 00023 #include "OMKTriggerContainerExtension.h" 00024 #include "OMKValuedEventListenerCallBack.h" 00025 #include "OMKExtensibleSimulatedObject.h" 00026 #include "OMKExtension.h" 00027 00028 using namespace OMK ; 00029 00030 //============================================================================= 00031 // TriggerContainerExtension 00032 //============================================================================= 00033 00034 REGISTER_EXTENSION_FACTORY( TriggerContainerExtension, "TriggerContainer" ) ; 00035 //----------------------------------------------------------------- 00036 TriggerContainerExtension::TriggerContainerExtension( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 00037 : ExtensionT< ExtensibleSimulatedObject >( owner, id, registerExtension ), 00038 _onExtensionsSet(), 00039 _offExtensionsSet(), 00040 _trigger( 0 ) 00041 { 00042 const ConfigurationParameterDescriptor* node = owner->getObjectDescriptor().getExtensionsParameters() ; 00043 const ConfigurationParameterDescriptor* extensionNode = 0 ; 00044 ParametersAccessor::get( node, getId().getString(), extensionNode ) ; 00045 const ConfigurationParameterDescriptor* extensionsNode = 0 ; 00046 ParametersAccessor::get( extensionNode, "ExtensionsOn", extensionsNode ) ; 00047 _onExtensionsSet.createExtensionsFromParameters( _owner, extensionsNode ) ; 00048 extensionsNode = 0 ; 00049 ParametersAccessor::get( extensionNode, "ExtensionsOff", extensionsNode ) ; 00050 _offExtensionsSet.createExtensionsFromParameters( _owner, extensionsNode ) ; 00051 } 00052 //----------------------------------------------------------------- 00053 TriggerContainerExtension::~TriggerContainerExtension() 00054 { 00055 _onExtensionsSet.deleteExtensions() ; 00056 _offExtensionsSet.deleteExtensions() ; 00057 } 00058 //----------------------------------------------------------------- 00059 bool TriggerContainerExtension::loadObjectParameters( const ConfigurationParameterDescriptor * node ) 00060 { 00061 //---Load extension 00062 return _onExtensionsSet.loadFromObjectParameters( node ) 00063 && _offExtensionsSet.loadFromObjectParameters( node ) ; 00064 } 00065 //----------------------------------------------------------------- 00066 bool TriggerContainerExtension::loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 00067 { 00068 bool ok = true ; 00069 //--- The trigger boolean attribute 00070 Name triggerId ; 00071 ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ; 00072 _trigger = _owner->getBaseAttribute< bool >( triggerId ) ; 00073 ok = ok && _trigger != 0 ; 00074 //---Load Extension On 00075 const ConfigurationParameterDescriptor* extensionsNode = 0 ; 00076 ParametersAccessor::get( node, "ExtensionsOn", extensionsNode ) ; 00077 //Load Extension order if there is one 00078 _onExtensionsSet.loadOrder( extensionsNode, "LoadParametersOrder", _onExtensionsSet._orderedExtensionsForLoadParameters ) ; 00079 //Load extension 00080 ok = ok && _onExtensionsSet.loadFromExtensionsParameters( extensionsNode ) ; 00081 _onExtensionsSet.loadOrder( extensionsNode, "PreComputeOrder" , _onExtensionsSet._orderedExtensionsForPreCompute ) ; 00082 _onExtensionsSet.loadOrder( extensionsNode, "PostComputeOrder" , _onExtensionsSet._orderedExtensionsForPostCompute ) ; 00083 00084 //---Load Extension Off 00085 extensionsNode = 0 ; 00086 ParametersAccessor::get( node, "ExtensionsOff", extensionsNode ) ; 00087 //Load Extension order if there is one 00088 _offExtensionsSet.loadOrder( extensionsNode, "LoadParametersOrder", _offExtensionsSet._orderedExtensionsForLoadParameters ) ; 00089 //Load extension 00090 ok = ok && _offExtensionsSet.loadFromExtensionsParameters( extensionsNode ) ; 00091 _offExtensionsSet.loadOrder( extensionsNode, "PreComputeOrder" , _offExtensionsSet._orderedExtensionsForPreCompute ) ; 00092 _offExtensionsSet.loadOrder( extensionsNode, "PostComputeOrder" , _offExtensionsSet._orderedExtensionsForPostCompute ) ; 00093 00094 return ok ; 00095 } 00096 //----------------------------------------------------------------- 00097 void TriggerContainerExtension::preComputeParameters() 00098 { 00099 ( _trigger->get() ? _onExtensionsSet : _offExtensionsSet ).preComputeExtension() ; 00100 } 00101 //----------------------------------------------------------------- 00102 void TriggerContainerExtension::postComputeParameters() 00103 { 00104 ( _trigger->get() ? _onExtensionsSet : _offExtensionsSet ).postComputeExtension() ; 00105 } 00106 //----------------------------------------------------------------- 00107 00108 00109 //============================================================================= 00110 // MultiTriggerContainerExtension 00111 //============================================================================= 00112 00113 REGISTER_EXTENSION_FACTORY( MultiTriggerContainerExtension, "MultiTriggerContainer" ) ; 00114 //----------------------------------------------------------------- 00115 MultiTriggerContainerExtension::MultiTriggerContainerExtension( ExtensibleSimulatedObject* owner, const Name& id, bool registerExtension ) 00116 : ExtensionT< ExtensibleSimulatedObject >( owner, id, registerExtension ), 00117 _default( 0 ), 00118 _extensionsSets(), 00119 _trigger( 0 ) 00120 { 00121 const ConfigurationParameterDescriptor* node = owner->getObjectDescriptor().getExtensionsParameters() ; 00122 const ConfigurationParameterDescriptor* extensionNode = 0 ; 00123 ParametersAccessor::get( node, getId().getString(), extensionNode ) ; 00124 for( int i = 0 ; ; i++ ) 00125 { 00126 std::ostringstream name ; 00127 name << "ExtensionsSet" << i ; 00128 const ConfigurationParameterDescriptor* extensionsNode = 0 ; 00129 if( ParametersAccessor::get( extensionNode, name.str(), extensionsNode ) ) 00130 { 00131 _extensionsSets.push_back( ExtensionManager() ) ; 00132 _extensionsSets[ i ].createExtensionsFromParameters( _owner, extensionsNode ) ; 00133 } 00134 } 00135 } 00136 //----------------------------------------------------------------- 00137 MultiTriggerContainerExtension::~MultiTriggerContainerExtension() 00138 { 00139 for( size_t i = 0 ; i < _extensionsSets.size() ; i++ ) 00140 { 00141 _extensionsSets[ i ].deleteExtensions() ; 00142 } 00143 _extensionsSets.clear() ; 00144 } 00145 //----------------------------------------------------------------- 00146 bool MultiTriggerContainerExtension::loadObjectParameters( const ConfigurationParameterDescriptor * node ) 00147 { 00148 bool ok = true ; 00149 for( size_t i = 0 ; i < _extensionsSets.size() ; i++ ) 00150 { 00151 ok = _extensionsSets[ i ].loadFromObjectParameters( node ) && ok ; 00152 } 00153 return ok ; 00154 } 00155 //----------------------------------------------------------------- 00156 bool MultiTriggerContainerExtension::loadExtensionParameters( const ConfigurationParameterDescriptor * node ) 00157 { 00158 bool ok = true ; 00159 //--- The trigger boolean attribute 00160 Name triggerId ; 00161 ok = ok && ParametersAccessor::get( node, "TriggerId", triggerId, _owner ) ; 00162 _trigger = _owner->getBaseAttribute< int >( triggerId ) ; 00163 ok = ok && _trigger != 0 ; 00164 ParametersAccessor::get( node, "Default", _default ) ; 00165 00166 //---Load Extensions 00167 for( size_t i = 0 ; i < _extensionsSets.size() ; i++ ) 00168 { 00169 std::ostringstream name ; 00170 name << "ExtensionsSet" << i ; 00171 const ConfigurationParameterDescriptor* extensionsNode = 0 ; 00172 if( ParametersAccessor::get( node, name.str(), extensionsNode ) ) 00173 { 00174 //Load Extension order if there is one 00175 _extensionsSets[ i ].loadOrder( extensionsNode, "LoadParametersOrder", _extensionsSets[ i ]._orderedExtensionsForLoadParameters ) ; 00176 //Load extension 00177 ok = ok && _extensionsSets[ i ].loadFromExtensionsParameters( extensionsNode ) ; 00178 _extensionsSets[ i ].loadOrder( extensionsNode, "PreComputeOrder" , _extensionsSets[ i ]._orderedExtensionsForPreCompute ) ; 00179 _extensionsSets[ i ].loadOrder( extensionsNode, "PostComputeOrder" , _extensionsSets[ i ]._orderedExtensionsForPostCompute ) ; 00180 } 00181 } 00182 00183 return ok ; 00184 } 00185 //----------------------------------------------------------------- 00186 void MultiTriggerContainerExtension::preComputeParameters() 00187 { 00188 int index = _trigger->get() ; 00189 index = ( index < 0 || (int)_extensionsSets.size() < index ) ? _default : index ; 00190 _extensionsSets[ index ].preComputeExtension() ; 00191 } 00192 //----------------------------------------------------------------- 00193 void MultiTriggerContainerExtension::postComputeParameters() 00194 { 00195 int index = _trigger->get() ; 00196 index = ( index < 0 || (int)_extensionsSets.size() < index ) ? _default : index ; 00197 _extensionsSets[ index ].postComputeExtension() ; 00198 } 00199 //----------------------------------------------------------------- 00200
Documentation generated on Mon Jun 9 11:45:57 2008 |
Generated with doxygen by Dimitri van Heesch , 1997-2007 |