source: PSPA/Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc @ 273

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

Insertion dans la drop box ok

File size: 9.5 KB
Line 
1#include <iostream>
2
3#include "GWt_elementLigneFaisceau.h"
4#include "nomdElements.h"
5#include "GWt_console.h"
6#include "abstractElement.h"
7#include "GWt_rfgun.h"
8#include "GWt_drift.h"
9#include "GWt_cell.h"
10#include "GWt_bend.h"
11#include "GWt_soleno.h"
12#include "GWt_beam.h"
13#include "GWt_fit.h"
14
15
16#include <Wt/WCssDecorationStyle>
17#include <Wt/WSignalMapper>
18#include <Wt/WText>
19#include <Wt/WImage>
20#include <Wt/WHBoxLayout>
21#include <Wt/WGridLayout>
22#include <Wt/WLength>
23#include <Wt/WVBoxLayout>
24#include <Wt/WApplication>
25
26#define PSPA_DEBUG 1
27
28GWt_elementLigneFaisceau::GWt_elementLigneFaisceau()
29: WContainerWidget(),
30firstTimeInsertMessage_(NULL),
31dropZoneLeft_(NULL),
32dropZoneRight_(NULL),
33abstractElement_(NULL)
34{
35    // set the css name
36    setObjectName("elementLigneFaisceau");
37   
38    initialize_ligneFaisceau(NULL);
39}
40
41
42GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(abstractElement* abstractElement)
43: WContainerWidget(),
44firstTimeInsertMessage_(NULL),
45dropZoneLeft_(NULL),
46dropZoneRight_(NULL),
47abstractElement_(NULL),
48elementName_(NULL)
49{
50    initialize_ligneFaisceau(abstractElement);
51}
52
53
54void GWt_elementLigneFaisceau::initialize_ligneFaisceau(abstractElement* abstractElement)
55{
56   
57    cout<<"new GWt_elementLigneFaisceau : "<< this << endl;
58   
59    // set layout
60    //     +----------+--------+---------+
61    //     |   (--->) |  ELEM  | (-----) |
62    //     +----------+--------+---------+
63    //     |             NAME            |
64    //     +----------+--------+---------+
65   
66   
67    WGridLayout *gridLayout = new WGridLayout();
68   
69    gridLayout->setContentsMargins(0,0,0,0);
70    gridLayout->setHorizontalSpacing    (0);
71    gridLayout->setVerticalSpacing      (0);
72   
73    // add first line :  initialize arrow and link images
74    dropZoneLeft_ = new GWt_dropZoneLigneFaisceau();
75    dragElementZone_ = new WContainerWidget();
76    dropZoneRight_ = new GWt_dropZoneLigneFaisceau();
77   
78    // change object name in order to manage css :
79    dropZoneLeft_->setStyleClass("elementLigneFaiseau_line");
80    dropZoneRight_->setStyleClass("elementLigneFaiseau_line");
81    dropZoneRight_->resize(10,30);
82   
83   
84    WContainerWidget* arrow = new WContainerWidget();
85    new WImage(arrow);
86    arrow->resize(10,30);
87   
88    arrow->setStyleClass("elementLigneFaiseau_arrow");
89    dropZoneLeft_->addWidget(arrow);
90   
91    gridLayout->addWidget       (dropZoneLeft_,0,0);
92    gridLayout->addWidget       (dragElementZone_,0,1);
93    gridLayout->addWidget       (dropZoneRight_,0,2);
94   
95    // add the image if present
96    if (abstractElement != NULL) {
97        typedElement eType = abstractElement->getNomdElement().getElementType();
98       
99        switch (  eType ) {
100            case RFgun :
101                abstractElement_ = new GWt_rfgun(abstractElement, this);
102                break;
103            case drift :
104                abstractElement_ = new GWt_drift(abstractElement, this);
105                break;
106            case cell  :
107                abstractElement_ = new GWt_cell(abstractElement, this);
108                break;
109            case bend  :
110                abstractElement_ = new GWt_bend(abstractElement, this);
111                break;
112            case soleno  :
113                abstractElement_ = new GWt_soleno(abstractElement, this);
114                break;
115            case beam  :
116                abstractElement_ = new GWt_beam(abstractElement, this);
117                break;
118            case fit  :
119                abstractElement_ = new GWt_fit(abstractElement, this);
120                break;
121            case inconnu :
122                abstractElement_ = NULL;
123        }
124        if (abstractElement_ != NULL) {
125            dragElementZone_->addWidget(abstractElement_->getImage());
126            dragElementZone_->setMaximumSize(32,32);
127            dragElementZone_->setMinimumSize(32,32);
128        }
129    }
130    // add second line
131    if (abstractElement == NULL) {
132        elementName_ = new WText();
133    } else {
134        elementName_ = new WText(abstractElement->getLabel());
135    }
136   
137    gridLayout->addWidget       (elementName_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle);
138   
139   
140   
141    //  dragElementZone_->addWidget(firstTimeInsertMessage_);
142    //  gridLayout->addWidget   (new WText("Drag elements here"),0,0);
143   
144    // set layout
145    setLayout(gridLayout);
146    //addWidget(new WText("Drag elements here"));
147}
148
149
150GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau()
151{
152}
153
154
155void GWt_elementLigneFaisceau::onClick(GWt_abstractElement* gw)
156{
157    cout << "mouse key was double clicked on this widget " << gw->getWidget()->id()<< endl;
158   
159    messageDropZone_ = new GWt_dialog("Question","Are you sure you want to delete the selected item?",GWt_dialog::Warning,true,true);
160   
161    WSignalMapper<GWt_abstractElement *> *MyMap = new WSignalMapper<GWt_abstractElement *>(this);
162    MyMap->mapped().connect(this, &GWt_elementLigneFaisceau::removeDone);
163    MyMap->mapConnect(messageDropZone_->finished(),gw);
164    messageDropZone_->exec();
165}
166
167
168void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
169{
170    if (messageDropZone_->result() == WDialog::Accepted) {
171        // FIXME
172        //    removeDropZone();
173    }
174}
175
176
177
178void GWt_elementLigneFaisceau::removeOtherDropZone(GWt_elementLigneFaisceau* other)
179{
180    // 3 cases :
181    // - first element : remove elem + link after
182    // - last element : remove elem + link before
183    // - middle element : remove elem + link after/before
184   
185    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
186    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
187   
188#ifdef PSPA_DEBUG
189    if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
190        GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
191        console->addConsoleMessage("GWt_elementLigneFaisceau::mouseOut");
192        console->addConsoleMessage("remove from drag Zone");
193    }
194    cout << "remove from drag Zone id" << layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) << " count:" << layout->count()<< endl;
195#endif
196    // first element
197    if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == 1) {
198        if (layout->itemAt (2)) {
199            layout->removeItem (layout->itemAt(2));
200#ifdef PSPA_DEBUG
201            if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
202                GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
203                console->addConsoleMessage(" remove first link ");
204            }
205#endif
206        }
207       
208        // last and middle
209    } else if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == layout->count()-2) {
210        if (layout->itemAt (layout->count()-3)) {
211            layout->removeItem (layout->itemAt(layout->count()-3));
212#ifdef PSPA_DEBUG
213            if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
214                GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
215                console->addConsoleMessage(" remove first link ");
216            }
217#endif
218        }
219    }
220   
221    // remove the drop zone
222    if (layout->findWidgetItem (other)) {
223        layout->removeItem (layout->itemAt(layout->indexOf((WLayoutItem*)(layout->findWidgetItem (other)))));
224#ifdef PSPA_DEBUG
225        if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
226            GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
227            console->addConsoleMessage(" remove drop zone ");
228        }
229#endif
230        }
231   
232   
233        // FIXME ne pas passer par un label mais par un abstrastElement
234        //  pspa_->getDataManager()->getCollection()->eraseElement(label);
235    //  pspa_->updateSelections();
236}
237
238
239void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem){
240   
241    clear();
242    abstractElement_ = elem;
243    addWidget(abstractElement_);
244    if (static_cast <WContainerWidget*> (parent())) {
245        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
246        WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
247        layout->setStretchFactor(this,0);
248    }
249   
250   
251    firstTimeInsertMessage_ = NULL;
252    dropZoneLeft_ = NULL;
253}
254
255std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){
256    string str = "";
257   
258    if (static_cast <WContainerWidget*> (parent())) {
259        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
260        for (int a=0; a<wc->count(); a++) {
261            if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
262                //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
263                /*
264                 printf("1--->%d\n",ab->getElement());
265                 printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
266                 printf("3--->%d\n",ab->getElement()->getName().getElementType());
267                 printf("4--->%d\n",elem.getElementType());
268                 
269                 if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
270                 pspa_->addConsoleMessage("type trouvé");
271                 } else {
272                 pspa_->addConsoleMessage("type trouvé NOT ");
273                 }
274                 */
275               
276            }
277        }
278       
279        int n = 999999;
280       
281        std::stringstream stream;
282        stream << n ;
283        std::string number(stream.str());
284       
285        if(n < 10) {
286            str= elem.getElementLabel()+"0"+number;
287        } else {
288            str= elem.getElementLabel()+number;
289        }
290    }
291   
292    return str;
293}
294
295void GWt_elementLigneFaisceau::setElementName(std::string label) {
296    elementName_->setText(label);
297}
298
Note: See TracBrowser for help on using the repository browser.