www.pudn.com > GGBT.rar > DlgMakeMetafile.cpp


// DlgMakeMetafile.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "testbt.h" 
#include "DlgMakeMetafile.h" 
 
#include  
#include "filebase.h" 
#include "testbtdoc.h" 
#include "CategoryBarWnd.h" 
#include "CategoryCombobox.h" 
 
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
const string strMakeMetafileSection = "MakeMeta"; 
const string strMakeMetafileUrl = "Url"; 
 
///////////////////////////////////////////////////////////////////////////// 
// CDlgMakeMetafile dialog 
 
 
CDlgMakeMetafile::CDlgMakeMetafile(CTestBTDoc* pTestBTDoc, CWnd* pParent /*=NULL*/) 
	: CDialog(CDlgMakeMetafile::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CDlgMakeMetafile) 
	m_strFilePath = _T(""); 
	m_strComment = _T(""); 
	//}}AFX_DATA_INIT 
	 
	m_strSaveDBpath = "d:\\aabb"; 
	m_pTestBTDoc = pTestBTDoc; 
 
	m_bMakeAddExit = false; 
} 
 
 
void CDlgMakeMetafile::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CDlgMakeMetafile) 
	DDX_Control(pDX, IDCANCEL, m_btnCancel); 
	DDX_Control(pDX, IDOK, m_btnAddExit); 
	DDX_Control(pDX, IDC_BUTTON_ADD_EXIT, m_btnAdd); 
	DDX_Control(pDX, IDC_BUTTON_MAKE, m_btnMake); 
	DDX_Control(pDX, IDC_COMBO_CATEGORY, m_cbCategory); 
	DDX_Control(pDX, IDC_COMBOBOXEX_URL, m_cbUrl); 
	DDX_Control(pDX, IDC_COMBO_PIECELENTH, m_cbPieceLength); 
	DDX_Control(pDX, IDC_PROGRESS_MAKE_METAFILE, m_progMakeMetafile); 
	DDX_Text(pDX, IDC_EDIT_FILE_PATH, m_strFilePath); 
	DDX_Text(pDX, IDC_EDIT_COMMENT, m_strComment); 
	DDX_Control(pDX, IDC_STATIC_CURMETAFILE, m_edCurMetaFile); 
	//}}AFX_DATA_MAP 
	 
} 
 
 
BEGIN_MESSAGE_MAP(CDlgMakeMetafile, CDialog) 
	//{{AFX_MSG_MAP(CDlgMakeMetafile) 
	ON_WM_DESTROY() 
	ON_BN_CLICKED(IDC_BUTTON_SELECT_PATH, OnButtonSelectPath) 
	ON_BN_CLICKED(IDC_BUTTON_SELECT_FILE, OnButtonSelectFile) 
	ON_BN_CLICKED(IDC_BUTTON_ADD, OnButtonAdd) 
	ON_BN_CLICKED(IDC_BUTTON_OPEN_FOLDER, OnButtonOpenFolder) 
	ON_BN_CLICKED(IDC_BUTTON_ADD_EXIT, OnButtonAddExit) 
	ON_BN_CLICKED(IDC_BUTTON_MAKE, OnButtonMake) 
	//}}AFX_MSG_MAP 
	ON_MESSAGE(MAKE_METAFILE_PROGRESS, OnMakeProgress) 
	ON_MESSAGE(MAKE_METAFILE_FINISHED, OnMakeFinished)	 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CDlgMakeMetafile message handlers 
 
