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

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

Amelioration dans le design du GUI des elementsFaisceau

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