bool SelectionSingleton::setPreselect(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { static char buf[513]; if (DocName != "") rmvPreselect(); if (ActiveGate) { App::Document* pDoc = getDocument(pDocName); if (pDoc) { if (pObjectName) { App::DocumentObject* pObject = pDoc->getObject(pObjectName); if (!ActiveGate->allow(pDoc,pObject,pSubName)) { snprintf(buf,512,"Not allowed: %s.%s.%s ",pDocName ,pObjectName ,pSubName ); if (getMainWindow()) { getMainWindow()->showMessage(QString::fromAscii(buf),3000); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(QCursor(Qt::ForbiddenCursor)); } return false; } } else return ActiveGate->allow(pDoc,0,0); } else return false; } DocName = pDocName; FeatName= pObjectName; SubName = pSubName; hx = x; hy = y; hz = z; // set up the change object SelectionChanges Chng; Chng.pDocName = DocName.c_str(); Chng.pObjectName = FeatName.c_str(); Chng.pSubName = SubName.c_str(); Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::SetPreselect; // set the current preselection CurrentPreselection = Chng; snprintf(buf,512,"Preselected: %s.%s.%s (%f,%f,%f)",Chng.pDocName ,Chng.pObjectName ,Chng.pSubName ,x,y,z); //FIXME: We shouldn't replace the possibly defined edit cursor //with the arrow cursor. But it seems that we don't even have to. //if (getMainWindow()){ // getMainWindow()->showMessage(QString::fromAscii(buf),3000); // Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); // mdi->restoreOverrideCursor(); //} Notify(Chng); signalSelectionChanged(Chng); //Base::Console().Log("Sel : Add preselect %s \n",pObjectName); // allows the preselection return true; }
bool SelectionSingleton::addSelection(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { // already in ? if (isSelected(pDocName, pObjectName, pSubName)) return true; _SelObj temp; temp.pDoc = getDocument(pDocName); if (temp.pDoc) { if(pObjectName) temp.pObject = temp.pDoc->getObject(pObjectName); else temp.pObject = 0; // check for a Selection Gate if (ActiveGate) { if (!ActiveGate->allow(temp.pDoc,temp.pObject,pSubName)) { if (getMainWindow()) { getMainWindow()->showMessage(QString::fromAscii("Selection not allowed by filter"),5000); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(Qt::ForbiddenCursor); } QApplication::beep(); return false; } } temp.DocName = pDocName; temp.FeatName = pObjectName ? pObjectName : ""; temp.SubName = pSubName ? pSubName : ""; temp.x = x; temp.y = y; temp.z = z; if (temp.pObject) temp.TypeName = temp.pObject->getTypeId().getName(); _SelList.push_back(temp); SelectionChanges Chng; Chng.pDocName = pDocName; Chng.pObjectName = pObjectName ? pObjectName : ""; Chng.pSubName = pSubName ? pSubName : ""; Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::AddSelection; Notify(Chng); signalSelectionChanged(Chng); Base::Console().Log("Sel : Add Selection \"%s.%s.%s(%f,%f,%f)\"\n",pDocName,pObjectName,pSubName,x,y,z); // allow selection return true; } else { // neither an existing nor active document available //assert(0); // this can often happen when importing .iv files Base::Console().Error("Cannot add to selection: no document '%s' found.\n", pDocName); return false; } }
bool SelectionSingleton::setPreselect(const char* pDocName, const char* pObjectName, const char* pSubName, float x, float y, float z) { if (DocName != "") rmvPreselect(); if (ActiveGate) { // if document of object doesn't exist then return with false App::Document* pDoc = getDocument(pDocName); if (!pDoc || !pObjectName) return false; App::DocumentObject* pObject = pDoc->getObject(pObjectName); if (!pObject) return false; if (!ActiveGate->allow(pDoc,pObject,pSubName)) { QString msg; if (ActiveGate->notAllowedReason.length() > 0){ msg = QObject::tr(ActiveGate->notAllowedReason.c_str()); } else { msg = QCoreApplication::translate("SelectionFilter","Not allowed:"); } msg.append( QObject::tr(" %1.%2.%3 ") .arg(QString::fromLatin1(pDocName)) .arg(QString::fromLatin1(pObjectName)) .arg(QString::fromLatin1(pSubName)) ); if (getMainWindow()) { getMainWindow()->showMessage(msg); Gui::MDIView* mdi = Gui::Application::Instance->activeDocument()->getActiveView(); mdi->setOverrideCursor(QCursor(Qt::ForbiddenCursor)); } return false; } } DocName = pDocName; FeatName= pObjectName; SubName = pSubName; hx = x; hy = y; hz = z; // set up the change object SelectionChanges Chng; Chng.pDocName = DocName.c_str(); Chng.pObjectName = FeatName.c_str(); Chng.pSubName = SubName.c_str(); Chng.pTypeName = ""; Chng.x = x; Chng.y = y; Chng.z = z; Chng.Type = SelectionChanges::SetPreselect; // set the current preselection CurrentPreselection = Chng; Notify(Chng); signalSelectionChanged(Chng); // allows the preselection return true; }