// Ryzom - MMORPG Framework <http://dev.ryzom.com/projects/ryzom/> // Copyright (C) 2010 Winch Gate Property Limited // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU Affero General Public License as // published by the Free Software Foundation, either version 3 of the // License, or (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU Affero General Public License for more details. // // You should have received a copy of the GNU Affero General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. // MasterTree.cpp : implementation file // #include "stdafx.h" #include "master.h" #include "MasterTree.h" #include "Mainfrm.h" #include "nel/misc/types_nl.h" #ifdef NL_NEW #undef new #endif using namespace std; #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif // --------------------------------------------------------------------------- #define IDC_TREE 0x1000 // Top level menus #define ID_MENU_CONTINENT_NEW 0x0044 #define ID_MENU_SORT_NAME_INC 0x0047 #define ID_MENU_SORT_NAME_DEC 0x0048 #define ID_MENU_SORT_DATE_INC 0x0049 #define ID_MENU_SORT_DATE_DEC 0x0050 // Continent menus (a level under the top) #define ID_MENU_CONTINENT_DELETE 0x0064 #define ID_MENU_CONTINENT_OPEN 0x0066 #define ID_MENU_CONTINENT_PROPERTIES 0x0067 #define ID_MENU_CONTINENT_NEW_REGION 0x0068 #define ID_MENU_REGION_OPEN 0x0070 #define ID_MENU_REGION_RENAME 0x0071 #define ID_MENU_REGION_NEW_SUBREGION 0x0072 #define ID_MENU_REGION_NEW_PRIM 0x0073 #define ID_MENU_REGION_NEW_GEORGES 0x0074 #define ID_MENU_REGION_DELETE 0x0075 #define ID_MENU_FILE_OPEN 0x0080 #define ID_MENU_FILE_RENAME 0x0081 #define ID_MENU_FILE_DELETE 0x0082 // --------------------------------------------------------------------------- ///////////////////////////////////////////////////////////////////////////// // CMasterTreeDlg dialog ///////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP (CMasterTree, CTreeCtrl) ON_WM_TIMER() ON_NOTIFY_REFLECT(TVN_BEGINDRAG, OnLBeginDrag) ON_WM_MOUSEMOVE() ON_WM_LBUTTONDBLCLK() ON_WM_LBUTTONDOWN() ON_WM_LBUTTONUP() ON_WM_RBUTTONDOWN() ON_COMMAND(ID_MENU_CONTINENT_NEW, OnMenuNewContinent) ON_COMMAND(ID_MENU_CONTINENT_DELETE, OnMenuContinentDelete) ON_COMMAND(ID_MENU_CONTINENT_OPEN, OnMenuContinentOpen) ON_COMMAND(ID_MENU_CONTINENT_PROPERTIES, OnMenuContinentProperties) ON_COMMAND(ID_MENU_CONTINENT_NEW_REGION, OnMenuContinentNewRegion) ON_COMMAND(ID_MENU_REGION_OPEN, OnMenuRegionOpen) ON_COMMAND(ID_MENU_REGION_RENAME, OnMenuRegionRename) ON_COMMAND(ID_MENU_REGION_NEW_PRIM, OnMenuRegionNewPrim) ON_COMMAND(ID_MENU_REGION_NEW_GEORGES, OnMenuRegionNewGeorges) ON_COMMAND(ID_MENU_REGION_DELETE, OnMenuRegionDelete) ON_COMMAND(ID_MENU_REGION_NEW_SUBREGION, OnMenuRegionNewSubRegion) ON_COMMAND(ID_MENU_FILE_OPEN, OnMenuFileOpen) ON_COMMAND(ID_MENU_FILE_RENAME, OnMenuFileRename) ON_COMMAND(ID_MENU_FILE_DELETE, OnMenuFileDelete) END_MESSAGE_MAP() // --------------------------------------------------------------------------- CMasterTree::CMasterTree () { _LDrag = false; _LastItemSelected = NULL; _LastActiveContinent = NULL; } // --------------------------------------------------------------------------- void CMasterTree::OnTimer (UINT nIDEvent) { if( nIDEvent != m_nTimerID ) { CTreeCtrl::OnTimer(nIDEvent); return; } // Doesn't matter that we didn't initialize m_timerticks m_timerticks++; POINT pt; GetCursorPos (&pt); RECT rect; GetClientRect (&rect); ClientToScreen (&rect); if( pt.y < rect.top + 10 ) { CImageList::DragShowNolock (FALSE); SendMessage (WM_VSCROLL, SB_LINEUP); CImageList::DragShowNolock (TRUE); } else if( pt.y > rect.bottom - 10 ) { CImageList::DragShowNolock (FALSE); SendMessage (WM_VSCROLL, SB_LINEDOWN); CImageList::DragShowNolock (TRUE); } } // --------------------------------------------------------------------------- void CMasterTree::OnLBeginDrag (NMHDR* pNMHDR, LRESULT* pResult) { NMTREEVIEW *pNMTV = (NMTREEVIEW*)pNMHDR; _DragItem = pNMTV->itemNew.hItem; HTREEITEM hParent = GetParentItem (_DragItem); if (hParent == NULL) { *pResult = true; return; } _LDrag = true; m_nTimerID = SetTimer (1, 50, NULL); _DragImg = CreateDragImage (_DragItem); _DragImg->BeginDrag (0, CPoint (8, 8)); _DragImg->DragEnter (this, ((NM_TREEVIEW *)pNMHDR)->ptDrag); SetCapture (); Invalidate (); *pResult = false; } // --------------------------------------------------------------------------- void CMasterTree::OnLButtonDown (UINT nFlags, CPoint point) { /*HTREEITEM NewItem = HitTest (point); if (NewItem == NULL) return; */ CTreeCtrl::OnLButtonDown (nFlags, point); /* HTREEITEM LastContinent, LastRegion; HTREEITEM NewContinent, NewRegion; LastContinent = getContinent (_LastItemSelected); LastRegion = getRegion (_LastItemSelected); NewContinent = getContinent (NewItem); NewRegion = getRegion (NewItem); if (LastRegion != NewRegion) { Expand (LastRegion, TVE_COLLAPSE); Expand (NewRegion, TVE_EXPAND); } if (LastContinent != NewContinent) { Expand (LastContinent, TVE_COLLAPSE); Expand (NewContinent, TVE_EXPAND); } _LastItemSelected = NewItem; Expand (NewItem, TVE_EXPAND); Select (NewItem, TVGN_CARET);*/ } // --------------------------------------------------------------------------- void CMasterTree::OnLButtonDblClk (UINT nFlags, CPoint point) { CTreeCtrl::OnLButtonDblClk (nFlags, point); HTREEITEM hItem = HitTest (point); if (hItem != NULL) { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); if (isFile(hItem)) { pDlg->openFile (getPath(hItem)); } } } // --------------------------------------------------------------------------- void CMasterTree::OnLButtonUp (UINT nFlags, CPoint point) { if (_LDrag) { SelectDropTarget (NULL); _DragImg->DragLeave (this); _DragImg->EndDrag (); ReleaseCapture (); KillTimer (m_nTimerID); _LDrag = false; delete _DragImg; Invalidate (); HTREEITEM dragEndItem = HitTest (point); if ((_DragItem == NULL) || (dragEndItem == NULL)) return; if (isFile(dragEndItem)) return; Select (dragEndItem, TVGN_CARET); CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); pDlg->copy (getPath(_DragItem), getPath(dragEndItem)); } } // --------------------------------------------------------------------------- void CMasterTree::OnMouseMove (UINT nFlags, CPoint point) { if (_LDrag) { _DragImg->DragMove (point); _DragImg->DragShowNolock (FALSE); UINT Flags; HTREEITEM hItem = HitTest (point, &Flags); HTREEITEM hParent = GetParentItem (hItem) ; if ((_DragItem == NULL) || (hItem == NULL)) return; if (!isFile(hItem)) SelectDropTarget (hItem); _DragImg->DragShowNolock (TRUE); } } // --------------------------------------------------------------------------- void CMasterTree::OnRButtonDown (UINT nFlags, CPoint point) { UINT uFlags; HTREEITEM hItem = HitTest (point, &uFlags); HTREEITEM hParent = GetParentItem (hItem); CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); CRect r; this->GetWindowRect (r); CMenu *pMenu = new CMenu; pMenu->CreatePopupMenu (); if (hItem == NULL) { pMenu->AppendMenu (MF_STRING, ID_MENU_CONTINENT_NEW, "&New Continent"); pMenu->AppendMenu (MF_SEPARATOR); pMenu->AppendMenu (MF_STRING, ID_MENU_SORT_NAME_DEC, "Sort By Name (A-Z)"); pMenu->AppendMenu (MF_STRING, ID_MENU_SORT_NAME_INC, "Sort By Name (Z-A)"); pMenu->AppendMenu (MF_STRING, ID_MENU_SORT_DATE_INC, "Sort By Date (New-Old)"); pMenu->AppendMenu (MF_STRING, ID_MENU_SORT_DATE_DEC, "Sort By Date (Old-New)"); } else if (TVHT_ONITEM & uFlags) { Select (hItem, TVGN_CARET); // System roots == continents if (hParent == NULL) { pMenu->AppendMenu (MF_STRING, ID_MENU_CONTINENT_OPEN, "&Open"); pMenu->AppendMenu (MF_STRING, ID_MENU_CONTINENT_PROPERTIES, "&Properties"); pMenu->AppendMenu (MF_STRING, ID_MENU_CONTINENT_NEW_REGION, "New &Region"); pMenu->AppendMenu (MF_STRING, ID_MENU_CONTINENT_DELETE, "&Delete"); } // Under the continents == regions and sub-regions else { if (!isFile (hItem)) { pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_OPEN, "&Open"); pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_RENAME, "&Rename"); pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_NEW_SUBREGION, "New &SubRegion"); pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_NEW_GEORGES, "New &Form"); pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_NEW_PRIM, "New &Patatoid"); pMenu->AppendMenu (MF_STRING, ID_MENU_REGION_DELETE, "&Delete"); } else { pMenu->AppendMenu (MF_STRING, ID_MENU_FILE_OPEN, "&Open"); pMenu->AppendMenu (MF_STRING, ID_MENU_FILE_RENAME, "&Rename"); pMenu->AppendMenu (MF_STRING, ID_MENU_FILE_DELETE, "&Delete"); } } } pMenu->TrackPopupMenu (TPM_LEFTALIGN | TPM_LEFTBUTTON, r.left+point.x, r.top+point.y, this); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuNewContinent () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); pDlg->continentNew (); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuContinentDelete () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); pDlg->continentDelete ((LPCSTR)GetItemText(GetSelectedItem())); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuContinentOpen () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent (); HTREEITEM hItem = GetSelectedItem (); HTREEITEM hParent = GetParentItem (hItem); if (_LastActiveContinent != NULL) SetItem (_LastActiveContinent, TVIF_STATE, NULL, 0, 0, 0, TVIS_BOLD, 0); SetItem (hItem, TVIF_STATE, NULL, 0, 0, TVIS_BOLD, TVIS_BOLD, 0); _LastActiveContinent = hItem; pDlg->continentOpen (string((LPCSTR)GetItemText(hItem))); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuContinentProperties () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); pDlg->continentProperties ((LPCSTR)GetItemText(GetSelectedItem())); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuContinentNewRegion () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); pDlg->continentNewRegion ((LPCSTR)GetItemText(GetSelectedItem())); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionOpen () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionOpen (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionRename () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionRename (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionNewSubRegion () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionNewSubRegion (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionNewPrim () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionNewPrim (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionNewGeorges () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionNewGeorges (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuRegionDelete () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM ht = GetSelectedItem(); pDlg->regionDelete (getPath(ht)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuFileOpen () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM hItem = GetSelectedItem(); bool bFile = isFile (hItem); if (!bFile) return; pDlg->fileOpen (getPath(hItem)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuFileRename () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM hItem = GetSelectedItem(); bool bFile = isFile (hItem); if (!bFile) return; pDlg->fileRename (getPath(hItem)); } // --------------------------------------------------------------------------- void CMasterTree::OnMenuFileDelete () { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); HTREEITEM hItem = GetSelectedItem(); bool bFile = isFile (hItem); if (!bFile) return; pDlg->fileDelete (getPath(hItem)); } // --------------------------------------------------------------------------- string CMasterTree::getCurrentPath () { return getPath(GetSelectedItem()); } // TOOLS // --------------------------------------------------------------------------- string CMasterTree::getPath (HTREEITEM ht) { string sTmp = ""; while (ht != NULL) { sTmp = string("\\") + (LPCSTR)GetItemText(ht) + sTmp; ht = GetParentItem(ht); } return sTmp; } // --------------------------------------------------------------------------- HTREEITEM CMasterTree::getContinent (HTREEITEM ht) { if (ht == NULL) return NULL; if (GetParentItem(ht) == NULL) return NULL; while (GetParentItem(GetParentItem(ht)) != NULL) ht = GetParentItem(ht); if (isFile(ht)) return NULL; return ht; } // --------------------------------------------------------------------------- HTREEITEM CMasterTree::getRegion (HTREEITEM ht) { if (ht == NULL) return NULL; if (GetParentItem(ht) == NULL) return NULL; if (GetParentItem(GetParentItem(ht)) == NULL) return NULL; while (GetParentItem(GetParentItem(GetParentItem(ht))) != NULL) ht = GetParentItem(ht); if (isFile(ht)) return NULL; return ht; } // --------------------------------------------------------------------------- bool CMasterTree::isFile (HTREEITEM ht) { CMasterTreeDlg *pDlg = (CMasterTreeDlg*)GetParent(); map<HTREEITEM,string>::iterator it = pDlg->_Files.find (ht); if (it != pDlg->_Files.end()) return true; else return false; } ///////////////////////////////////////////////////////////////////////////// // CMasterTreeDlg dialog ///////////////////////////////////////////////////////////////////////////// BEGIN_MESSAGE_MAP(CMasterTreeDlg, CDialog) //{{AFX_MSG_MAP(CMasterTreeDlg) ON_WM_SIZE() ON_NOTIFY(TVN_ITEMEXPANDING, IDC_TREE, OnExpanding) //ON_NOTIFY(NM_DBLCLK, IDC_TREE, OnLDblClkTree) ON_WM_CREATE() ON_WM_CLOSE() //}}AFX_MSG_MAP END_MESSAGE_MAP() // --------------------------------------------------------------------------- CMasterTreeDlg::CMasterTreeDlg () { _Tree = NULL; ContinentSortBy = 1; // 0/1 - by name TrashSortBy = 1; // 2/3 - by date BackupSortBy = 2; } // --------------------------------------------------------------------------- FILETIME getFileTime (const string &fname) { WIN32_FIND_DATA FindFileData; HANDLE hFind; FILETIME ret = { 0xFFFFFFFF, 0xFFFFFFFF }; hFind = FindFirstFile (fname.c_str(), &FindFileData); if (hFind != INVALID_HANDLE_VALUE) { ret = FindFileData.ftLastWriteTime; FindClose (hFind); } return ret; } // --------------------------------------------------------------------------- void CMasterTreeDlg::parseAdd (HTREEITEM itRoot, const string &path, char SortType, int DirDepth) { WIN32_FIND_DATA findData; HANDLE hFind; CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem(IDC_TREE); vector<string> SortTable; sint32 i, j; char sCurDir[MAX_PATH]; GetCurrentDirectory (MAX_PATH, sCurDir); if (!SetCurrentDirectory (path.c_str())) { SetCurrentDirectory (sCurDir); return; } hFind = FindFirstFile ("*.*", &findData); if (hFind != INVALID_HANDLE_VALUE) { do { // Look if the name is a system directory bool bFound = false; for (uint32 i = 0; i < MAX_SYS_DIR; ++i) if (stricmp (findData.cFileName, gSysDir[i]) == 0) { bFound = true; break; } if (!bFound) // No ok lets add it { SortTable.push_back (findData.cFileName); } } while (FindNextFile(hFind, &findData) != 0); FindClose (hFind); } if (SortTable.size() == 0) { SetCurrentDirectory (sCurDir); return; } if (SortType == 0) // Sort By Name increasing (z-a) { for (i = 0; i < (sint32)SortTable.size()-1; ++i) for (j = i+1; j < (sint32)SortTable.size(); ++j) if (strcmp(SortTable[i].c_str(), SortTable[j].c_str()) < 0) { string tmp = SortTable[i]; SortTable[i] = SortTable[j]; SortTable[j] = tmp; } } if (SortType == 1) // Sort By Name decreasing (a-z) { for (i = 0; i < (sint32)SortTable.size()-1; ++i) for (j = i+1; j < (sint32)SortTable.size(); ++j) if (strcmp(SortTable[i].c_str(), SortTable[j].c_str()) > 0) { string tmp = SortTable[i]; SortTable[i] = SortTable[j]; SortTable[j] = tmp; } } if (SortType == 2) // Sort By Date increasing { for (i = 0; i < (sint32)SortTable.size()-1; ++i) { FILETIME timeI = getFileTime (SortTable[i]); for (j = i+1; j < (sint32)SortTable.size(); ++j) { FILETIME timeJ = getFileTime (SortTable[j]); if ((timeI.dwHighDateTime < timeJ.dwHighDateTime) || ( (timeI.dwHighDateTime == timeJ.dwHighDateTime) && (timeI.dwLowDateTime < timeJ.dwLowDateTime) )) { string tmp = SortTable[i]; SortTable[i] = SortTable[j]; SortTable[j] = tmp; timeI = timeJ; } } } } if (SortType == 3) // Sort By Date decreasing { for (i = 0; i < (sint32)SortTable.size()-1; ++i) { FILETIME timeI = getFileTime (SortTable[i]); for (j = i+1; j < (sint32)SortTable.size(); ++j) { FILETIME timeJ = getFileTime (SortTable[j]); if ((timeI.dwHighDateTime > timeJ.dwHighDateTime) || ( (timeI.dwHighDateTime == timeJ.dwHighDateTime) && (timeI.dwLowDateTime > timeJ.dwLowDateTime) )) { string tmp = SortTable[i]; SortTable[i] = SortTable[j]; SortTable[j] = tmp; timeI = timeJ; } } } } // Put directories first ! vector<string> SortTable2; for (i = 0; i < (sint32)SortTable.size(); ++i) { if (GetFileAttributes(SortTable[i].c_str())&FILE_ATTRIBUTE_DIRECTORY) SortTable2.push_back(SortTable[i]); } for (i = 0; i < (sint32)SortTable.size(); ++i) { if (!(GetFileAttributes(SortTable[i].c_str())&FILE_ATTRIBUTE_DIRECTORY)) SortTable2.push_back(SortTable[i]); } SortTable = SortTable2; // Recurse for (i = 0; i < (sint32)SortTable.size(); ++i) { if (GetFileAttributes(SortTable[i].c_str())&FILE_ATTRIBUTE_DIRECTORY) { HTREEITEM item; if (DirDepth == 0) item = pTree->InsertItem (SortTable[i].c_str(), 2, 2, itRoot); else item = pTree->InsertItem (SortTable[i].c_str(), 0, 0, itRoot); string newPath = path; if (newPath[newPath.size()-1] != '\\') newPath += "\\"; newPath += SortTable[i].c_str(); parseAdd (item, newPath, SortType, DirDepth+1); } else { // Look if the name is a valid filename (look at the extension) bool bFound = false; for (uint32 j = 0; j < MAX_INVALID_EXT; ++j) if (strlen(SortTable[i].c_str()) > strlen(gInvalidExt[j])) if (stricmp(&SortTable[i].c_str()[strlen(SortTable[i].c_str())-strlen(gInvalidExt[j])], gInvalidExt[j]) == 0) { bFound = true; break; } // If the extension is an invalid one -> Do not display file if (!bFound) { HTREEITEM item = pTree->InsertItem (SortTable[i].c_str(), 1, 1, itRoot); string sTemp = path; if (sTemp[sTemp.size()-1] != '\\') sTemp += "\\"; sTemp += SortTable[i].c_str(); _Files.insert(map<HTREEITEM,string>::value_type(item, sTemp)); } } } SetCurrentDirectory (sCurDir); } // --------------------------------------------------------------------------- HTREEITEM CMasterTreeDlg::activate (const std::string &name, HTREEITEM parent) { // Extract the eltName string eltName; string resName; uint32 i = 0; if (name.size() == 0) return NULL; if (name[i] == '\\') ++i; for (; i < name.size(); ++i) { if (name[i] == '\\') break; eltName += name[i]; } ++i; for (; i < name.size(); ++i) { resName += name[i]; } CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem (IDC_TREE); HTREEITEM hChildItem = pTree->GetChildItem (parent); bool bFound = false; while (hChildItem != NULL) { if (eltName == (LPCSTR)pTree->GetItemText(hChildItem)) { pTree->SetItem (hChildItem, TVIF_STATE, NULL, 0, 0, TVIS_BOLD, TVIS_BOLD, 0); pTree->Expand (hChildItem, TVE_EXPAND); activate (resName, hChildItem); bFound = true; break; } hChildItem = pTree->GetNextItem (hChildItem, TVGN_NEXT); } if (bFound) return hChildItem; else return NULL; } // --------------------------------------------------------------------------- void CMasterTreeDlg::update (const std::string& ContinentsPath) { CMasterTree *pTree = (CMasterTree*)GetDlgItem (IDC_TREE); string sCurPath = pTree->getCurrentPath(); _Files.clear(); pTree->DeleteAllItems (); // Parse all the path char sCurDir[MAX_PATH]; GetCurrentDirectory (MAX_PATH, sCurDir); parseAdd (TVI_ROOT, ContinentsPath, ContinentSortBy); SetCurrentDirectory (sCurDir); // Hilight active Continent CMainFrame *pMF = (CMainFrame *)GetParent (); activate (sCurPath, TVI_ROOT); } // --------------------------------------------------------------------------- void CMasterTreeDlg::DoDataExchange (CDataExchange* pDX) { CDialog::DoDataExchange (pDX); //{{AFX_DATA_MAP(CMasterTreeDlg) // NOTE: the ClassWizard will add DDX and DDV calls here //}}AFX_DATA_MAP } // --------------------------------------------------------------------------- BOOL CMasterTreeDlg::OnInitDialog() { CDialog::OnInitDialog(); _Tree = new CMasterTree; RECT r; r.left = r.top = 10; r.right = r.bottom = 40; _Tree->Create (WS_VISIBLE|WS_BORDER, r, this, IDC_TREE); // Load image list CImageList *pImgList = new CImageList; pImgList->Create (16, 16, ILC_MASK, 0, 5); pImgList->Add (AfxGetApp()->LoadIcon(IDI_FOLDER)); pImgList->Add (AfxGetApp()->LoadIcon(IDI_FILE)); pImgList->Add (AfxGetApp()->LoadIcon(IDI_CONTINENTS)); pImgList->Add (AfxGetApp()->LoadIcon(IDI_BACKUP)); pImgList->Add (AfxGetApp()->LoadIcon(IDI_TRASH)); _Tree->SetImageList (pImgList, TVSIL_NORMAL); return true; } // --------------------------------------------------------------------------- void CMasterTreeDlg::OnSize (UINT nType, int cx, int cy) { if (_Tree) _Tree->SetWindowPos (&wndTop, 0, 0, cx-20, cy-20, SWP_NOMOVE); } // --------------------------------------------------------------------------- void CMasterTreeDlg::OnExpanding (LPNMHDR pnmhdr, LRESULT *pLResult) { /*CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem (IDC_TREE); NMTREEVIEW *pnmtv = (LPNMTREEVIEW) pnmhdr; if ((pnmtv->itemNew.state & TVIS_EXPANDED) != 0) { // We want to collapse this item -> forbid it *pLResult = true; }*/ } // --------------------------------------------------------------------------- void CMasterTreeDlg::openFile (const std::string &fname) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->openFile (fname.c_str()); } // --------------------------------------------------------------------------- void CMasterTreeDlg::openDir (const std::string &fname) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->openDir (fname.c_str()); } // --------------------------------------------------------------------------- void CMasterTreeDlg::continentNew () { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->continentNew (); } // --------------------------------------------------------------------------- void CMasterTreeDlg::continentDelete (const string &contName) { CMainFrame *pMF = (CMainFrame*)GetParent(); pMF->continentDelete (contName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::continentProperties (const string &contName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->continentProperties (contName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::continentNewRegion (const string &contName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->continentNewRegion (contName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::continentOpen (const string &contName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->continentOpen (contName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionOpen (const string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionOpen (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionRename (const string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionRename (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionNewPrim (const string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionNewPrim (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionNewGeorges (const string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionNewGeorges (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionNewSubRegion (const std::string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionNewSubRegion (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::regionDelete (const std::string &path) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->regionDelete (path); } // --------------------------------------------------------------------------- void CMasterTreeDlg::fileOpen (const std::string &sFileFullName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->fileOpen (sFileFullName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::fileRename (const std::string &sFileFullName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->fileRename (sFileFullName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::fileDelete (const std::string &sFileFullName) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->fileDelete (sFileFullName); } // --------------------------------------------------------------------------- void CMasterTreeDlg::copy (const std::string &pathSrc, const std::string &pathDst) { CMainFrame *pMF = (CMainFrame *)GetParent(); pMF->copy (pathSrc, pathDst); } // --------------------------------------------------------------------------- /* void CMasterTreeDlg::OnLDblClkTree(NMHDR* pNMHDR, LRESULT* pResult) { CTreeCtrl *pTree = (CTreeCtrl*)GetDlgItem (IDC_TREE); NMTREEVIEW *pnmtv = (LPNMTREEVIEW) pNMHDR; HTREEITEM hItem = pTree->GetSelectedItem(); HTREEITEM hParent = pTree->GetParentItem (hItem); *pResult = 0; if (hItem != NULL) { map<HTREEITEM,string>::iterator it = _Files.find (hItem); if (it != _Files.end()) { // Double click on a file open the corresponding editor openAnyFile (it->second.c_str()); return; } if ((hParent != NULL) && (pTree->GetParentItem (hParent) == NULL)) { // Double click on a Continent open all editors // Parse all files and open them in the good editor HTREEITEM hChildItem = pTree->GetChildItem (hItem); while (hChildItem != NULL) { it = _Files.find (hChildItem); if (it != _Files.end()) { openAnyFile (it->second.c_str()); } hChildItem = pTree->GetNextItem (hChildItem, TVGN_NEXT); } return; } } } */ // --------------------------------------------------------------------------- void CMasterTreeDlg::OnCancel () { } // --------------------------------------------------------------------------- void CMasterTreeDlg::OnOK () { }