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!");
    }
}