📄 workspace.cpp
字号:
// WorkSpace.cpp: implementation of the CWorkSpace class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "VisualJava.h"
#include "WorkSpace.h"
#include "worksbar.h"
#include "VisualJavaDoc.h"
#include "FileViewTree.h"
#include "ToolManager.h"
#include "DevToolJavacPage.h"
#include "xmlsupport.h"
#include "ChildFrm.h"
#include "VisualJavaView.h"
#include "JavaDeclManager.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CWorkSpace::CWorkSpace()
{
m_bModified = FALSE;
m_pActiveProject = NULL;
m_pItem = NULL;
}
CWorkSpace::~CWorkSpace()
{
for(POSITION nPos = m_Projects.GetHeadPosition(); nPos != NULL;)
delete m_Projects.GetNext(nPos);
if(m_pItem)
delete m_pItem;
}
CProject * CWorkSpace::getProject(CString szpName)
{
for(POSITION nPos = m_Projects.GetHeadPosition(); nPos != NULL;)
{
CProject *pProject = m_Projects.GetNext(nPos);
if(pProject->getName().Compare(szpName) == 0)
return pProject;
}return NULL;
}
void CWorkSpace::SaveSetting()
{return;
CVisualJavaApp* pApp = GetApp;
//open settings file
CString szpPath = m_szpPath.Left(m_szpPath.Find('.'));
szpPath +="WorkspaceSettings.xml";
//serialize workspace
CStdioFile reader_writer;
if(!reader_writer.Open(szpPath,CFile::modeWrite|CFile::modeCreate))
{
MessageBox(0,"Failed to save workspace settings","error",MB_ICONERROR|MB_OK);
return;
}
//
reader_writer.WriteString("Active Project:"+m_pActiveProject->getName());
reader_writer.Close();
}
void CWorkSpace::NewFolder(CString szpName,CString szpExts,
CString szpProject)
{
m_bModified = TRUE;
CProject* pProject= getProject(szpProject);
pProject->NewFolder(szpName,szpExts);
}
void CWorkSpace::close()
{
}
CFileViewTree* CWorkSpace::getFileView(){return CWorkSpaceBar::m_pwndFileView;}
void CWorkSpace::FillCombo(CComboBox *pCombo)
{
for(POSITION nPos = m_Projects.GetHeadPosition(); nPos != NULL;)
{
CProject *pProject = m_Projects.GetNext(nPos);
pCombo->AddString(pProject->getName());
}
}
void CWorkSpace::AddFile(CString szpName,CString szpPath,CString szpFolder,
CTreeCtrl *pTreeCtrl,void* pProj)
{
m_bModified = TRUE;
CProject* pProject = (CProject*)pProj;
if(pProject != NULL)
pProject->AddFile(szpName,szpPath,szpFolder,pTreeCtrl);
}
void CWorkSpace::OpenFile(CString szpProj,CString strFolder,CString szpFile)
{
CString strProj = szpProj;
strProj.TrimRight("Files");strProj.TrimRight();
CProject* pProject = getProject(strProj);
pProject->OpenFile(strFolder,szpFile);
}
BOOL CWorkSpace::OpenProject(CString szpPath, CTreeCtrl *pTreeCtrl)
{
CProject* pProject = new CProject;
m_Projects.AddTail(pProject);
if(pProject->OpenProject(szpPath,pTreeCtrl,m_hLocation))
{
SetActiveProject(pProject->getName());
return TRUE;
}return FALSE;
}
void CWorkSpace::AddFiles(CStringList* pNames,CString szpFolder,
CString szpProject)
{
m_bModified = TRUE;
CString strName(szpProject);strName.TrimRight("Files");strName.TrimRight();
CProject* pProject = getProject(strName);
pProject->AddFiles(pNames,szpFolder);
}
void CWorkSpace::AcquireDataToRunJavac(CMapStringToString* lszpList,int& nConfig)
{
m_pActiveProject->AcquireDataToRunJavac(lszpList,nConfig);
}
void CWorkSpace::AcquireDataToRunJavaw(CMap<CString,CString&,int,int&>*lpCommands)
{
m_pActiveProject->AcquireDataToRunJavaw(lpCommands);
}
BOOL CWorkSpace::CreateWorkSpc(CString szpName,CString szpPath,BOOL bCreateProject)
{
m_szpPath = szpPath;
m_szpPath += CString(szpName)+"Workspace.xml";
//create workspace folder with
CString strPath = szpPath;
strPath.TrimLeft();strPath.TrimRight();
if(strPath.GetLength()>0 && strPath[strPath.GetLength()-1] == '\\')
strPath = strPath.Left(strPath.GetLength()-1);
CreateDirectory(strPath,NULL);
m_szpWorkSpcName = szpName;
//create workspace file
CStdioFile reader_writer;
if(!reader_writer.Open(m_szpPath,CFile::modeWrite|CFile::modeCreate))
{
MessageBox(NULL,"Failed to create workspace file","Error",MB_OK|MB_ICONERROR);
return FALSE;
}
reader_writer.WriteString("<!--BugfreeSoft Visual Java IDE WorkSpace 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("<workspace name = \""+CString(szpName)+"\">\n");
if(bCreateProject)
{
reader_writer.WriteString(" <workspaceprojects active=\""+szpName+"\">\n");
CString szpPath1(szpPath+CString(szpName)+"Project.xml");
reader_writer.WriteString(" <project name=\""+szpName+"\" path=\""+CString(szpPath1)+"\"/>\n");
reader_writer.WriteString(" </workspaceprojects>\n");
}
reader_writer.WriteString("</workspace>\n");
reader_writer.Close();
/**
//insert into tree
m_hLocation = getFileView()->InsertItem(m_szpWorkSpcName,0,0);
getFileView()->Expand(m_hLocation,TVE_EXPAND);
m_pItem = new CWorkSpcItem;
m_pItem->m_nItemType = W_WORKSPACE;
m_pItem->m_pItem = this;
getFileView()->SetItemData(m_hLocation,(DWORD)m_pItem);
**/
if(bCreateProject)
{
// m_pActiveProject = new CProject;
// m_Projects.AddTail(m_pActiveProject); //amend this to reflect right ext
// return m_pActiveProject->CreateProject(szpName,szpPath,m_szpPath);
CProject proj; proj.CreateProject(szpName,szpPath,m_szpPath);
}
return TRUE;
}
void CWorkSpace::CreateOnOpenProject(CString szpName,CString szpPath)
{
m_szpPath = szpPath;
m_szpPath += "Workspace.xml";
m_szpWorkSpcName = szpName;
//create workspace file
CStdioFile writer;
if(!writer.Open(m_szpPath,CFile::modeWrite|CFile::modeCreate))
{
MessageBox(NULL,"failed to create workspace file","Error",MB_OK|MB_ICONERROR);
return;
}
writer.WriteString("<!--BugfreeSoft Visual Java IDE WorkSpace 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("<workspace name= \""+CString(szpName)+"\">\n");
writer.WriteString(" <workspaceprojects active=\""+szpName+"\">\n");
writer.WriteString(" <project name=\""+szpName+"\" path=\""+szpPath+"Project.xml\"/>\n");
writer.WriteString(" </workspaceprojects>\n");
writer.WriteString("</workspace>\n");
writer.Close();
}
//create a project as part of this space
BOOL CWorkSpace::CreateProject(CString szpName,CString szpPath)
{
CProject project;// = new CProject;
//m_Projects.AddTail(pProject);
if(project.CreateProject(szpName,szpPath,NULL))
{
m_bModified = TRUE;
return TRUE;
}return FALSE;
}
void CWorkSpace::LoadSetting()
{
}
void CWorkSpace::SaveWorkSpc()
{
m_bModified = FALSE;//reset
//serialize workspace
CStdioFile reader_writer;
if(!reader_writer.Open(m_szpPath,CFile::modeWrite|CFile::modeCreate))
{
MessageBox(0,"failed to save workspace","error",MB_OK|MB_ICONERROR);
return;
}
reader_writer.WriteString("<!--BugfreeSoft Visual Java IDE WorkSpace 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("<workspace name=\""+CString(m_szpWorkSpcName)+"\">\n");
if(m_Projects.GetCount())
{
reader_writer.WriteString(" <workspaceprojects active=\""+theApp.m_pCurWorkSpace->GetActiveProject()->getName()+"\">\n");
for(POSITION nPos = m_Projects.GetHeadPosition(); nPos != NULL;)
{
CProject* pProject = m_Projects.GetNext(nPos);
pProject->SaveProject();
reader_writer.WriteString(" <project name =\""+pProject->getName()+"\" path=\""+CString(pProject->getPath())+"\"/>\n");
}
reader_writer.WriteString(" </workspaceprojects>\n");
}
reader_writer.WriteString("</workspace>\n");
reader_writer.Close();
//SaveSetting();
}
BOOL CWorkSpace::OpenWorkSpc(CString szpPath,CTreeCtrl *pTreeCtrl)
{
m_szpPath = szpPath;
XMLELEMENT_LIST lxmlProject;
CVisualJavaApp::LoadXML(m_szpPath,&lxmlProject);
if(lxmlProject.GetCount())
{
XMLelement *pXMLWorkSpc = lxmlProject.GetHead();
m_szpWorkSpcName = pXMLWorkSpc->m_lAttributes.GetHead()->m_strValue;
m_pItem = new CWorkSpcItem;
m_pItem->m_nItemType = W_WORKSPACE;
m_pItem->m_pItem = this;
m_hLocation = pTreeCtrl->InsertItem(m_szpWorkSpcName,0,0,NULL);
pTreeCtrl->SetItemData(m_hLocation,(DWORD)m_pItem);
XMLelement* pXMLProjects = pXMLWorkSpc->m_lNestedElements.GetHead();
CString strActive = pXMLProjects->m_lAttributes.GetHead()->m_strValue;
for(POSITION pos = pXMLProjects->m_lNestedElements.GetHeadPosition(); pos !=NULL;)
{
XMLelement* pXMLProject = pXMLProjects->m_lNestedElements.GetNext(pos);
CProject* pProject = new CProject;
if(pProject->OpenProject(pXMLProject->m_lAttributes.GetTail()->m_strValue,pTreeCtrl,m_hLocation))
{
m_Projects.AddTail(pProject);
}
else
{
m_bModified = TRUE;
delete pProject;
}
}CVisualJavaApp::DestroyXML(&lxmlProject);
int nCount = m_Projects.GetCount();
CString strCount;strCount.Format("%d",nCount);
strCount.Insert(0,"Workspace \'"+m_szpWorkSpcName+"\': ");
strCount += " project(s)";
pTreeCtrl->SetItemText(m_hLocation,strCount);
for(pos = m_Projects.GetHeadPosition(); pos !=NULL;)
{
CProject* pProject = m_Projects.GetNext(pos);
if(pProject->getName().Compare(strActive) == 0)
{
m_pActiveProject = pProject;
CWorkSpaceBar::m_pwndFileView->SetItemBold(pProject->m_hLocation,TRUE);
break;
}
}
if(!m_pActiveProject)
{
if(m_Projects.GetCount())
{
m_pActiveProject = m_Projects.GetHead();
CWorkSpaceBar::m_pwndFileView->SetItemBold(m_pActiveProject->m_hLocation,TRUE);
}
}
return TRUE;
}
return FALSE;
}
void CWorkSpace::SetActiveProject(CString strProject)
{
m_pActiveProject = getProject(strProject);
if(m_pActiveProject)
CWorkSpaceBar::m_pwndFileView->SetItemBold(m_pActiveProject->m_hLocation,TRUE);
}
void CWorkSpace::AddProject(CString szpName,CString szpPath,
CTreeCtrl *pTreeCtrl)
{
m_bModified = TRUE;
CProject *pProject = new CProject;
m_Projects.AddTail(pProject);
//set this newly added project as active
m_pActiveProject = pProject;
pProject->OpenProject(szpPath,pTreeCtrl,m_hLocation);
}
CProject::CProject()
{
m_pItemFileView = NULL;
m_pItemClassView = NULL;
m_pItemResView = NULL;
m_pToolManager = new CToolManager;
}
CProject::~CProject()
{
for(POSITION nPos = m_FileFolders.GetHeadPosition(); nPos != NULL;)
delete m_FileFolders.GetNext(nPos);
if(m_pItemFileView != NULL)
delete m_pItemFileView;
delete m_pToolManager;
}
CFileViewTree* CProject::getFileView(){return CWorkSpaceBar::m_pwndFileView;}
BOOL CProject::OpenProject(LPCTSTR szpPath, CTreeCtrl *pTreeCtrl,HTREEITEM hParent)
{
CVisualJavaApp* pApp = GetApp;
m_szpPath = szpPath;
XMLELEMENT_LIST lxmlProject;
CVisualJavaApp::LoadXML(szpPath,&lxmlProject);
if(lxmlProject.GetCount())
{
XMLelement* pXMLProject = lxmlProject.GetHead();
m_szpProjectName = pXMLProject->m_lAttributes.GetHead()->m_strValue;
CWorkSpcItem *pItem = new CWorkSpcItem;
pItem->m_nItemType = W_PROJECT;
pItem->m_pItem = this;
m_pItemFileView = pItem;
ASSERT(hParent != NULL);
m_hLocation = pTreeCtrl->InsertItem(m_szpProjectName+" Files",1,1,hParent);
pTreeCtrl->SetItemData(m_hLocation,(DWORD)pItem);
theApp.m_strCurrentProject = m_szpProjectName;
XMLelement* pXMLFolders = pXMLProject->m_lNestedElements.GetHead();
for(POSITION pos = pXMLFolders->m_lNestedElements.GetHeadPosition(); pos !=NULL;)
{
XMLelement* pXMLFolder = pXMLFolders->m_lNestedElements.GetNext(pos);
CProjectFileFolder *pFolder = new CProjectFileFolder;
CWorkSpcItem *pItem = new CWorkSpcItem;
pItem->m_nItemType = W_FILE_FOLDER;
POSITION pos_ = pXMLFolder->m_lAttributes.GetHeadPosition();
pFolder->m_szpName = pXMLFolder->m_lAttributes.GetNext(pos_)->m_strValue;
pFolder->m_pItem = pItem;
CString strExts = pXMLFolder->m_lAttributes.GetNext(pos_)->m_strValue;
pFolder->deconcanate(strExts);
pItem->m_pItem = pFolder;
if(pos_)
pItem->m_nStatus = atoi(pXMLFolder->m_lAttributes.GetNext(pos_)->m_strValue);
if((pFolder->m_szpName.Compare("Java Source Files") == 0)||(pFolder->m_Extensions.Find("java") != NULL))
pFolder->m_hLocation = pTreeCtrl->InsertItem(pFolder->m_szpName,7,7,m_hLocation);
else
pFolder->m_hLocation = pTreeCtrl->InsertItem(pFolder->m_szpName,5,5,m_hLocation);
pTreeCtrl->SetItemData(pFolder->m_hLocation,(DWORD)pItem);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -