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

Last change on this file since 267 was 267, checked in by garnier, 12 years ago

quelques renommages et améliorations sur la drop zone

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