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

Last change on this file since 369 was 369, checked in by lemeur, 11 years ago

fin insertion element snapshot

File size: 8.8 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   
129    elementContainer_->setStyleClass("beamLineIcon");
130    elementContainer_->setLayout(vLayoutElementContainer);
131   
132   
133   
134    if (GWt_abstractElement_ != NULL) {
135        vLayoutElementContainer->addWidget(GWt_abstractElement_);
136        GWt_abstractElement_->setMaximumSize(80,80);
137        GWt_abstractElement_->setMinimumSize(80,80);
138    }
139   
140    if (GWt_abstractElement_ == NULL) {
141        elementLabel_ = new WText();
142    } else {
143        elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel());
144    }
145   
146    vLayoutElementContainer->addWidget(elementLabel_,Wt::AlignCenter |Wt::AlignMiddle);
147    //    gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle);
148   
149    // Add Actions
150    WContainerWidget* actions = new WContainerWidget();
151    WVBoxLayout* vLayoutActions = new WVBoxLayout();
152    actions->setLayout(vLayoutActions);
153   
154    actionParameters_ = new WText("&nbsp;");
155    actionTrash_ = new WText("&nbsp;");
156   
157    // set tooltips
158    actionParameters_->setToolTip("change parameters");
159    actionTrash_->setToolTip("delete");
160
161    // Set class for actions elements
162    actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
163    actionParameters_->setMaximumSize(32,32);
164    actionParameters_->setMinimumSize(32,32);
165    actionParameters_->setPositionScheme(Wt::Static);
166   
167    actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
168    actionTrash_->setMaximumSize(32,32);
169    actionTrash_->setMinimumSize(32,32);
170    actionTrash_->setPositionScheme(Wt::Static);
171   
172    // Set the global action class
173    actions->setStyleClass("beamLineElementActions");
174    actions->setPositionScheme(Wt::Static);
175    actions->setOffsets(0);
176   
177    vLayoutActions->addWidget(actionParameters_);
178    vLayoutActions->addWidget(actionTrash_);
179    vLayoutElementContainer->addWidget(actions);
180   
181    gridLayout->addWidget       (elementContainer_,0,1);
182   
183    gridLayout->setColumnStretch (0,1);
184    gridLayout->setColumnStretch (2,1);
185   
186    // set layout
187    setLayout(gridLayout);
188   
189    // enable signals
190    elementContainer_->mouseWentOut().connect(this,&GWt_elementLigneFaisceau::mouseWentOut);
191    elementContainer_->mouseWentOver().connect(this,&GWt_elementLigneFaisceau::mouseWentOver);
192
193    actionParameters_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::showParameters);
194    actionTrash_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::deleteElement);
195}
196
197
198GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau()
199{
200}
201
202void GWt_elementLigneFaisceau::setBGColor(const WColor c) {
203    elementContainer_->decorationStyle().setBackgroundColor (c);
204}
205
206
207void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
208{
209    if (messageDropZone_->result() == WDialog::Accepted) {
210        // FIXME
211        //    removeDropZone();
212    }
213}
214
215
216void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem)
217{
218    clear();
219    GWt_abstractElement_ = elem;
220    addWidget(GWt_abstractElement_);
221    if (static_cast <WContainerWidget*> (parent())) {
222        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
223        WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
224        layout->setStretchFactor(this,0);
225    }
226   
227   
228    firstTimeInsertMessage_ = NULL;
229    dropZoneLeft_ = NULL;
230}
231
232
233std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem){
234    string str = "";
235   
236    if (static_cast <WContainerWidget*> (parent())) {
237        WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
238        for (int a=0; a<wc->count(); a++) {
239            if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
240                //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
241                /*
242                 printf("1--->%d\n",ab->getElement());
243                 printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
244                 printf("3--->%d\n",ab->getElement()->getName().getElementType());
245                 printf("4--->%d\n",elem.getElementType());
246                 
247                 if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
248                 pspa_->addConsoleMessage("type trouvÈ");
249                 } else {
250                 pspa_->addConsoleMessage("type trouvÈ NOT ");
251                 }
252                 */
253               
254            }
255        }
256       
257        int n = 999999;
258       
259        std::stringstream stream;
260        stream << n ;
261        std::string number(stream.str());
262       
263        if(n < 10) {
264            str= elem.getElementLabel()+"0"+number;
265        } else {
266            str= elem.getElementLabel()+number;
267        }
268    }
269   
270    return str;
271}
272
273
274void GWt_elementLigneFaisceau::setElementLabel(std::string label) {
275    if (elementLabel_) {
276        elementLabel_->setText(label.substr(0,10));
277        elementLabel_->setToolTip(label);
278    }
279}
280
281
282void GWt_elementLigneFaisceau::mouseWentOut() {
283    actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
284    actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
285}
286
287
288void GWt_elementLigneFaisceau::mouseWentOver() {
289    actionParameters_->setStyleClass("Button WhiteButton ContrastButton parameters");
290    actionTrash_->setStyleClass("Button WhiteButton ContrastButton trash");
291}
Note: See TracBrowser for help on using the repository browser.