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

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

quelques renommages et améliorations sur la drop zone

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