Changeset 199 in PSPA


Ignore:
Timestamp:
Dec 18, 2012, 1:27:59 PM (12 years ago)
Author:
garnier
Message:

ameliorations dans les drag and drop

Location:
Interface_Web/trunk/pspaWT
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • Interface_Web/trunk/pspaWT/include/GWt_dropZoneLigneFaiseau.h

    r198 r199  
    3131  void removeDone(GWt_abstractElement*);
    3232  std::string getElementNumberInBeamLine(nomdElements el);
     33  void removeOtherDropZone(GWt_dropZoneLigneFaiseau*);
    3334
    3435  PspaApplication* pspa_;
  • Interface_Web/trunk/pspaWT/src/GWt_dropZoneLigneFaiseau.cc

    r198 r199  
    1818    abstractElement_(NULL)
    1919{
    20   // decorationStyle().setBackgroundColor (WColor("yellow"));
     20  //  decorationStyle().setBackgroundColor (WColor("yellow"));
    2121  resize(5,5);
    22   cout<<"new GWt_dropZoneLigneFaiseau"<< endl;
     22  cout<<"new GWt_dropZoneLigneFaiseau : "<< this << endl;
    2323
    2424  // connect mouse events
    2525
     26  setMouseOverDelay(500);       
    2627  mouseWentOver().connect(this, &GWt_dropZoneLigneFaiseau::mouseOver);
    2728  mouseWentUp().connect(this, &GWt_dropZoneLigneFaiseau::mouseUp);
     
    7980  if (!abstractElement_) {
    8081    if (linkImage_) {
    81       resize(linkImage_->width(),linkImage_->height());
     82      resize(10,32); // image size
    8283    } else {
    8384      resize(10,10);
    8485    }
     86    decorationStyle().setBorder (WBorder (WBorder::Dashed, WBorder::Medium,WColor(255,255,255,255)));
     87  } else {
     88    decorationStyle().setBorder (WBorder (WBorder::Solid, WBorder::Thin,WColor(200,200,200)));
    8589  }
    8690  if (insertMessage_) {
     
    9094    linkImage_->show();
    9195  }
    92   decorationStyle().setBorder (WBorder (WBorder::Dashed, WBorder::Medium,WColor(255,255,255,255)));
    9396  pspa_->addConsoleMessage("GWt_dropZoneLigneFaiseau::mouseOut");
    9497}
     
    115118  nomdElements e(evt.mimeType());
    116119  typedElement eType = e.getElementType();
    117   //  int cnts= pspa_->getDataManager()->beamLineSize();
    118 
    119   //  cout<<"GWt_LigneFaisceau::dropEvent() : "<<e.getElementName()<<" ("<< cnts <<")"<< endl; 
    120  
     120
     121  // update source if necessary
     122  cout<<"dynamic_cast SOURCE------" << evt.source() << endl;
     123  if (dynamic_cast <GWt_dropZoneLigneFaiseau*> (evt.source())) {
     124    cout<<"OKIKKKIIII" << dynamic_cast <GWt_dropZoneLigneFaiseau*> (evt.source()) << endl;
     125    removeOtherDropZone(dynamic_cast <GWt_dropZoneLigneFaiseau*> (evt.source()));
     126  }
     127
    121128  if(eType == inconnu) {
    122129    cout << "GWt_LigneFaisceau::element type " << eType << " inconnu " << endl;
     
    130137  ptr->setLabel(getElementNumberInBeamLine(e));
    131138
    132   cout << " je vais ajouter l'element  " << ptr->getName().getElementName() << " de type " << ptr->getName().getElementType() << endl;
    133   GWt_abstractElement* gw = GWt_abstractElement::ajoute(pspa_,ptr);
    134   if(gw == NULL) return;
    135   gw->updateLabelWidget();
     139  GWt_abstractElement* insertedAbstractElement = GWt_abstractElement::ajoute(pspa_,ptr);
     140  cout << " je vais ajouter l'element  " << ptr->getName().getElementName() << " de type " << ptr->getName().getElementType() << "ID "<< insertedAbstractElement << endl;
     141
     142  if(insertedAbstractElement == NULL) return;
     143  insertedAbstractElement->updateLabelWidget();
    136144
    137145//   //////////////////////////////////////////////////////////////////
     
    139147
    140148//   cout<<"container: "<<gw->getWidget()->id()<<endl;
    141 //   cout << "number of widgets in this container= " << gw->getWidget()->count() << ": ";
    142 //   for(int k = 0; k < gw->getWidget()->count(); k++) {
    143 //     WWidget *w= gw->getWidget()->widget(k);
     149//   cout << "number of widgets in this container= " << insertedAbstractElement->getWidget()->count() << ": ";
     150//   for(int k = 0; k < insertedAbstractElement->getWidget()->count(); k++) {
     151//     WWidget *w= insertedAbstractElement->getWidget()->widget(k);
    144152//     cout << w->id() << ", ";
    145153//   }
     
    150158  WSignalMapper<GWt_abstractElement *> *mapper= new WSignalMapper<GWt_abstractElement *>(this);
    151159  mapper->mapped().connect(this,&GWt_dropZoneLigneFaiseau::onClick);
    152   mapper->mapConnect(gw->getButton()->doubleClicked(),gw);
     160  mapper->mapConnect(insertedAbstractElement->getButton()->doubleClicked(),insertedAbstractElement);
    153161
    154162  //////////////////////////////////////////////////////////////////
     
    181189      }
    182190    }
     191    // FIXME Replace
    183192
    184193    // complete widget
     
    186195    insertMessage_ = NULL;
    187196    linkImage_ = NULL;
    188     abstractElement_ = gw->getWidget();
     197    abstractElement_ = insertedAbstractElement->getWidget();
    189198    addWidget(abstractElement_);
    190199    // change strech (useful if it was the last one)
     
    194203    // insert after
    195204    // if it is the last, add a strech factor and no link image
    196     cout<<" nb elem:"<< layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1 << " COUNT:"<< wc->count () <<"<---------------"<< endl;
     205    cout<<" nb elem:"<< layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1 << " COUNT:"<< wc->count () <<"<---------------ID:"<< abstractElement_ << endl;
    197206    if (!replaceElement) {
    198207      if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (this)))+1 == wc->count()) {
     
    203212    }
    204213
     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    WImage *dragImage = new WImage(e.getImageFromType(eType).c_str(),this);
     219
     220    //    setDraggable(evt.mimeType(),dragImage,true);//,insertedAbstractElement->getButton(),true);
     221    abstractElement_->setDraggable(evt.mimeType(),dragImage,true, this);
     222
    205223   
    206224    cout<<"add the dropped parent %d"<< wc << " COUNT:"<< wc->count () <<"<---------------"<< endl;
    207225  }
    208226
    209 
    210   //gw->getWidget()->decorationStyle().setBackgroundColor (WColor("blue"));
     227  // update border
     228  decorationStyle().setBorder (WBorder (WBorder::Solid, WBorder::Thin,WColor(200,200,200)));
     229
     230
     231  //insertedAbstractElement->getWidget()->decorationStyle().setBackgroundColor (WColor("blue"));
    211232  pspa_->updateSelections();
    212233
     
    253274void GWt_dropZoneLigneFaiseau::removeDone(GWt_abstractElement* gw)
    254275{
    255   if (messageDropZone_->result() == WDialog::Accepted) {
    256 
    257     cout <<"GWt_dropZoneLigneFaiseau:: removeDone "<< gw->getWidget()->id() << endl;
    258    
    259 clear();
    260    
    261     string label= gw->getElement()->getLabel();
    262     cout << "GWt_dropZoneLigneFaiseau:: " << label << " a été supprimé" << endl;
    263     pspa_->getDataManager()->getCollection()->eraseElement(label);
    264     pspa_->updateSelections();
    265   }
     276  if (messageDropZone_->result() == WDialog::Accepted) {   
     277    // FIXME
     278    //    removeDropZone();
     279  }
     280}
     281
     282
     283
     284void GWt_dropZoneLigneFaiseau::removeOtherDropZone(GWt_dropZoneLigneFaiseau* other)
     285{
     286  // 3 cases :
     287  // - first element : remove elem + link after
     288  // - last element : remove elem + link before
     289  // - middle element : remove elem + link after/before
     290
     291  WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
     292  WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
     293 
     294  pspa_->addConsoleMessage("remove from drag Zone");
     295  cout << "remove from drag Zone id" << layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) << " count:" << layout->count()<< endl;
     296
     297  // first element
     298  if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == 1) {
     299    if (layout->itemAt (2)) {
     300      layout->removeItem (layout->itemAt(2));
     301  pspa_->addConsoleMessage("remove first link");
     302    }
     303   
     304    // last and middle
     305  } else if (layout->indexOf ((WLayoutItem*)(layout->findWidgetItem (other))) == layout->count()-2) {
     306    if (layout->itemAt (layout->count()-3)) {
     307      layout->removeItem (layout->itemAt(layout->count()-3));
     308  pspa_->addConsoleMessage("remove last link");
     309    }
     310  }
     311 
     312  // remove the drop zone
     313  if (layout->findWidgetItem (other)) {
     314    layout->removeItem (layout->itemAt(layout->indexOf((WLayoutItem*)(layout->findWidgetItem (other)))));
     315    pspa_->addConsoleMessage("remove drop zone");
     316  }
     317
     318 
     319  // FIXME ne mas passer par un label mais par un abstrastElement
     320  //  pspa_->getDataManager()->getCollection()->eraseElement(label);
     321  pspa_->updateSelections();
    266322}
    267323
     
    269325
    270326void GWt_dropZoneLigneFaiseau::addElement(WContainerWidget* elem){
     327
    271328  clear();
    272329  abstractElement_ = elem;
    273330  addWidget(abstractElement_);
     331  if (static_cast <WContainerWidget*> (parent())) {
     332    WContainerWidget* wc = static_cast <WContainerWidget*> (parent());
     333    WBoxLayout* layout = ((WBoxLayout*)(wc->layout()));
     334    layout->setStretchFactor(this,0);           
     335  }
     336
    274337
    275338  insertMessage_ = NULL;
  • Interface_Web/trunk/pspaWT/src/GWt_pspaApplication.cc

    r198 r199  
    147147   * to be used as the widget that is visually dragged.
    148148   */
     149  cout << "createDragImage" << dragImage<<endl;
    149150  result->setDraggable(mimeType,dragImage,true);
    150151}
Note: See TracChangeset for help on using the changeset viewer.