1 #include <PrsMgr_PresentationManager.ixx>
2 #include <PrsMgr_PresentableObject.hxx>
3 #include <PrsMgr_Presentation.hxx>
4 #include <PrsMgr_Presentations.hxx>
5 #include <PrsMgr_ModedPresentation.hxx>
6 #include <TColStd_ListIteratorOfListOfTransient.hxx>
9 PrsMgr_PresentationManager::PrsMgr_PresentationManager ():
10 myImmediateMode(Standard_False){}
13 void PrsMgr_PresentationManager::Display(
14 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
15 const Standard_Integer aMode)
17 if (!HasPresentation(aPresentableObject,aMode)){
18 AddPresentation(aPresentableObject,aMode);
20 else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
21 Update(aPresentableObject,aMode);
25 Add(aPresentableObject,aMode);
27 Presentation(aPresentableObject,aMode)->Display();
30 void PrsMgr_PresentationManager::Erase(
31 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
32 const Standard_Integer aMode)
34 if (HasPresentation(aPresentableObject,aMode)){
36 Remove(aPresentableObject,aMode);
38 Presentation(aPresentableObject,aMode)->Erase();}
41 void PrsMgr_PresentationManager::Clear(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
42 const Standard_Integer aMode)
44 if (HasPresentation(aPresentableObject,aMode)){
46 Remove(aPresentableObject,aMode);
48 Presentation(aPresentableObject,aMode)->Clear();}
52 void PrsMgr_PresentationManager::Highlight(
53 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
54 const Standard_Integer aMode)
56 if (!HasPresentation(aPresentableObject,aMode)){
57 AddPresentation(aPresentableObject,aMode);
59 else if(Presentation(aPresentableObject,aMode)->MustBeUpdated()){
60 Update(aPresentableObject,aMode);
62 Presentation(aPresentableObject,aMode)->Highlight();
65 Add(aPresentableObject,aMode);
68 void PrsMgr_PresentationManager::Unhighlight(
69 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
70 const Standard_Integer aMode)
72 if (HasPresentation(aPresentableObject,aMode)){
73 Presentation(aPresentableObject,aMode)->Unhighlight();
75 Remove(aPresentableObject,aMode);
80 void PrsMgr_PresentationManager::
81 SetDisplayPriority(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
82 const Standard_Integer aMode,
83 const Standard_Integer theNewPrior) const
85 if (HasPresentation(aPresentableObject,aMode))
86 Presentation(aPresentableObject,aMode)->SetDisplayPriority(theNewPrior);
89 Standard_Integer PrsMgr_PresentationManager::
90 DisplayPriority(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
91 const Standard_Integer aMode) const
93 if (HasPresentation(aPresentableObject,aMode))
94 return Presentation(aPresentableObject,aMode)->DisplayPriority();
100 Standard_Boolean PrsMgr_PresentationManager::IsDisplayed (
101 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
102 const Standard_Integer aMode) const {
103 if (HasPresentation(aPresentableObject,aMode))
104 return Presentation(aPresentableObject,aMode)->IsDisplayed();
105 return Standard_False;
108 Standard_Boolean PrsMgr_PresentationManager::IsHighlighted (
109 const Handle(PrsMgr_PresentableObject)& aPresentableObject,
110 const Standard_Integer aMode) const {
111 if (HasPresentation(aPresentableObject,aMode))
112 return Presentation(aPresentableObject,aMode)->IsHighlighted();
113 return Standard_False;
116 void PrsMgr_PresentationManager::Update (const Handle(PrsMgr_PresentableObject)& aPresentableObject,const Standard_Integer aMode ) const {
117 if(HasPresentation(aPresentableObject,aMode)) {
118 Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
121 aPresentableObject->Fill(this,P,aMode);
122 P->SetUpdateStatus(Standard_False);
126 void PrsMgr_PresentationManager::BeginDraw() {
127 myImmediateMode = Standard_True;
128 myImmediateList.Clear();
132 void PrsMgr_PresentationManager::Add(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
133 const Standard_Integer aMode) {
134 if (myImmediateMode ) {
135 Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
136 for (TColStd_ListIteratorOfListOfTransient it(myImmediateList);it.More();it.Next()){
137 if(it.Value()==P) return;
139 myImmediateList.Append(P);
142 void PrsMgr_PresentationManager::Remove(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
143 const Standard_Integer aMode) {
144 if (myImmediateMode ) {
145 Handle(PrsMgr_Presentation) P = Presentation(aPresentableObject,aMode);
146 for (TColStd_ListIteratorOfListOfTransient it(myImmediateList);it.More();it.Next()){
148 myImmediateList.Remove(it);
158 Standard_Boolean PrsMgr_PresentationManager::HasPresentation
159 (const Handle(PrsMgr_PresentableObject)& aPresentableObject,
160 const Standard_Integer aMode) const {
162 const PrsMgr_Presentations& S = aPresentableObject->Presentations();
163 Standard_Boolean found = Standard_False;
164 Standard_Integer i=1; Standard_Integer l= S.Length();
165 while (i<= l && !found) {
166 // modif WOK++ : operator == is ambiguous
167 // found = aMode == S(i).Mode()
168 // && this == S(i).Presentation()->PresentationManager();
169 const Handle (PrsMgr_Presentation)& popPrs = S(i).Presentation();
170 const Handle (PrsMgr_PresentationManager)& popPrsMgr = popPrs->PresentationManager();
171 if ( aMode == S(i).Mode() && this == popPrsMgr )
172 found = Standard_True;
178 Handle (PrsMgr_Presentation)
179 PrsMgr_PresentationManager::Presentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
180 const Standard_Integer aMode) const
182 Handle(PrsMgr_Presentation) P;
183 const PrsMgr_Presentations& S = aPresentableObject->Presentations();
184 Standard_Boolean found = Standard_False;
185 Standard_Integer i=1; Standard_Integer l= S.Length();
186 while (i<= l && !found) {
187 P = S(i).Presentation();
188 const Handle (PrsMgr_PresentationManager)& popPrsMgr = P->PresentationManager();
189 if (aMode == S(i).Mode() && this == popPrsMgr) {
190 found = Standard_True;
200 void PrsMgr_PresentationManager::AddPresentation
201 (const Handle(PrsMgr_PresentableObject)& aPresentableObject,
202 const Standard_Integer aMode) {
204 Handle(PrsMgr_Presentation) P = newPresentation(aPresentableObject);
205 aPresentableObject->Presentations().Append(PrsMgr_ModedPresentation(P,aMode));
206 aPresentableObject->Fill(this,P,aMode);
207 P->SetUpdateStatus(Standard_False);
210 void PrsMgr_PresentationManager::RemovePresentation(const Handle(PrsMgr_PresentableObject)& aPresentableObject,
211 const Standard_Integer aMode)
213 PrsMgr_Presentations& S = aPresentableObject->Presentations();
214 Standard_Integer i = 1;
215 Standard_Integer n = S.Length();
217 if (aMode == S(i).Mode()) {