#include #include "GWt_elementLigneFaisceau.h" #include "GWt_ligneFaisceau.h" #include "GWt_sector.h" #include "abstractElement.h" #include "nomDeLogiciel.h" #include "mixedTools.h" #include GWt_ligneFaisceau::GWt_ligneFaisceau(dataManager* data,GWt_sector* sect) : WContainerWidget(), dataManager_(data), UI_sector_(sect) { ligneFaisceauLayout_ = new WHBoxLayout(); ligneFaisceauLayout_->setContentsMargins(0,0,0,0); ligneFaisceauLayout_->setSpacing(0); setLayout(ligneFaisceauLayout_); // set the object name setObjectName("ligneFaisceau"); buildBeamLineWidget(); } void GWt_ligneFaisceau::clear() { ligneFaisceauLayout_->clear(); // add the first drop zone decorationStyle().setBorder (WBorder (WBorder::Dotted)); allDropZone_ = new GWt_dropZoneLigneFaisceau(dataManager_,this); WVBoxLayout* fit = new WVBoxLayout(); allDropZone_->setLayout(fit); fit->addWidget(new WText("Drag elements here...."),1,Wt::AlignCenter |Wt::AlignMiddle); ligneFaisceauLayout_->addWidget(allDropZone_,1); } GWt_abstractElement* GWt_ligneFaisceau::addElement(nomdElements::typedElement eType, GWt_dropZoneLigneFaisceau* dropContainer ) { GWt_abstractElement* UIabstractElement = NULL; // Add this element to the DataManager // look for the previous element abstractElement* previousElement = NULL; for (int a=0; a< ligneFaisceauLayout_->count(); a++) { GWt_elementLigneFaisceau* elem = static_cast (ligneFaisceauLayout_->itemAt(a)->widget ()); if (elem) { if (elem->getDropZoneRight() == dropContainer) { previousElement = elem->getGWt_AbstractElement()->getAbstractElement(); } } } getUISector()->getSectorControler()->addElementAfter(eType,previousElement ); buildBeamLineWidget(); // getUISector()->getExecuteWidget()->displayFromControler(); return UIabstractElement; } void GWt_ligneFaisceau::manageLineFaisceauLayout_deprecated() { // special : hide/setVisible arrow : for (int a=0; a< ligneFaisceauLayout_->count(); a++) { if (GWt_elementLigneFaisceau* elem = dynamic_cast (ligneFaisceauLayout_->itemAt(a)->widget ())) { // update labels if (elem->getGWt_AbstractElement()) { elem->getGWt_AbstractElement()->updateLabelAndToolTipWidget(); } // one element if ((a == 0) && (a == (ligneFaisceauLayout_->count()-1))) { elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent"); elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent"); // first } else if (a == 0){ elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent"); elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line"); // last } else if (a == (ligneFaisceauLayout_->count()-1)){ elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line"); elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent"); // middle elements } else { elem->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_line"); elem->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line"); } } } // insure that there is still the dropzone ! if (ligneFaisceauLayout_->count() == 0) { clear(); } // FIXME // UI_sector_->getExecuteWidget()->updateSections(); } void GWt_ligneFaisceau::buildBeamLineWidget() { // clear the layout and set default text clear(); bool first = true; // Get the dataManager's sector // rebuild the beamLine GWt_elementLigneFaisceau* elemLigneFaisceau = NULL; // for (unsigned int i =0; i< UI_sector_->getSectorControler()->getSectionsToExecute().size(); i++) { // std::vector abstractElem = UI_sector_->getSectorControler()->getSectionsToExecute()[i]->getElements(); std::vector abstractElem = UI_sector_->getSectorControler()->getElements(); for (unsigned int j=0; j< abstractElem.size(); j++) { // elemLigneFaisceau = new GWt_elementLigneFaisceau(dataManager_, // this, // abstractElem[j],UI_sector_->getSectorControler()->getSectionsToExecute()[i]->getSoftware()->getColor()); elemLigneFaisceau = new GWt_elementLigneFaisceau(dataManager_, this, abstractElem[j],"#FFFFFF"); // remove default text if (first) { first = false; ligneFaisceauLayout_->clear(); ligneFaisceauLayout_->addWidget(elemLigneFaisceau); elemLigneFaisceau->getDropZoneLeft()->setStyleClass("elementLigneFaiseau_transparent"); elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line"); } else { ligneFaisceauLayout_->addWidget(elemLigneFaisceau); elemLigneFaisceau->getDropZoneLeft()->setStyleClass( "elementLigneFaiseau_line"); elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_line"); } } // } // remove last line if (elemLigneFaisceau != NULL) { elemLigneFaisceau->getDropZoneRight()->setStyleClass("elementLigneFaiseau_transparent"); } } void GWt_ligneFaisceau::update() { manageLineFaisceauLayout_deprecated(); } void GWt_ligneFaisceau::removeElement(GWt_abstractElement* GWt_abstractElement) { if (GWt_abstractElement == NULL) return; getUISector()->getSectorControler()->removeElement(GWt_abstractElement->getAbstractElement()); buildBeamLineWidget(); // getUISector()->getExecuteWidget()->displayFromControler(); /* // remove Widget // - GWt_abstractElement is an element of the GWt_elementLigneFaisceau_ int index = -1; for (int a=0; a< ligneFaisceauLayout_->count(); a++) { GWt_elementLigneFaisceau* elem = static_cast (ligneFaisceauLayout_->itemAt(a)->widget ()); if (elem) { if (elem->getGWt_AbstractElement() == GWt_abstractElement) { index = a; } } } if (index != -1) { // remove element from the list // pspa_->getDataManager()->removeElement(GWt_abstractElement->getElement()->getLabel()); ligneFaisceauLayout_->removeItem(ligneFaisceauLayout_->itemAt(index)); delete GWt_abstractElement; // manage widgets if necessary manageLineFaisceauLayout_deprecated(); } */ } abstractElement* GWt_ligneFaisceau::getAbstractElement(int i){ int index = 0; if (i < 0) { return NULL; } for (int a=0; a< ligneFaisceauLayout_->count(); a++) { if (ligneFaisceauLayout_->itemAt(a)) { if (GWt_elementLigneFaisceau* elem = dynamic_cast (ligneFaisceauLayout_->itemAt(a)->widget ())) { if (index == i) { if (elem->getGWt_AbstractElement()) { return elem->getGWt_AbstractElement()->getAbstractElement(); } } index ++; } } } return NULL; } int GWt_ligneFaisceau::getAbstractElementNumeroFromLabel(std::string txt){ int index = 1; if (txt == "") { return NULL; } for (int a=0; a< ligneFaisceauLayout_->count(); a++) { if (ligneFaisceauLayout_->itemAt(a)) { if (GWt_elementLigneFaisceau* elem = dynamic_cast (ligneFaisceauLayout_->itemAt(a)->widget ())) { if (elem->getGWt_AbstractElement()) { if (elem->getGWt_AbstractElement()->getAbstractElement()->getLabel() == txt) { return index; } } index ++; } } } return NULL; } int GWt_ligneFaisceau::getBeamLineSize() { int count = 0; for (int a=0; a< ligneFaisceauLayout_->count(); a++) { if (dynamic_cast (ligneFaisceauLayout_->itemAt(a)->widget ())) { count ++; } } return count; } vector GWt_ligneFaisceau::getAllAbstractElements() { vector elems; for (int a=0; a< ligneFaisceauLayout_->count(); a++) { if (GWt_elementLigneFaisceau* elem = dynamic_cast (ligneFaisceauLayout_->itemAt(a)->widget ())) { elems.push_back(elem->getGWt_AbstractElement()->getAbstractElement()); } } return elems; }