DragonNest/Client/EtFileSystemTool/NxFileSystemToolDlg.cpp

1285 lines
29 KiB
C++
Raw Permalink Normal View History

#include "stdafx.h"
#include "NxFileSystemTool.h"
#include "NxFileSystemToolDlg.h"
#include "NewFolderDlg.h"
#include "ExportBrowseFolder.h"
#include "WorkDialog.h"
#include "BuildDivisionPacking.h"
#include "BuildDivisionPackingCapacity.h"
#include "LogWnd.h"
#include "SundriesFunc.h"
#include "SHFolderDialog.h"
#include <list>
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
#pragma warning(disable:4311)
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǵ<EFBFBD> CAboutDlg <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// <20><>ȭ <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV <20><><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CNxFileSystemToolDlg <20><>ȭ <20><><EFBFBD><EFBFBD>
CNxFileSystemToolDlg::CNxFileSystemToolDlg(CWnd* pParent /*=NULL*/)
: CDialog(CNxFileSystemToolDlg::IDD, pParent)
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
m_iOverwriteType = -1;
}
void
CNxFileSystemToolDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Control(pDX, IDC_FILE_LIST, m_FileList);
DDX_Control(pDX, IDC_NAVI , m_Edit);
}
BEGIN_MESSAGE_MAP(CNxFileSystemToolDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_WM_SIZE()
ON_COMMAND(ID_LOADSYSTEM, OnLoadsystem)
ON_COMMAND(ID_NEWSYSTEM, OnNewsystem)
ON_COMMAND(ID_FILESYSTEM_CLOSE, OnFilesystemClose)
ON_COMMAND(ID_INSERT_FILE, OnInsertFile)
ON_MESSAGE(WM_COMPLETE_MSG, OnCompleteMsg)
ON_MESSAGE(WM_COMPLETE_OPTIMIZE, OnComplete_Optimize)
ON_MESSAGE(WM_COMPLETE_EXPORT, OnComplete_Export)
ON_COMMAND(ID_NEW_FOLDER, OnNewFolder)
ON_COMMAND(ID_REMOVE, OnRemove)
ON_NOTIFY(NM_DBLCLK, IDC_FILE_LIST, OnNMDblclkFileList)
ON_NOTIFY(LVN_ENDLABELEDIT, IDC_FILE_LIST, OnLvnEndlabeleditFileList)
ON_COMMAND(ID_IPAC_EXIT, OnIpacExit)
ON_COMMAND(ID_OPTIMIZE, OnOptimize)
ON_COMMAND(ID_RENAME, OnRename)
ON_COMMAND(ID_EXPORT, OnExport)
ON_COMMAND(ID_ABOUT, OnAbout)
ON_BN_CLICKED(IDC_BUTTON1, OnBnClickedButton1)
ON_COMMAND(ID_MENU_DIV_PACKING, &CNxFileSystemToolDlg::OnMenuDivPacking)
ON_COMMAND(ID_MENU_DIV_PACKING_CAPACITY, &CNxFileSystemToolDlg::OnMenuDivPackingCapacity)
ON_COMMAND(ID_PATCH, &CNxFileSystemToolDlg::OnPatch)
ON_MESSAGE(WM_COMPLETE_PATCH, OnCompletePatch)
ON_COMMAND(ID_COMPARE, &CNxFileSystemToolDlg::OnCompare)
ON_COMMAND(ID_INSERT_FOLDER, &CNxFileSystemToolDlg::OnInsertFolder)
END_MESSAGE_MAP()
// CNxFileSystemToolDlg <20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD>
BOOL
CNxFileSystemToolDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// <20>ý<EFBFBD><C3BD><EFBFBD> <20>޴<EFBFBD><DEB4><EFBFBD> "<22><><EFBFBD><EFBFBD>..." <20>޴<EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
// IDM_ABOUTBOX<4F><58> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>־<EFBFBD><D6BE><EFBFBD> <20>մϴ<D5B4>.
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// <20><> <20><>ȭ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>. <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><> â<><C3A2> <20><>ȭ <20><><EFBFBD>ڰ<EFBFBD> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1>
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
SetIcon(m_hIcon, TRUE); // ū <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
SetIcon(m_hIcon, FALSE); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
// TODO: <20><><EFBFBD><20>߰<EFBFBD> <20>ʱ<EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
m_FileList.DragAcceptFiles();
m_FileList.SetExtendedStyle(LVS_EX_FULLROWSELECT);
RECT Rect;
m_FileList.GetWindowRect(&Rect);
const int COLUMN_WIDTH_GAB = 4;
const int SIZECOLUMN_WIDTH = 300;
const int SIZECOLUMN_WIDTH2 = 80;
m_FileList.InsertColumn(0,_T("<EFBFBD≯<EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH);
m_FileList.InsertColumn(1,_T("ũ<EFBFBD><EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH2);
m_FileList.InsertColumn(2,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ũ<EFBFBD><EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH2);
m_FileList.InsertColumn(3,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>"),LVCFMT_LEFT,SIZECOLUMN_WIDTH);
m_ImageList.Create(IDB_FILE_LIST_ICON,16,2,RGB(0,255,0));
m_FileList.SetImageList(&m_ImageList,LVSIL_SMALL);
m_bWorking = false; // <20>۾<EFBFBD><DBBE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴ<EFBFBD><C6B4><EFBFBD>.. <20>ʱ<EFBFBD>ȭ
m_FileList.SetFocus();
// LogWnd::CreateLog();
return TRUE; // <20><>Ʈ<EFBFBD>ѿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20><>Ŀ<EFBFBD><C4BF><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> TRUE<55><45> <20><>ȯ<EFBFBD>մϴ<D5B4>.
}
void
CNxFileSystemToolDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// <20><>ȭ <20><><EFBFBD>ڿ<EFBFBD> <20>ּ<EFBFBD>ȭ <20><><EFBFBD>߸<EFBFBD> <20>߰<EFBFBD><DFB0><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8><EFBFBD><EFBFBD><EFBFBD>
// <20>Ʒ<EFBFBD> <20>ڵ尡 <20>ʿ<EFBFBD><CABF>մϴ<D5B4>. <20><><EFBFBD><EFBFBD>/<2F><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD> MFC <20><><EFBFBD><EFBFBD> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1>
// <20><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>ũ<EFBFBD><C5A9><EFBFBD><EFBFBD> <20><> <20>۾<EFBFBD><DBBE><EFBFBD> <20>ڵ<EFBFBD><DAB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.
void
CNxFileSystemToolDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // <20>׸<EFBFBD><D7B8><20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̽<EFBFBD> <20><><EFBFBD>ؽ<EFBFBD>Ʈ
SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);
// Ŭ<><C5AC><EFBFBD>̾<EFBFBD>Ʈ <20><EFBFBD><E7B0A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EEB5A5> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>.
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׸<EFBFBD><D7B8>ϴ<EFBFBD>.
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
// <20><><EFBFBD><EFBFBD><EFBFBD>ڰ<EFBFBD> <20>ּ<EFBFBD>ȭ<EFBFBD><C8AD> â<><C3A2> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ȿ<EFBFBD> Ŀ<><C4BF><EFBFBD><EFBFBD> ǥ<>õǵ<C3B5><C7B5><EFBFBD> <20>ý<EFBFBD><C3BD>ۿ<EFBFBD><DBBF><EFBFBD>
// <20><> <20>Լ<EFBFBD><D4BC><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
HCURSOR
CNxFileSystemToolDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
BOOL
CNxFileSystemToolDlg::PreTranslateMessage(MSG* pMsg)
{
switch(pMsg->wParam)
{
case VK_ESCAPE:
pMsg->wParam=NULL; // ESC <20><> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
break;
case VK_RETURN:
pMsg->wParam=NULL; // <20><><EFBFBD>͵<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ѵ<EFBFBD>.
break;
}
switch(pMsg->message)
{
case WM_DROPFILES:
if(pMsg->hwnd == m_FileList.GetSafeHwnd())
DropFile((HDROP)pMsg->wParam);
break;
case WM_KEYDOWN:
if(pMsg->hwnd == m_FileList.GetSafeHwnd() && pMsg->wParam == VK_DELETE)
OnRemove();
break;
}
return CDialog::PreTranslateMessage(pMsg);
}
void
CNxFileSystemToolDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
const int SIZECOLUMN_WIDTH = 300;
const int SIZECOLUMN_WIDTH2 = 60;
CRect rt;
// TODO: <20><><EFBFBD><20>޽<EFBFBD><DEBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if (m_FileList.GetSafeHwnd() != NULL )
{
m_FileList.SetWindowPos(NULL,10,35,cx-22,cy-48,SWP_NOZORDER);
//Client <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<><20><><EFBFBD>Ѵ<EFBFBD>.
m_FileList.GetClientRect(&rt);
}
}
static int
CALLBACK FileListItemSortFunc(LPARAM lParam1,LPARAM lParam2,LPARAM /*lParamSort*/)
{
SNxFileInfo* pFH1 = (SNxFileInfo*)lParam1;
SNxFileInfo* pFH2 = (SNxFileInfo*)lParam2;
CString strItem1;
if(pFH1->nFileType == NFS_DIR)
{
strItem1.Format(_T("!%s"),pFH1->szFileName);
}
else
{
strItem1 = pFH1->szFileName;
}
CString strItem2;
if(pFH2->nFileType == NFS_DIR)
{
strItem2.Format(_T("!%s"),pFH2->szFileName);
}
else
{
strItem2 = pFH2->szFileName;
}
return _tcscmp(strItem1,strItem2);
}
void
CNxFileSystemToolDlg::UpdateFileList()
{
m_FileList.DeleteAllItems();
int i;
CString strFileSize;
CString OriFileSize;
std::vector< SPackingFileInfo * > vecFileInfo;
std::vector< std::string > vecDirList;
g_FileSystem.GetFileInfoListCurDir( vecFileInfo );
g_FileSystem.GetDirListCurDir( vecDirList );
m_vecFileInfo.resize( vecFileInfo.size() + vecDirList.size() );
for( i = 0; i < ( int )vecFileInfo.size(); i++ )
{
_GetFullFileName( m_vecFileInfo[ i ].szFileName, _countof(m_vecFileInfo[ i ].szFileName), vecFileInfo[ i ]->szFileName );
m_vecFileInfo[ i ].dwCompressSize = vecFileInfo[ i ]->dwCompressSize;
m_vecFileInfo[ i ].dwOriginalSize = vecFileInfo[ i ]->dwOriginalSize;
m_vecFileInfo[ i ].nFileType = NFS_FILE;
}
for( i = 0; i < ( int )vecDirList.size(); i++ )
{
strcpy_s( m_vecFileInfo[ vecFileInfo.size() + i ].szFileName, _MAX_PATH, vecDirList[ i ].c_str() );
m_vecFileInfo[ vecFileInfo.size() + i ].nFileType = NFS_DIR;
}
for( i = 0; i < ( int )m_vecFileInfo.size(); i++ )
{
m_FileList.InsertItem( i, m_vecFileInfo[ i ].szFileName, 1 );
m_FileList.SetItemData( i, ( DWORD )( &m_vecFileInfo[ i ] ) );
if( m_vecFileInfo[ i ].nFileType == NFS_FILE )
{
strFileSize.Format(_T("%dKB"),( m_vecFileInfo[ i ].dwCompressSize + 999 ) / 1000 );
m_FileList.SetItemText(i,1,LPCTSTR(strFileSize));
OriFileSize.Format(_T("%dKB"),( m_vecFileInfo[ i ].dwOriginalSize + 999 ) / 1000 );
m_FileList.SetItemText(i,2,LPCTSTR(OriFileSize));
}
}
m_FileList.SortItems(FileListItemSortFunc,NULL);
this->SetDlgItemText(IDC_NAVI,g_FileSystem.GetCurDir());
}
void
CNxFileSystemToolDlg::OnLoadsystem()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return ;
}
CFileDialog Dlg(TRUE,_T(".pak"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
if(!g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName())))
{
// <20><><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD> <20>б<EFBFBD><D0B1>ζ<EFBFBD><CEB6><EFBFBD> <20><><EFBFBD><EFBFBD>..
if( !g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName()), true ))
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF>ų<EFBFBD> <20>߸<EFBFBD><DFB8><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Դϴ<D4B4>."));
return;
}
}
m_strPath = Dlg.GetPathName();
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnNewsystem()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return ;
}
CFileDialog Dlg(FALSE,_T(".Nfs"),_T("NewSystem.pak"),OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
if(!g_FileSystem.NewFileSystem(LPCTSTR(Dlg.GetPathName())))
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>ο<EFBFBD> <20><><EFBFBD>Ͻý<CFBD><C3BD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
return;
}
if(!g_FileSystem.OpenFileSystem(LPCTSTR(Dlg.GetPathName())))
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ý<EFBFBD><C3BD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
return;
}
m_strPath = Dlg.GetPathName();
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnFilesystemClose()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return ;
}
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
g_FileSystem.CloseFileSystem();
m_strPath.Empty();
UpdateFileList();
}
BOOL
CNxFileSystemToolDlg::DestroyWindow()
{
// TODO: <20><><EFBFBD>⿡ Ư<><C6AF>ȭ<EFBFBD><C8AD> <20>ڵ带 <20>߰<EFBFBD> <20><>/<2F>Ǵ<EFBFBD> <20>⺻ Ŭ<><C5AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ȣ<><C8A3><EFBFBD>մϴ<D5B4>.
SAFE_DELETE (g_pAddThread);
return CDialog::DestroyWindow();
}
LRESULT
CNxFileSystemToolDlg::OnCompleteMsg(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pAddThread);
m_bWorking = false;
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
UpdateFileList();
return TRUE;
}
void CNxFileSystemToolDlg::OnInsertFile()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
CFileDialog Dlg(TRUE);
if(Dlg.DoModal() == IDCANCEL)
return;
TCHAR strName[_MAX_FNAME];
g_FileSystem.GetNameOnly(strName,Dlg.GetPathName().GetBuffer());
/* if(g_FileSystem.CheckNameExist(strName))
{
if(AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> '<27><>' <20><>\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ÷<CFBD><C3B7><EFBFBD> '<27>ƴϿ<C6B4>' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ֽʽÿ<CABD>! "),MB_YESNO) == IDNO) return;
g_FileSystem.Remove(strName);
}*/
// <20>ȳ<EFBFBD> <20>ڽ<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
DrawWorking();
AddFileInfo add;
add.FileName = LPCTSTR( Dlg.GetPathName() );
add.FilePath = g_FileSystem.GetCurDir();
g_AddFileList.push_back(add);
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
void CNxFileSystemToolDlg::OnInsertFolder()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
CString strSelectedPath;
if( !CSHFolderDialog::BrowseForFolder( strSelectedPath, _T("Choose a Folder:"), m_hWnd, 0, 0, NULL ) == IDOK )
{
return;
}
SearchFolderAndAddFile( strSelectedPath.GetBuffer() );
// <20>ȳ<EFBFBD> <20>ڽ<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
DrawWorking();
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
void CNxFileSystemToolDlg::SearchFolderAndAddFile( const char *szFolderName )
{
char acCommonBuffer[1024];
sprintf(acCommonBuffer, szFolderName);
strcat(acCommonBuffer, "/*.*");
HANDLE hSearchFile;
WIN32_FIND_DATA wfd;
BOOL bResult = TRUE;
// <20><><EFBFBD><EFBFBD><EFBFBD>ȿ<EFBFBD> <20>ִ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ã<><C3A3> <20><>ȸ<EFBFBD>Ѵ<EFBFBD>.
hSearchFile = FindFirstFile(acCommonBuffer, &wfd);
if (hSearchFile == INVALID_HANDLE_VALUE)
return;
std::string strSubFolder;
std::string::size_type szLength;
if( m_strRootFolder.length() == 0 )
{
std::string strTemp = szFolderName;
szLength = strTemp.rfind( "\\" );
strTemp.erase( szLength );
m_strRootFolder = strTemp;
}
std::string strFolderName = szFolderName;
strFolderName.erase( 0, m_strRootFolder.length() );
strSubFolder = strFolderName + "\\";
// <20><><EFBFBD><EFBFBD> ã<>Ҵٸ<D2B4>,
while (bResult)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׻<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20><><EFBFBD>̴<EFBFBD>. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>.
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
// <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>׻<EFBFBD> . <20><> .. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ִ<EFBFBD>. <20>̰<EFBFBD> <20>׳<EFBFBD> <20>ѱ<EFBFBD><D1B1><EFBFBD>, <20>ٸ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,
if (wfd.cFileName[0] != '.')
{
// <20><><EFBFBD><EFBFBD>ȣ<EFBFBD><C8A3><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD>Ѵ<EFBFBD>.
sprintf(acCommonBuffer, "%s\\%s", szFolderName, wfd.cFileName);
SearchFolderAndAddFile(acCommonBuffer);
}
}
else
{
if (_stricmp(wfd.cFileName, "Thumbs.db"))
{
// <20><><EFBFBD>ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>
sprintf(acCommonBuffer, "%s\\%s", szFolderName, wfd.cFileName);
// <20><><EFBFBD><EFBFBD> ũ<>Ⱑ 0<><30> <20>ƴ<EFBFBD> <20><><EFBFBD><EFBFBD><ECBFA1> <20>߰<EFBFBD><DFB0>Ѵ<EFBFBD>. <20><><EFBFBD><EFBFBD>ũ<EFBFBD><C5A9> 0<><30> <20>ǹ̾<C7B9><CCBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>̴<EFBFBD>.
HANDLE hFile = CreateFile(acCommonBuffer, GENERIC_READ, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
if (GetFileSize(hFile, NULL) != 0)
{
AddFileInfo add;
add.FileName = acCommonBuffer;
add.FilePath = strSubFolder;
g_AddFileList.push_back(add);
}
CloseHandle(hFile);
}
}
bResult = FindNextFile(hSearchFile, &wfd);
}
FindClose(hSearchFile);
}
void CNxFileSystemToolDlg::OnNewFolder()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
CNewFolderDlg Dlg;
if(Dlg.DoModal() == IDCANCEL) return;
if(Dlg.m_strFolderName.IsEmpty()) return;
// g_FileSystem.AddDirWithChange(LPCTSTR(Dlg.m_strFolderName));
UpdateFileList();
}
void
CNxFileSystemToolDlg::OnRemove()
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
if(!m_FileList.GetSelectedCount()) return;
if(AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?"), MB_YESNO) == IDYES)
{
CStringArray strRemove;
POSITION Pos = m_FileList.GetFirstSelectedItemPosition();
while(Pos)
{
int iItem = m_FileList.GetNextSelectedItem(Pos);
SNxFileInfo* NxFileInfo = (SNxFileInfo*)m_FileList.GetItemData(iItem);
strRemove.Add(NxFileInfo->szFileName);
}
for(int i=0;i<strRemove.GetSize();i++) g_FileSystem.Remove(strRemove[i]);
UpdateFileList();
}
}
void
CNxFileSystemToolDlg::OnNMDblclkFileList(NMHDR *pNMHDR, LRESULT *pResult)
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
if(m_FileList.GetSelectedCount() != 1) return;
NMITEMACTIVATE* pNMItemActivate = (NMITEMACTIVATE*)pNMHDR;
if(pNMItemActivate->iItem >= 0)
{
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(pNMItemActivate->iItem);
if( pFH->nFileType == NFS_DIR)
{
g_FileSystem.ChangeDir(pFH->szFileName);
UpdateFileList();
}
}
*pResult = 0;
}
void
CNxFileSystemToolDlg::OnLvnEndlabeleditFileList(NMHDR *pNMHDR, LRESULT *pResult)
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
NMLVDISPINFO *pDispInfo = reinterpret_cast<NMLVDISPINFO*>(pNMHDR);
if(!pDispInfo->item.pszText) return;
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(pDispInfo->item.iItem);
if(!g_FileSystem.Rename(pFH->szFileName,pDispInfo->item.pszText))
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ҽ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>!"));
return;
}
m_FileList.SetItemText(pDispInfo->item.iItem,0,pDispInfo->item.pszText);
*pResult = 0;
}
void
CNxFileSystemToolDlg::DropFile(HDROP hDrop)
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
g_AddFileList.clear();
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
if ( AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ϲ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ͻý<CFBD><C3BD>ۿ<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?") , MB_YESNO) == IDNO )
return;
// <20>ȳ<EFBFBD> <20>ڽ<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
DrawWorking();
/*
UINT DragQueryFile( HDROP hDrop, UINT iFile, LPTSTR lpszFile, UINT cch );
iFile<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0xFFFFFFFF<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ϰ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ӵǾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>ȯ
<EFBFBD><EFBFBD>, iFile<EFBFBD><EFBFBD><EFBFBD><EFBFBD> 0<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>ӵ<EFBFBD> <EFBFBD><EFBFBD>ü <EFBFBD><EFBFBD><EFBFBD>ϼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>̰<EFBFBD>, lpszFile<EFBFBD><EFBFBD> NULL<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> null<EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
<EFBFBD>ʴ<EFBFBD> <EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD> ij<EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD>
hDrop : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
iFile : <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ε<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD>Ÿ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>, <EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>ʿ<EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD><EFBFBD><EFBFBD>մϴ<EFBFBD>.
lpszFile : <EFBFBD>н<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <EFBFBD>޾Ƶ <EFBFBD><EFBFBD><EFBFBD><EFBFBD>(<EFBFBD><EFBFBD>Ʈ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
cch : <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> ũ<EFBFBD><EFBFBD>
*/
int iCount = DragQueryFile(hDrop,0xFFFFFFFF,NULL,0); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>Ѵ<EFBFBD>.
TCHAR strPath[_MAX_PATH];
for(int i=0;i<iCount;i++)
{
DragQueryFile(hDrop,i,strPath,_MAX_PATH);
FILE* bFile = _tfopen(strPath, _T("rb")); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ƴϸ<C6B4> bFile <20><> NULL <20>ɰ<EFBFBD><C9B0>̴<EFBFBD>
if(bFile) // <20><>, <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD> <20>ϴ<EFBFBD> <20>ݰ<EFBFBD>!
fclose(bFile);
TCHAR strName[_MAX_FNAME];
g_FileSystem.GetNameOnly(strName,strPath); // <20><><EFBFBD>θ<EFBFBD> <20><> <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EEB3BD>.
if(bFile)
{
// <20><><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ұ<EFBFBD><D2B0><EFBFBD>..
/* if(g_FileSystem.CheckNameExist(strName))
{
if(m_iOverwriteType < 0)
m_iOverwriteType = AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n\n <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> '<27><>' <20><>\n\n <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ÷<CFBD><C3B7><EFBFBD> '<27>ƴϿ<C6B4>' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ֽʽÿ<CABD>!") ,MB_YESNO);
if(m_iOverwriteType == IDNO)
continue;
g_FileSystem.Remove(strName);
}*/
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>..
AddFileInfo add;
add.FileName = strPath;
add.FilePath = g_FileSystem.GetCurDir();
g_AddFileList.push_back(add);
}
else
{
if(!DropFolder(strPath))
{
CString strError;
strError.Format(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>߰<EFBFBD><DFB0>ϴµ<CFB4> <20><><EFBFBD><EFBFBD><EFBFBD>Ͽ<EFBFBD><CFBF><EFBFBD><EFBFBD>ϴ<EFBFBD>.\n\n%s"),strPath);
AfxMessageBox(strError);
}
}
}
m_iOverwriteType = -1;
DragFinish(hDrop);
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
g_pAddThread = new CFileImportThread(this->GetSafeHwnd());
g_pAddThread->Start();
m_bWorking = true;
}
BOOL
CNxFileSystemToolDlg::DropFolder(const TCHAR* strPath)
{
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return FALSE;
}
char *pFindPtr = strstr( ( char * )strPath, ".svn" );
if( pFindPtr )
{
if( _stricmp( pFindPtr, ".svn" ) == 0 )
{
return FALSE;
}
}
TCHAR strOldPath[_MAX_PATH];
GetCurrentDirectory(_MAX_PATH,strOldPath); // <20><><EFBFBD><EFBFBD> <20><> <20><><EFBFBD>α׷<CEB1><D7B7><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20>˾Ƴ<CBBE><C6B3><EFBFBD>.
SetCurrentDirectory(strPath); // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>.??
TCHAR strName[_MAX_FNAME];
g_FileSystem.GetNameOnly(strName,strPath);
/* if(!g_FileSystem.CheckNameExist(strName))
{
g_FileSystem.AddDir(strName);
}*/
if(!g_FileSystem.ChangeDir(strName))
return FALSE;
CFileFind FileFind;
if(FileFind.FindFile())
{
for(BOOL bNext=TRUE;bNext;)
{
bNext = FileFind.FindNextFile();
CString strP = FileFind.GetFilePath();
CString strN = FileFind.GetFileName();
if(strN == "." || strN == "..") continue;
if(FileFind.IsDirectory())
{
DropFolder(LPCTSTR(strP));
}
else
{
/* if(g_FileSystem.CheckNameExist(strN))
{
if(m_iOverwriteType < 0)
m_iOverwriteType = AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20≯<EFBFBD><CCB8><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̹<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>մϴ<D5B4>.\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD>ο<EFBFBD> <20><><EFBFBD>Ϸ<EFBFBD> <20><><EFBFBD><EFBFBD>÷<EFBFBD><C3B7><EFBFBD> '<27><>' <20><>\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻ÷<CFBD><C3B7><EFBFBD> '<27>ƴϿ<C6B4>' <20><> <20><><EFBFBD><EFBFBD><EFBFBD>ֽʽÿ<CABD>!"),MB_YESNO);
if(m_iOverwriteType == IDNO)
continue;
g_FileSystem.Remove(strN);
}*/
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD>..
AddFileInfo add;
add.FileName = strP;
add.FilePath = g_FileSystem.GetCurDir();
g_AddFileList.push_back(add);
}
}
}
FileFind.Close();
g_FileSystem.ChangeDir(_T(".."));
SetCurrentDirectory(strOldPath);
return TRUE;
}
void
CNxFileSystemToolDlg::OnIpacExit()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.\n\n<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD> <20><><EFBFBD>ٷ<EFBFBD><D9B7>ֽø<D6BD> <20>ȵɱ<C8B5><C9B1><EFBFBD>..? \n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
return;
}
PostQuitMessage(0);
}
void
CNxFileSystemToolDlg::OnOptimize()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>.\n\n<EFBFBD><EFBFBD><EFBFBD>ݸ<EFBFBD> <20><><EFBFBD>ٷ<EFBFBD><D9B7>ֽø<D6BD> <20>ȵɱ<C8B5><C9B1><EFBFBD>..? \n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD>..."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
// <20>ȳ<EFBFBD> <20>ڽ<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
DrawWorking();
// <20><><EFBFBD><EFBFBD> <20>߰<EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
g_pOptimizeThread = new COptimizeThread(this->GetSafeHwnd() , m_strPath);
//OptimizeThread->Start();
g_pOptimizeThread->Run();
m_bWorking = true;
}
LRESULT
CNxFileSystemToolDlg::OnComplete_Optimize(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pOptimizeThread);
g_FileSystem.ChangeDir(_T("/"));
m_bWorking = false;
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȭ <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>߽<EFBFBD><DFBD>ϴ<EFBFBD>.\n\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޷ǽ<EFBFBD>~"));
UpdateFileList();
return TRUE;
}
LRESULT
CNxFileSystemToolDlg::OnComplete_Export(WPARAM wParam, LPARAM lParam)
{
SAFE_DELETE (g_pExportThread);
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20>Ϸ<EFBFBD> <20>Ǿ<EFBFBD><C7BE><EFBFBD><EFBFBD>ϴ<EFBFBD>."));
UpdateFileList();
m_bWorking = false;
return TRUE;
}
void
CNxFileSystemToolDlg::OnRename()
{
;
}
using namespace std;
typedef list<SNxFileInfo> CValueFileHandleList;
typedef list<SNxFileInfo>::iterator CValueFileHandleList_It;
void
CNxFileSystemToolDlg::OnExport()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
if ( m_bWorking )
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>۾<EFBFBD><DBBE><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Դϴ<D4B4>."));
return;
}
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>."));
return;
}
if(!m_FileList.GetSelectedCount())
return;
if ( AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>õ<EFBFBD> <20><><EFBFBD><EFBFBD> Ȥ<><C8A4> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ܺη<DCBA> <20><><EFBFBD><EFBFBD><EFBFBD>Ͻðڽ<C3B0><DABD>ϱ<EFBFBD>?"), MB_YESNO) == IDNO)
return;
TCHAR strOldPath[_MAX_PATH]= { 0 , };
// GetCurrentDirectory(_MAX_PATH,strOldPath); // <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4B8AE> <20>˾Ƴ<CBBE><C6B3><EFBFBD>.
if ( ExportBrowseFolder(GetSafeHwnd(),strOldPath) == FALSE )
return;
CString CurPath;
CString ExportPath;
CurPath = strOldPath;
ExportPath = CurPath + _T("\\Exports");
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD> + Exports <20><><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
CreateDirectory(ExportPath,NULL);
// <20>ͽ<EFBFBD><CDBD><EFBFBD>Ʈ <20><> <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>̵<EFBFBD>
SetCurrentDirectory(ExportPath);
// <20>ȳ<EFBFBD> <20>ڽ<EFBFBD>.. <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>..
DrawWorking();
g_ExportList.clear();
POSITION Pos = m_FileList.GetFirstSelectedItemPosition();
CValueFileHandleList OriginalValue;
while(Pos)
{
int iItem = m_FileList.GetNextSelectedItem(Pos);
SNxFileInfo *pFH = ( SNxFileInfo * )m_FileList.GetItemData(iItem);
if( *(pFH->szFileName) == _T('.') )
continue;
SNxFileInfo FH = *pFH; // Value Copy
OriginalValue.push_back(FH);
}
CValueFileHandleList_It tempit=OriginalValue.begin();
for(tempit ; tempit!=OriginalValue.end() ; ++tempit )
{
SNxFileInfo FH = (SNxFileInfo)(*tempit);
ExportInfo add;
add.FileType = FH.nFileType;
add.Name = FH.szFileName;
add.FilePath = g_FileSystem.GetCurDir();
g_ExportList.push_back(add);
if ( FH.nFileType == NFS_DIR )
{
tstring name = FH.szFileName;
FolderExport(name);
g_FileSystem.ChangeDir(_T(".."));
}
}
// <20><><EFBFBD><EFBFBD> <20>α׸<CEB1> <20><><EFBFBD><EFBFBD> <20><><EFBFBD>ƿ<EFBFBD>~
ExportInfoList_It Export_It = g_ExportList.begin();
//@Log.LogInfo(L"###### Ÿ<><C5B8> 0 <20><><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> 1<><31><EFBFBD≯<EFBFBD> <20><><EFBFBD><EFBFBD> ######");
for (Export_It ; Export_It != g_ExportList.end() ; ++Export_It )
{
tstring name = (*Export_It).Name;
tstring FilePath = (*Export_It).FilePath;
int FileType = (*Export_It).FileType;
//@Log.LogInfo(L"<22≯<EFBFBD>:[%s] , <20><><EFBFBD><EFBFBD>:[%s] , <20><><EFBFBD><EFBFBD>Ÿ<EFBFBD><C5B8>: [%d] ",name.c_str(),FilePath.c_str(),FileType);
}
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><> <20>̾<EFBFBD><CCBE><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD><20><><EFBFBD><EFBFBD><EFBFBD>غ<EFBFBD><D8BA><EFBFBD>!!
g_pExportThread = new CFileExportThread(this->GetSafeHwnd() , ExportPath);
g_pExportThread->Start();
m_bWorking = true;
OriginalValue.clear();
}
void CNxFileSystemToolDlg::FolderExport(tstring FolderName)
{
if ( g_FileSystem.ChangeDir(FolderName.c_str()) == FALSE)
{
return;
}
std::vector< SPackingFileInfo * > vecFileInfo;
std::vector< std::string > vecDirList;
g_FileSystem.GetDirListCurDir( vecDirList );
g_FileSystem.GetFileInfoListCurDir( vecFileInfo );
int i;
for( i = 0; i < ( int )vecFileInfo.size(); i++ )
{
if( vecFileInfo[ i ]->dwCompressSize > 0 )
{
ExportInfo add;
add.FileType = NFS_FILE;
add.Name = vecFileInfo[ i ]->szFileName;
add.FilePath = g_FileSystem.GetCurDir();
g_ExportList.push_back(add);
}
}
for( i = 0; i < ( int )vecDirList.size(); i++ )
{
if( _stricmp( vecDirList[ i ].c_str(), "." ) == 0 )
{
continue;
}
if( _stricmp( vecDirList[ i ].c_str(), ".." ) == 0 )
{
continue;
}
FolderExport( vecDirList[ i ].c_str() );
}
g_FileSystem.ChangeDir( ".." );
}
void
CNxFileSystemToolDlg::OnAbout()
{
// TODO: <20><><EFBFBD><20><><EFBFBD><EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
void
CNxFileSystemToolDlg::OnBnClickedButton1()
{
// TODO: <20><><EFBFBD><20><>Ʈ<EFBFBD><C6AE> <20>˸<EFBFBD> ó<><C3B3><EFBFBD><EFBFBD> <20>ڵ带 <20>߰<EFBFBD><DFB0>մϴ<D5B4>.
CString Path;
this->GetDlgItemText(IDC_NAVI,Path);
if( g_FileSystem.ChangeDir((LPTSTR)(LPCTSTR)Path) )
{
UpdateFileList();
}
}
void CNxFileSystemToolDlg::OnMenuDivPacking()
{
// TODO: Add your command handler code here
BuildDivisionPacking dlg;
dlg.DoModal();
}
void CNxFileSystemToolDlg::OnMenuDivPackingCapacity()
{
// TODO: Add your command handler code here
BuildDivisionPackingCapacity dlg;
dlg.DoModal();
}
void CNxFileSystemToolDlg::OnPatch()
{
// TODO: Add your command handler code here
if(!m_FileList.GetItemCount())
{
AfxMessageBox(_T("<EFBFBD><EFBFBD><EFBFBD>Ͻý<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD><EFBFBD>Ǿ<EFBFBD> <20><><EFBFBD><EFBFBD> <20>ʽ<EFBFBD><CABD>ϴ<EFBFBD>.\n<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŷ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20>ε<EFBFBD><CEB5><EFBFBD><EFBFBD>ּ<EFBFBD><D6BC><EFBFBD>."));
return;
}
CFileDialog Dlg(TRUE,_T(".pak"),NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,_T("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>(*.pak)|*.pak||"),NULL);
if(Dlg.DoModal() == IDCANCEL) return;
DrawWorking();
// <20><><EFBFBD><EFBFBD> <20><>ġ <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD> <20><><EFBFBD><EFBFBD>!
g_pPatchThread = new PatchThread(this->GetSafeHwnd(), std::string(LPCTSTR(Dlg.GetPathName())));
g_pPatchThread->Start();
m_bWorking = true;
}
LRESULT CNxFileSystemToolDlg::OnCompletePatch(WPARAM wParam, LPARAM lParam)
{
m_bWorking = false;
SAFE_DELETE(g_pPatchThread);
//AfxMessageBox(_T("<22><>ġ <20>Ϸ<EFBFBD>!!"));
if ( g_pWorking )
{
::PostMessage(g_pWorking->GetSafeHwnd(),WM_DESTROY,0,0);
SAFE_DELETE(g_pWorking);
}
g_FileSystem.ChangeDir(_T("/"));
UpdateFileList();
return 0;
}
void CNxFileSystemToolDlg::OnCompare()
{
char szFileList[ 10000 ];
TCHAR szFilter[] = _T( "DragonNest Packing File (*.pak)|*.pak|All Files (*.*)|*.*||" );
CFileDialog FileDlg( TRUE, _T("pak"), _T("*.pak"), OFN_HIDEREADONLY | OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT | OFN_ENABLESIZING , szFilter, this );
memset( szFileList, 0, 10000 );
FileDlg.GetOFN().lpstrFile = szFileList;
FileDlg.GetOFN().nMaxFile = 10000;
FileDlg.m_ofn.lpstrTitle = "Open Source File";
if( FileDlg.DoModal() != IDOK )
{
return;
}
std::vector< std::string > vecSour, vecDest;
POSITION Pos = FileDlg.GetStartPosition();
while( Pos )
{
CString szFileName = FileDlg.GetNextPathName( Pos );
vecSour.push_back( szFileName.GetBuffer() );
}
FileDlg.m_ofn.lpstrTitle = "Open Destination File";
if( FileDlg.DoModal() != IDOK )
{
return;
}
Pos = FileDlg.GetStartPosition();
while( Pos )
{
CString szFileName = FileDlg.GetNextPathName( Pos );
vecDest.push_back( szFileName.GetBuffer() );
}
std::vector< SPackingFileInfo > vecSourFileInfo, vecDestFileInfo;
int i, j;
for( i = 0; i < ( int )vecSour.size(); i++ )
{
CEtPackingFile FileSystem;
if( !FileSystem.OpenFileSystem( vecSour[ i ].c_str(), true ) )
{
continue;
}
int nFileCount = FileSystem.GetFileCount();
for( j = 0; j < nFileCount; j++ )
{
SPackingFileInfo *pFileInfo = FileSystem.GetFileInfo( j );
if( pFileInfo->dwCompressSize == 0 )
{
continue;
}
vecSourFileInfo.push_back( *pFileInfo );
}
FileSystem.CloseFileSystem();
}
for( i = 0; i < ( int )vecDest.size(); i++ )
{
CEtPackingFile FileSystem;
if( !FileSystem.OpenFileSystem( vecDest[ i ].c_str(), true ) )
{
continue;
}
int nFileCount = FileSystem.GetFileCount();
for( j = 0; j < nFileCount; j++ )
{
SPackingFileInfo *pFileInfo = FileSystem.GetFileInfo( j );
if( pFileInfo->dwCompressSize == 0 )
{
continue;
}
vecDestFileInfo.push_back( *pFileInfo );
}
FileSystem.CloseFileSystem();
}
std::vector< char > vecCheckField;
std::vector< SPackingFileInfo > vecSourExist, vecDestExist, vecDiff;
vecCheckField.resize( vecDestFileInfo.size() );
memset( &vecCheckField[ 0 ], 0, vecCheckField.size() );
for( i = 0; i < ( int )vecSourFileInfo.size(); i++ )
{
for( j = 0; j < ( int )vecDestFileInfo.size(); j++ )
{
if( _stricmp( vecSourFileInfo[ i ].szFileName, vecDestFileInfo[ j ].szFileName ) == 0 )
{
vecCheckField[ j ] = 1;
if( vecSourFileInfo[ i ].dwChecksum != vecDestFileInfo[ j ].dwChecksum )
{
vecDiff.push_back( vecSourFileInfo[ i ] );
}
break;
}
}
if( j == ( int )vecDestFileInfo.size() )
{
vecSourExist.push_back( vecSourFileInfo[ i ] );
}
}
for( i = 0; i < ( int )vecCheckField.size(); i++ )
{
if( vecCheckField[ i ] == 0 )
{
vecDestExist.push_back( vecDestFileInfo[ i ] );
}
}
if( vecDestExist.size() + vecSourExist.size() + vecDiff.size() == 0 )
{
MessageBox( "File Is Identical" );
return;
}
MessageBox( "File Is Different" );
return;
}