BOOL CDlgMakeMetafile::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
 
	// 
	// 
	// 
	m_progMakeMetafile.SetRange(0, 100); 
	m_progMakeMetafile.SetPos(0); 
 
	// url history comboBox. 
	m_cbUrl.LoadHistory(strMakeMetafileSection.data(), strMakeMetafileUrl.data()); 
	if (m_cbUrl.GetCount() <= 0) 
	{ 
		// m_cbUrl.GetEditCtrl()->ReplaceSel("http://www.voracity.net:6969/announce"); 
		m_cbUrl.AddString("http://www.voracity.net:6969/announce"); 
		m_cbUrl.SetCurSel(0); 
	} 
 
	// Piece length comboBox. 
	m_cbPieceLength.AddString("ΧΤΆ―"); 
	m_cbPieceLength.SetItemData(0, 21); 
	for (int i=0; i<7; i++) 
	{ 
		m_cbPieceLength.AddString(FormatSize(pow(2, 21 - i)).data()); 
		m_cbPieceLength.SetItemData(i+1, 21 - i); 
	} 
 
	m_cbPieceLength.SetCurSel(0); 
 
	// Category comboBox 
	m_cbCategory.m_pimgList = &m_pTestBTDoc->GetCategoryBarWnd().m_ctlImage; 
	Copy(m_pTestBTDoc->GetCategoryBarWnd().GetRootItem()); 
	m_cbCategory.SetCurSel(0); 
 
	UpdateCommandUI(); 
	 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CDlgMakeMetafile::UpdateCommandUI() 
{ 
	GetDlgItem(IDC_BUTTON_ADD_EXIT)->EnableWindow(m_MakeMetaFile.GetResult());	 
	GetDlgItem(IDC_BUTTON_ADD)->EnableWindow(m_MakeMetaFile.GetResult()); 
	GetDlgItem(IDC_BUTTON_OPEN_FOLDER)->EnableWindow(m_MakeMetaFile.GetResult()); 
	m_cbCategory.EnableWindow(m_MakeMetaFile.GetResult()); 
	if (m_MakeMetaFile.GetResult()) 
		m_edCurMetaFile.SetWindowText(m_MakeMetaFile.GetSrcPath().data()); 
} 
 
void CDlgMakeMetafile::OnMakeProgress(long lParam, long wParam) 
{ 
	m_progMakeMetafile.SetPos(lParam); 
} 
 
void CDlgMakeMetafile::OnMakeFinished(long lParam, long wParam) 
{ 
	m_MakeMetaFile.Close(); 
	assert(!m_MakeMetaFile.IsMaking());	 
 
	GetDlgItem(IDOK)->EnableWindow(true); 
	m_progMakeMetafile.SetPos(100); 
	UpdateCommandUI(); 
	 
	// SetWindowText(m_MakeMetaFile.GetResult() ? "completed" : "error"); 
	if (!m_MakeMetaFile.GetResult()) 
	{ 
		AfxMessageBox(CString("make file error : ") + m_MakeMetaFile.GetErrorMsg().data()); 
	} 
 
	if (m_bMakeAddExit) 
		OnButtonAddExit(); 
} 
 
 
void CDlgMakeMetafile::OnButtonMake()  
{ 
	UpdateData(); 
 
	// check file src path. 
	DWORD dwAttr = GetFileAttributes(m_strFilePath); 
	if (dwAttr ==  0xffffffff) 
	{ 
		AfxMessageBox("file src invalid"); 
		((CEdit*)GetDlgItem(IDC_EDIT_FILE_PATH))->SetSel(0, -1); 
		GetDlgItem(IDC_EDIT_FILE_PATH)->SetFocus(); 
		return ; 
	} 
 
	 
	// check to see if this is a reasonable URL 
	CString strUrl; 
	m_cbUrl.GetWindowText(strUrl); 
 
	CString strServerName; 
	CString strObject; 
	WORD nPort; 
	DWORD dwServiceType; 
	if (!AfxParseURL(strUrl, dwServiceType, strServerName, strObject, nPort) || 
		dwServiceType != INTERNET_SERVICE_HTTP) 
	{ 
		AfxMessageBox("url is invalid"); 
		// m_cbUrl.GetEditCtrl()->SetSel(0, -1); 
		// m_cbUrl.GetEditCtrl()->SetFocus(); 
		m_cbUrl.SetEditSel(0, -1); 
		m_cbUrl.SetFocus(); 
		return; 
	} 
	m_cbUrl.SaveHistory(); 
 
	// Piece length. 
	int iPieceLengthExp = m_cbPieceLength.GetItemData(m_cbPieceLength.GetCurSel()); 
 
 
	// Get save path. 
	string strPath, strName; 
	if (!SplitPathName(m_strFilePath.GetBuffer(0), strPath, strName))	 
	{ 
		AfxMessageBox("can't make driver root"); 
		return ; 
	} 
	 
	assert(!strPath.empty() && !strName.empty()); 
 
	if (strPath[strPath.size()-1] != '\\') 
		strPath += '\\'; 
 
	string strSaveAs = strPath + strName + ".torrent";	 
 
	// if savas torrent file exist and is directory, alert user. 
	dwAttr = GetFileAttributes(strSaveAs.data()); 
	if (dwAttr != 0xffffffff && dwAttr & FILE_ATTRIBUTE_DIRECTORY) 
	{ 
		AfxMessageBox(CString("directory same name (") + strSaveAs.data() + ") already exist"); 
		return; 
	} 
	 
 
	// begin create meta file. 
	if (!m_MakeMetaFile.MakeMetaFileEx(m_strFilePath.GetBuffer(0), strSaveAs,  
		strUrl.GetBuffer(0), m_strComment.GetBuffer(0),iPieceLengthExp, GetSafeHwnd())) 
	{ 
		AfxMessageBox("some file is making"); 
		return ; 
	} 
 
	GetDlgItem(IDOK)->EnableWindow(false); 
	m_progMakeMetafile.SetPos(0); 
	 
	// CDialog::OnOK(); 
	 
} 
 
