www.pudn.com > GGBT.rar > CategoryNewDlg.cpp
// CategoryNewDlg.cpp : implementation file
//
#include "stdafx.h"
#include "testbt.h"
#include "CategoryNewDlg.h"
#include "CategoryBarWnd.h"
#include "FileBase.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CCategoryNewDlg dialog
CCategoryNewDlg::CCategoryNewDlg(CImageList* pctlImage,
CCategoryBarWnd* pCategoryBarWnd, bool bNewOrMoveto, HTREEITEM hItemSel,
CWnd* pParent /*=NULL*/)
: CDialog(CCategoryNewDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CCategoryNewDlg)
m_strCategoryDir = _T("");
m_strCategoryName = _T("");
//}}AFX_DATA_INIT
m_pctlImage = pctlImage;
m_pCategoryBarWnd = pCategoryBarWnd;
m_bNewOrMoveto = bNewOrMoveto;
m_ItemSel = hItemSel;
m_bAutoFill = false;
}
void CCategoryNewDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CCategoryNewDlg)
DDX_Control(pDX, IDC_BUTTON_FOLDER_SEL, m_btnBrowseDir);
DDX_Control(pDX, IDCANCEL, m_btnCancel);
DDX_Control(pDX, IDOK, m_btnOK);
DDX_Control(pDX, IDC_TREE_CATEGORY, m_treeCatetory);
DDX_Text(pDX, IDC_EDIT_CATEGORY_DIR, m_strCategoryDir);
DDX_Text(pDX, IDC_EDIT_CATEGORY_NAME, m_strCategoryName);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CCategoryNewDlg, CDialog)
//{{AFX_MSG_MAP(CCategoryNewDlg)
ON_EN_CHANGE(IDC_EDIT_CATEGORY_NAME, OnChangeEditCategoryName)
ON_NOTIFY(TVN_SELCHANGED, IDC_TREE_CATEGORY, OnSelchangedTreeCategory)
ON_EN_CHANGE(IDC_EDIT_CATEGORY_DIR, OnChangeEditCategoryDir)
ON_WM_CREATE()
ON_BN_CLICKED(IDC_BUTTON_FOLDER_SEL, OnButtonFolderSel)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CCategoryNewDlg message handlers
BOOL CCategoryNewDlg::OnInitDialog()
{
CDialog::OnInitDialog();
//
// Create BitmapList
//
HBITMAP hbm = (HBITMAP)::LoadImage(AfxGetInstanceHandle(),
MAKEINTRESOURCE(IDB_BITMAP_DLG_ICONS),
IMAGE_BITMAP,
0,0, // cx,cy
LR_CREATEDIBSECTION); // | LR_LOADMAP3DCOLORS );
CBitmap bm;
bm.Attach(hbm);
m_ctlImage.Create(16,15, ILC_COLOR8|ILC_MASK, 3, 4);
m_ctlImage.SetBkColor(RGB(255, 255,255));
m_ctlImage.Add(&bm, (COLORREF)RGB(255,0,255));
//
// set button image.
//
// m_btnBrowseDir.Create(m_ctlImage.ExtractIcon(2), true, "选择保存路径");
m_btnOK.Create(m_ctlImage.ExtractIcon(0));
m_btnCancel.Create(m_ctlImage.ExtractIcon(1));
//
//
//
assert(m_pCategoryBarWnd && m_ItemSel && m_pctlImage);
m_bAutoFill = true;
m_treeCatetory.SetImageList(m_pctlImage);
CopyTree(m_pCategoryBarWnd->m_curRoot, m_treeCatetory.GetRootItem());
if (!m_treeCatetory.GetSelectedItem())
m_treeCatetory.GetRootItem().Select();
assert(m_treeCatetory.GetSelectedItem());
OnSelchangedTreeCategory(0, 0);
if (m_bNewOrMoveto)
{
GetDlgItem(IDC_EDIT_CATEGORY_NAME)->SetFocus();
SetWindowText("创建新类别");
}
else
{
((CEdit*)GetDlgItem(IDC_EDIT_CATEGORY_NAME))->SetReadOnly(true);
((CEdit*)GetDlgItem(IDC_EDIT_CATEGORY_DIR))->SetReadOnly(true);
((CEdit*)GetDlgItem(IDC_BUTTON_FOLDER_SEL))->SetReadOnly(true);
GetDlgItem(IDC_BUTTON_FOLDER_SEL)->EnableWindow(false);
GetDlgItem(IDC_TREE_CATEGORY)->SetFocus();
SetWindowText("移动");
}
return FALSE;
}
void CCategoryNewDlg::OnChangeEditCategoryName()
{
assert(m_bNewOrMoveto);
if (!m_bAutoFill) return;
UpdateData();
// get default directory string and format it.
CTreeCursor ItemSel = m_treeCatetory.GetSelectedItem();
assert(ItemSel);
CCategoryBarWnd::CCategoryDBItem* pItem =
(CCategoryBarWnd::CCategoryDBItem*)GetTreeData(ItemSel);
assert(pItem);
string strDefaultDirectory = pItem->m_strDefaultDirectory;
if (strDefaultDirectory.size() <= 0)
{
assert(false);
return;
}
if (strDefaultDirectory[strDefaultDirectory.size() - 1] != '\\')
strDefaultDirectory += '\\';
// auto fill m_strCategoryDir.
m_strCategoryDir = strDefaultDirectory.data() + m_strCategoryName;
UpdateData(false);
}
void CCategoryNewDlg::OnChangeEditCategoryDir()
{
assert(m_bNewOrMoveto);
m_bAutoFill = false;
}
void CCategoryNewDlg::OnSelchangedTreeCategory(NMHDR* pNMHDR, LRESULT* pResult)
{
if (pResult) *pResult = 0;
CTreeCursor ItemSel = m_treeCatetory.GetSelectedItem();
assert(ItemSel);
CCategoryBarWnd::CCategoryDBItem* pItem = (CCategoryBarWnd::CCategoryDBItem*)GetTreeData(ItemSel);
assert(pItem);
string strDefaultDirectory = pItem->m_strDefaultDirectory;
assert(strDefaultDirectory.size() > 0);
if (m_bNewOrMoveto)
{
if (!m_bAutoFill) return;
if (strDefaultDirectory[strDefaultDirectory.size() - 1] != '\\')
strDefaultDirectory += '\\';
m_strCategoryDir = strDefaultDirectory.data() + m_strCategoryName;
}
else
{
m_strCategoryName = GetCorrespondingCursor(ItemSel).GetText();
m_strCategoryDir = strDefaultDirectory.data();
}
UpdateData(false);
}
void CCategoryNewDlg::OnOK()
{
UpdateData();
if (m_bNewOrMoveto)
{
if (m_strCategoryName.IsEmpty())
return;
// check directory to create.
char drive[_MAX_DRIVE];
char dir[_MAX_DIR];
char fname[_MAX_FNAME];
char ext[_MAX_EXT];
_splitpath(m_strCategoryDir, drive, dir, fname, ext);
if (!strlen(drive))
return;
if (!MakeDirecotry(m_strCategoryDir.GetBuffer(0)))
return;
}
CTreeCursor curItem = m_treeCatetory.GetSelectedItem();
m_ItemSel = (HTREEITEM)curItem.GetData();
assert(m_ItemSel);
CDialog::OnOK();
}
void CCategoryNewDlg::OnButtonFolderSel()
{
CString strDef, strFolder;
if (!SelectFolder(strDef, strFolder))
return;
/*
string strFolder = SelectFolder();
if (strFolder.empty())
return;
//*/
UpdateData();
m_strCategoryDir = strFolder;
UpdateData(false);
m_bAutoFill = false;
}
CTreeCursor CCategoryNewDlg::GetCorrespondingCursor(CTreeCursor& curItem)
{
long lData = curItem.GetData();
assert(lData);
return CTreeCursor ((HTREEITEM)lData, m_pCategoryBarWnd);
}
long CCategoryNewDlg::GetTreeData(CTreeCursor& curItem)
{
long lData = curItem.GetData();
assert(lData);
CTreeCursor curTrue((HTREEITEM)lData, m_pCategoryBarWnd);
lData = curTrue.GetData();
assert(lData);
return lData;
}
void CCategoryNewDlg::CopyTree(CTreeCursor& curSrc, CTreeCursor& curTarget)
{
// don't show downloading category.
if (curSrc == m_pCategoryBarWnd->m_curDownloading)
return;
CTreeCursor curTemp = curTarget.AddTail(curSrc.GetText(), curSrc.GetImageID());
curTemp.SetData((long)(HTREEITEM)curSrc);
assert(m_ItemSel);
if (curSrc == m_ItemSel)
curTemp.Select();
if (curSrc.HasChildren())
{
CTreeCursor curChild = curSrc.GetChild();
while (curChild)
{
CopyTree(curChild, curTemp);
curChild = curChild.GetNext(TVGN_NEXT);
}
}
}