// ManagerExplorerPaneView.cpp : ±¸Çö ÆÄÀÏÀÔ´Ï´Ù. // #include "stdafx.h" #include "EtWorldPainter.h" #include "ManagerExplorerPaneView.h" #include "UserMessage.h" #include "FileServer.h" #include "PaneDefine.h" #include "MainFrm.h" #include // CManagerExplorerPaneView IMPLEMENT_DYNCREATE(CManagerExplorerPaneView, CFormView) CManagerExplorerPaneView::CManagerExplorerPaneView() : CFormView(CManagerExplorerPaneView::IDD) { m_bActivate = false; m_hRootTree = NULL; m_hNationRootTree = NULL; m_nCurrentManager = 0; CBitmap bitmap; bitmap.LoadBitmap( IDB_BITMAP2 ); m_ImageList.Create( 16, 16, ILC_COLOR24|ILC_MASK, 2, 1 ); m_ImageList.Add( &bitmap, RGB(0,255,0) ); m_pContextMenu = new CMenu; m_pContextMenu->LoadMenu( IDR_CONTEXTMENU ); } CManagerExplorerPaneView::~CManagerExplorerPaneView() { SAFE_DELETE( m_pContextMenu ); } void CManagerExplorerPaneView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); DDX_Control(pDX, IDC_TREE1, m_TreeCtrl); } BEGIN_MESSAGE_MAP(CManagerExplorerPaneView, CFormView) ON_WM_ERASEBKGND() ON_WM_SIZE() ON_MESSAGE( UM_REFRESH_PANE_VIEW, OnRefresh ) ON_NOTIFY(TVN_SELCHANGED, IDC_TREE1, &CManagerExplorerPaneView::OnTvnSelchangedTree1) ON_WM_CONTEXTMENU() ON_COMMAND(ID_MANAGEREXPLORER_CREATEFOLDER, &CManagerExplorerPaneView::OnManagerexplorerCreatefolder) ON_COMMAND(ID_MANAGEREXPLORER_DELETEFOLDER, &CManagerExplorerPaneView::OnManagerexplorerDeletefolder) ON_NOTIFY(TVN_BEGINLABELEDIT, IDC_TREE1, &CManagerExplorerPaneView::OnTvnBeginlabeleditTree1) ON_NOTIFY(TVN_ENDLABELEDIT, IDC_TREE1, &CManagerExplorerPaneView::OnTvnEndlabeleditTree1) END_MESSAGE_MAP() // CManagerExplorerPaneView Áø´ÜÀÔ´Ï´Ù. #ifdef _DEBUG void CManagerExplorerPaneView::AssertValid() const { CFormView::AssertValid(); } #ifndef _WIN32_WCE void CManagerExplorerPaneView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif #endif //_DEBUG // CManagerExplorerPaneView ¸Þ½ÃÁö 󸮱âÀÔ´Ï´Ù. void CManagerExplorerPaneView::OnInitialUpdate() { CFormView::OnInitialUpdate(); // TODO: ¿©±â¿¡ Ư¼öÈ­µÈ Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº» Ŭ·¡½º¸¦ È£ÃâÇÕ´Ï´Ù. if( m_bActivate == true ) return; m_bActivate = true; } BOOL CManagerExplorerPaneView::OnEraseBkgnd(CDC* pDC) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ ¹×/¶Ç´Â ±âº»°ªÀ» È£ÃâÇÕ´Ï´Ù. return FALSE; // return CFormView::OnEraseBkgnd(pDC); } void CManagerExplorerPaneView::OnSize(UINT nType, int cx, int cy) { CFormView::OnSize(nType, cx, cy); // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( m_TreeCtrl ) { m_TreeCtrl.MoveWindow( 0, 0, cx, cy ); } } LRESULT CManagerExplorerPaneView::OnRefresh( WPARAM wParam, LPARAM lParam ) { SAFE_DELETE_VEC( m_VecDirList ); if( !m_TreeCtrl ) return S_OK; m_TreeCtrl.DeleteAllItems(); m_TreeCtrl.SetImageList( &m_ImageList, TVSIL_NORMAL ); m_TreeCtrl.EnableMultiSelect( true ); m_nCurrentManager = (int)wParam; if( wParam == NULL ) return S_OK; if( !CFileServer::GetInstance().IsConnect() ) return S_OK; CString szFolder; m_hRootTree = m_TreeCtrl.InsertItem( "Server", 0, 1 ); if( CFileServer::GetInstance().IsLockNation() ) { CString szRootName; szRootName.Format( "Server - %s", CFileServer::GetInstance().GetLockNation() ); m_hNationRootTree = m_TreeCtrl.InsertItem( szRootName, 0, 1 ); szFolder = GetCurrentDefaultNationFolder(); RefreshFolder( szFolder, m_hNationRootTree ); } szFolder = GetCurrentDefaultFolder(); RefreshFolder( szFolder, m_hRootTree ); m_TreeCtrl.SelectItem( m_hRootTree ); m_TreeCtrl.Expand( m_hRootTree, TVE_EXPAND ); m_TreeCtrl.Expand( m_hNationRootTree, TVE_EXPAND ); /* CWnd *pWnd = GetCurrentWnd(); if( pWnd ) pWnd->SendMessage( UM_EXPLORER_CHANGE_FOLOR, NULL ); */ Invalidate(); return S_OK; } void CManagerExplorerPaneView::CalcSelectItem() { m_SelectItemList.RemoveAll(); m_TreeCtrl.GetSelectedList( m_SelectItemList ); } bool CManagerExplorerPaneView::CheckIgnoreFolder( char *szName ) { switch( m_nCurrentManager ) { case 1: // Texture Manager if( _stricmp( szName, "Server" ) == NULL ) return false; if( _stricmp( szName, "Grass" ) == NULL ) return false; if( _stricmp( szName, "Water" ) == NULL ) return false; if( _stricmp( szName, "Decal" ) == NULL ) return false; if( strstr( szName, "Server - " ) ) return false; break; case 2: // Skin Manager( Prop ) if( _stricmp( szName, "Server" ) == NULL ) return false; if( _stricmp( szName, "Light" ) == NULL ) return false; if( _stricmp( szName, "Camera" ) == NULL ) return false; if( strstr( szName, "Server - " ) ) return false; break; case 3: // Sound Manager if( _stricmp( szName, "Server" ) == NULL ) return false; if( strstr( szName, "Server - " ) ) return false; break; } return true; } void CManagerExplorerPaneView::RefreshFolder( CString &szFolder, HTREEITEM hParentItem ) { WIN32_FIND_DATA FindFileData; HANDLE hFind; char szFindFile[512]; sprintf_s( szFindFile, "%s\\*.*", szFolder ); hFind = FindFirstFile( szFindFile, &FindFileData ); while( hFind != INVALID_HANDLE_VALUE ) { if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { if( strcmp( FindFileData.cFileName, "." ) != NULL && strcmp( FindFileData.cFileName, ".." ) != NULL && FindFileData.cFileName[0] != '.' ) { bool bExist = false; for( DWORD i=0; i(pNMHDR); // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CalcSelectItem(); if( m_SelectItemList.GetCount() == 0 ) { } else if( m_SelectItemList.GetCount() == 1 ) { CString szFullPath; for( DWORD i=0; iSendMessage( UM_EXPLORER_CHANGE_FOLDER, (WPARAM)szFullPath.GetBuffer() ); } else {} *pResult = 0; } CWnd *CManagerExplorerPaneView::GetCurrentWnd() { switch( m_nCurrentManager ) { case 1: return GetPaneWnd( TILEMNG_PANE ); break; case 2: return GetPaneWnd( SKINMNG_PANE ); break; case 3: return GetPaneWnd( SOUNDMNG_PANE ); break; } return NULL; } CString CManagerExplorerPaneView::GetCurrentDefaultFolder() { CString szStr; switch( m_nCurrentManager ) { case 1: szStr.Format( "%s\\Resource\\Tile", CFileServer::GetInstance().GetLocalWorkingFolder() ); break; case 2: szStr.Format( "%s\\Resource\\Prop", CFileServer::GetInstance().GetLocalWorkingFolder() ); break; case 3: szStr.Format( "%s\\Resource\\Sound", CFileServer::GetInstance().GetLocalWorkingFolder() ); break; } return szStr; } CString CManagerExplorerPaneView::GetCurrentDefaultNationFolder() { CString szStr; switch( m_nCurrentManager ) { case 1: szStr.Format( "%s\\Resource\\Tile", CFileServer::GetInstance().GetWorkingFolder() ); break; case 2: szStr.Format( "%s\\Resource\\Prop", CFileServer::GetInstance().GetWorkingFolder() ); break; case 3: szStr.Format( "%s\\Resource\\Sound", CFileServer::GetInstance().GetWorkingFolder() ); break; } return szStr; } void CManagerExplorerPaneView::OnContextMenu(CWnd* /*pWnd*/, CPoint point) { // TODO: ¿©±â¿¡ ¸Þ½ÃÁö 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( CFileServer::GetInstance().IsConnect() == false ) return; CMenu *pSubMenu = m_pContextMenu->GetSubMenu(1); pSubMenu->EnableMenuItem( ID_MANAGEREXPLORER_CREATEFOLDER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); pSubMenu->EnableMenuItem( ID_MANAGEREXPLORER_DELETEFOLDER, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED ); CalcSelectItem(); if( m_SelectItemList.GetCount() == 1 ) { if( m_SelectItemList.GetHead() == m_hRootTree || m_SelectItemList.GetHead() == m_hNationRootTree ) { pSubMenu->EnableMenuItem( ID_MANAGEREXPLORER_CREATEFOLDER, MF_BYCOMMAND | MF_ENABLED ); } else { pSubMenu->EnableMenuItem( ID_MANAGEREXPLORER_CREATEFOLDER, MF_BYCOMMAND | MF_ENABLED ); pSubMenu->EnableMenuItem( ID_MANAGEREXPLORER_DELETEFOLDER, MF_BYCOMMAND | MF_ENABLED ); } } pSubMenu->TrackPopupMenu( TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this ); } void CManagerExplorerPaneView::OnManagerexplorerCreatefolder() { // TODO: ¿©±â¿¡ ¸í·É 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. CalcSelectItem(); CString szFolder; for( DWORD i=0; i szVecFolderList; GetFolderName( szFolder, szVecFolderList ); int i = 0; while(1) { szStr.Format( "Group%03d", i ); bool bExist = false; for( DWORD j=0; j szVecList; FindFileListInDirectory( szSorPath, szSorExt, szVecList, false ); char szTemp1[512] = { 0, }; char szTemp2[512] = { 0, }; bool bResult = true; CWnd *pWnd = GetCurrentWnd(); for( DWORD i=0; iSendMessage( UM_EXPLORER_MOVE_FILE, (WPARAM)szTemp1, (LPARAM)szTemp2 ); DeleteFile( szTemp1 ); } } if( bResult == false ) { MessageBox( "ÇÏÀ§ Æú´õ¿¡ °°Àº À̸§ÀÇ ÆÄÀÏÀÌ Àְųª ¿øº» ÆÄÀÏÀ» Áö¿ï ¼ö ¾ø½À´Ï´Ù.\nÆú´õ »èÁ¦¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.", "¿¡·¯", MB_OK ); } else { if( _rmdir( szFullPath ) != 0 ) { MessageBox( "Æú´õ »èÁ¦¿¡ ½ÇÆÐÇÏ¿´½À´Ï´Ù.", "¿¡·¯", MB_OK ); } else { m_TreeCtrl.DeleteItem( hCurrent ); m_TreeCtrl.SelectItems( hParent, hParent, TRUE ); } } } void CManagerExplorerPaneView::GetFolderName( CString &szFolder, std::vector &szVecList ) { WIN32_FIND_DATA FindFileData; HANDLE hFind; char szFindFile[512]; sprintf_s( szFindFile, "%s\\*.*", szFolder ); hFind = FindFirstFile( szFindFile, &FindFileData ); while( hFind != INVALID_HANDLE_VALUE ) { if( FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY ) { szVecList.push_back( CString(FindFileData.cFileName) ); } if( !FindNextFile( hFind, &FindFileData ) ) break; } FindClose( hFind ); } void CManagerExplorerPaneView::OnTvnBeginlabeleditTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTVDISPINFO pTVDispInfo = reinterpret_cast(pNMHDR); // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. m_szPrevLabelString = pTVDispInfo->item.pszText; *pResult = 0; } void CManagerExplorerPaneView::OnTvnEndlabeleditTree1(NMHDR *pNMHDR, LRESULT *pResult) { LPNMTVDISPINFO pTVDispInfo = reinterpret_cast(pNMHDR); // TODO: ¿©±â¿¡ ÄÁÆ®·Ñ ¾Ë¸² 󸮱â Äڵ带 Ãß°¡ÇÕ´Ï´Ù. if( m_hRootTree == pTVDispInfo->item.hItem ) return; if( m_hNationRootTree == pTVDispInfo->item.hItem ) return; if( pTVDispInfo->item.pszText == NULL ) return; if( CheckIgnoreFolder( pTVDispInfo->item.pszText ) == false ) return; if( CheckIgnoreFolder( m_szPrevLabelString.GetBuffer() ) == false ) return; // °°Àº Æú´õ¿¡ °°Àº À̸§ÀÇ ÇÏÀ§ µð·ºÅ丮°¡ ÀÕ´ÀÁö üũ HTREEITEM hParent = m_TreeCtrl.GetParentItem( pTVDispInfo->item.hItem ); CString szFolder; for( DWORD i=0; i szVecFolderList; GetFolderName( szFolder, szVecFolderList ); for( DWORD i=0; iitem.pszText ) == NULL ) return; } /////////////////////////////////// CString szSourceFullPath, szModifyFullPath; int nDirIndex = -1; for( DWORD i=0; iitem.hItem ) { szSourceFullPath = m_VecDirList[i].szFullPath; nDirIndex = (int)i; break; } } szModifyFullPath.Format( "%s\\%s", szFolder, pTVDispInfo->item.pszText ); if( rename( szSourceFullPath, szModifyFullPath ) != 0 ) return; m_TreeCtrl.SetItemText( pTVDispInfo->item.hItem, pTVDispInfo->item.pszText ); m_VecDirList[nDirIndex].szFullPath = szModifyFullPath; CWnd *pWnd = GetCurrentWnd(); if( pWnd ) pWnd->SendMessage( UM_EXPLORER_CHANGE_FOLDER_NAME, (WPARAM)szModifyFullPath.GetBuffer(), (LPARAM)szSourceFullPath.GetBuffer() ); *pResult = 0; }