// TreeMenu.cpp: implementation of the CTreeMenu class. // ////////////////////////////////////////////////////////////////////// #include "TreeMenu.h" ////////////////////////////////////////////////////////////////////// // Construction/Destruction ////////////////////////////////////////////////////////////////////// CTreeMenu::CTreeMenu(LPSTR szMenuString,int iMainMenus,int iXOffSet,UINT uiImage,int ix,int iy,int iHeight,CContent* _pContent) { CTreeMenu::szMenuString=szMenuString; CTreeMenu::ix=ix; CTreeMenu::iy=iy; CTreeMenu::uiImage=uiImage; CTreeMenu::iMainMenus=iMainMenus; CTreeMenu::iHeight=iHeight; CTreeMenu::_pContent=_pContent; CTreeMenu::iXOffSet=iXOffSet; bOnceClicked=false; pMenuItems=ExtractMenu(szMenuString,iMainMenus,iXOffSet,ix); } CMenuItem** CTreeMenu::ExtractMenu(LPSTR szMenuString,int iMenus,int iXOffSet,int ix){ if(!iMenus) return NULL; int i=0; int index; int iXPosition=0; //only for horizontal root CMenuItem** extractedMenu=new CMenuItem*[iMenus]; for(index=0;index0 && szMenuString[i]==':'){ szRollBack[iToRollBack-1]='\0'; if(strcmp(szRollBack,szMenuName)==0){ szToChild[j-iToRollBack-1]='\0'; break; } else iToRollBack=0; } if(szMenuString[i]=='!' || iToRollBack>0){ szRollBack[iToRollBack]=szMenuString[i+1]; iToRollBack++; } }while(true); i++; char *temp=new char[strlen(szMenuString)]; for(int k=0;((UINT)i)<=strlen(szMenuString);k++){ temp[k]=szMenuString[i++]; } szMenuString=temp; i=0; extractedMenu[index]=new CMenuItem(uiImage,szMenuName, ExtractMenu(szToChild,iMenuLinked,iXOffSet,ix+iXOffSet),iMenuLinked); extractedMenu[index]->SetHorPosPlusWidth(iMenuWidth,ix); extractedMenu[index]->SetIndex(menuIndex); extractedMenu[index]->SetFileName(szMenuFileName); extractedMenu[index]->SetCursor(iCursor); TCHAR szText[64]; wsprintf(szText,"%s x=%d y=%d width=%d height=%d",szMenuName, ix, 0, iMenuWidth,iHeight); //MessageBox(GameEngine::GetEngine()->GetWindow(),szText,"hi all",MB_OK); } TCHAR szText[64]; wsprintf(szText,"%s x=%d y=%d width=%d height=%d",extractedMenu[0]->GetName(), extractedMenu[0]->GetPosition().x, extractedMenu[0]->GetPosition().y, extractedMenu[0]->GetWidth(),extractedMenu[0]->GetHeight()); //MessageBox(GameEngine::GetEngine()->GetWindow(),szText,"hi all",MB_OK); return extractedMenu; } CTreeMenu::~CTreeMenu() { //delete[] pMenuItems; } void CTreeMenu::MouseButtonDown(int x, int y, BOOL bLeft){ if(CMenuItem* itemTemp=AtButtonDown(x,y,pMenuItems,iMainMenus)){ bOnceClicked=true; TCHAR szText[64]; wsprintf(szText,"%s x=%d y=%d ",itemTemp->GetName(), itemTemp->GetIndex(),y); //MessageBox(GameEngine::GetEngine()->GetWindow(),szText,"hi all",MB_OK); //if(itemTemp->GetChildNumber()==0){ _pContent->ChangeTo(itemTemp->GetFileName(),itemTemp->GetCursor()); _pContent->ChangeTo(itemTemp->GetFileName(),itemTemp->GetCursor()); if(GameEngine::GetEngine()->IsSoundOn()) PlaySound((LPCSTR)IDW_IN, GameEngine::GetEngine()->GetInstance(), SND_ASYNC | SND_RESOURCE); //} if(itemTemp->IsCollapsed()){ itemTemp->SetCollapsed(false); } else{ itemTemp->SetCollapsed(true); } } else bOnceClicked=false; } CMenuItem* CTreeMenu::AtButtonDown(int x,int y,CMenuItem **pMenuItems,int iItems){ CMenuItem *menuSelected=NULL; for(int i=0;iIsCollapsed() && (itemTemp=AtButtonDown(x,y, pMenuItems[i]->GetChildMenu(),pMenuItems[i]->GetChildNumber()) )!=NULL){ menuSelected= itemTemp; pMenuItems[i]->MouseButtonDown(x,y,true); } else if(pMenuItems[i]->MouseButtonDown(x,y,false)) menuSelected= pMenuItems[i]; else{ //pMenuItems[i]->SetCollapsed(false); } } return menuSelected; } void CTreeMenu::MouseButtonUp(int x, int y, BOOL bLeft){; MouseMove(x,y); } void CTreeMenu::MouseMove(int x, int y){ if(CMenuItem* itemTemp=AtButtonMove(x,y,pMenuItems,iMainMenus)){ } } CMenuItem* CTreeMenu::AtButtonMove(int x,int y,CMenuItem **pMenuItems,int iItems){ CMenuItem *menuSelected=NULL; for(int i=0;iMouseMove(x,y)){ menuSelected=pMenuItems[i]; } CMenuItem* itemTemp; if((itemTemp=AtButtonMove(x,y,pMenuItems[i]->GetChildMenu(),pMenuItems[i]->GetChildNumber()))){ menuSelected=itemTemp; } } return menuSelected; } void CTreeMenu::DrawScreen(HDC hDC){ if(!hDC) { return; } iVert=iy; DrawItems(hDC,pMenuItems,iMainMenus); } void CTreeMenu::DrawItems(HDC hDC,CMenuItem **pMenuItems,int iItems){ for(int i=0;iSetVertPosPlusHeight(iHeight,iVert); pMenuItems[i]->DrawScreen(hDC); iVert+=iHeight; //pMenuItems[i]->SetCollapsed(true); if(pMenuItems[i]->IsCollapsed()){ DrawItems(hDC,pMenuItems[i]->GetChildMenu(),pMenuItems[i]->GetChildNumber()); // POINT ptStart,ptEnd; // ptStart.x=pMenuItems } } } void CTreeMenu::Refresh(int iMainMenus) { //CTreeMenu::szMenuString=szMenuString; for(int i=0;i