source: PSPA/Interface_Web/trunk/pspaWT/sources/userInterface/src/GWt_elementLigneFaiseau.cc @ 257

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

refactoring

File size: 8.8 KB
Line 
1#include <iostream>
2
3#include "GWt_elementLigneFaiseau.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
15
16#include <Wt/WCssDecorationStyle>
17#include <Wt/WSignalMapper>
18#include <Wt/WText>
19#include <Wt/WImage>
20#include <Wt/WHBoxLayout>
21#include <Wt/WGridLayout>
22#include <Wt/WLength>
23#include <Wt/WVBoxLayout>
24
25#define PSPA_DEBUG 1
26
27GWt_elementLigneFaiseau::GWt_elementLigneFaiseau()
28  : WContainerWidget(),
29    firstTimeInsertMessage_(NULL),
30    arrowImage_(NULL),
31    lineImage_(NULL),
32    abstractElement_(NULL)
33{
34  initialize_ligneFaisceau(NULL);
35}
36
37
38GWt_elementLigneFaiseau::GWt_elementLigneFaiseau(abstractElement* abstractElement)
39  : WContainerWidget(),
40    firstTimeInsertMessage_(NULL),
41    arrowImage_(NULL),
42    lineImage_(NULL),
43    abstractElement_(NULL),
44    elementName_(NULL)
45{
46    initialize_ligneFaisceau(abstractElement);
47}
48
49
50void GWt_elementLigneFaiseau::initialize_ligneFaisceau(abstractElement* abstractElement)
51{
52   
53    cout<<"new GWt_elementLigneFaiseau : "<< this << endl;
54   
55    // set layout
56    //     +----------+--------+---------+
57    //     |   (--->) |  ELEM  | (-----) |
58    //     +----------+--------+---------+
59    //     |             NAME            |
60    //     +----------+--------+---------+
61   
62    WGridLayout *gridLayout = new WGridLayout();
63   
64    // add first line :  initialize arrow and link images
65    arrowImage_ = new GWt_dropZoneLigneFaisceau();
66    dragElementZone_ = new WContainerWidget();
67    lineImage_ = new GWt_dropZoneLigneFaisceau();
68   
69    // change object name in order to manage css :
70    arrowImage_->setStyleClass("elementLigneFaiseau_line");
71    lineImage_->setStyleClass("elementLigneFaiseau_line");
72   
73   
74    WContainerWidget* arrow = new WContainerWidget();
75    new WImage(arrow);
76    arrow->resize(11,30);
77   
78    arrow->setStyleClass("elementLigneFaiseau_arrow");
79    arrowImage_->addWidget(arrow);
80   
81      gridLayout->addWidget     (arrowImage_,0,0);
82     gridLayout->addWidget      (dragElementZone_,0,1);
83     gridLayout->addWidget      (lineImage_,0,2);
84   
85  // add the image if present
86     if (abstractElement != NULL) {
87     typedElement eType = abstractElement->getNomdElement().getElementType();
88 
89     switch (  eType ) {
90     case RFgun :
91     abstractElement_ = new GWt_rfgun(abstractElement);
92     break;
93     case drift :
94     abstractElement_ = new GWt_drift(abstractElement);
95     break;
96     case cell  :
97     abstractElement_ = new GWt_cell(abstractElement);
98     break;
99     case bend  :
100     abstractElement_ = new GWt_bend(abstractElement);
101     break;
102     case soleno  :
103     abstractElement_ = new GWt_soleno(abstractElement);
104     break;
105     case beam  :
106     abstractElement_ = new GWt_beam(abstractElement);
107     break;
108     case fit  :
109     abstractElement_ = new GWt_fit(abstractElement);
110     break;
111     case inconnu :
112     abstractElement_ = NULL;
113     }
114     if (abstractElement_ != NULL) {
115         WImage *elemImage = new WImage(abstractElement->getNomdElement().getImageFromType(eType).c_str(),this);
116         dragElementZone_->addWidget(elemImage);
117         dragElementZone_->setMaximumSize(32,32);
118         dragElementZone_->setMinimumSize(32,32);
119     }
120     }
121     // add second line
122     if (abstractElement == NULL) {
123     elementName_ = new WText();
124     } else {
125     elementName_ = new WText(abstractElement->getLabel());
126     }
127     
128     gridLayout->addWidget      (elementName_,1,0,1,3);
129   
130    decorationStyle().setBorder (WBorder (WBorder::Dotted));
131   
132    // first insert message
133    if (abstractElement == NULL) {
134        firstTimeInsertMessage_ = new WText("Drag elements here");
135     
136         WVBoxLayout* fit = new WVBoxLayout();
137         fit->addWidget(firstTimeInsertMessage_,1,Wt::AlignCenter |Wt::AlignMiddle);
138         dragElementZone_->setLayout(fit);
139    }
140   
141    //  dragElementZone_->addWidget(firstTimeInsertMessage_);
142    //  gridLayout->addWidget   (new WText("Drag elements here"),0,0);
143   
144    // set layout
145    setLayout(gridLayout);
146    //addWidget(new WText("Drag elements here"));
147}
148
149
150GWt_elementLigneFaiseau::~GWt_elementLigneFaiseau()
151{
152}
153
154
155void GWt_elementLigneFaiseau::onClick(GWt_abstractElement* gw)
156{
157  cout << "mouse key was double clicked on this widget " << gw->getWidget()->id()<< endl;
158
159  messageDropZone_ = new GWt_dialog("Question","Are you sure you want to delete the selected item?",GWt_dialog::Warning,true,true);
160
161  WSignalMapper<GWt_abstractElement *> *MyMap = new WSignalMapper<GWt_abstractElement *>(this);
162  MyMap->mapped().connect(this, &GWt_elementLigneFaiseau::removeDone);
163  MyMap->mapConnect(messageDropZone_->finished(),gw);
164  messageDropZone_->exec();
165}
166
167
168void GWt_elementLigneFaiseau::removeDone(GWt_abstractElement* gw)
169{
170  if (messageDropZone_->result() == WDialog::Accepted) {   
171    // FIXME
172    //    removeDropZone();
173  }
174}
175
176
177
178void GWt_elementLigneFaiseau::removeOtherDropZone(GWt_elementLigneFaiseau* other)
179{
180  // 3 cases :
181  // - first element : remove elem + link after
182  // - last element : remove elem + link before
183  // - middle element : remove elem + link after/before
184
185  WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
186  WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
187 
188#ifdef PSPA_DEBUG
189  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
190    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
191    console->addConsoleMessage("GWt_elementLigneFaiseau::mouseOut");
192    console->addConsoleMessage("remove from drag Zone");
193  }
194  cout << "remove from drag Zone id" << layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) << " count:" << layout->count()<< endl;
195#endif
196  // first element
197  if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == 1) {
198    if (layout->itemAt (2)) {
199      layout->removeItem (layout->itemAt(2));
200#ifdef PSPA_DEBUG
201      if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
202        GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
203        console->addConsoleMessage(" remove first link ");
204      }
205#endif
206      }
207   
208      // last and middle
209    } else if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == layout->count()-2) {
210      if (layout->itemAt (layout->count()-3)) {
211        layout->removeItem (layout->itemAt(layout->count()-3));
212#ifdef PSPA_DEBUG
213        if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
214          GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
215          console->addConsoleMessage(" remove first link ");
216    }
217#endif
218        }
219      }
220 
221      // remove the drop zone
222      if (layout->findWidgetItem (other)) {
223        layout->removeItem (layout->itemAt(layout->indexOf((WLayoutItem*)(layout->findWidgetItem (other)))));
224#ifdef PSPA_DEBUG
225        if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
226          GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
227          console->addConsoleMessage(" remove drop zone ");
228    }
229#endif
230        }
231
232 
233        // FIXME ne mas passer par un label mais par un abstrastElement
234        //  pspa_->getDataManager()->getCollection()->eraseElement(label);
235        pspa_->updateSelections();
236}
237
238
239void GWt_elementLigneFaiseau::addElement(GWt_abstractElement* elem){
240
241  clear();
242  abstractElement_ = elem;
243  addWidget(abstractElement_);
244  if (static_cast <WContainerWidget*> (parent())) {
245    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
246    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
247    layout->setStretchFactor(this,0);           
248  }
249
250
251  firstTimeInsertMessage_ = NULL;
252  arrowImage_ = NULL;
253}
254
255std::string GWt_elementLigneFaiseau::getElementNumberInBeamLine(nomdElements elem){
256  string str = "";
257 
258  if (static_cast <WContainerWidget*> (parent())) {
259    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
260    for (int a=0; a<wc->count(); a++) {
261      if (static_cast <GWt_abstractElement*> (wc->widget (a))) {
262//        GWt_abstractElement* ab = static_cast <GWt_abstractElement*> (wc->widget (a));
263        /*
264        printf("1--->%d\n",ab->getElement());
265        printf("2--->%d\n",ab->getElement()->getLenghtOfElement());
266        printf("3--->%d\n",ab->getElement()->getName().getElementType());
267        printf("4--->%d\n",elem.getElementType());
268
269        if (static_cast <GWt_abstractElement*> (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) {
270          pspa_->addConsoleMessage("type trouvé");
271        } else {
272          pspa_->addConsoleMessage("type trouvé NOT ");
273        }
274        */
275
276      }
277    }
278   
279    int n = 999999;
280   
281    std::stringstream stream;
282    stream << n ;
283    std::string number(stream.str());
284   
285    if(n < 10) {
286      str= elem.getElementLabel()+"0"+number;
287    } else {
288    str= elem.getElementLabel()+number;
289    }
290  }
291
292  return str;
293}
Note: See TracBrowser for help on using the repository browser.