Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

514 lines
13 KiB

// NewFile.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "NewFile.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CNewFile property page
TCHAR* pszFileNames[] = {_T("GPD"), _T("UFM"), _T("GTT")};
TCHAR* pszExt[] = {_T(".GPD"), _T(".UFM"), _T(".GTT") };
int iBitmap[] = {IDB_GPD_VIEWER,IDB_FONT_VIEWER,IDB_GLYPHMAP};
WORD wID[] = {120,122,124 } ;
IMPLEMENT_DYNCREATE(CNewFile, CPropertyPage)
CNewFile::CNewFile() : CPropertyPage(CNewFile::IDD),FILES_NUM(3)
{
//{{AFX_DATA_INIT(CNewFile)
m_csFileLoc = _T("");
m_csNewFile = _T("");
//}}AFX_DATA_INIT
// m_bproj = FALSE ;
}
CNewFile::CNewFile(CPropertySheet *pcps): CPropertyPage(CNewFile::IDD),FILES_NUM(3)
{
// m_pcps = pcps ;
}
CNewFile::~CNewFile()
{
}
void CNewFile::DoDataExchange(CDataExchange* pDX)
{
CPropertyPage::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CNewFile)
DDX_Control(pDX, IDC_NEWFILES_LIST, m_clcFileName);
DDX_Text(pDX, IDC_FILE_LOC, m_csFileLoc);
DDX_Text(pDX, IDC_NEWFILENAME, m_csNewFile);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CNewFile, CPropertyPage)
//{{AFX_MSG_MAP(CNewFile)
ON_BN_CLICKED(IDC_Browser, OnBrowser)
ON_NOTIFY(NM_DBLCLK, IDC_NEWFILES_LIST, OnDblclkNewfilesList)
ON_EN_CHANGE(IDC_NEWFILENAME, OnChangeNewFilename)
ON_NOTIFY(NM_CLICK, IDC_NEWFILES_LIST, OnClickNewfilesList)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CNewFile message handlers
/********************************************************************************
BOOL CNewFile::OnSetActive()
Do: Enumerate the file list to the list control box
Args:
Ret.
*********************************************************************************/
BOOL CNewFile::OnSetActive()
{
m_clcFileName.DeleteAllItems();
// create object for imagelist, it didn't work when use this as reference.
CImageList* pcil = new CImageList ;
pcil->Create(32,32,ILC_COLOR4,3,1);
CBitmap cb;
for (int j =0; j< FILES_NUM; j++) {
cb.LoadBitmap(iBitmap[j]);
pcil->Add(&cb,RGB(0,0,0) );
cb.DeleteObject();
}
m_clcFileName.SetImageList(pcil,LVSIL_NORMAL);
// set the items with image and text
LV_ITEM lvi;
for (int i = 0; i< FILES_NUM; i++)
{
lvi.mask = LVIF_TEXT | LVIF_IMAGE | LVIF_PARAM ;
lvi.iItem = i;
lvi.iSubItem = 0;
lvi.pszText = pszFileNames[i];
lvi.iImage = i;
lvi.lParam = (ULONG_PTR)pszExt[i];
m_clcFileName.InsertItem(&lvi);
}
return CPropertyPage::OnSetActive();
}
/********************************************************************************
BOOL CNewFile::CallNewDoc()
Do: this is workhourse. it load the resource file for gpd, gtt, ufm, creat gtt, ufm
directory, and then creat file.
*********************************************************************************/
BOOL CNewFile::CallNewDoc()
{
UpdateData();
/* Tell what is selected
if (ufm, gtt)
make new file based on selected files base.
if( project file)
{
run Wizard :
: user chose GPD template ->
1.Do this template make rc file(?)
2.what UFM, GTT are included in template
3.how can take care of ufm, gtt mentioned GPD
4.what user chose when make GPD template.
Make sub directory W2K, UFM, GTT.
}
*/
// get selected file text name (ex. .UFM, .GTT
int idContext = m_clcFileName.GetNextItem(-1,
LVNI_ALL | LVNI_FOCUSED | LVNI_SELECTED);
if (idContext == -1 )
return FALSE ;
union {ULONG_PTR lParam; LPCTSTR lpstrExt;};
// get extention for file
lParam = m_clcFileName.GetItemData(idContext);
// compare the selected file name and parsing
// Call new Document
CWinApp *cwa = AfxGetApp();
POSITION pos = cwa->GetFirstDocTemplatePosition();
CString csExtName;
CDocTemplate *pcdt ;
while (pos != NULL){
pcdt = cwa -> GetNextDocTemplate(pos);
ASSERT (pcdt != NULL);
ASSERT (pcdt ->IsKindOf(RUNTIME_CLASS(CDocTemplate)));
pcdt ->GetDocString(csExtName, CDocTemplate::filterExt);
if (csExtName == lpstrExt){
// 1. create the file when a.created with project file b. created with file name
// if (m_bproj || m_csNewFile.GetLength() != 0) {
if (! m_csNewFile.GetLength())
m_csNewFile = _T("Untitled") ;
if (m_csNewFile.GetLength() != 0) {
// check the file name if user put or not
if (m_csNewFile.GetLength() == 0 ) {
CString csErr ;
csErr.LoadString(IDS_NoFileName) ;
AfxMessageBox(csErr, MB_ICONEXCLAMATION);
return FALSE ;
} ;
// make UFM, GTT directory if user create these file
CString csDir = m_csFileLoc.Right(m_csFileLoc.ReverseFind(_T('\\'))) ;
// create directory
SECURITY_ATTRIBUTES st;
st.nLength = sizeof(SECURITY_ATTRIBUTES);
st.lpSecurityDescriptor = NULL;
st.bInheritHandle = FALSE ;
try {
if (!csExtName.CompareNoCase(_T(".UFM")) ){
if (!!csDir.CompareNoCase(_T("UFM")) ) {
m_csFileLoc += _T("\\UFM") ;
CreateDirectory(m_csFileLoc,&st) ;
}
}
else if (!csExtName.CompareNoCase(_T(".GTT")) ){
if (!!csDir.CompareNoCase(_T("GTT") ) ) {
m_csFileLoc += _T("\\GTT") ;
CreateDirectory(m_csFileLoc,&st) ;
}
}
}
catch (CException* pce) {
pce->ReportError() ;
pce->Delete() ;
return FALSE ;
} ;
// check if specified named file is exist or not in the directory
CString csFileName = m_csFileLoc +_T("\\") + m_csNewFile + csExtName;
CFileFind cff ;
if ( cff.FindFile(csFileName) ) {
CString csMsg ;
csMsg.LoadString(IDS_FileNewExist) ;
if (AfxMessageBox (csMsg, MB_YESNO ) == IDNO)
return FALSE ;
}
CFile cf(csFileName,CFile::modeCreate | CFile::modeWrite ) ;
// load the UFM, GTT, GPD from the resources.
for (unsigned i = 0 ; i < sizeof (*pszExt) ; i ++ ) {
if (!csExtName.CompareNoCase(pszExt[i] ) )
break;
} ;
WORD wi = wID [i] ;
HRSRC hrsrc = FindResource(AfxGetResourceHandle(), MAKEINTRESOURCE(wID[i]),
MAKEINTRESOURCE(IDR_NEWFILE));
if (!hrsrc) {
CString csErr ;
csErr.LoadString(IDS_ResourceError) ;
AfxMessageBox(csErr, MB_ICONEXCLAMATION ) ;
return FALSE;
} ;
HGLOBAL hgMap = LoadResource(AfxGetResourceHandle(), hrsrc);
if (!hgMap)
return FALSE; // This should never happen!
int nsize = SizeofResource(AfxGetResourceHandle(),hrsrc ) ;
LPVOID lpv = LockResource(hgMap);
cf.Write(lpv,nsize) ;
cf.Close() ;
pcdt->OpenDocumentFile(csFileName) ;
// add the new file into the project tree.
}
else // 2.created the file with no file name, project
pcdt->OpenDocumentFile(NULL);
return TRUE;
}
}
return FALSE;
}
/********************************************************************************
void CNewFile::OnBrowser()
Do: Using the old version browser rather than SHELL. code reuse in the MDT and
faster than SHELL to be loaded
Args:
Ret.
*********************************************************************************/
void CNewFile::OnBrowser()
{
OPENFILENAME ofn ; // Used to send/get info to/from common dlg
char acpath[_MAX_PATH] ; // Path is saved here (or an error message)
BOOL brc = FALSE ; // Return code
// Update the contents of csinitdir
UpdateData(TRUE) ;
// Load the open file name structure
ofn.lStructSize = sizeof(ofn) ;
ofn.hwndOwner = m_hWnd ;
ofn.hInstance = GetModuleHandle(_T("MINIDEV.EXE")) ;
ofn.lpstrFilter = ofn.lpstrCustomFilter = NULL ;
ofn.nMaxCustFilter = ofn.nFilterIndex = 0 ;
strcpy(acpath, _T("JUNK")) ; // No need to localize this string
ofn.lpstrFile = acpath ;
ofn.nMaxFile = _MAX_PATH ;
ofn.lpstrFileTitle = NULL ;
ofn.nMaxFileTitle = 0 ;
ofn.lpstrInitialDir = NULL ; // in parent dialog box
ofn.lpstrTitle = NULL ;
ofn.Flags = OFN_HIDEREADONLY /*| OFN_ENABLEHOOK */| OFN_NOCHANGEDIR
| OFN_NOTESTFILECREATE | OFN_ENABLETEMPLATE | OFN_NONETWORKBUTTON ;
ofn.lpstrDefExt = NULL ;
ofn.lpTemplateName = MAKEINTRESOURCE(IDD_FILEOPENORD) ;
ofn.lpfnHook = NULL ;
// Display the dialog box. If the user cancels, just return.
if (!GetOpenFileName(&ofn))
return ;
// Take the bogus file name off the path and put the path into the page's
// edit box.
acpath[ofn.nFileOffset - 1] = 0 ;
m_csFileLoc = (LPCTSTR) acpath ;
UpdateData(FALSE) ;
/* if (pidlSelected)
pMalloc->Free(pidlSelected) ;
pMalloc->Release() ;
*/
}
/********************************************************************************
void CNewFile::OnOK()
Do:
Args:
Ret.
*********************************************************************************/
void CNewFile::OnOK()
{
//to do
/*
Read what item is selected and open the file
*/
if(CallNewDoc())
CPropertyPage::OnOK();
}
/********************************************************************************
void CNewFile::OnDblclkNewfilesList(NMHDR* pNMHDR, LRESULT* pResult)
Do: Call the CallNewDoc() like OK () button, we need to check the filename is set or not
Args:
Ret.
*********************************************************************************/
void CNewFile::OnDblclkNewfilesList(NMHDR* pNMHDR, LRESULT* pResult)
{
if (CallNewDoc() )
EndDialog(IDD_NewFile) ;
// bug; need to close the dialog ?? OnOK() call directly does not works.
*pResult = 0 ;
}
/********************************************************************************
void CNewFile::OnCheckProject()
Do: Enable and disable by checking the Project file name checkec status
Args:
Ret.
*********************************************************************************/
/*
void CNewFile::OnCheckProject()
{
CEdit cePrjName;
CWnd *pcw ;
if ( m_cbEnPrj.GetCheck() ) {// check the button
pcw = GetDlgItem(IDC_EDIT_PRJ_NAME) ;
cePrjName.Attach(pcw->m_hWnd ) ;
cePrjName.EnableWindow(TRUE) ;
cePrjName.Detach() ;
}
else {
pcw = GetDlgItem(IDC_EDIT_PRJ_NAME) ;
cePrjName.Attach(pcw->m_hWnd ) ;
cePrjName.EnableWindow(FALSE) ;
cePrjName.Detach() ;
} ;
} ;
*/
/********************************************************************************
BOOL CNewFile::OnInitDialog()
Do: Enumberate File name list
Args:
Ret.
*********************************************************************************/
BOOL CNewFile::OnInitDialog()
{
CPropertyPage::OnInitDialog();
m_pcps = DYNAMIC_DOWNCAST(CPropertySheet,GetOwner() ) ;
m_pcps->GetDlgItem(IDHELP)->ShowWindow(SW_HIDE) ;
// CMDIFrameWnd *pFrame = DYNAMIC_DOWNCAST(CMDIFrameWnd, AfxGetApp()->m_pMainWnd) ;
// Get the active MDI child window.
// CMDIChildWnd *pChild = DYNAMIC_DOWNCAST(CMDIChildWnd, pFrame->GetActiveFrame() );
CString cstmp ;
// CDocument *pDoc ;
cstmp.LoadString(IDS_MDWExtension) ;
/*
for ( ; pChild ; pChild = (CMDIChildWnd* ) pChild->GetNextWindow() ) {
pDoc = (CDocument *) pChild->GetActiveDocument();
if(pDoc) {
CString cs = pDoc->GetTitle() ;
if(cs.Find(cstmp) != -1 ) {
m_bproj = TRUE;
break;
}
}
else
break;
}
if(m_bproj) {
CheckDlgButton(IDC_CHECK_PROJECT,1);
m_csPrjName = ((CProjectRecord*)pDoc)->DriverName();
m_csFileLoc = ((CProjectRecord*)pDoc)->GetW2000Path();
m_pcps->GetDlgItem(IDOK)->EnableWindow(FALSE) ;
UpdateData(FALSE);
}
else{
*/
// GetDlgItem(IDC_CHECK_PROJECT)->EnableWindow(FALSE);
// GetDlgItem(IDC_STATIC_ADDTOPRJ)->EnableWindow(FALSE);
CWinApp* pApp = AfxGetApp();
CString csPath = pApp->m_pszHelpFilePath;
m_csFileLoc = csPath.Left(csPath.ReverseFind(_T('\\') ) ) ;
UpdateData(FALSE);
// }
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
/********************************************************************************
void CNewFile::OnChangeNewFilename()
Do: Called whenever File Name edit box clicked. just call SetOkButton()
Args:
Ret.
*********************************************************************************/
void CNewFile::OnChangeNewFilename()
{
// TODO: If this is a RICHEDIT control, the control will not
// send this notification unless you override the CPropertyPage::OnInitDialog()
// function and call CRichEditCtrl().SetEventMask()
// with the ENM_CHANGE flag ORed into the mask.
SetOkButton() ;
}
void CNewFile::OnClickNewfilesList(NMHDR* pNMHDR, LRESULT* pResult)
{
SetOkButton() ;
*pResult = 0;
}
/********************************************************************************
void CNewFile::SetOkButton()
Do; Enable and disable OK button by checking the filename and
selection of file on the list
*********************************************************************************/
void CNewFile::SetOkButton()
{
UpdateData() ;
POSITION pos = m_clcFileName.GetFirstSelectedItemPosition();
if (m_csNewFile.GetLength() != 0 && pos )
m_pcps->GetDlgItem(IDOK)->EnableWindow() ;
else
m_pcps->GetDlgItem(IDOK)->EnableWindow(FALSE) ;
}