source: PSPA/Interface_Web/branches/12_03_12-managerComboBox/pspaWT/sources/userInterface/src/GWt_elementLigneFaisceau.cc @ 396

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

Passage a la version avec uniqquement des ComboBox. Tests en cours

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