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

Last change on this file since 496 was 493, checked in by lemeur, 10 years ago

refection generale des secteurs et applications de softwares (suite)

File size: 8.3 KB
Line 
1#include <iostream>
2
3#include "GWt_elementLigneFaisceau.h"
4#include "GWt_ligneFaisceau.h"
5#include "GWt_sector.h"
6#include "abstractElement.h"
7#include "nomDeLogiciel.h"
8
9#include "mixedTools.h"
10
11#include <Wt/WVBoxLayout>
12
13
14GWt_ligneFaisceau::GWt_ligneFaisceau(dataManager* data,GWt_sector* sect) :
15WContainerWidget(),
16dataManager_(data),
17UI_sector_(sect)
18{
19 
20  ligneFaisceauLayout_ = new WHBoxLayout();
21  ligneFaisceauLayout_->setContentsMargins(0,0,0,0);
22  ligneFaisceauLayout_->setSpacing(0);
23 
24  setLayout(ligneFaisceauLayout_);
25
26  // set the object name
27  setObjectName("ligneFaisceau");
28  buildBeamLineWidget();
29}
30
31
32void GWt_ligneFaisceau::clear() 
33{
34  ligneFaisceauLayout_->clear();
35
36  // add the first drop zone
37  decorationStyle().setBorder (WBorder (WBorder::Dotted));
38  allDropZone_ = new GWt_dropZoneLigneFaisceau(dataManager_,this);
39  WVBoxLayout* fit = new WVBoxLayout();
40  allDropZone_->setLayout(fit);
41 
42  fit->addWidget(new WText("Drag elements here...."),1,Wt::AlignCenter |Wt::AlignMiddle);
43  ligneFaisceauLayout_->addWidget(allDropZone_,1);
44}
45
46
47GWt_abstractElement* GWt_ligneFaisceau::addElement(nomdElements::typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer )
48{
49 
50  GWt_abstractElement* UIabstractElement = NULL;
51 
52  // Add this element to the DataManager
53  // look for the previous element
54  abstractElement* previousElement = NULL;
55 
56  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
57    GWt_elementLigneFaisceau* elem = static_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ());
58    if (elem) {
59      if (elem->getDropZoneRight() == dropContainer) {
60        previousElement = elem->getGWt_AbstractElement()->getAbstractElement();
61      }
62    }
63  }
64 
65  getUISector()->getSectorControler()->addElementAfter(eType,previousElement );
66 
67  buildBeamLineWidget();
68
69 
70  //  getUISector()->getExecuteWidget()->displayFromControler();
71
72  return UIabstractElement;
73
74}
75
76
77void GWt_ligneFaisceau::manageLineFaisceauLayout_deprecated() {
78  // special : hide/setVisible arrow :
79  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
80    if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
81     
82      // update labels
83      if (elem->getGWt_AbstractElement()) { 
84          elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget();
85        }
86      //  one element
87      if ((a == 0) && (a == (ligneFaisceauLayout_->count()-1))) {
88        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent");
89        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent");
90       
91        // first
92      } else if (a == 0){
93        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent");
94        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
95       
96        // last
97      } else if (a == (ligneFaisceauLayout_->count()-1)){
98        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line");
99        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent");
100       
101       
102        // middle elements
103      } else {
104        elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line");
105        elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
106      }
107    }
108  }
109 
110  // insure that there is still the dropzone !
111  if (ligneFaisceauLayout_->count() == 0) {
112    clear();
113  }
114 
115  // FIXME
116  //  UI_sector_->getExecuteWidget()->updateSections();
117}
118
119
120void GWt_ligneFaisceau::buildBeamLineWidget() {
121  // clear the layout and set default text
122  clear();
123  bool first = true;
124
125  // Get the dataManager's sector
126  // rebuild the beamLine
127
128  GWt_elementLigneFaisceau* elemLigneFaisceau = NULL;
129  //  for (unsigned int i =0; i< UI_sector_->getSectorControler()->getSectionsToExecute().size(); i++) {
130  //    std::vector <abstractElement*> abstractElem = UI_sector_->getSectorControler()->getSectionsToExecute()[i]->getElements();
131  std::vector <abstractElement*> abstractElem = UI_sector_->getSectorControler()->getElements();
132    for (unsigned int j=0; j< abstractElem.size(); j++) {
133
134           // elemLigneFaisceau = new GWt_elementLigneFaisceau(dataManager_,
135           //                                             this,
136           //                                             abstractElem[j],UI_sector_->getSectorControler()->getSectionsToExecute()[i]->getSoftware()->getColor());
137
138
139           elemLigneFaisceau = new GWt_elementLigneFaisceau(dataManager_,
140                                                       this,
141                                                       abstractElem[j],"#FFFFFF");
142
143
144     
145      // remove default text
146      if (first) {
147        first = false;
148        ligneFaisceauLayout_->clear();
149        ligneFaisceauLayout_->addWidget(elemLigneFaisceau);
150
151        elemLigneFaisceau->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent");
152        elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
153     
154      } else {
155        ligneFaisceauLayout_->addWidget(elemLigneFaisceau);
156
157        elemLigneFaisceau->getDropZoneLeft()->setStyleClass( "elementLigneFaiseau_line");
158        elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line");
159      }
160     
161    }
162    //  }
163
164  // remove last line
165  if (elemLigneFaisceau != NULL) {
166    elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent");
167  }
168 
169}
170
171
172void GWt_ligneFaisceau::update() {
173  manageLineFaisceauLayout_deprecated();
174}
175
176
177void GWt_ligneFaisceau::removeElement(GWt_abstractElement* GWt_abstractElement) {
178  if (GWt_abstractElement == NULL)
179    return;
180 
181  getUISector()->getSectorControler()->removeElement(GWt_abstractElement->getAbstractElement());
182 
183  buildBeamLineWidget();
184  //  getUISector()->getExecuteWidget()->displayFromControler();
185/*
186  // remove Widget
187  // - GWt_abstractElement is an element of the GWt_elementLigneFaisceau_
188 
189  int index = -1;
190  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
191    GWt_elementLigneFaisceau* elem = static_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ());
192    if (elem) {
193      if (elem->getGWt_AbstractElement() == GWt_abstractElement) {
194        index = a;
195      }
196    }
197  }
198 
199  if (index != -1) {
200    // remove element from the list
201    //        pspa_->getDataManager()->removeElement(GWt_abstractElement->getElement()->getLabel());
202   
203    ligneFaisceauLayout_->removeItem(ligneFaisceauLayout_->itemAt(index));
204    delete GWt_abstractElement;
205   
206    // manage widgets if necessary
207    manageLineFaisceauLayout_deprecated();
208  }
209*/
210}
211
212
213abstractElement* GWt_ligneFaisceau::getAbstractElement(int i){
214    int index = 0;
215    if (i < 0) {
216        return NULL;
217    }
218   
219    for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
220        if (ligneFaisceauLayout_->itemAt(a)) {
221           
222            if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
223              if (index == i) {
224                if (elem->getGWt_AbstractElement()) {
225                  return elem->getGWt_AbstractElement()->getAbstractElement();
226                }
227           }
228             index ++;
229        }
230    }
231  }
232  return NULL;
233}
234
235
236
237int GWt_ligneFaisceau::getAbstractElementNumeroFromLabel(std::string txt){
238  int index = 1;
239  if (txt == "") {
240    return NULL;
241  }
242 
243  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
244    if (ligneFaisceauLayout_->itemAt(a)) {
245     
246      if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
247        if (elem->getGWt_AbstractElement()) {
248          if (elem->getGWt_AbstractElement()->getAbstractElement()->getLabel() == txt) {
249            return index;
250          }
251        }
252        index ++;
253      }
254    }
255  }
256  return NULL;
257 
258}
259
260
261
262
263int GWt_ligneFaisceau::getBeamLineSize() {
264  int count = 0;
265  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
266    if (dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
267      count ++;
268    }
269  }
270  return count;
271}
272
273
274vector <abstractElement*> GWt_ligneFaisceau::getAllAbstractElements()
275{
276  vector <abstractElement*> elems;
277  for (int a=0; a< ligneFaisceauLayout_->count(); a++) {
278    if (GWt_elementLigneFaisceau* elem = dynamic_cast <GWt_elementLigneFaisceau*> (ligneFaisceauLayout_->itemAt(a)->widget ())) {
279      elems.push_back(elem->getGWt_AbstractElement()->getAbstractElement());
280    }
281  }
282  return elems;
283}
Note: See TracBrowser for help on using the repository browser.