320 lines
8.9 KiB
C++
320 lines
8.9 KiB
C++
#include "StdAfx.h"
|
|
#include "DockPane.h"
|
|
#include "NewDirDlg.h"
|
|
#include "direct.h"
|
|
#ifdef _DEBUG
|
|
#define new DEBUG_NEW
|
|
#undef THIS_FILE
|
|
static char THIS_FILE[] = __FILE__;
|
|
#endif
|
|
|
|
|
|
IMPLEMENT_DYNAMIC(CDockPane, CAdUiDockControlBar)
|
|
|
|
BEGIN_MESSAGE_MAP(CDockPane, CAdUiDockControlBar)
|
|
//{{AFX_MSG_MAP(CDockPane)
|
|
ON_WM_CREATE()
|
|
ON_WM_CONTEXTMENU()
|
|
ON_COMMAND(ID_DELDIR, OnDeldir)
|
|
ON_COMMAND(ID_NEWDIR, OnNewdir)
|
|
ON_COMMAND(ID_DIR_OPEN, OnOpenDir)
|
|
ON_COMMAND(ID_DIR_UPDATE, OnUpdateDir)
|
|
ON_COMMAND(ID_NEWFILE, OnNewFile)
|
|
ON_COMMAND(ID_DELFILE, OnDelFile)
|
|
|
|
//}}AFX_MSG_MAP
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
static CLSID clsCDockPane =
|
|
{ 0xa20d432c, 0x7025, 0x40e4, {0x99, 0x5f, 0x31, 0xa8, 0x69, 0x44, 0xa7, 0x45 } };
|
|
|
|
CDockPane::CDockPane(): CAdUiDockControlBar()
|
|
{
|
|
}
|
|
|
|
BOOL CDockPane::Create(CWnd *pParent, LPCTSTR lpszTitle)
|
|
{
|
|
CString strWndClass;
|
|
|
|
strWndClass = AfxRegisterWndClass(CS_DBLCLKS, LoadCursor(NULL, IDC_ARROW));
|
|
CRect rect(0, 0, 410, 400); //850
|
|
|
|
if (!CAdUiDockControlBar::Create(
|
|
strWndClass,
|
|
lpszTitle,
|
|
WS_VISIBLE | WS_CHILD | WS_CLIPCHILDREN,
|
|
rect,
|
|
pParent, 0)
|
|
)
|
|
return (FALSE);
|
|
|
|
SetToolID(&clsCDockPane);
|
|
return (TRUE);
|
|
}
|
|
|
|
int CDockPane::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
if (CAdUiDockControlBar::OnCreate(lpCreateStruct) == -1)
|
|
return (-1);
|
|
//增加 CDockDialog 对话框
|
|
|
|
if (!m_DockDialog.Create(IDD_DOCKDIALOG, this))
|
|
return (-1);
|
|
|
|
// AfxSetResourceHandle (acedGetAcadResourceInstance ());
|
|
|
|
BaseFuncs::GetPathName(m_sSoftPath);
|
|
m_sSoftPath += _T("\\tk\\Customer\\图库中心\\");
|
|
|
|
|
|
|
|
return (0);
|
|
}
|
|
|
|
void CDockPane::SizeChanged(CRect *lpRect, BOOL bFloating, int flags)
|
|
{
|
|
|
|
if (bFloating)
|
|
m_DockDialog.SetWindowPos(NULL, lpRect->left+4, lpRect->top,
|
|
lpRect->right-10, lpRect->bottom -4,
|
|
SWP_SHOWWINDOW);
|
|
else
|
|
m_DockDialog.SetWindowPos(NULL, lpRect->left+4, lpRect->top+4,
|
|
lpRect->right-8, lpRect->bottom -20,
|
|
SWP_SHOWWINDOW);
|
|
|
|
|
|
}
|
|
void CDockPane::SetSltDwgFile(LPCTSTR sFolder, LPCTSTR sDwg)
|
|
{
|
|
m_DockDialog.getTreeCtrl().SetSltDwgFile(sFolder, sDwg);
|
|
}
|
|
|
|
|
|
void CDockPane::OnContextMenu(CWnd *pWnd, CPoint point)
|
|
{
|
|
// TODO: Add your message handler code here
|
|
UINT uFlags;
|
|
CString sSubPath;
|
|
HTREEITEM hOldItem;
|
|
if (acedGetAcadDwgView()!=NULL)
|
|
acedGetAcadDwgView()->SetFocus(); //很奇怪一定要先让CAD视图获得焦点
|
|
(m_DockDialog.getTreeCtrl()).ScreenToClient(&point);
|
|
HTREEITEM hTreeItem = (m_DockDialog.getTreeCtrl()).HitTest(point, &uFlags);
|
|
(m_DockDialog.getTreeCtrl()).ClientToScreen(&point);
|
|
HTREEITEM hParentItem;
|
|
hOldItem = hTreeItem;
|
|
TVITEM item;
|
|
TCHAR szText[1024];
|
|
item.hItem = hOldItem;
|
|
item.mask = TVIF_TEXT | TVIF_HANDLE;
|
|
item.pszText = szText;
|
|
item.cchTextMax = 1024;
|
|
(m_DockDialog.getTreeCtrl()).GetItem(&item);
|
|
CString strItemText = item.pszText;
|
|
int nImage;
|
|
int nSelectedImage;
|
|
if (hTreeItem!=NULL&&(m_DockDialog.getTreeCtrl()).IsWindowVisible())
|
|
{
|
|
hParentItem = (m_DockDialog.getTreeCtrl()).GetParentItem(hTreeItem);
|
|
(m_DockDialog.getTreeCtrl()).GetItemImage(hTreeItem, nImage, nSelectedImage);
|
|
CMenu menu;
|
|
menu.LoadMenu(IDR_MENU3);
|
|
if (nImage==0&&nSelectedImage==1) //文件佳
|
|
{
|
|
if (hParentItem==NULL||strItemText==_T("新用户图"))
|
|
{
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELDIR, MF_REMOVE|MF_BYCOMMAND);
|
|
}
|
|
|
|
//(menu.GetSubMenu(0))->RemoveMenu(ID_NEWFILE,MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELFILE, MF_REMOVE|MF_BYCOMMAND);
|
|
}
|
|
else if (nImage==3&&nSelectedImage==4)
|
|
{
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DIR_OPEN, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DIR_UPDATE, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_NEWDIR, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELDIR, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_NEWFILE, MF_REMOVE|MF_BYCOMMAND);
|
|
if (strItemText==_T("用户图例"))
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELFILE, MF_REMOVE|MF_BYCOMMAND);
|
|
|
|
}
|
|
CString strItemText = (m_DockDialog.getTreeCtrl()).GetItemText(hTreeItem);
|
|
//if(strItemText=="用户图库")
|
|
// GetDlgItem(ID_DELDIR)->EnableWindow(FALSE);
|
|
while (hParentItem!=NULL&&strItemText!=_T("用户图库"))
|
|
{
|
|
hTreeItem = hParentItem;
|
|
sSubPath = strItemText+_T("\\")+sSubPath;
|
|
hParentItem = (m_DockDialog.getTreeCtrl()).GetParentItem(hTreeItem);
|
|
strItemText = (m_DockDialog.getTreeCtrl()).GetItemText(hTreeItem);
|
|
}
|
|
sSubPath = strItemText+_T("\\")+sSubPath;
|
|
m_sCurSltPath = m_sSoftPath+sSubPath;
|
|
if (strItemText!=_T("用户图库"))
|
|
{
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_NEWDIR, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELDIR, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_NEWFILE, MF_REMOVE|MF_BYCOMMAND);
|
|
(menu.GetSubMenu(0))->RemoveMenu(ID_DELFILE, MF_REMOVE|MF_BYCOMMAND);
|
|
}
|
|
{
|
|
BOOL bRet = (m_DockDialog.getTreeCtrl()).SelectItem(hOldItem);
|
|
m_hTreeItem = hOldItem;
|
|
|
|
menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN, point.x, point.y, this);
|
|
}
|
|
return;
|
|
}
|
|
}
|
|
void DeleteDirectory(CString strDir)
|
|
{
|
|
if (strDir.IsEmpty())
|
|
return;
|
|
CFileFind ff;
|
|
BOOL bFound = ff.FindFile(strDir+_T("*"), 0);
|
|
while (bFound)
|
|
{
|
|
bFound = ff.FindNextFile();
|
|
if (ff.GetFileName()==_T(".")||ff.GetFileName()==_T(".."))
|
|
continue;
|
|
// 去掉文件(夹)只读等属性
|
|
SetFileAttributes(ff.GetFilePath(), FILE_ATTRIBUTE_NORMAL);
|
|
if (ff.IsDirectory())
|
|
{
|
|
// 递归删除子文件夹
|
|
DeleteDirectory(ff.GetFilePath());
|
|
RemoveDirectory(ff.GetFilePath());
|
|
}
|
|
else
|
|
{
|
|
// 删除文件
|
|
DeleteFile(ff.GetFilePath());
|
|
}
|
|
}
|
|
ff.Close();
|
|
|
|
// 然后删除该文件夹
|
|
RemoveDirectory(strDir);
|
|
}
|
|
|
|
void CDockPane::OnDeldir()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
if (AfxMessageBox(_T("确认删除(Y/N)?"), MB_OKCANCEL)!=IDOK)
|
|
return;
|
|
m_DockDialog.getPreviewCtrl().ReleaseDb();
|
|
DeleteDirectory(m_sCurSltPath);
|
|
(m_DockDialog.getTreeCtrl()).DeleteItem(m_hTreeItem);
|
|
}
|
|
void CDockPane::getAllTreeItem(CStringArray &strTreeItemArr)
|
|
{
|
|
HTREEITEM hItem = (m_DockDialog.getTreeCtrl()).GetSelectedItem();
|
|
HTREEITEM hChildItem = (m_DockDialog.getTreeCtrl()).GetChildItem(hItem);
|
|
while (hChildItem)
|
|
{
|
|
strTreeItemArr.Add((m_DockDialog.getTreeCtrl()).GetItemText(hChildItem));
|
|
hChildItem = (m_DockDialog.getTreeCtrl()).GetNextItem(hChildItem, TVGN_NEXT);
|
|
}
|
|
}
|
|
void CDockPane::OnOpenDir()
|
|
{
|
|
ShellExecute(NULL, _T("open"), m_sCurSltPath, NULL, NULL, SW_SHOW);
|
|
}
|
|
void CDockPane::OnUpdateDir()
|
|
{
|
|
CCoolTreeCtrl &mTreeCtrl = m_DockDialog.getTreeCtrl();
|
|
HTREEITEM hParentItem = mTreeCtrl.m_hSelectItem;
|
|
HTREEITEM hChildItem = mTreeCtrl.GetNextItem(hParentItem, TVGN_CHILD);
|
|
while (hChildItem)
|
|
{
|
|
HTREEITEM hNextItem = mTreeCtrl.GetNextItem(hChildItem, TVGN_NEXT);
|
|
mTreeCtrl.DeleteItem(hChildItem);
|
|
hChildItem = hNextItem;
|
|
}
|
|
m_DockDialog.ViewIni(hParentItem, m_sCurSltPath);
|
|
}
|
|
void CDockPane::OnNewdir()
|
|
{
|
|
// TODO: Add your command handler code here
|
|
CAcModuleResourceOverride res;
|
|
CStringArray strDwgNameArr;
|
|
getAllTreeItem(strDwgNameArr);
|
|
CNewDirDlg dlg;
|
|
dlg.m_strDwgArray.Append(strDwgNameArr);
|
|
if (dlg.DoModal()==IDOK)
|
|
{
|
|
CString sFolderName = m_sCurSltPath+dlg.m_sFolderName+_T("\\");
|
|
TCHAR kw[256];
|
|
_tcscpy(kw, sFolderName);
|
|
// acutPrintf(_T("\n%s"),(char*)kw);
|
|
|
|
// mkdir((char*)kw);//(char*)(LPCTSTR)sFolderName
|
|
CreateDirectory(kw, NULL);
|
|
(m_DockDialog.getTreeCtrl()).InsertItem(dlg.m_sFolderName, 0, 1, m_hTreeItem);
|
|
}
|
|
}
|
|
BOOL CDockPane::isChildItem(CString strName)
|
|
{
|
|
CString strUp = strName;
|
|
strUp.MakeUpper();
|
|
CString strLower = strName;
|
|
strLower.MakeLower();
|
|
if ((m_DockDialog.getTreeCtrl()).ItemHasChildren(m_hTreeItem))
|
|
{
|
|
HTREEITEM hChildItem = (m_DockDialog.getTreeCtrl()).GetChildItem(m_hTreeItem);
|
|
while (hChildItem!=NULL)
|
|
{
|
|
CString strText = (m_DockDialog.getTreeCtrl()).GetItemText(hChildItem);
|
|
hChildItem = (m_DockDialog.getTreeCtrl()).GetNextItem(hChildItem, TVGN_NEXT);
|
|
if (strText==strUp||strText==strLower)
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
|
|
}
|
|
void CDockPane::OnNewFile()
|
|
{
|
|
CAcModuleResourceOverride res;
|
|
CNewDirDlg dlg;
|
|
dlg.m_nType = 1;
|
|
if (dlg.DoModal()==IDOK)
|
|
{
|
|
CString sFileName = dlg.m_sFolderName;
|
|
if (isChildItem(sFileName))
|
|
{
|
|
AfxMessageBox(_T("该文件已存在"));
|
|
return;
|
|
}
|
|
CString sFilePath = m_sCurSltPath+sFileName+_T(".dwg");
|
|
|
|
//新建dwg文件
|
|
acDocManager->lockDocument(curDoc());
|
|
AcDbDatabase *pDb = new AcDbDatabase(TRUE, TRUE);
|
|
Acad::ErrorStatus es = pDb->saveAs(sFilePath);
|
|
delete pDb;
|
|
acDocManager->unlockDocument(curDoc());
|
|
if (es==Acad::eOk)
|
|
(m_DockDialog.getTreeCtrl()).InsertItem(sFileName, 3, 4, m_hTreeItem);
|
|
|
|
}
|
|
}
|
|
void CDockPane::OnDelFile()
|
|
{
|
|
CString sFilePath = m_sCurSltPath;
|
|
sFilePath.TrimRight(_T('\\'));
|
|
sFilePath += _T(".dwg");
|
|
CFile file;
|
|
if (AfxMessageBox(_T("确认删除(Y/N)?"), MB_OKCANCEL)!=IDOK)
|
|
return;
|
|
m_DockDialog.getPreviewCtrl().ReleaseDb();
|
|
// m_DockDialog.getPreviewCtrl().erasePreview(); //modify by hrp 2010 4-10
|
|
if (!DeleteFile(sFilePath))
|
|
AfxMessageBox(_T("删除失败"));
|
|
(m_DockDialog.getTreeCtrl()).DeleteItem(m_hTreeItem);
|
|
}
|