X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FDDS%2FDDS_Dictionary.cxx;h=8ff6ffa92989828c630662e252853e605fe000d6;hb=e6caa123c65e3c4a3017364ec5bb4225fd898465;hp=ff4c516f34c1467ae7f123947cbbf0b00d558f72;hpb=1c889394b028b786898a995d38c07c8f3d564837;p=modules%2Fgui.git diff --git a/src/DDS/DDS_Dictionary.cxx b/src/DDS/DDS_Dictionary.cxx index ff4c516f3..8ff6ffa92 100644 --- a/src/DDS/DDS_Dictionary.cxx +++ b/src/DDS/DDS_Dictionary.cxx @@ -1,24 +1,25 @@ -// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE +// Copyright (C) 2007-2015 CEA/DEN, EDF R&D, OPEN CASCADE // -// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, -// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS +// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN, +// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS // -// This library is free software; you can redistribute it and/or -// modify it under the terms of the GNU Lesser General Public -// License as published by the Free Software Foundation; either -// version 2.1 of the License. +// This library is free software; you can redistribute it and/or +// modify it under the terms of the GNU Lesser General Public +// License as published by the Free Software Foundation; either +// version 2.1 of the License, or (at your option) any later version. // -// This library is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -// Lesser General Public License for more details. +// This library is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +// Lesser General Public License for more details. // -// You should have received a copy of the GNU Lesser General Public -// License along with this library; if not, write to the Free Software -// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// You should have received a copy of the GNU Lesser General Public +// License along with this library; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA // -// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com +// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com // + #include "DDS_Dictionary.h" #include "DDS_KeyWords.h" @@ -40,6 +41,8 @@ IMPLEMENT_STANDARD_HANDLE(DDS_Dictionary, MMgt_TShared) IMPLEMENT_STANDARD_RTTIEXT(DDS_Dictionary, MMgt_TShared) +Handle(DDS_Dictionary) DDS_Dictionary::myDictionary = Handle(DDS_Dictionary)(); + /*! \class DDS_Dictionary \brief This class provides an information about used datums, @@ -422,12 +425,10 @@ void DDS_Dictionary::SetActiveUnitSystem( const TCollection_AsciiString& theSyst */ Handle_DDS_Dictionary DDS_Dictionary::Get() { - static Handle(DDS_Dictionary) sDictionary; - - if ( sDictionary.IsNull() ) - sDictionary = new DDS_Dictionary(); + if ( myDictionary.IsNull() ) + myDictionary = new DDS_Dictionary(); - return sDictionary; + return myDictionary; } /*! @@ -453,9 +454,8 @@ Standard_Boolean DDS_Dictionary::Load( const TCollection_AsciiString theFileName LDOM_Document aDoc = aParser.getDocument(); LDOM_Element aDocElement = aDoc.getDocumentElement(); - for ( LDOM_Element aComponentElem = aDocElement.GetChildByTagName( KeyWord( "COMPONENT" ) ); - !aComponentElem.isNull(); aComponentElem = aComponentElem.GetSiblingByTagName() ) - aDic->FillDataMap( aComponentElem, aDocElement ); + if ( !aDocElement.isNull() ) + aDic->FillDataMap( aDocElement ); _LoadMap.Add( theFileName ); @@ -524,17 +524,20 @@ Handle_DDS_DicItem DDS_Dictionary::GetDicItem( const TCollection_AsciiString& th /*! \brief Fill the internal data structures from the XML node. - \param theComponentData component XML node \param theDocElement document XML node */ -void DDS_Dictionary::FillDataMap( const LDOM_Element& theComponentData, const LDOM_Element& theDocElement ) +void DDS_Dictionary::FillDataMap( const LDOM_Element& theDocElement ) { - TCollection_AsciiString aCompName = theComponentData.getAttribute( KeyWord( "COMPONENT_NAME" ) ); - if ( !myGroupMap.Contains( aCompName ) ) - myGroupMap.Add( aCompName, new DDS_DicGroup( aCompName ) ); - Handle(DDS_DicGroup) aDicGroup = myGroupMap.FindFromKey( aCompName ); - aDicGroup->FillDataMap( theComponentData, theDocElement ); - myGroupMap.Add( aCompName, aDicGroup ); + for ( LDOM_Element aComponentElem = theDocElement.GetChildByTagName( KeyWord( "COMPONENT" ) ); + !aComponentElem.isNull(); aComponentElem = aComponentElem.GetSiblingByTagName() ) + { + TCollection_AsciiString aCompName = aComponentElem.getAttribute( KeyWord( "COMPONENT_NAME" ) ); + if ( !myGroupMap.Contains( aCompName ) ) + myGroupMap.Add( aCompName, CreateGroup( aCompName ) ); + Handle(DDS_DicGroup) aDicGroup = myGroupMap.FindFromKey( aCompName ); + aDicGroup->FillDataMap( aComponentElem, theDocElement ); + myGroupMap.Add( aCompName, aDicGroup ); + } } /*! @@ -550,9 +553,7 @@ Standard_Real DDS_Dictionary::ToSI( const Standard_Real theValue, const Standard if ( theUnits && *theUnits && strcmp( theUnits, "%" ) ) { try { -#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; -#endif aRetValue = UnitsAPI::AnyToSI( theValue, theUnits ); } catch( Standard_Failure ) { @@ -577,9 +578,7 @@ Standard_Real DDS_Dictionary::FromSI( const Standard_Real theValue, const Standa if ( theUnits && *theUnits && strcmp( theUnits, "%" ) ) { try { -#if (OCC_VERSION_MAJOR << 16 | OCC_VERSION_MINOR << 8 | OCC_VERSION_MAINTENANCE) > 0x060100 OCC_CATCH_SIGNALS; -#endif aRetValue = UnitsAPI::AnyFromSI( theValue, theUnits ); } catch( Standard_Failure ) { @@ -605,3 +604,25 @@ void DDS_Dictionary::GetKeys( const TCollection_AsciiString& theComponent, TColS if( !aDicGroup.IsNull() ) aDicGroup->GetKeys( seq ); } + +/*! + \brief Create instance of a dictionary group. This method can + be used for customization data dictionary by specific + groups design. + \return New dictionary group instance. +*/ +Handle(DDS_DicGroup) DDS_Dictionary::CreateGroup( const TCollection_AsciiString& theCompName ) const +{ + return new DDS_DicGroup( theCompName ); +} + +/*! + \brief Set instance of dictionary. This method might be used in descendant classes to initialize + custom dictionary and replace the default implementation. + This method overrides static handle on dictionary that is available + through Get() method +*/ +void DDS_Dictionary::SetDictionary( const Handle(DDS_Dictionary)& theDict ) +{ + myDictionary = theDict; +}