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

Last change on this file since 431 was 431, checked in by touze, 11 years ago

systeme periodique (mailles) + multipoles + madx

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