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

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

Modifications en vue de changer l'interface utilisateur

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