void CDlgMakeMetafile::OnOK()  
{ 
	m_bMakeAddExit = true; 
	OnButtonMake(); 
	// OnButtonAddExit(); 
} 
 
void CDlgMakeMetafile::OnDestroy()  
{ 
	m_MakeMetaFile.Close(); 
	CDialog::OnDestroy(); 
} 
 
void CDlgMakeMetafile::OnButtonSelectPath()  
{	 
	CString strDef, strFolder; 
	if (!SelectFolder(strDef, strFolder)) 
		return; 
 
	UpdateData(); 
	m_strFilePath = strFolder; 
	UpdateData(false); 
 
	((CEdit*)GetDlgItem(IDC_EDIT_FILE_PATH))->SetSel(0, -1); 
	GetDlgItem(IDC_EDIT_FILE_PATH)->SetFocus(); 
 
} 
 
void CDlgMakeMetafile::OnButtonSelectFile()  
{ 
	CFileDialog fileDialog(TRUE, 0, 0, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, "All Files (*.*)|*.*|"); 
	int iRet = fileDialog.DoModal(); 
	if (iRet != IDOK) 
		return ; 
 
	UpdateData();	 
	m_strFilePath = fileDialog.GetPathName(); 
	UpdateData(false);	 
 
	((CEdit*)GetDlgItem(IDC_EDIT_FILE_PATH))->SetSel(0, -1); 
	GetDlgItem(IDC_EDIT_FILE_PATH)->SetFocus(); 
} 
 
void CDlgMakeMetafile::OnButtonAddExit()  
{ 
	OnButtonAdd(); 
	OnCancel(); 
} 
void CDlgMakeMetafile::OnButtonAdd()  
{ 
	int iCurSel = m_cbCategory.GetCurSel();	 
	SFOLDER* pCategory= (SFOLDER*)m_cbCategory.GetItemDataPtr(iCurSel); 
	assert(pCategory && pCategory->m_hItem); 
	 
	assert(m_pTestBTDoc); 
	m_pTestBTDoc->GetCategoryBarWnd().OpenTorrentFile(m_MakeMetaFile.GetSavePath(), pCategory->m_hItem, m_MakeMetaFile.GetSrcPath(), true); 
} 
 
void CDlgMakeMetafile::OnButtonOpenFolder()  
{ 
	string strName; 
	string strSavePath; 
	SplitPathName(m_MakeMetaFile.GetSavePath(), strSavePath, strName); 
	ShellExecute(NULL, "open" , strSavePath.data(), 0, 0, SW_SHOW); 
} 
 
void CDlgMakeMetafile::Copy(CTreeCursor& curItem, int iIndent) 
{	 
	if (!curItem) return; 
 
	// don't show downloading category. 
	if (curItem == m_pTestBTDoc->GetCategoryBarWnd().m_curDownloading) 
		return; 
 
	SFOLDER* pFolder = new SFOLDER; 
	pFolder->m_iImageIndex = curItem.GetImageID(); 
	pFolder->m_iIndent = iIndent; 
	pFolder->m_hItem = curItem; 
 
	CString sztext = curItem.GetText(); 
	int iItem = m_cbCategory.AddString(sztext); 
	m_cbCategory.SetItemDataPtr(iItem, pFolder); 
 
	if (curItem.HasChildren()) 
	{ 
		CTreeCursor curChild = curItem.GetChild(); 
		while (curChild) 
		{ 
			Copy(curChild, iIndent+1); 
			curChild = curChild.GetNext(TVGN_NEXT); 
		} 
	} 
}