void KviCanvasView::contentsMousePressEvent(QMouseEvent *e) { if(e->button() & Qt::LeftButton) { // QPoint p = inverseWorldMatrix().map(e->pos()); QPoint p = e->pos(); switch(m_state) { case SelectOrigin: clearSelection(); setCursor(arrowCursor); m_state = Idle; insertObjectAt(p,m_objectToInsert); canvas()->update(); break; case Idle: { QCanvasItemList l = canvas()->collisions(p); QCanvasItemList::Iterator it = l.begin(); if(it != l.end()) { // Got an item QCanvasItem * hit = *it; if(hit != m_pSelectedItem) { // Was not selected yet setItemSelected(hit); canvas()->update(); } // Now find the point on that we have clicked it switch(KVI_CANVAS_RTTI_CONTROL_TYPE(hit)) { case KVI_CANVAS_RTTI_CONTROL_TYPE_RECTANGLE: beginDragRectangle(((KviCanvasRectangleItem *)hit),p); break; case KVI_CANVAS_RTTI_CONTROL_TYPE_LINE: beginDragLine(((KviCanvasLine *)hit),p); break; case KVI_CANVAS_RTTI_CONTROL_TYPE_POLYGON: beginDragPolygon(((KviCanvasPolygon *)hit),p,e->state() & Qt::ShiftButton,e->state() & Qt::ControlButton); break; } } else { // No item clearSelection(); canvas()->update(); } } break; } } }
void DataIconManager::injectWhileMerging(HkxObject *recessiveobj){ if (!getIsMerged() && recessiveobj){ auto recobj = static_cast<DataIconManager *>(recessiveobj); auto domchildren = getChildren(); auto recchildren = recobj->getChildren(); DataIconManager *domchild; DataIconManager *recchild; HkxSignature domsig; HkxSignature recsig; bool found; QVector <DataIconManager *> children; auto domvarbind = getVariableBindingSetData(); auto recvarbind = recobj->getVariableBindingSetData(); if (domvarbind){ domvarbind->merge(recvarbind); }else if (recvarbind){ getVariableBindingSet() = HkxSharedPtr(recvarbind); auto parfile = static_cast<BehaviorFile *>(getParentFile()); recobj->fixMergedIndices(parfile); parfile->addObjectToFile(recvarbind, -1); } for (auto i = 0; i < domchildren.size(); i++){ found = false; domsig = domchildren.at(i)->getSignature(); domchild = domchildren.at(i); for (auto j = 0; j < recchildren.size(); j++){ recsig = recchildren.at(j)->getSignature(); recchild = recchildren.at(j); if (domsig == recsig && domchild->getName() == recchild->getName()){ found = true; break; } } if (!found){ for (auto j = recchildren.size() - 1; j >= 0; j--){ recchild = recchildren.at(j); auto tempchildren = recchild->getChildren(); for (auto k = 0; k < tempchildren.size(); k++){ auto tempsig = tempchildren.at(k)->getSignature(); auto tempchild = tempchildren.at(k); if ((domsig == tempsig) && ((domchild->getName() == tempchild->getName())/* || //For FNIS problem in mt_behavior NPC_TurnLeft90 (domsig == HKB_CLIP_GENERATOR && !QString::compare(static_cast<hkbClipGenerator *>(domchild)->getAnimationName().section("\\", -1, -1), static_cast<hkbClipGenerator *>(tempchild)->getAnimationName().section("\\", -1, -1), Qt::CaseInsensitive))*/)) { insertObjectAt(i, recchild); if (!static_cast<BehaviorFile *>(getParentFile())->existsInBehavior(recchild)){ recchild->fixMergedIndices(static_cast<BehaviorFile *>(getParentFile())); recchild->fixMergedEventIndices(static_cast<BehaviorFile *>(getParentFile())); getParentFile()->addObjectToFile(recchild, -1); getParentFile()->addObjectToFile(recchild->getVariableBindingSetData(), -1); } //tempchildren.removeAt(k); for (auto m = 0; m < tempchildren.size(); m++){ tempchild = tempchildren.at(m); if (!static_cast<BehaviorFile *>(getParentFile())->existsInBehavior(tempchild)){ tempchild->fixMergedIndices(static_cast<BehaviorFile *>(getParentFile())); tempchild->fixMergedEventIndices(static_cast<BehaviorFile *>(getParentFile())); getParentFile()->addObjectToFile(tempchild, -1); getParentFile()->addObjectToFile(tempchild->getVariableBindingSetData(), -1); auto objects = static_cast<DataIconManager *>(tempchild)->getChildren(); while (!objects.isEmpty()){ auto obj = objects.last(); if (!static_cast<BehaviorFile *>(getParentFile())->existsInBehavior(obj)){ obj->fixMergedIndices(static_cast<BehaviorFile *>(getParentFile())); obj->fixMergedEventIndices(static_cast<BehaviorFile *>(getParentFile())); getParentFile()->addObjectToFile(obj, -1); getParentFile()->addObjectToFile(obj->getVariableBindingSetData(), -1); children = obj->getChildren(); } objects.removeLast(); objects = objects + children; children.clear(); } } } k = tempchildren.size(); j = -1; } } } } } setIsMerged(true); }else{ LogFile::writeToLog("DataIconManager::injectWhileMerging() hkbGenerator: nullptr!"); } }