source: PSPA/Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_ligneFaisceau.cc @ 343

Last change on this file since 343 was 343, checked in by touze, 11 years ago

nvx element snapshot

File size: 7.4 KB
Line 
1#include <iostream>
2
3#include "GWt_elementLigneFaisceau.h"
4#include "GWt_ligneFaisceau.h"
5
6#include "GWt_drift.h"
7#include "GWt_rfgun.h"
8#include "GWt_cell.h"
9#include "GWt_soleno.h"
10#include "GWt_bend.h"
11
12#include "mixedTools.h"
13
14#include <Wt/WVBoxLayout>
15
16
17GWt_LigneFaisceau::GWt_LigneFaisceau(PspaApplication* ps) :
18  WContainerWidget(),
19  pspa_(ps),
20  nObjets_(NULL)
21{
22 
23  cout<<"GWt_LigneFaisceau::GWt_LigneFaisceau() %d"<< this << "<---------------"<< endl;
24   
25  ligneFaisceauLayout_ = new WHBoxLayout();
26  //  decorationStyle().setBackgroundColor (WColor(245,245,245));
27  setLayout(ligneFaisceauLayout_);
28  ligneFaisceauLayout_->setContentsMargins(0,0,0,0);
29  ligneFaisceauLayout_->setSpacing(0);
30 
31  int nElts= nomdElements::getNumberOfElements();
32  nObjets_= new Compteur[nElts];
33 
34  // set the object name
35  setObjectName("ligneFaisceau");
36 
37 
38  clear();
39}
40
41
42void GWt_LigneFaisceau::clear() 
43{
44  ligneFaisceauLayout_->clear();
45
46  // add the first drop zone
47  decorationStyle().setBorder (WBorder (WBorder::Dotted));
48  allDropZone_ = new GWt_dropZoneLigneFaisceau(pspa_);
49  WVBoxLayout* fit = new WVBoxLayout();
50  allDropZone_->setLayout(fit);
51 
52  fit->addWidget(new WText("Drag elements here...."),1,Wt::AlignCenter |Wt::AlignMiddle);
53  ligneFaisceauLayout_->addWidget(allDropZone_,1);
54}
55
56
57GWt_abstractElement* GWt_LigneFaisceau::addElement(typedElement eType){
58  return addElement(eType,NULL);
59}
60
61GWt_abstractElement* GWt_LigneFaisceau::addElement(typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer )
62{
63
64  GWt_abstractElement* GWtAbstractElem = NULL;
65   
66  cout << " Entree addElement element " << nomdElements::getLabelFromType(eType) << endl;
67   
68  int nElements= nomdElements ::getNumberOfElements();
69  nObjets_= new Compteur[nElements];
70 
71  // 3 cases :
72  // -dropContainer is an element of the ligneFaisceauLayout_
73  // -dropContainer is an element of the GWt_elementLigneFaisceau_
74  // -dropContainer is NULL, insert in the last element
75 
76  if(eType == inconnu) {
77    cout << "GWt_LigneFaisceau::element type " << eType << " inconnu " << endl;
78    return NULL;
79  }
80 
81  // add the element to the datamanager
82 
83  // first time we insert an element :
84  GWt_elementLigneFaisceau* firstElemIsElement = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(0)->widget());
85  if ((ligneFaisceauLayout_->count() == 1) && (!firstElemIsElement)) {
86    int index = indexOf (dropContainer);
87    if ((index != -1) || (dropContainer == NULL)){ // found
88      // remove global drop zone
89      ligneFaisceauLayout_->clear();
90     
91      // add first element
92      GWt_elementLigneFaisceau* elemLigneFaisceau = new GWt_elementLigneFaisceau(eType, pspa_);
93     
94      ligneFaisceauLayout_->addWidget(elemLigneFaisceau,1);
95      GWtAbstractElem = elemLigneFaisceau->getGWt_AbstractElement();
96      // remove arrow from begin and end
97     
98    } else { // error
99      return NULL;
100    }
101  } else {
102    int index = -1;
103    for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
104      GWt_elementLigneFaisceau* elem = static_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ());
105      if (elem) {
106        if (elem->getDropZoneLeft() == dropContainer) {
107          index = a;
108        }
109        if (elem->getDropZoneRight() == dropContainer) {
110          index = a+1;
111        }
112      }
113     
114    }
115   
116   
117    //  ligneFaisceauLayout_->addWidget(new GWt_elementLigneFaiseau(ptr),0);
118    GWt_elementLigneFaisceau* elemLigneFaisceau = new GWt_elementLigneFaisceau(eType, pspa_);
119    if (index != -1) {
120      //            nObjets_[ptr->getNomdElement().getElementType()].incr();
121      ligneFaisceauLayout_->insertWidget(index,elemLigneFaisceau,1);
122      GWtAbstractElem = elemLigneFaisceau->getGWt_AbstractElement();
123    } else {
124      ligneFaisceauLayout_->addWidget(elemLigneFaisceau,1);
125      GWtAbstractElem = elemLigneFaisceau->getGWt_AbstractElement();
126    }
127  }
128  manageLineFaisceauLayout();
129 
130  return GWtAbstractElem;
131}
132
133
134void GWt_LigneFaisceau::manageLineFaisceauLayout() {
135  // special : hide/setVisible arrow :
136  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
137    if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
138     
139      // update labels
140      elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget();
141     
142      //  one element
143      if ((a == 0) && (a == (ligneFaisceauLayout_->count()-1))) {
144        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent");
145        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent");
146       
147        // first
148      } else if (a == 0){
149        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent");
150        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
151       
152        // last
153      } else if (a == (ligneFaisceauLayout_->count()-1)){
154        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line");
155        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent");
156       
157       
158        // middle elements
159      } else {
160        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line");
161        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
162      }
163    }
164  }
165 
166  // insure that there is still the dropzone !
167  if (ligneFaisceauLayout_->count() == 0) {
168    clear();
169  }
170 
171  pspa_->getExecuteWidget()->updateSelections();
172}
173
174
175
176void GWt_LigneFaisceau::update() {
177  manageLineFaisceauLayout();
178}
179
180
181void GWt_LigneFaisceau::removeElement(GWt_abstractElement* GWt_abstractElement) {
182  if (GWt_abstractElement == NULL)
183    return;
184 
185  // remove Widget
186  // - GWt_abstractElement is an element of the GWt_elementLigneFaisceau_
187 
188  int index = -1;
189  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
190    GWt_elementLigneFaisceau* elem = static_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ());
191    if (elem) {
192      if (elem->getGWt_AbstractElement() == GWt_abstractElement) {
193        index = a;
194      }
195    }
196  }
197 
198  if (index != -1) {
199    // remove element from the list
200    //        pspa_->getDataManager()->removeElement(GWt_abstractElement->getElement()->getLabel());
201   
202    ligneFaisceauLayout_->removeItem(ligneFaisceauLayout_->itemAt(index));
203    delete GWt_abstractElement;
204   
205    // manage widgets if necessary
206    manageLineFaisceauLayout();
207  }
208}
209
210
211abstractElement* GWt_LigneFaisceau::getAbstractElement(int i){
212  int index = 0;
213 
214  // first if 1
215  //    i--;
216 
217  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
218    if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
219      if (index == i) {
220        printf("GWt_LigneFaisceau::getAbstractElement %d %s\n",i,elem->getGWt_AbstractElement()->getAbstractElement()->getLabel().c_str());
221        return elem->getGWt_AbstractElement()->getAbstractElement();
222      }
223      index ++;
224    }
225  }
226  return NULL;
227}
228
229
230int GWt_LigneFaisceau::getBeamLineSize() {
231  int count = 0;
232  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
233    if (dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
234      count ++;
235    }
236  }
237  return count;
238}
239
240vector <abstractElement*> GWt_LigneFaisceau::getAllAbstractElements()
241{
242  vector <abstractElement*> elems;
243  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
244    if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
245      elems.push_back(elem->getGWt_AbstractElement()->getAbstractElement());
246    }
247  }
248  return elems;
249}
250
Note: See TracBrowser for help on using the repository browser.