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

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

correction du bug #36

File size: 9.4 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#include "GWt_snapshot.h"
15
16
17#include <Wt/WCssDecorationStyle>
18#include <Wt/WSignalMapper>
19#include <Wt/WText>
20#include <Wt/WImage>
21#include <Wt/WHBoxLayout>
22#include <Wt/WGridLayout>
23#include <Wt/WLength>
24#include <Wt/WVBoxLayout>
25#include <Wt/WApplication>
26
27#define PSPA_DEBUG 1
28
29GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(PspaApplication* pspa)
30: WContainerWidget(),
31firstTimeInsertMessage_(NULL),
32dropZoneLeft_(NULL),
33dropZoneRight_(NULL),
34GWt_abstractElement_(NULL),
35elementLabel_(NULL),
36pspa_(pspa)
37{
38    initialize_ligneFaisceau(inconnu);
39}
40
41
42GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(typedElement type, PspaApplication* pspa)
43: WContainerWidget(),
44firstTimeInsertMessage_(NULL),
45dropZoneLeft_(NULL),
46dropZoneRight_(NULL),
47GWt_abstractElement_(NULL),
48elementLabel_(NULL),
49pspa_(pspa)
50{
51    // set the css name
52    setObjectName("elementLigneFaisceau");
53    initialize_ligneFaisceau(type);
54}
55
56void GWt_elementLigneFaisceau::initialize_ligneFaisceau(typedElement eType)
57{
58   
59    cout<<"new GWt_elementLigneFaisceau : "<< this << endl;
60   
61    // set layout
62    //     +----------+--------+---------+
63    //     |   (--->) |  ELEM  | (-----) |
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(pspa_);
75    dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_);
76   
77    // change object name in order to manage css :
78    dropZoneLeft_->resize(10,30);
79    dropZoneRight_->resize(10,30);
80   
81    gridLayout->addWidget       (dropZoneLeft_,0,0);
82    gridLayout->addWidget       (dropZoneRight_,0,2);
83   
84    // add first line :  initialize arrow and link images
85    dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_);
86    dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_);
87   
88    // change object name in order to manage css :
89    dropZoneLeft_->resize(10,30);
90    dropZoneRight_->resize(10,30);
91   
92    gridLayout->addWidget       (dropZoneLeft_,0,0);
93    gridLayout->addWidget       (dropZoneRight_,0,2);
94   
95    // add the image if present
96   
97    switch (  eType ) {
98        case RFgun :
99            GWt_abstractElement_ = new GWt_rfgun(this);
100            break;
101        case drift :
102            GWt_abstractElement_ = new GWt_drift(this);
103            break;
104        case cell  :
105            GWt_abstractElement_ = new GWt_cell(this);
106            break;
107        case bend  :
108            GWt_abstractElement_ = new GWt_bend(this);
109            break;
110        case soleno  :
111            GWt_abstractElement_ = new GWt_soleno(this);
112            break;
113        case beam  :
114            GWt_abstractElement_ = new GWt_beam(this);
115            break;
116        case fit  :
117            GWt_abstractElement_ = new GWt_fit(this);
118            break;
119        case snapshot  :
120            GWt_abstractElement_ = new GWt_snapshot(this);
121            break;
122        case inconnu :
123            GWt_abstractElement_ = NULL;
124    }
125   
126    elementContainer_ = new WContainerWidget();
127    WVBoxLayout* vLayoutElementContainer = new WVBoxLayout();
128    vLayoutElementContainer->setContentsMargins(0,0,0,0);
129    elementContainer_->setPadding (4);
130   
131    elementContainer_->setStyleClass("beamLineIcon");
132    elementContainer_->setLayout(vLayoutElementContainer);
133   
134   
135   
136    if (GWt_abstractElement_ != NULL) {
137        vLayoutElementContainer->addWidget(GWt_abstractElement_);
138        GWt_abstractElement_->setMaximumSize(64,40);
139        GWt_abstractElement_->setMinimumSize(64,40);
140    }
141   
142    if (GWt_abstractElement_ == NULL) {
143        elementLabel_ = new WText();
144    } else {
145        elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel());
146    }
147   
148    vLayoutElementContainer->addWidget(elementLabel_,Wt::AlignCenter |Wt::AlignMiddle);
149    //    gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle);
150   
151    // Add Actions
152    WContainerWidget* actions = new WContainerWidget();
153    WVBoxLayout* vLayoutActions = new WVBoxLayout();
154    actions->setStyleClass("beamLineElementActions");
155    actions->setPositionScheme(Wt::Static);
156
157    actions->setLayout(vLayoutActions);
158    vLayoutActions->setContentsMargins(0,0,0,0);
159   
160    actionParameters_ = new WText("&nbsp;");
161    actionTrash_ = new WText("&nbsp;");
162   
163    // set tooltips
164    actionParameters_->setToolTip("change parameters");
165    actionTrash_->setToolTip("delete");
166
167    // Set class for actions elements
168    actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
169    actionParameters_->setMaximumSize(32,32);
170    actionParameters_->setMinimumSize(32,32);
171   
172    actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
173    actionTrash_->setMaximumSize(32,32);
174    actionTrash_->setMinimumSize(32,32);
175   
176    // Set the global action class
177    actions->setOffsets(0);
178   
179    vLayoutActions->addWidget(actionParameters_);
180    vLayoutActions->addWidget(actionTrash_);
181    vLayoutElementContainer->addWidget(actions);
182   
183    // add software name
184    softwareName_ = new WText("");
185    softwareName_->setStyleClass("softwareElementLigneFaisceauName");
186    vLayoutElementContainer->addWidget(softwareName_);
187   
188    gridLayout->addWidget       (elementContainer_,0,1);
189
190    gridLayout->setColumnStretch (0,1);
191    gridLayout->setColumnStretch (2,1);
192   
193    // set layout
194    setLayout(gridLayout);
195   
196    // enable signals
197    elementContainer_->mouseWentOut().connect(this,&GWt_elementLigneFaisceau::mouseWentOut);
198    elementContainer_->mouseWentOver().connect(this,&GWt_elementLigneFaisceau::mouseWentOver);
199
200    actionParameters_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::showParameters);
201    actionTrash_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::deleteElement);
202}
203
204
205GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau()
206{
207}
208
209void GWt_elementLigneFaisceau::update() {
210    if (getGWt_AbstractElement()->getAbstractElement()) {
211        if (getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()) {
212            setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor()));
213            softwareName_->setText(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getName());
214        }
215    }
216}
217
218
219void GWt_elementLigneFaisceau::setBGColor(const WColor c) {
220    elementContainer_->decorationStyle().setBackgroundColor (c);
221}
222
223
224void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
225{
226    if (messageDropZone_->result() == WDialog::Accepted) {
227        // FIXME
228        //    removeDropZone();
229    }
230}
231
232
233void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem)
234{
235    clear();
236    GWt_abstractElement_ = elem;
237    addWidget(GWt_abstractElement_);
238    if (static_cast <WContainerWidget*> (parent())) {
239        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
240        WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
241        layout->setStretchFactor(this,0);
242    }
243   
244   
245    firstTimeInsertMessage_ = NULL;
246    dropZoneLeft_ = NULL;
247}
248
249
250std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){
251    string str = "";
252   
253    if (static_cast <WContainerWidget*> (parent())) {
254        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
255        for (int a=0; a<wc->count(); a++) {
256            if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
257                //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
258                /*
259                 printf("1--->%d\n",ab->getElement());
260                 printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
261                 printf("3--->%d\n",ab->getElement()->getName().getElementType());
262                 printf("4--->%d\n",elem.getElementType());
263                 
264                 if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
265                 pspa_->addConsoleMessage("type trouvÈ");
266                 } else {
267                 pspa_->addConsoleMessage("type trouvÈ NOT ");
268                 }
269                 */
270               
271            }
272        }
273       
274        int n = 999999;
275       
276        std::stringstream stream;
277        stream << n ;
278        std::string number(stream.str());
279       
280        if(n < 10) {
281            str= elem.getElementLabel()+"0"+number;
282        } else {
283            str= elem.getElementLabel()+number;
284        }
285    }
286   
287    return str;
288}
289
290
291void GWt_elementLigneFaisceau::setElementLabel(std::string label) {
292    if (elementLabel_) {
293        elementLabel_->setText(label.substr(0,10));
294        elementLabel_->setToolTip(label);
295    }
296}
297
298
299void GWt_elementLigneFaisceau::mouseWentOut() {
300    actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
301    actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
302}
303
304
305void GWt_elementLigneFaisceau::mouseWentOver() {
306    actionParameters_->setStyleClass("Button WhiteButton ContrastButton parameters");
307    actionTrash_->setStyleClass("Button WhiteButton ContrastButton trash");
308}
Note: See TracBrowser for help on using the repository browser.