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

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

merge avec la branche 12_03_12-managerComboBox

File size: 8.9 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    // no abstract software
213    } else {
214      setBGColor(WColor("#FFFFFF"));
215      softwareName_->setText("");
216    }
217  }
218}
219
220void GWt_elementLigneFaisceau::setBGColor(const WColor c) {
221  elementContainer_->decorationStyle().setBackgroundColor (c);
222}
223
224void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw)
225{
226  if (messageDropZone_->result() == WDialog::Accepted) {
227    // FIXME
228    //    removeDropZone();
229  }
230}
231
232void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem)
233{
234  clear();
235  GWt_abstractElement_ = elem;
236  addWidget(GWt_abstractElement_);
237  if (static_cast <WContainerWidget*> (parent())) {
238    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
239    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
240    layout->setStretchFactor(this,0);
241  }
242   
243  firstTimeInsertMessage_ = NULL;
244  dropZoneLeft_ = NULL;
245}
246
247
248std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem)
249{
250  string str = "";
251   
252  if (static_cast <WContainerWidget*> (parent())) {
253    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
254    for (int a=0; a<wc->count(); a++) {
255      if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
256        //        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
257        /*
258          printf("1--->%d\n",ab->getElement());
259          printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
260          printf("3--->%d\n",ab->getElement()->getName().getElementType());
261          printf("4--->%d\n",elem.getElementType());
262         
263          if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
264          pspa_->addConsoleMessage("type trouvÈ");
265          } else {
266          pspa_->addConsoleMessage("type trouvÈ NOT ");
267                 }
268        */
269               
270      }
271    }
272   
273    int n = 999999;
274   
275    std::stringstream stream;
276    stream << n ;
277    std::string number(stream.str());
278   
279    if(n < 10) {
280      str= elem.getElementLabel()+"0"+number;
281    } else {
282      str= elem.getElementLabel()+number;
283    }
284  }
285 
286  return str;
287}
288
289
290void GWt_elementLigneFaisceau::setElementLabel(std::string label) {
291  if (elementLabel_) {
292    elementLabel_->setText(label.substr(0,10));
293    elementLabel_->setToolTip(label);
294  }
295}
296
297
298void GWt_elementLigneFaisceau::mouseWentOut() {
299  actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters");
300  actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash");
301}
302
303
304void GWt_elementLigneFaisceau::mouseWentOver() {
305  actionParameters_->setStyleClass("Button WhiteButton ContrastButton parameters");
306  actionTrash_->setStyleClass("Button WhiteButton ContrastButton trash");
307}
Note: See TracBrowser for help on using the repository browser.