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

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

renommage

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