⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 workspace.cpp

📁 用bcg库编写的java IDE 源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
// 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 + -