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

Last change on this file since 289 was 289, checked in by garnier, 12 years ago

refactoring : part 1

File size: 7.1 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    dragElementZone_->setStyleClass("beamLineIcon");
80    dropZoneRight_->resize(10,30);
81   
82   
83    WContainerWidget* arrow = new WContainerWidget();
84    new WImage(arrow);
85    arrow->resize(10,30);
86   
87    arrow->setStyleClass("elementLigneFaiseau_arrow");
88    dropZoneLeft_->addWidget(arrow);
89   
90    gridLayout->addWidget       (dropZoneLeft_,0,0);
91    gridLayout->addWidget       (dragElementZone_,0,1);
92    gridLayout->addWidget       (dropZoneRight_,0,2);
93   
94    // add the image if present
95    if (abstractElement != NULL) {
96        typedElement eType = abstractElement->getNomdElement().getElementType();
97       
98        switch (  eType ) {
99            case RFgun :
100                abstractElement_ = new GWt_rfgun(abstractElement);
101                break;
102            case drift :
103                abstractElement_ = new GWt_drift(abstractElement);
104                break;
105            case cell  :
106                abstractElement_ = new GWt_cell(abstractElement);
107                break;
108            case bend  :
109                abstractElement_ = new GWt_bend(abstractElement);
110                break;
111            case soleno  :
112                abstractElement_ = new GWt_soleno(abstractElement);
113                break;
114            case beam  :
115                abstractElement_ = new GWt_beam(abstractElement);
116                break;
117            case fit  :
118                abstractElement_ = new GWt_fit(abstractElement);
119                break;
120            case inconnu :
121                abstractElement_ = NULL;
122        }
123        if (abstractElement_ != NULL) {
124            dragElementZone_->addWidget(abstractElement_->getImage());
125            dragElementZone_->setMaximumSize(32,32);
126            dragElementZone_->setMinimumSize(32,32);
127            dragElementZone_->setToolTip(abstractElement_->print());
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    gridLayout->setColumnStretch (0,1);
140    gridLayout->setColumnStretch (2,1);
141   
142    //  dragElementZone_->addWidget(firstTimeInsertMessage_);
143    //  gridLayout->addWidget   (new WText("Drag elements here"),0,0);
144   
145    // set layout
146    setLayout(gridLayout);
147    //addWidget(new WText("Drag elements here"));
148}
149
150
151GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau()
152{
153}
154
155
156void GWt_elementLigneFaisceau::onClick(GWt_abstractElement* gw)
157{
158    cout << "mouse key was double clicked on this widget " << gw->getWidget()->id()<< endl;
159   
160    messageDropZone_ = new GWt_dialog("Question","Are you sure you want to delete the selected item?",GWt_dialog::Warning,true,true);
161   
162    WSignalMapper<GWt_abstractElement *> *MyMap = new WSignalMapper<GWt_abstractElement *>(this);
163    MyMap->mapped().connect(this, &GWt_elementLigneFaisceau::removeDone);
164    MyMap->mapConnect(messageDropZone_->finished(),gw);
165    messageDropZone_->exec();
166}
167
168
169void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
170{
171    if (messageDropZone_->result() == WDialog::Accepted) {
172        // FIXME
173        //    removeDropZone();
174    }
175}
176
177
178
179
180void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem){
181   
182    clear();
183    abstractElement_ = elem;
184    addWidget(abstractElement_);
185    if (static_cast <WContainerWidget*> (parent())) {
186        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
187        WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
188        layout->setStretchFactor(this,0);
189    }
190   
191   
192    firstTimeInsertMessage_ = NULL;
193    dropZoneLeft_ = NULL;
194}
195
196std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){
197    string str = "";
198   
199    if (static_cast <WContainerWidget*> (parent())) {
200        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
201        for (int a=0; a<wc->count(); a++) {
202            if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
203                //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
204                /*
205                 printf("1--->%d\n",ab->getElement());
206                 printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
207                 printf("3--->%d\n",ab->getElement()->getName().getElementType());
208                 printf("4--->%d\n",elem.getElementType());
209                 
210                 if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
211                 pspa_->addConsoleMessage("type trouvé");
212                 } else {
213                 pspa_->addConsoleMessage("type trouvé NOT ");
214                 }
215                 */
216               
217            }
218        }
219       
220        int n = 999999;
221       
222        std::stringstream stream;
223        stream << n ;
224        std::string number(stream.str());
225       
226        if(n < 10) {
227            str= elem.getElementLabel()+"0"+number;
228        } else {
229            str= elem.getElementLabel()+number;
230        }
231    }
232   
233    return str;
234}
235
236void GWt_elementLigneFaisceau::setElementName(std::string label) {
237    elementName_->setText(label);
238}
239
Note: See TracBrowser for help on using the repository browser.