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

Last change on this file since 469 was 469, checked in by garnier, 10 years ago

Désormais il est de nouveau possible d'ajouter des sections et dy affecter des softwares (ne marche pour le moment quavec la 1ere sectionToExecute. Autres améliorations et renommages

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