Esempio n. 1
0
HRESULT StdDualVSImp::Initialize(MNMesh *mnmesh, INode *node)
{
	HRESULT hr;
	hr = S_OK;

	if(!node)
		return E_FAIL;
	
	int index = FindNodeIndex(node);
	
	if( index < 0)
	{
		caches.SetCount(caches.Count()+1);
		caches[caches.Count()-1] = NULL;
		ReplaceReference(caches.Count()-1,node);
		index = caches.Count()-1;
	}
	
	if(forceInvalid || !caches[index]->GetValid())
	{
		forceInvalid = false;
		caches[index]->SetValid(true);
		hr = callb->InitValid(mnmesh, node);
	}
	return hr;
}
Esempio n. 2
0
void CChildView::OnModifyDelete()
{
	for (UINT i = 0; i < Selected.size(); i++)
	{
		CNodeClass* pClass = (CNodeClass*)Selected[i].object->pParent;
		UINT idx = FindNodeIndex(Selected[i].object);
		if (idx != MAX_NODES)
		{
			delete pClass->Nodes[idx];
			pClass->Nodes.erase(pClass->Nodes.begin() + idx);
			theApp.CalcAllOffsets();
		}
	}
	Selected.clear();
}
Esempio n. 3
0
int CUrlTree::Add(const CVector<CString>& UrlVector, bool * AddedExternal) {
    // _L_DEBUG(3, cout << "CUrlTree::Add() - " << UrlVector << endl);
    bool Added = false;
    CTreeElement<CString> * Node = CTree<CString>::Add(UrlVector, &Added);
    int Result = -1;
    if (Added || ((Result = FindNodeIndex(Node)) == -1)) {
        if (AddedExternal)
            (* AddedExternal) = true;
        m_IndexVector.Add((CObject *)Node);
        Result = ((int) m_IndexVector.GetSize()) - 1;
        m_UrlVector.Add(ResolveAt(Result));
        // set the index
        Node->SetData((void *) Result);
    } else {
        if (AddedExternal) 
            (* AddedExternal) = false;        
    }
    // _L_DEBUG(3, cout << "CUrlTree::Add() (result) " << endl << (* this) << endl);    
    return Result;
}
Esempio n. 4
0
void CChildView::OnLButtonDown(UINT nFlags, CPoint point)
{
	m_Edit.ShowWindow(SW_HIDE);
	for (UINT i = 0; i < HotSpots.size(); i++)
	{
		if (HotSpots[i].Rect.PtInRect(point))
		{
			CNodeBase* pHitObject = (CNodeBase*)HotSpots[i].object;

			if (HotSpots[i].Type == HS_OPENCLOSE)
			{
				pHitObject->bOpen[HotSpots[i].Level] = !pHitObject->bOpen[HotSpots[i].Level];
			}
			else if (HotSpots[i].Type == HS_CLICK)
			{
				pHitObject->Update(HotSpots[i]);
			}
			else if (HotSpots[i].Type == HS_SELECT)
			{
				if (nFlags == MK_LBUTTON)
				{
					theApp.ClearSelection();
					Selected.clear();
					pHitObject->bSelected = true;
					Selected.push_back(HotSpots[i]);
				}
				if (nFlags == (MK_LBUTTON | MK_CONTROL))
				{
					pHitObject->bSelected = !pHitObject->bSelected;
					if (pHitObject->bSelected)
					{
						Selected.push_back(HotSpots[i]);
					}
					else
					{
						for (UINT s = 0; s < Selected.size(); s++)
						{
							if (Selected[s].object == pHitObject)
							{
								Selected.erase(Selected.begin() + s);
								break;
							}
						}
					}
				}
				if (nFlags == (MK_LBUTTON | MK_SHIFT))
				{
					if (Selected.size() > 0)
					{
						CNodeBase* pSelected = Selected[0].object;
						if (pSelected->pParent != pHitObject->pParent)
							continue;
						CNodeClass* pClass = (CNodeClass*)pSelected->pParent;
						//if (pClass->GetType() != nt_class) continue;

						UINT idx1 = FindNodeIndex(pSelected);
						if (idx1 == MAX_NODES)
							continue;
						UINT idx2 = FindNodeIndex(pHitObject);
						if (idx2 == MAX_NODES)
							continue;
						if (idx2 < idx1)
						{
							UINT idxTemp = idx1;
							idx1 = idx2;
							idx2 = idxTemp;
						}

						theApp.ClearSelection();
						Selected.clear();
						for (UINT s = idx1; s <= idx2; s++)
						{
							pClass->Nodes[s]->bSelected = true;
							HotSpot spot;
							//ZeroMemory(&spot, sizeof(HotSpot));
							spot.Address = pClass->offset + pClass->Nodes[s]->offset;
							spot.object = pClass->Nodes[s];
							Selected.push_back(spot);
						}
					}
				}
			}
			else if (HotSpots[i].Type == HS_DROP)
			{
				CRect client;
				GetClientRect(&client);
				ClientToScreen(&client);
				CMenu menu;
				menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU_QUICKMODIFY));
				menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_HORNEGANIMATION, client.left + HotSpots[i].Rect.left, client.top + HotSpots[i].Rect.bottom, this);
			}
			else if (HotSpots[i].Type == HS_DELETE)
			{
				//isDeleting = true; // Ghetto fix to stop crashing from OnMouseHover
				for (UINT i = 0; i < Selected.size(); i++)
				{
					CNodeClass* pClass = (CNodeClass*)Selected[i].object->pParent;
					UINT idx = FindNodeIndex(Selected[i].object);
					if (idx != MAX_NODES)
					{
						delete pClass->Nodes[idx];
						pClass->Nodes.erase(pClass->Nodes.begin() + idx);
						theApp.CalcAllOffsets();
					}
				}
				Selected.clear();
				//isDeleting = false;
			}
			else if ((HotSpots[i].Type == HS_CHANGE_A) || (HotSpots[i].Type == HS_CHANGE_X))
			{
				ExchangeTarget = HotSpots[i];
				CRect pos = ExchangeTarget.Rect;
				ClientToScreen(&pos);

				CNodeBase* pNode = HotSpots[i].object;

				CMenu menu;
				menu.CreatePopupMenu();

				CImage img;
				img.LoadFromResource(AfxGetResourceHandle(), IDB_CLASSBITMAP);
				CBitmap bmp;
				bmp.Attach(img.Detach());

				for (UINT m = 0; m < theApp.Classes.size(); m++)
				{
					if ((HotSpots[i].Type == HS_CHANGE_X) && (pNode->pParent == theApp.Classes[m]))
						continue;
					menu.AppendMenu(MF_STRING | MF_ENABLED, WM_CHANGECLASSMENU + m, theApp.Classes[m]->Name);
					menu.SetMenuItemBitmaps(m, MF_BYPOSITION, &bmp, &bmp);
				}
				menu.TrackPopupMenu(TPM_LEFTALIGN | TPM_NOANIMATION, pos.left, pos.bottom, this);
			}
			Invalidate();
		}
	}

	CWnd::OnLButtonDown(nFlags, point);
}
Esempio n. 5
0
void CChildView::OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags)
{
	if (nChar == VK_DOWN)
	{
		if (Selected.size() > 0)
		{
			HotSpot* firstSelected = &Selected[0];
			if (firstSelected->Address != HotSpots[HotSpots.size() - 1].Address)
			{
				theApp.ClearSelection();
				Selected.clear();
				for (UINT i = 0; i < HotSpots.size(); i++)
				{
					if (HotSpots[i].Type != HS_SELECT)
						continue;
					if (firstSelected->Address != HotSpots[i].Address)
						continue;
					if (HotSpots[0].object == firstSelected->object) // stop from crashing
						continue;

#if _WIN64
					__int64 nextAddress = HotSpots[i].Address + firstSelected->object->GetMemorySize();
#else
					int nextAddress = HotSpots[i].Address + firstSelected->object->GetMemorySize();
#endif	

					UINT newIndex = 0;
					for (int j = 0; HotSpots[i + j].Address != nextAddress; j++)
						newIndex = i + j + 1;

					HotSpots[newIndex].object->bSelected = true;
					Selected.push_back(HotSpots[newIndex]);

					break;
				}
			}
		}
	}
	else if (nChar == VK_UP)
	{
		if (Selected.size() > 0)
		{
			HotSpot* firstSelected = &Selected[0];
			if (firstSelected->Address != HotSpots[0].Address)
			{
				theApp.ClearSelection();
				Selected.clear();

				for (UINT i = 0; i < HotSpots.size(); i++)
				{
					if (HotSpots[i].Type != HS_SELECT)
						continue;
					if (firstSelected->Address != HotSpots[i].Address)
						continue;

					HotSpots[i - 1].object->bSelected = true;
					Selected.push_back(HotSpots[i - 1]);

					break;
				}
			}
		}
	}
	else if (nChar == VK_DELETE)
	{
		//isDeleting = true; // Ghetto fix to stop crashing from OnMouseHover
		for (UINT i = 0; i < Selected.size(); i++)
		{
			CNodeClass* pClass = (CNodeClass*)Selected[i].object->pParent;
			UINT idx = FindNodeIndex(Selected[i].object);
			if (idx != MAX_NODES)
			{
				delete pClass->Nodes[idx];
				pClass->Nodes.erase(pClass->Nodes.begin() + idx);
				theApp.CalcAllOffsets();
			}
		}
		Selected.clear();
		//isDeleting = false;
	}

	CWnd::OnKeyDown(nChar, nRepCnt, nFlags);
}
Esempio n. 6
0
void CChildView::ReplaceSelectedWithType(NodeType Type)
{
	std::vector<CNodeBase*> newSelected;

	PrintOut(_T("Replace Node Type %Ts"), NodeTypeToString(Type));

	for (UINT i = 0; i < Selected.size(); i++)
	{
		if (!theApp.IsNodeValid(Selected[i].object))
			continue;
		if (Selected[i].object->pParent->GetType() == nt_vtable)
			Type = nt_function;

		CNodeBase* pNewNode = theApp.CreateNewNode(Type);

		if (Type == nt_class)	MakeBasicClass((CNodeClass*)pNewNode);
		if (Type == nt_custom)	((CNodeCustom*)pNewNode)->memsize = Selected[i].object->GetMemorySize();
		if (Type == nt_text)	((CNodeText*)pNewNode)->memsize = Selected[i].object->GetMemorySize();
		if (Type == nt_unicode)	((CNodeUnicode*)pNewNode)->memsize = Selected[i].object->GetMemorySize();
		if (Type == nt_vtable)
		{
			for (int i = 0; i < 10; i++)
			{
				CNodeVTable* pVTable = (CNodeVTable*)pNewNode;
				CNodeFunctionPtr* pFun = new CNodeFunctionPtr;
				pFun->offset = i * 8;
				pFun->pParent = pVTable;
				pVTable->Nodes.push_back(pFun);
			}
		}
		if (Type == nt_pointer)
		{
			CNodePtr*	pPtr = (CNodePtr*)pNewNode;
			CNodeClass* pClass = (CNodeClass*)theApp.CreateNewNode(nt_class);
			MakeBasicClass(pClass);
			pPtr->pNode = pClass;
		}
		if (Type == nt_array)
		{
			CNodeArray* pArray = (CNodeArray*)pNewNode;
			CNodeClass* pClass = (CNodeClass*)theApp.CreateNewNode(nt_class);
			MakeBasicClass(pClass);
			pArray->pNode = pClass;
		}
		if (Type == nt_instance)
		{
			CNodeClassInstance* pInstance = (CNodeClassInstance*)pNewNode;
			CNodeClass*			pClass = (CNodeClass*)theApp.CreateNewNode(nt_class);
			MakeBasicClass(pClass);
			pInstance->pNode = pClass;
		}

		ReplaceNode((CNodeClass*)Selected[i].object->pParent, FindNodeIndex(Selected[i].object), pNewNode);
		newSelected.push_back(pNewNode);
	}

	Selected.clear();
	for (UINT i = 0; i < newSelected.size(); i++)
	{
		newSelected[i]->bSelected = true;
		CNodeClass* pClass = (CNodeClass*)newSelected[i]->pParent;

		HotSpot spot;
		spot.Address = pClass->offset + newSelected[i]->offset;
		spot.object = newSelected[i];
		Selected.push_back(spot);
	}

	Invalidate(FALSE);
}
Esempio n. 7
0
void CChildView::OnInsertInsert2048()
{
	InsertBytes((CNodeClass*)Selected[0].object->pParent, FindNodeIndex(Selected[0].object), 2048);
	Invalidate(FALSE);
}
Esempio n. 8
0
RefResult StdDualVSImp::NotifyRefChanged(const Interval& changeInt, RefTargetHandle hTarget, PartID& partID, RefMessage message, BOOL propagate)
{
	switch (message) 
	{
		case REFMSG_TARGET_DELETED:
			{
				int i = FindNodeIndex((INode*)hTarget);
				assert(i >= 0);
				callb->DeleteRenderMeshCache(caches[i]->GetNode());
				delete caches[i];
				caches[i] = NULL;
				// NH 07|11|02 The cache is no longer dynamic - it will only grow but not shrink, 
				// so there could be null entries.  This was causing a problem in SetReference
//				caches.Delete(i,1);
//				caches.Shrink();
			}
			break;
		case REFMSG_NODE_MATERIAL_CHANGED:
			{
				int i = FindNodeIndex((INode*)hTarget);
				assert(i >= 0);
				DeleteReference(i);
			}
			break;
		case REFMSG_NODE_WSCACHE_UPDATED:
			{
				int i = FindNodeIndex((INode*)hTarget);
				//NH:06|11|02  I removed this, as in an undo situation the node reference may not be restored yet
				// as the viewport shader has not been initialised and thus not set the node.  In this case -1 is valid
//				assert(i >= 0);
				if(i >= 0)
					caches[i]->SetValid(false);
			}
			break;
		case REFMSG_SUBANIM_STRUCTURE_CHANGED:
		case REFMSG_REF_DELETED:
			{
				BOOL del = TRUE;

				int i = FindNodeIndex((INode*)hTarget);
				INode * n = (INode*)hTarget;
				Mtl * m = n->GetMtl();
				if(m)
				{
					// NH|06|11|02 check for the Viewport Manager - if the Effect is the same as the callback then keep it
					ICustAttribContainer *cont = m->GetCustAttribContainer();
					if (cont && cont->GetNumCustAttribs()) {
						IDXShaderManagerInterface *sm = GetDXShaderManager();
						if (!sm) 
						{
							break;
						}

						for (int kk = 0; kk < cont->GetNumCustAttribs(); kk++) {
							CustAttrib *ca = cont->GetCustAttrib(kk);
							IViewportShaderManager *manager = (IViewportShaderManager*)ca->GetInterface(VIEWPORT_SHADER_MANAGER_INTERFACE);
							if (manager) {

								ReferenceTarget *rt = manager->GetActiveEffect();
								if(rt == callb->GetRefTarg())
									del = FALSE;

							}
						}
					}
				}
				// Check, if there's still a reference path from the node to the MtlBase
				if(!DependsOn(hTarget,callb->GetRefTarg()) && del)
				{
					DeleteReference(i);
				}
				forceInvalid = true;
			}
	}
	return REF_SUCCEED;
}