Salome HOME
0f6602604f9af6ec8fd7648fb67106250016d67c
[modules/kernel.git] / src / SALOMEDSImpl / SALOMEDSImpl_AttributeTreeNode.hxx
1 // Copyright (C) 2007-2023  CEA, EDF, OPEN CASCADE
2 //
3 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
4 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
5 //
6 // This library is free software; you can redistribute it and/or
7 // modify it under the terms of the GNU Lesser General Public
8 // License as published by the Free Software Foundation; either
9 // version 2.1 of the License, or (at your option) any later version.
10 //
11 // This library is distributed in the hope that it will be useful,
12 // but WITHOUT ANY WARRANTY; without even the implied warranty of
13 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 // Lesser General Public License for more details.
15 //
16 // You should have received a copy of the GNU Lesser General Public
17 // License along with this library; if not, write to the Free Software
18 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
19 //
20 // See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
21 //
22
23 //  File   : SALOMEDSImpl_AttributeTreeNode.hxx
24 //  Author : Sergey RUIN
25 //  Module : SALOME
26 //
27 #ifndef _SALOMEDSImpl_AttributeTreeNode_HeaderFile
28 #define _SALOMEDSImpl_AttributeTreeNode_HeaderFile
29
30 #include "SALOMEDSImpl_Defines.hxx"
31 #include "DF_Attribute.hxx"
32 #include "DF_Label.hxx"
33 #include <string>
34 #include "SALOMEDSImpl_GenericAttribute.hxx"
35
36 class SALOMEDSIMPL_EXPORT SALOMEDSImpl_AttributeTreeNode : 
37   public SALOMEDSImpl_GenericAttribute 
38 {
39 public:
40
41   const static std::string& GetDefaultTreeID();
42   static SALOMEDSImpl_AttributeTreeNode* Set(const DF_Label& L, const std::string& ID);
43
44   SALOMEDSImpl_AttributeTreeNode();
45   void SetFather(const SALOMEDSImpl_AttributeTreeNode* value);
46   void SetPrevious(const SALOMEDSImpl_AttributeTreeNode* value);
47   void SetNext(const SALOMEDSImpl_AttributeTreeNode* value);
48   void SetFirst(const SALOMEDSImpl_AttributeTreeNode* value);
49   void SetTreeID(const std::string& value);
50
51   bool Append(SALOMEDSImpl_AttributeTreeNode* value, int* childIndex = 0 );
52   bool Prepend(SALOMEDSImpl_AttributeTreeNode* value);
53   bool Remove();
54   bool InsertBefore(SALOMEDSImpl_AttributeTreeNode* value);
55   bool InsertAfter(SALOMEDSImpl_AttributeTreeNode* value);
56
57   SALOMEDSImpl_AttributeTreeNode* GetFather() const { return myFather; }
58   SALOMEDSImpl_AttributeTreeNode* GetPrevious() const { return myPrevious; }
59   SALOMEDSImpl_AttributeTreeNode* GetNext() const { return myNext; }
60   SALOMEDSImpl_AttributeTreeNode* GetFirst() const { return myFirst; }
61
62   bool HasFather() { return (myFather); }
63   bool HasPrevious() { return (myPrevious); }
64   bool HasNext() {return (myNext); }
65   bool HasFirst() { return (myFirst); }
66   const std::string& GetTreeID() { return ID(); }
67   int Depth() const;
68   bool IsRoot() const ;
69   SALOMEDSImpl_AttributeTreeNode* Root() const;
70   bool IsAscendant (const SALOMEDSImpl_AttributeTreeNode* ofTN) const;
71   bool IsDescendant(const SALOMEDSImpl_AttributeTreeNode* value) const;
72   bool IsFather(const SALOMEDSImpl_AttributeTreeNode* value) const;
73   bool IsChild(const SALOMEDSImpl_AttributeTreeNode* value) const;
74
75   virtual std::string Save();
76   virtual void Load(const std::string&); 
77   virtual std::string Type(); 
78
79   const std::string& ID() const;
80   void Restore(DF_Attribute* with) ;
81   void Paste(DF_Attribute* into);
82   DF_Attribute* NewEmpty() const;
83   ~SALOMEDSImpl_AttributeTreeNode() {;}
84
85   virtual void AfterAddition();
86   virtual void BeforeForget();
87
88 private:
89
90   std::string myTreeID; 
91   SALOMEDSImpl_AttributeTreeNode* myFather;
92   SALOMEDSImpl_AttributeTreeNode* myPrevious;
93   SALOMEDSImpl_AttributeTreeNode* myNext;
94   SALOMEDSImpl_AttributeTreeNode* myFirst;
95
96   friend class SALOMEDSImpl_ChildNodeIterator;
97
98 };
99
100 #endif