📄 workspace.cpp
字号:
m_FileFolders.AddTail(pFolder);
for(POSITION _pos = pXMLFolder->m_lNestedElements.GetHeadPosition(); _pos != NULL;)
{
XMLelement* pXMLFile = pXMLFolder->m_lNestedElements.GetNext(_pos);
CString strName = pXMLFile->m_lAttributes.GetHead()->m_strValue;
CProjectFile* pFile = new CProjectFile(strName);
pos_ = pXMLFile->m_lAttributes.GetHeadPosition();
GetName(strName,pFile->m_szpName);
pFile->m_szpPath = pXMLFile->m_lAttributes.GetNext(pos_)->m_strValue;
pFolder->m_Files.AddTail(pFile);
CWorkSpcItem *pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE;
pItem->m_pItem = pFile;
CString ext;
GetExt(pFile->m_szpName,ext);
if(ext.Compare("java") == 0)
{
pFile->m_hLocation = pTreeCtrl->InsertItem(pFile->m_szpName,3,3,pFolder->m_hLocation);
pTreeCtrl->SetItemData(pFile->m_hLocation,(DWORD)pItem);
}
else
{
pFile->m_hLocation = pTreeCtrl->InsertItem(pFile->m_szpName,2,2,pFolder->m_hLocation);
pTreeCtrl->SetItemData(pFile->m_hLocation,(DWORD)pItem);
}
pFile->m_pItem = pItem;
//determine weither this file should be opened for editing
CString strState = pXMLFile->m_lAttributes.GetNext(pos_)->m_strValue;
CString strMask = strState.Left(strState.Find(":",0));
int state = atoi(strMask);
if(state)
{
OpenFile(pFolder->m_szpName,pFile->m_szpName);
//CVisualJavaDoc* pDoc = pApp->GetDocument(pFile->m_szpPath);
//CFrameWnd* pFrame = pDoc->GetDocFrame();
//if(state == 1)
// pFrame->IsIconic
}
}
}
CVisualJavaApp::DestroyXML(&lxmlProject);
//load tool settings for this project
CString path = szpPath;
int npos = path.Find('.');
path = path.Left(npos);
path += "Tools.xml";
m_pToolManager->LoadToolSettings(path);
return TRUE;
}
return FALSE;
}
///////////////////////
//00000001:ICONIZED //
//00000010:MINIMIZED //
//00000100:MAXIMIZED //
///////////////////////
void CProject::SaveProject()
{
CVisualJavaApp* pApp = GetApp;
//open project file
CStdioFile writer;
if(!writer.Open(m_szpPath,CFile::modeWrite|CFile::modeCreate))
{
return;
}
writer.WriteString("<!--BugfreeSoft Visual Java IDE Project File-->\n");
writer.WriteString("<!--PLEASE DO NOT EDIT THIS FILE, IF U'D LIKE YOUR PRODUCT TO WORK CORRECTLY, OTHERWISE GO RIGHT AHEAD:)-->\n");
writer.WriteString("<!--*******************************************-->\n");
writer.WriteString("<project name=\""+CString(m_szpProjectName)+"\" path=\""+m_szpPath+"\">\n");
writer.WriteString(" <projectfolders>\n");
for(POSITION nPos = m_FileFolders.GetHeadPosition(); nPos != NULL;)
{
CProjectFileFolder* pFolder = m_FileFolders.GetNext(nPos);
CString szpExts;
pFolder->concanateExts(szpExts);
CString strState;strState.Format("%d",pFolder->m_pItem->m_nStatus);
writer.WriteString(" <folder name=\""+pFolder->m_szpName+"\" exts=\""+szpExts+"\" state=\""+strState+"\">\n");
for(POSITION nPos1 = pFolder->m_Files.GetHeadPosition(); nPos1 != NULL;)
{
CProjectFile* pFile = pFolder->m_Files.GetNext(nPos1);
//settings
//acquire pointer to doc if opened
CVisualJavaDoc* pDoc = pApp->GetDocument(pFile->m_szpPath);
CString strRect("(0,0,0,0)");
strState = "0:"+strRect;
if(pDoc)
{
strState.Empty();
int state = 0;
CFrameWnd* pFrame = pDoc->GetDocFrame();
if(pFrame->IsIconic())
state = 1;
else
if(pFrame->IsZoomed())
state = 4;
else
state = 2;
strState.Format("%d",state);
CRect rcSize;
pFrame->GetWindowRect(&rcSize);
strRect.Format("%s%d","(",rcSize.left,",",rcSize.top,",",rcSize.right,",",rcSize.bottom,")");
strState += ":"+strRect;
}
writer.WriteString(" <file name=\""+CString(pFile->m_szpPath)+"\" state=\""+strState+"\"/>\n");
}
writer.WriteString(" </folder>\n");
}
writer.WriteString(" </projectfolders>\n");
writer.WriteString("</project>\n");
writer.Close();
//SaveSetting();
}
void CProject::AddFile(CString szpName,CString szpPath,CString szpFolder,
CTreeCtrl *pTreeCtrl)
{
/* CProjectFileFolder *pFolder = getFileFolder(szpFolder,"");
CProjectFile *pFile = new CProjectFile;
CWorkSpcItem* pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE;
pItem->m_pItem = pFile;
pFile ->m_pItem = pItem;
pFile->m_szpName = szpName;
pFile->m_szpPath = szpPath;
CString ext;
GetExt(szpName,ext);
if(ext.Compare("java") == 0)
pFile->m_hLocation = pTreeCtrl->InsertItem(szpName,3,3,pFolder->m_hLocation);
else
pFile->m_hLocation = pTreeCtrl->InsertItem(szpName,2,2,pFolder->m_hLocation);
pTreeCtrl->SetItemData(pFile->m_hLocation,(DWORD)pItem);
pFolder->m_Files.AddTail(pFile);
*/
}
void CProject::AddFiles(CStringList* pNames,CString szpFolder)
{
for(POSITION nPos = pNames->GetHeadPosition(); nPos != NULL;)
{
CString szpPath = pNames->GetNext(nPos);
CString szpName,szpExt;GetExt(szpPath,szpExt);GetName(szpPath,szpName);
CProjectFileFolder *pFolder = getFileFolder(szpFolder,"");
CProjectFile *pFile = new CProjectFile(szpPath);
CWorkSpcItem* pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE;
pItem->m_pItem = pFile;
pFile ->m_pItem = pItem;
pFile->m_szpName = szpName;
pFile->m_szpPath = szpPath;
if(szpExt.Compare("java") == 0)
pFile->m_hLocation = getFileView()->InsertItem(szpName,3,3,pFolder->m_hLocation);
else
pFile->m_hLocation = getFileView()->InsertItem(szpName,2,2,pFolder->m_hLocation);
getFileView()->SetItemData(pFile->m_hLocation,(DWORD)pItem);
pFolder->m_Files.AddTail(pFile);
}
}
CProjectFileFolder* CProject::getFileFolder(CString szpName,CString szpExt)
{
if(!szpExt.IsEmpty())
{
for(POSITION nPos = m_FileFolders.GetHeadPosition(); nPos != NULL;)
{
CProjectFileFolder *pFileFolder = m_FileFolders.GetNext(nPos);
if(pFileFolder->m_Extensions.Find(szpExt) != NULL)
return pFileFolder;
}
}
else
{
for(POSITION nPos = m_FileFolders.GetHeadPosition(); nPos != NULL;)
{
CProjectFileFolder *pFileFolder = m_FileFolders.GetNext(nPos);
if(pFileFolder->m_szpName.Compare(szpName) == 0)
return pFileFolder;
}
}return NULL;
}
CProjectFileFolder* CProject::createFileFolder(CString szpName,CString szpExt,
CTreeCtrl* pTreeCtrl)
{
if(!getFileFolder(szpName,szpExt))
{
CProjectFileFolder* pFolder = new CProjectFileFolder;
pFolder->m_szpName = szpName;
pFolder->m_Extensions.AddTail(szpExt);
CWorkSpcItem* pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE_FOLDER;
pItem->m_pItem = pFolder;
pFolder->m_hLocation = pTreeCtrl->InsertItem(szpName,5,5,m_hLocation);
pTreeCtrl->SetItemData(pFolder->m_hLocation,(DWORD)pItem);
m_FileFolders.AddTail(pFolder);
return pFolder;
}
else
{
MessageBox(0,"Folder with the specified name and/or extension already exist",
"JavaJam",MB_OK|MB_ICONERROR);
}
return NULL;
}
BOOL CProject::CreateProject(LPCTSTR szpName,LPCTSTR szpPath,
LPCTSTR szpWorkSpc /*= NULL*/)
{
m_szpPath = szpPath;
if(szpWorkSpc == NULL)//adding this project to current workspace
CreateDirectory(m_szpPath,NULL);
//create class file folder
CString strClass = m_szpPath;
strClass += "ClassFiles";
CreateDirectory(strClass,NULL);
//default java file associated with newly created project
CString strFile = m_szpPath;
strFile += CString(szpName)+".java";
//attach apropriate extension
m_szpPath += CString(szpName)+"Project.xml";
m_szpProjectName = szpName;
//open project file
CStdioFile reader_writer;
if(!reader_writer.Open(m_szpPath,CFile::modeWrite|CFile::modeCreate))
{
MessageBox(NULL,"failed to create project file","Error",MB_OK|MB_ICONERROR);
return FALSE;
}
CString szpOwner;
szpOwner = szpWorkSpc;
reader_writer.WriteString("<!--BugfreeSoft Visual Java IDE Project File-->\n");
reader_writer.WriteString("<!--PLEASE DO NOT EDIT THIS FILE, IF U'D LIKE YOUR PRODUCT TO WORK CORRECTLY, OTHERWISE GO RIGHT AHEAD:)-->\n");
reader_writer.WriteString("<!--*******************************************-->\n");
reader_writer.WriteString("<project name=\""+CString(szpName)+"\" path=\""+m_szpPath+"\">\n");
reader_writer.WriteString(" <projectfolders>\n");
reader_writer.WriteString(" <folder name=\"Java Source Files\" exts=\".java\" state=\"0\">\n");
reader_writer.WriteString(" <file name=\""+strFile+"\" state=\"4:(0,0,0,0)\"/>\n");
reader_writer.WriteString(" </folder>\n");
reader_writer.WriteString(" </projectfolders>\n");
reader_writer.WriteString("</project>\n");
reader_writer.Close();
/*
CWorkSpcItem *pItem = new CWorkSpcItem;
pItem->m_nItemType = W_PROJECT;
pItem->m_pItem = this;
m_pItemFileView = pItem;
m_hLocation = getFileView()->InsertItem(m_szpProjectName,1,1,CVisualJavaApp::m_pCurWorkSpace->m_hLocation);
getFileView()->SetItemData(m_hLocation,(DWORD)pItem);
//add default folder
CProjectFileFolder* pFolder = new CProjectFileFolder;
pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE_FOLDER;
pFolder->m_pItem = pItem;
pFolder->m_Extensions.AddTail("java");
pFolder->m_szpName = "Java Source Files";
pItem->m_pItem = pFolder;
pFolder->m_hLocation = getFileView()->InsertItem("Java Source Files",7,7,m_hLocation);
getFileView()->SetItemData(pFolder->m_hLocation,(DWORD)pItem);
m_FileFolders.AddTail(pFolder);
//add default file
CProjectFile* pFile = new CProjectFile(szpPath);
pFile->m_szpName = CString(szpName)+".java";
pFile->m_szpPath = CString(szpPath)+CString(szpName)+".java";
pFolder->m_Files.AddTail(pFile);
pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE;
pItem->m_pItem = pFile;
pFile->m_hLocation = getFileView()->InsertItem(CString(szpName)+".java",3,3,pFolder->m_hLocation);
getFileView()->SetItemData(pFile->m_hLocation,(DWORD)pItem);
pFile->m_pItem = pItem;
**/
//create tool manager associated with this project
{
m_pToolManager->Create(szpPath+CString(szpName)+"ProjectTools.xml",szpName,szpPath);
//load default tool settings
//m_pToolManager->LoadToolSettings(szpPath+CString(szpName)+"Tools.xml");
}
return TRUE;
}
CProjectFile* CProject::getFile(CString strFolder,CString szpFile)
{
for(POSITION nPos = m_FileFolders.GetHeadPosition(); nPos != NULL;)
{
CProjectFileFolder* pFolder = m_FileFolders.GetNext(nPos);
if(pFolder->m_szpName.Compare(strFolder) == 0)
return pFolder->getFile(szpFile);
}return NULL;
}
void CProject::NewFolder(CString szpName,CString szpExts)
{
CProjectFileFolder* pFolder = new CProjectFileFolder;
m_FileFolders.AddTail(pFolder);
pFolder->m_szpName = szpName;
pFolder->deconcanate(szpExts);
CWorkSpcItem* pItem = new CWorkSpcItem;
pFolder->m_pItem = pItem;
pItem->m_nItemType = W_FILE_FOLDER;
pItem->m_pItem = pFolder;
pFolder->m_hLocation = getFileView()->InsertItem(szpName,5,5,m_hLocation);
getFileView()->SetItemData(pFolder->m_hLocation,(DWORD)pItem);
}
void CProject::AcquireDataToRunJavac(CMapStringToString* lszpList,int& nConfig)
{
m_pToolManager->AcquireDataToRunJavac(lszpList,nConfig);
}
void CProject::AcquireDataToRunJavaw(CMap<CString,CString&,int,int&>*lpCommands)
{
// m_pToolManager->AcquireDataToRunJavaw(lpCommands);
}
void CProject::OpenFile(CString strFolder,CString szpFile)
{
CProjectFile* pFile = getFile(strFolder,szpFile);
if(pFile != NULL)
{
CString strFile = pFile->m_szpPath;
theApp.OpenDocumentFileEx(strFile,0);
}
}
#define CHAR_ALIGN 16
#define ALIGN_BUF_SIZE(size) ((size) / CHAR_ALIGN) * CHAR_ALIGN + CHAR_ALIGN;
BOOL createText(TCHAR*& pszTo,LPCTSTR pszFrom,int/* = -1*/)
{
int nLength = _tcslen(pszFrom);
if(nLength)
{
int nMax = ALIGN_BUF_SIZE(nLength);
ASSERT(nMax >= nLength);
if(nMax>0)
pszTo = new TCHAR[nMax];
else return FALSE;
if(nLength > 0)
memcpy(pszTo, pszFrom, sizeof(TCHAR)*nLength);
else
{
delete pszTo;
pszTo = NULL;
return FALSE;
}
pszTo[nLength] = '\0';
return TRUE;
}
return FALSE;
}
CProjectFile::CProjectFile(CString strPath)
{
threadInitInfo* pInitInfo = new threadInitInfo;
if(createText(pInitInfo->m_szpSourceFile,strPath))
{
m_pDeclManager = (CJavaDeclManager*)AfxBeginThread(RUNTIME_CLASS(CJavaDeclManager),
THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED);
m_pDeclManager->m_bAutoDelete = FALSE;
m_pDeclManager->m_nMainThreadID = ::GetCurrentThreadId();
CVisualJavaApp* pApp = (CVisualJavaApp*)AfxGetApp();
DWORD result = m_pDeclManager->ResumeThread();
m_pDeclManager->PostThreadMessage(m_msgMainThreadID,(WPARAM)m_nMainAppThreadID,0);
//loads file and intializes parsing
createText(pInitInfo->m_szpApiPath,pApp->m_strAPIPath.GetBuffer(1));
pApp->m_strAPIPath.ReleaseBuffer();
pInitInfo->m_bTotalParse = true;
m_pDeclManager->PostThreadMessage(m_msgInit,(WPARAM)pInitInfo,0);
//this serves as a bridge between the dynamic parser and the text editor.
//the design separates the dynamic parser at the back from the text editor
//this allows for messages to be sent to the parser about needed updates
back_to_front_map* pMap = new back_to_front_map;
//this serves as an identifier,the textbuffer would use to find m_pDeclManager->m_nThreadID;
pMap->m_strFile = strPath;
pMap->m_nThreadID = m_pDeclManager->m_nThreadID;
CVisualJavaApp::AddBFmap(pMap);
}
else
delete pInitInfo;
}
CProjectFile::~CProjectFile()
{
delete m_pItem;
delete m_pDeclManager;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -