source: PSPA/Interface_Web/trunk/pspaWT/src/GWt_dropZoneLigneFaisceau.cc @ 254

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

renommage de GWt_LigneFaisceau en GWt_ligneFaisceau

File size: 7.7 KB
Line 
1#include <iostream>
2
3#include <Wt/WCssDecorationStyle>
4#include <Wt/WApplication>
5
6#include "GWt_dropZoneLigneFaisceau.h"
7#include "GWt_ligneFaisceau.h"
8#include "GWt_console.h"
9#include "nomdElements.h"
10
11
12#define PSPA_DEBUG 1
13
14GWt_dropZoneLigneFaisceau::GWt_dropZoneLigneFaisceau()
15  : WContainerWidget(){
16
17  // connect mouse events
18
19  mouseWentOver().connect(this, &GWt_dropZoneLigneFaisceau::mouseOver);
20  mouseWentUp().connect(this, &GWt_dropZoneLigneFaisceau::mouseUp);
21  mouseWentDown().connect(this, &GWt_dropZoneLigneFaisceau::mouseDown);
22  mouseWentOut().connect(this, &GWt_dropZoneLigneFaisceau::mouseOut);
23  mouseDragged().connect(this, &GWt_dropZoneLigneFaisceau::mouseIsDragged);
24
25  decorationStyle().setBorder (WBorder (WBorder::Dotted));
26
27  // accept drops
28  int nElts= nomdElements::getNumberOfElements(); 
29  for(int k = 0; k < nElts; k++) {
30    typedElement eType= (typedElement)k;
31    acceptDrops(nomdElements::getImageFromType(eType));
32  }
33
34}
35
36
37GWt_dropZoneLigneFaisceau::~GWt_dropZoneLigneFaisceau()
38{
39}
40
41
42void GWt_dropZoneLigneFaisceau::mouseOver(const WMouseEvent& e)
43{
44  // Add text
45#ifdef PSPA_DEBUG
46  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
47    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
48    console->addConsoleMessage("GWt_dropZoneLigneFaisceau::mouseOver ");
49    console->addConsoleMessage("button "+WMouseEvent::LeftButton);
50  }
51#endif
52}
53
54void GWt_dropZoneLigneFaisceau::mouseOut(const WMouseEvent& e)
55{
56#ifdef PSPA_DEBUG
57  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
58    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
59    console->addConsoleMessage("GWt_dropZoneLigneFaisceau::mouseOut");
60  }
61#endif
62}
63
64void GWt_dropZoneLigneFaisceau::mouseIsDragged(const WMouseEvent& e)
65{
66#ifdef PSPA_DEBUG
67  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
68    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
69    console->addConsoleMessage(" GWt_dropZoneLigneFaisceau::mouseDragged");
70  }
71#endif
72}
73
74void GWt_dropZoneLigneFaisceau::mouseUp(const WMouseEvent& e)
75{
76#ifdef PSPA_DEBUG
77  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
78    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
79    console->addConsoleMessage("GWt_dropZoneLigneFaisceau::mouseOut up");
80  }
81#endif
82}
83
84void GWt_dropZoneLigneFaisceau::mouseDown(const WMouseEvent& e)
85{
86#ifdef PSPA_DEBUG
87  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
88    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
89    console->addConsoleMessage("GWt_dropZoneLigneFaisceau::mouseDown up");
90  }
91#endif
92}
93
94void GWt_dropZoneLigneFaisceau::dropEvent(WDropEvent evt)
95{
96
97#ifdef PSPA_DEBUG
98  if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
99    GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
100    console->addConsoleMessage(" GWt_dropZoneLigneFaisceau::dropEvent");
101  }
102#endif
103
104  // get LigneFaiseau widget and add new elementLigneFaiseau
105  GWt_LigneFaisceau* ligneFaisceau = NULL;
106  if ( static_cast<GWt_LigneFaisceau*> (wApp->findWidget ("ligneFaisceau"))) {
107    ligneFaisceau = static_cast<GWt_LigneFaisceau*> (wApp->findWidget ("ligneFaisceau"));
108  } else {
109    return;
110  }
111
112  // get the type of element
113  nomdElements e(evt.mimeType());
114  typedElement eType = e.getElementType();
115
116  ligneFaisceau->addElement(eType);
117
118
119  /*
120  nomdElements e(evt.mimeType());
121  typedElement eType = e.getElementType();
122
123  // update source if necessary
124  cout<<"dynamic_cast SOURCE------" << evt.source() << endl;
125  if (dynamic_cast <GWt_dropZoneLigneFaisceau*> (evt.source())) {
126    cout<<"OKIKKKIIII" << dynamic_cast <GWt_dropZoneLigneFaisceau*> (evt.source()) << endl;
127    removeOtherDropZone(dynamic_cast <GWt_dropZoneLigneFaisceau*> (evt.source()));
128  }
129
130  if(eType == inconnu) {
131    cout << "GWt_LigneFaisceau::element type " << eType << " inconnu " << endl;
132    return;
133  }
134
135    if ( static_cast<GWt_console*> (wApp->findWidget ("console"))) {
136        GWt_console* console = static_cast<GWt_console*> (wApp->findWidget ("console"));
137        console->addConsoleMessage(e.getElementName());
138    }
139
140  abstractElement* ptr = pspa_->getDataManager()->addElement(eType);
141
142  ptr->setLabel(getElementNumberInBeamLine(e));
143
144  GWt_abstractElement* insertedAbstractElement = GWt_abstractElement::ajoute(ptr);
145  cout << " je vais ajouter l'element  " << ptr->getNomdElement().getElementName() << " de type " << ptr->getNomdElement().getElementType() << "ID "<< insertedAbstractElement << endl;
146
147  if(insertedAbstractElement == NULL) return;
148  insertedAbstractElement->setLabelWidget();
149
150  WSignalMapper<GWt_abstractElement *> *mapper= new WSignalMapper<GWt_abstractElement *>(this);
151  mapper->mapped().connect(this,&GWt_dropZoneLigneFaisceau::onClick);
152  mapper->mapConnect(insertedAbstractElement->getImage()->doubleClicked(),insertedAbstractElement);
153
154  //////////////////////////////////////////////////////////////////
155
156  // add the dropped widget
157  printf("add the dropped widget\n");
158
159  // add drop zone before and after
160  if (static_cast <WContainerWidget*> (parent())) {
161    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
162
163    cout<<"add the dropped parent %d"<< wc << " COUNT:"<< count () <<"<---------------"<< endl;
164    // do not insert new element if some element is already present
165
166    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
167    bool replaceElement = false;
168
169    if (abstractElement_) {
170      replaceElement = true;
171    }
172
173    // insert one before
174    if (!replaceElement) {
175      // if it the first element of the beam line
176      if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this))) == 0) {
177        layout->insertWidget (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this))), new GWt_dropZoneLigneFaisceau(pspa_,false));
178     
179      } else {
180        layout->insertWidget (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this))), new GWt_dropZoneLigneFaisceau(pspa_,true));
181      }
182    }
183    // FIXME Replace
184
185    // complete widget
186    clear();
187    arrowImage_ = NULL;
188    abstractElement_ = insertedAbstractElement->getWidget();
189    addWidget(abstractElement_);
190    // change strech (useful if it was the last one)
191    layout->setStretchFactor(this,0);           
192
193    // change background
194    decorationStyle().setBackgroundColor (WColor("white"));
195
196    // remove border
197    decorationStyle().setBorder (WBorder (WBorder::None));
198
199
200    // insert after
201    // if it is the last, add a strech factor and no link image
202    cout<<" nb elem:"<< layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1 << " COUNT:"<< wc->count () <<"<---------------ID:"<< abstractElement_ << endl;
203    if (!replaceElement) {
204      if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1 == wc->count()) {
205        layout->insertWidget (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1, new GWt_dropZoneLigneFaisceau(pspa_,false),1);
206      } else {
207        layout->insertWidget (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1, new GWt_dropZoneLigneFaisceau(pspa_));
208      }
209    }
210  */
211
212    /*
213     * Set the image to be draggable, showing the other image (dragImage)
214     * to be used as the widget that is visually dragged.
215     */
216  /*
217    WImage *dragImage = new WImage(e.getImageFromType(eType).c_str(),this);
218
219    //    setDraggable(evt.mimeType(),dragImage,true);//,insertedAbstractElement->getButton(),true);
220    abstractElement_->setDraggable(evt.mimeType(),dragImage,true, this);
221
222   
223    cout<<"add the dropped parent %d"<< wc << " COUNT:"<< wc->count () <<"<---------------"<< endl;
224  }
225
226
227
228  //insertedAbstractElement->getWidget()->decorationStyle().setBackgroundColor (WColor("blue"));
229  pspa_->updateSelections();
230
231  */ 
232}
233
234
Note: See TracBrowser for help on using the repository browser.