#include #include "GWt_elementLigneFaisceau.h" #include "nomdElements.h" #include "GWt_console.h" #include "abstractElement.h" #include "GWt_rfgun.h" #include "GWt_drift.h" #include "GWt_cell.h" #include "GWt_bend.h" #include "GWt_soleno.h" #include "GWt_beam.h" #include "GWt_fit.h" #include "GWt_snapshot.h" #include #include #include #include #include #include #include #include #define PSPA_DEBUG 1 GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(PspaApplication* pspa) : WContainerWidget(), firstTimeInsertMessage_(NULL), dropZoneLeft_(NULL), dropZoneRight_(NULL), GWt_abstractElement_(NULL), elementLabel_(NULL), pspa_(pspa) { initialize_ligneFaisceau(inconnu); } GWt_elementLigneFaisceau::GWt_elementLigneFaisceau(typedElement type,PspaApplication* pspa) : WContainerWidget(), firstTimeInsertMessage_(NULL), dropZoneLeft_(NULL), dropZoneRight_(NULL), GWt_abstractElement_(NULL), elementLabel_(NULL), pspa_(pspa) { // set the css name setObjectName("elementLigneFaisceau"); initialize_ligneFaisceau(type); } void GWt_elementLigneFaisceau::initialize_ligneFaisceau(typedElement eType) { cout<<"new GWt_elementLigneFaisceau : "<< this << endl; // set layout // +----------+--------+---------+ // | (--->) | ELEM | (-----) | // +----------+--------+---------+ WGridLayout *gridLayout = new WGridLayout(); gridLayout->setContentsMargins(0,0,0,0); gridLayout->setHorizontalSpacing(0); gridLayout->setVerticalSpacing(0); // add first line : initialize arrow and link images dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_); dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_); // change object name in order to manage css : dropZoneLeft_->resize(10,30); dropZoneRight_->resize(10,30); gridLayout->addWidget (dropZoneLeft_,0,0); gridLayout->addWidget (dropZoneRight_,0,2); // add first line : initialize arrow and link images dropZoneLeft_ = new GWt_dropZoneLigneFaisceau(pspa_); dropZoneRight_ = new GWt_dropZoneLigneFaisceau(pspa_); // change object name in order to manage css : dropZoneLeft_->resize(10,30); dropZoneRight_->resize(10,30); gridLayout->addWidget (dropZoneLeft_,0,0); gridLayout->addWidget (dropZoneRight_,0,2); // add the image if present switch ( eType ) { case RFgun : GWt_abstractElement_ = new GWt_rfgun(this); break; case drift : GWt_abstractElement_ = new GWt_drift(this); break; case cell : GWt_abstractElement_ = new GWt_cell(this); break; case bend : GWt_abstractElement_ = new GWt_bend(this); break; case soleno : GWt_abstractElement_ = new GWt_soleno(this); break; case beam : GWt_abstractElement_ = new GWt_beam(this); break; case fit : GWt_abstractElement_ = new GWt_fit(this); break; case snapshot : { int incr = pspa_->getExtensionFile(); incr++; pspa_->setExtensionFile(incr); GWt_abstractElement_ = new GWt_snapshot(this,incr); break; } case inconnu : GWt_abstractElement_ = NULL; } elementContainer_ = new WContainerWidget(); WVBoxLayout* vLayoutElementContainer = new WVBoxLayout(); vLayoutElementContainer->setContentsMargins(0,0,0,0); elementContainer_->setPadding (4); elementContainer_->setStyleClass("beamLineIcon"); elementContainer_->setLayout(vLayoutElementContainer); if (GWt_abstractElement_ != NULL) { vLayoutElementContainer->addWidget(GWt_abstractElement_); GWt_abstractElement_->setMaximumSize(64,40); GWt_abstractElement_->setMinimumSize(64,40); } if (GWt_abstractElement_ == NULL) { elementLabel_ = new WText(); } else { elementLabel_ = new WText(GWt_abstractElement_->getAbstractElement()->getLabel()); } vLayoutElementContainer->addWidget(elementLabel_,Wt::AlignCenter |Wt::AlignMiddle); // gridLayout->addWidget(elementLabel_,1,0,1,3,Wt::AlignCenter |Wt::AlignMiddle); // Add Actions WContainerWidget* actions = new WContainerWidget(); WHBoxLayout* hLayoutActions = new WHBoxLayout(); actions->setStyleClass("beamLineElementActions"); actions->setPositionScheme(Wt::Static); actions->setLayout(hLayoutActions); hLayoutActions->setContentsMargins(0,0,0,0); actionParameters_ = new WText(" "); actionTrash_ = new WText(" "); // set tooltips actionParameters_->setToolTip("change parameters"); actionTrash_->setToolTip("delete"); // Set class for actions elements actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters"); actionParameters_->setMaximumSize(32,32); actionParameters_->setMinimumSize(32,32); actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash"); actionTrash_->setMaximumSize(32,32); actionTrash_->setMinimumSize(32,32); // Set the global action class actions->setOffsets(0); hLayoutActions->addWidget(actionParameters_); hLayoutActions->addWidget(actionTrash_); vLayoutElementContainer->addWidget(actions); // add software name softwareName_ = new WText(""); softwareName_->setStyleClass("softwareElementLigneFaisceauName"); vLayoutElementContainer->addWidget(softwareName_); gridLayout->addWidget (elementContainer_,0,1); gridLayout->setColumnStretch (0,1); gridLayout->setColumnStretch (2,1); // set layout setLayout(gridLayout); // enable signals elementContainer_->mouseWentOut().connect(this,&GWt_elementLigneFaisceau::mouseWentOut); elementContainer_->mouseWentOver().connect(this,&GWt_elementLigneFaisceau::mouseWentOver); actionParameters_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::showParameters); actionTrash_->clicked().connect(GWt_abstractElement_,&GWt_abstractElement::deleteElement); } GWt_elementLigneFaisceau::~GWt_elementLigneFaisceau() {} void GWt_elementLigneFaisceau::update() { if (getGWt_AbstractElement()->getAbstractElement()) { if (getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()) { setBGColor(WColor(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getColor())); softwareName_->setText(getGWt_AbstractElement()->getAbstractElement()->getAbstractSoftware()->getName()); // no abstract software } else { setBGColor(WColor("#FFFFFF")); softwareName_->setText(""); } } } void GWt_elementLigneFaisceau::setBGColor(const WColor c) { elementContainer_->decorationStyle().setBackgroundColor (c); } void GWt_elementLigneFaisceau::removeDone(GWt_abstractElement* gw) { if (messageDropZone_->result() == WDialog::Accepted) { // FIXME // removeDropZone(); } } void GWt_elementLigneFaisceau::addElement(GWt_abstractElement* elem) { clear(); GWt_abstractElement_ = elem; addWidget(GWt_abstractElement_); if (static_cast (parent())) { WContainerWidget* wc = static_cast (parent()); WBoxLayout* layout = ((WBoxLayout*)(wc->layout())); layout->setStretchFactor(this,0); } firstTimeInsertMessage_ = NULL; dropZoneLeft_ = NULL; } std::string GWt_elementLigneFaisceau::getElementNumberInBeamLine(nomdElements elem) { string str = ""; if (static_cast (parent())) { WContainerWidget* wc = static_cast (parent()); for (int a=0; acount(); a++) { if (static_cast (wc->widget (a))) { // GWt_abstractElement* ab = static_cast (wc->widget (a)); /* printf("1--->%d\n",ab->getElement()); printf("2--->%d\n",ab->getElement()->getLenghtOfElement()); printf("3--->%d\n",ab->getElement()->getName().getElementType()); printf("4--->%d\n",elem.getElementType()); if (static_cast (wc->widget (a))->getElement()->getName().getElementType() == elem.getElementType()) { pspa_->addConsoleMessage("type trouvÈ"); } else { pspa_->addConsoleMessage("type trouvÈ NOT "); } */ } } int n = 999999; std::stringstream stream; stream << n ; std::string number(stream.str()); if(n < 10) { str= elem.getElementLabel()+"0"+number; } else { str= elem.getElementLabel()+number; } } return str; } void GWt_elementLigneFaisceau::setElementLabel(std::string label) { if (elementLabel_) { elementLabel_->setText(label.substr(0,10)); elementLabel_->setToolTip(label); } } void GWt_elementLigneFaisceau::mouseWentOut() { actionParameters_->setStyleClass("Button WhiteButton HiddenButton parameters"); actionTrash_->setStyleClass("Button WhiteButton HiddenButton trash"); } void GWt_elementLigneFaisceau::mouseWentOver() { actionParameters_->setStyleClass("Button WhiteButton ContrastButton parameters"); actionTrash_->setStyleClass("Button WhiteButton ContrastButton trash"); }