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

📄 workspace.cpp

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