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

Last change on this file since 308 was 308, checked in by garnier, 11 years ago

LigneFaisceau: Correction d un bug qui ne remplissqit pas les parametres des elements

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