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

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

grosse modification pour intégrer les sections

File size: 9.5 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)
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);
34}
35
36void GWt_elementLigneFaisceau::initialize_ligneFaisceau(GWt_ligneFaisceau* ligne, abstractElement* abstractElem)
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  // set layout
176  setLayout(gridLayout);
177 
178  // enable signals
179  elementContainer_->mouseWentOut().connect(this,&GWt_elementLigneFaisceau::mouseWentOut);
180  elementContainer_->mouseWentOver().connect(this,&GWt_elementLigneFaisceau::mouseWentOver);
181  actionParameters_->clicked().connect(GWt_abstractElement_deprecated_,&GWt_abstractElement::showParameters);
182  actionTrash_->clicked().connect(GWt_abstractElement_deprecated_,&GWt_abstractElement::deleteElement);
183
184  updateSoftware();
185}
186
187GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau()
188{}
189
190void GWt_elementLigneFaisceau::updateSoftware() 
191{
192  if (getGWt_AbstractElement()->getAbstractElement()) {
193    if (getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()) {
194      //      setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor()));
195      setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getNomDeLogiciel()->getColor()));
196      softwareName_->setText(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getName());
197
198    // no abstract software
199    } else {
200      setBGColor(WColor("#FFFFFF"));
201      softwareName_->setText("");
202    }
203  }
204}
205
206void GWt_elementLigneFaisceau::setBGColor(const WColor c) {
207  elementContainer_->decorationStyle().setBackgroundColor (c);
208}
209
210void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
211{
212  if (messageDropZone_->result() == WDialog::Accepted) {
213    // FIXME
214    //    removeDropZone();
215  }
216}
217
218void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem)
219{
220  clear();
221  GWt_abstractElement_deprecated_ = elem;
222  addWidget(GWt_abstractElement_deprecated_);
223  if (static_cast <WContainerWidget*> (parent())) {
224    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
225    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
226    layout->setStretchFactor(this,0);
227  }
228   
229  firstTimeInsertMessage_ = NULL;
230  dropZoneLeft_ = NULL;
231}
232
233
234std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem)
235{
236  string str = "";
237   
238  if (static_cast <WContainerWidget*> (parent())) {
239    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
240    for (int a=0; a<wc->count(); a++) {
241      if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
242        //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
243        /*
244          printf("1--->%d\n",ab->getElement());
245          printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
246          printf("3--->%d\n",ab->getElement()->getName().getElementType());
247          printf("4--->%d\n",elem.getElementType());
248         
249          if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
250          pspa_->addConsoleMessage("type trouvÈ");
251          } else {
252          pspa_->addConsoleMessage("type trouvÈ NOT ");
253                 }
254        */
255               
256      }
257    }
258   
259    int n = 999999;
260   
261    std::stringstream stream;
262    stream << n ;
263    std::string number(stream.str());
264   
265    if(n < 10) {
266      str= elem.getGenericLabel()+"0"+number;
267    } else {
268      str= elem.getGenericLabel()+number;
269    }
270  }
271 
272  return str;
273}
274
275
276void GWt_elementLigneFaisceau::setElementLabel(std::string label) {
277  if (elementLabel_) {
278    elementLabel_->setText(label.substr(0,10));
279    elementLabel_->setToolTip(label);
280  }
281}
282
283
284void GWt_elementLigneFaisceau::mouseWentOut() {
285  actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
286  actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
287}
288
289
290void GWt_elementLigneFaisceau::mouseWentOver() {
291  actionParameters_->setStyleClass("Button WhiteButton ContrastButton parameters");
292  actionTrash_->setStyleClass("Button WhiteButton ContrastButton trash");
293}
Note: See TracBrowser for help on using the repository browser.