// PageHouseContainer.cpp : implementation file // #include "stdafx.h" #include "WorldCreator.h" #include "PageHouseContainer.h" #include "DlgEditName.h" #include "MainFrm.h" #include "WorldCreatorView.h" #include "HeightFieldScene.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif ///////////////////////////////////////////////////////////////////////////// // CPageHouseContainer property page IMPLEMENT_DYNCREATE(CPageHouseContainer, CPropertyPage) CPageHouseContainer::CPageHouseContainer() : CPropertyPage(CPageHouseContainer::IDD) { //{{AFX_DATA_INIT(CPageHouseContainer) m_bAddHouse = FALSE; //}}AFX_DATA_INIT } CPageHouseContainer::~CPageHouseContainer() { for(int i=0;iTrackPopupMenu(TPM_LEFTALIGN,point.x,point.y,this); *pResult = 0; } void CPageHouseContainer::OnHouseRename() { HTREEITEM SelectedItem=m_HouseObjectTree.GetSelectedItem(); CString SelectName=m_HouseObjectTree.GetItemText(SelectedItem); CDlgEditName dlgEditName; dlgEditName.m_EditName=SelectName; dlgEditName.DoModal(); if(dlgEditName.m_EditName=="") return; if(isAlreadyExist(dlgEditName.m_EditName)) return; for(int i=0;im_strHouseName==SelectName) { m_HouseTreeNode[i]->m_strHouseName=dlgEditName.m_EditName; } if(m_HouseTreeNode[i]->m_strParentHouseName==SelectName) { m_HouseTreeNode[i]->m_strParentHouseName=dlgEditName.m_EditName; } } UpdateHouseTree(); } BOOL CPageHouseContainer::OnInitDialog() { CPropertyPage::OnInitDialog(); HouseTreeNode *RootNode=new HouseTreeNode; RootNode->m_strHouseName="°Ç¹°"; m_HouseTreeNode.Add(RootNode); UpdateHouseTree(); // TODO: Add extra initialization here return TRUE; // return TRUE unless you set the focus to a control // EXCEPTION: OCX Property Pages should return FALSE } void CPageHouseContainer::OnHouseLoad() { // TODO: Add your command handler code here CDlgHouseLoad dlgHouseLoad; if(dlgHouseLoad.DoModal()!=IDOK) return; if(dlgHouseLoad.m_strOutname=="" && dlgHouseLoad.m_strBSPName=="") return; HouseTreeNode *Node=new HouseTreeNode; Node->m_strOutName=dlgHouseLoad.m_strOutname; Node->m_strMedName=dlgHouseLoad.m_strMedname; Node->m_strInName=dlgHouseLoad.m_strInname; Node->m_strBspName=dlgHouseLoad.m_strBSPName; if(dlgHouseLoad.m_HouseName=="") { Node->m_strHouseName=dlgHouseLoad.m_strOutname; if(dlgHouseLoad.m_strOutname=="") { Node->m_strHouseName=dlgHouseLoad.m_strBSPName; } } else { Node->m_strHouseName=dlgHouseLoad.m_HouseName; } if(isAlreadyExist(Node->m_strHouseName)) return; HTREEITEM SelectedItem=m_HouseObjectTree.GetSelectedItem(); CString ParentName=m_HouseObjectTree.GetItemText(SelectedItem); Node->m_strParentHouseName=ParentName; m_HouseTreeNode.Add(Node); UpdateHouseTree(); } void CPageHouseContainer::OnHouseAddcate() { // TODO: Add your command handler code here HTREEITEM SelectedItem=m_HouseObjectTree.GetSelectedItem(); CString ParentName=m_HouseObjectTree.GetItemText(SelectedItem); HouseTreeNode *SubCate=new HouseTreeNode; CDlgEditName dlgEditName; dlgEditName.DoModal(); if(dlgEditName.m_EditName=="") return; if(isAlreadyExist(dlgEditName.m_EditName)) return; m_AgoExpand=dlgEditName.m_EditName; SubCate->m_strHouseName=dlgEditName.m_EditName; SubCate->m_strParentHouseName=ParentName; m_HouseTreeNode.Add(SubCate); UpdateHouseTree(); } void CPageHouseContainer::UpdateHouseTree() { m_HouseObjectTree.DeleteAllItems(); RecurAddTreeItem(NULL,""); } void CPageHouseContainer::RecurAddTreeItem(HTREEITEM TreeItem, CString strTreeName) { HTREEITEM ParentItem; int cTreeItem; for(cTreeItem=0;cTreeItemm_strParentHouseName==strTreeName) { if(TreeItem==NULL) { ParentItem=m_HouseObjectTree.InsertItem(m_HouseTreeNode[cTreeItem]->m_strHouseName); RecurAddTreeItem(ParentItem,m_HouseTreeNode[cTreeItem]->m_strHouseName); } else { ParentItem=m_HouseObjectTree.InsertItem(m_HouseTreeNode[cTreeItem]->m_strHouseName,TreeItem); RecurAddTreeItem(ParentItem,m_HouseTreeNode[cTreeItem]->m_strHouseName); } if(m_AgoExpand==m_HouseTreeNode[cTreeItem]->m_strHouseName) { m_HouseObjectTree.Expand(ParentItem,TVE_EXPAND); } } } } BOOL CPageHouseContainer::isAlreadyExist(CString strHouseName) { for(int i=0;im_strHouseName==strHouseName) return TRUE; } return FALSE; } void CPageHouseContainer::OnBegindragTreeHouseobject(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); SelectHouseObject(); av->ChangeMouseInterface(1); CSceneManager::m_PickHouseScene=NULL; *pResult = 0; } void CPageHouseContainer::OnHousedelete() { // TODO: Add your command handler code here HTREEITEM SelectedItem=m_HouseObjectTree.GetSelectedItem(); CString DelName=m_HouseObjectTree.GetItemText(SelectedItem); for(int i=0;im_strHouseName==DelName) m_HouseTreeNode.DelIndex(i); } RecurDelTreeItem(DelName); UpdateHouseTree(); } void CPageHouseContainer::RecurDelTreeItem(CString strDelNode) { for(int i=0;im_strParentHouseName==strDelNode) { RecurDelTreeItem(m_HouseTreeNode[i]->m_strHouseName); m_HouseTreeNode.DelIndex(i); } } } void CPageHouseContainer::SelectHouseObject() { HTREEITEM SelectedItem=m_HouseObjectTree.GetSelectedItem(); m_strHouseName=m_HouseObjectTree.GetItemText(SelectedItem); for(int i=0;im_strHouseName==m_strHouseName) { m_strInName=m_HouseTreeNode[i]->m_strInName; m_strMedName=m_HouseTreeNode[i]->m_strMedName; m_strOutName=m_HouseTreeNode[i]->m_strOutName; m_strBspName=m_HouseTreeNode[i]->m_strBspName; } } } void CPageHouseContainer::AddHouse(float fXp, float fYp, float fZp) { CMainFrame *mf=(CMainFrame*)AfxGetApp()->m_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); av->m_SceneManager->m_MapStorage.AddHouseMap(fXp,fYp,fZp,m_strOutName.LockBuffer(),m_strMedName.LockBuffer(),m_strInName.LockBuffer(),m_strBspName.LockBuffer()); //CMapStorage::AddHouseMap(fXp,fYp,fZp,m_strOutName.LockBuffer(),m_strMedName.LockBuffer(),m_strInName.LockBuffer()); } void CPageHouseContainer::OnClickTreeHouseobject(NMHDR* pNMHDR, LRESULT* pResult) { // TODO: Add your control notification handler code here SelectHouseObject(); *pResult = 0; } void CPageHouseContainer::Save(FILE *fp) { char SaveName[MAX_NAMEBUFFER]; fwrite(&m_HouseTreeNode.num,sizeof(int),1,fp); for(int cHouse=0;cHousem_strHouseName.LockBuffer()); fwrite(SaveName,sizeof(char)*MAX_NAMEBUFFER,1,fp); strcpy(SaveName,m_HouseTreeNode[cHouse]->m_strOutName.LockBuffer()); fwrite(SaveName,sizeof(char)*MAX_NAMEBUFFER,1,fp); strcpy(SaveName,m_HouseTreeNode[cHouse]->m_strMedName.LockBuffer()); fwrite(SaveName,sizeof(char)*MAX_NAMEBUFFER,1,fp); strcpy(SaveName,m_HouseTreeNode[cHouse]->m_strInName.LockBuffer()); fwrite(SaveName,sizeof(char)*MAX_NAMEBUFFER,1,fp); strcpy(SaveName,m_HouseTreeNode[cHouse]->m_strParentHouseName.LockBuffer()); fwrite(SaveName,sizeof(char)*MAX_NAMEBUFFER,1,fp); } } void CPageHouseContainer::Load(FILE *fp,int iType) { if(!iType) DeleteTreeData(); char ReadName[MAX_NAMEBUFFER]; int cHouseTree; fread(&cHouseTree,sizeof(int),1,fp); for(int cHouse=0;cHousem_strHouseName=ReadName; fread(ReadName,sizeof(char)*MAX_NAMEBUFFER,1,fp); AddNode->m_strOutName=ReadName; fread(ReadName,sizeof(char)*MAX_NAMEBUFFER,1,fp); AddNode->m_strMedName=ReadName; fread(ReadName,sizeof(char)*MAX_NAMEBUFFER,1,fp); AddNode->m_strInName=ReadName; fread(ReadName,sizeof(char)*MAX_NAMEBUFFER,1,fp); AddNode->m_strParentHouseName=ReadName; if(cHouse == 0 && iType != 0) // °Ç¹° ¶óº§ ½ºÅµ { delete AddNode; continue; } else { m_HouseTreeNode.Add(AddNode); } } } void CPageHouseContainer::DeleteTreeData() { m_HouseObjectTree.DeleteAllItems(); for(int i=0;im_pMainWnd; CWorldCreatorView *av=(CWorldCreatorView *)mf->GetActiveView(); if((m_bAddHouse == TRUE)) // RBSP Ãß°¡ { SelectHouseObject(); av->ChangeMouseInterface(1); } else { av->ChangeMouseInterface(-1); } } void CPageHouseContainer::OnSelchangedTreeHouseobject(NMHDR* pNMHDR, LRESULT* pResult) { NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; // TODO: Add your control notification handler code here SelectHouseObject(); *pResult = 0; }