//---------------------------------------------------------------------------- void ProjTree::OnSelChanged(wxTreeEvent& event) { Project *proj = Project::GetSingletonPtr(); if (!proj) return; wxTreeItemId id = event.GetItem(); ProjTreeItem *item = GetItem(id); if (item) { void *id = item->GetItemID().GetID(); const std::string &itemName = item->GetName(); Object *obj = item->GetObject(); if (obj) { PX2_SELECTION.Clear(); PX2_SELECTION.AddObject(obj); } else { PX2_SELECTION.Clear(); } } }
//----------------------------------------------------------------------------- void ProjTree::SetSelectItemLevel(ProjTreeLevel level) { wxTreeItemId selectID = GetSelection(); ProjTreeItem *item = GetItem(selectID); if (item) { item->SetTreeLevel(level, mIsShowHelpNode); SelectItem(item->GetItemID()); } }
//---------------------------------------------------------------------------- void ProjTree::_RemoveObject(PX2::Object *obj) { ProjTreeItem *item = GetItem(obj); if (item) { ProjTreeItem *parItem = item->GetParent(); if (parItem) { parItem->RemoveChild(obj); } } }
//---------------------------------------------------------------------------- void ProjTree::_AddObject(Object *obj) { Actor *actor = DynamicCast<Actor>(obj); Movable *move = DynamicCast<Movable>(obj); EffectModule *eftModule = DynamicCast<EffectModule>(obj); if (move) { Node *parNode = DynamicCast<Node>(move->GetParent()); ProjTreeItem *item = GetItem(parNode); if (parNode && item) { ProjTreeLevel treeLevel = mTreeLevel; UIFrame *uiFrame = DynamicCast<UIFrame>(parNode); if (uiFrame) { if (treeLevel == PTL_GENERAL) treeLevel = PTL_CHILDREN; } item->AddChild(move, 0, treeLevel, mIsShowHelpNode); Expand(item->GetItemID()); } } else if (eftModule) { EffectableController *eftableCtrl = DynamicCast<EffectableController>( eftModule->GetEffectableController()); ProjTreeItem *item = GetItem(eftableCtrl); if (eftableCtrl && item) { item->AddChild(eftModule, 0, mTreeLevel, mIsShowHelpNode); Expand(item->GetItemID()); } } }
//---------------------------------------------------------------------------- void ProjTree::DoExecute(Event *event) { if (EditEventSpace::IsEqual(event, EditEventSpace::NewProject) || EditEventSpace::IsEqual(event, EditEventSpace::LoadedProject)) { _RefreshProject(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseProject)) { _ClearProject(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::NewScene)) { _RefreshScene(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::LoadedScene)) { _RefreshScene(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseScene)) { _ClearScene(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::NewUI) || EditEventSpace::IsEqual(event, EditEventSpace::LoadedUI)) { _RefreshUI(); } else if (EditEventSpace::IsEqual(event, EditEventSpace::CloseUI)) { _ClearUI(); } else if (SimuES_E::IsEqual(event, SimuES_E::AddObject)) { Object *object = event->GetData<Object*>(); _AddObject(object); } else if (SimuES_E::IsEqual(event, SimuES_E::RemoveObject)) { Object *object = event->GetData<Object*>(); _RemoveObject(object); } else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::SetProjTreeLevel)) { int level = event->GetData<int>(); SetTreeLevel((ProjTreeLevel)level); } else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::TaggleProjTreeShowHelpNode)) { ShowHelpNode(!IsShowHelpNode()); SetTreeLevel(GetTreeLevel()); } else if (NirvanaEventSpace::IsEqual(event, NirvanaEventSpace::ObjectNameChanged)) { Object *obj = event->GetData<Object*>(); ProjTreeItem *item = GetItem(obj); if (item) item->SetName(obj->GetName()); } else if (EditEventSpace::IsEqual(event, EditEventSpace::FindActorInProjectTree)) { Object *obj = PX2_SELECTION.GetFirstObject(); ProjTreeItem *item = GetItem(obj); if (item) { SelectItem(item->GetItemID()); SetFocus(); } } else if (EditEventSpace::IsEqual(event, EditEventSpace::SetEditType)) { Edit::EditType et = PX2_EDIT.GetEditType(); if (Edit::ET_TERRAIN == et) { Scene *scene = PX2_PROJ.GetScene(); TerrainActor *terrainActor = scene->GetTerrainActor(); if (terrainActor) { PX2_SELECTION.Clear(); PX2_SELECTION.AddObject(terrainActor); } } } }
//---------------------------------------------------------------------------- void ProjTree::_AddObject(Object *obj) { Actor *actor = DynamicCast<Actor>(obj); Movable *move = DynamicCast<Movable>(obj); EffectModule *eftModule = DynamicCast<EffectModule>(obj); if (actor) { if (actor->IsDerived(CameraActor::TYPE)) { mItemCameras->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(Character::TYPE)) { mItemCharacters->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(EffectActor::TYPE)) { mItemEffects->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(TriggerActor::TYPE) && !actor->IsDerived(AmbientRegionActor::TYPE)) { mItemTriggers->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(AmbientRegionActor::TYPE)) { mItemAmbientRegions->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(SkyActor::TYPE)) { mItemSky->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else if (actor->IsDerived(TerrainActor::TYPE)) { mItemTerrain->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } else { mItemObjects->AddChild(obj, 0, mTreeLevel, mIsShowHelpNode); } } else if (move) { Node *parNode = DynamicCast<Node>(move->GetParent()); ProjTreeItem *item = GetItem(parNode); if (parNode && item) { ProjTreeLevel treeLevel = mTreeLevel; UIFrame *uiFrame = DynamicCast<UIFrame>(parNode); if (uiFrame) { if (treeLevel == PTL_GENERAL) treeLevel = PTL_CHILDREN; } item->AddChild(move, 0, treeLevel, mIsShowHelpNode); Expand(item->GetItemID()); } } else if (eftModule) { EffectableController *eftableCtrl = DynamicCast<EffectableController>( eftModule->GetEffectableController()); ProjTreeItem *item = GetItem(eftableCtrl); if (eftableCtrl && item) { item->AddChild(eftModule, 0, mTreeLevel, mIsShowHelpNode); Expand(item->GetItemID()); } } }
//----------------------------------------------------------------------------- void ProjTreeItem::SetTreeLevel(ProjTreeLevel level, bool isShowHelpNode) { mTreeLevel = level; mIsShowHelpNode = isShowHelpNode; Project *proj = DynamicCast<Project>(mObject); Scene *scene = DynamicCast<Scene>(mObject); if (proj || scene) return; Actor *actor = DynamicCast<Actor>(mObject); Movable *mov = DynamicCast<Movable>(mObject); Node *node = DynamicCast<Node>(mObject); Renderable *renderable = DynamicCast<Renderable>(mObject); EffectableController *effectableCtrl = DynamicCast<EffectableController>(mObject); Material *mtl = DynamicCast<Material>(mObject); MaterialTechnique *mtlTechnique = DynamicCast<MaterialTechnique>(mObject); MaterialPass *mtlPass = DynamicCast<MaterialPass>(mObject); if (!mObject) { // IT_CATALOG for (int i = 0; i < (int)mChildItems.size(); i++) { ProjTreeItem *item = mChildItems[i]; if (item) item->SetTreeLevel(level, isShowHelpNode); } return; } else { ClearChildren(); } bool addCtrl = false; bool addModule = false; bool addNode = false; bool addMaterial = false; if (PTL_GENERAL == mTreeLevel) { } else if (PTL_CHILDREN == mTreeLevel) { if (!scene && !proj && node) { addNode = true; } } else if (PTL_CONTROLS == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (effectableCtrl) { addModule = true; } } else if (PTL_MATERIALS == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (renderable) { addMaterial = true; } } else if (PTL_DETAIL == mTreeLevel) { if (!scene && !proj && mov) { addCtrl = true; } if (!scene && !proj && node) { addNode = true; } if (renderable) { addMaterial = true; } } if (addCtrl) { int numCtrls = mov->GetNumControllers(); for (int i = 0; i < numCtrls; i++) { Controller *ctrl = mov->GetController(i); AddChild(ctrl, mIconID, mTreeLevel, mIsShowHelpNode); } } if (addMaterial) { MaterialInstance *mtlInst = renderable->GetMaterialInstance(); Material *mtl = mtlInst->GetMaterial(); AddChild(mtl, mIconID, mTreeLevel, mIsShowHelpNode); } if (mtl) { int numTechniques = mtl->GetNumTechniques(); for (int i = 0; i < numTechniques; i++) { MaterialTechnique *mtlTechnique = mtl->GetTechnique(i); AddChild(mtlTechnique, mIconID, mTreeLevel, isShowHelpNode); } } if (mtlTechnique) { int numPasses = mtlTechnique->GetNumPasses(); for (int i = 0; i < numPasses; i++) { MaterialPass *mtlPass = mtlTechnique->GetPass(i); AddChild(mtlPass, mIconID, mTreeLevel, isShowHelpNode); } } if (mtlPass) { AddChild(mtlPass->GetVertexShader(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetPixelShader(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetAlphaProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetCullProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetDepthProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetOffsetProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetStencilProperty(), mIconID, mTreeLevel, isShowHelpNode); AddChild(mtlPass->GetWireProperty(), mIconID, mTreeLevel, isShowHelpNode); } if (addModule) { int numModules = effectableCtrl->GetNumModules(); for (int i = 0; i < numModules; i++) { EffectModule *module = effectableCtrl->GetModule(i); AddChild(module, mIconID, mTreeLevel, mIsShowHelpNode); } } if (addNode) { int numChildren = node->GetNumChildren(); for (int i = 0; i < numChildren; i++) { Movable *child = node->GetChild(i); if (child) { bool ingore = false; if (!isShowHelpNode && ("HelpNode" == child->GetName())) ingore = true; if (!ingore) { AddChild(child, mIconID, mTreeLevel, mIsShowHelpNode); } } } } }