Click here to Skip to main content
15,885,947 members
Articles / Desktop Programming / MFC

A Java Language IDE

Rate me:
Please Sign up or sign in to vote.
4.33/5 (26 votes)
13 May 2004CPOL3 min read 80.4K   3.4K   41  
This is a partially implemented IDE for the Java platform.
// DevToolJavacPage.cpp : implementation file
//

#include "stdafx.h"
#include "VisualJava.h"
#include "DevToolJavacPage.h"
#include "ToolManager.h"
#include "WorkSpace.h"
#include "xmlsupport.h"
#include "JOptionsArgDlg.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif


#define CPropertyPage CSAPrefsSubDlg
/////////////////////////////////////////////////////////////////////////////
// CDevToolJavacPage property page

static BOOL m_bInit = TRUE;
#define PANEL_DIR_LIST_RECT         CRect(0,25,210,195)
#define PANEL_DIR_LISTHEADER_RECT   CRect(0,0,210,25)
#define DIR_PANEL_SIZE              CSize(220,220)

#define ID_HEADER_SRC   0x2
#define ID_HEADER_ARG   0x3



 LPCTSTR CDevToolJavacPage::m_pOptions[] =
 {
    _T("-classpath"),
    _T("-d"),
	_T("-deprecation"),
	_T("-encoding"),
	_T("-g"),
	_T("-g:none"),
	_T("-g:{keyword list}"),
	_T("-help"),
	_T("-nowarn"),
	_T("-source"),
	_T("-sourcepath"),
	_T("-verbose"),
	_T("-target"),
	_T("-bootclasspath"),
	_T("-extdirs"),
	_T("-Xstdout"),
	_T("-Xswitchcheck"),
	_T("-J"),
	NULL
 };

 

IMPLEMENT_DYNCREATE(CDevToolJavacPage, CPropertyPage)

CDevToolJavacPage::CDevToolJavacPage() : CPropertyPage(CDevToolJavacPage::IDD)
{
	//{{AFX_DATA_INIT(CDevToolJavacPage)
	//}}AFX_DATA_INIT
}

CDevToolJavacPage::~CDevToolJavacPage()
{

}

void CDevToolJavacPage::DoDataExchange(CDataExchange* pDX)
{
	CPropertyPage::DoDataExchange(pDX);
	//{{AFX_DATA_MAP(CDevToolJavacPage)
	DDX_Control(pDX, IDC_ENC_COMBO, m_wndComboSel);
	DDX_Control(pDX, IDC_COMBO_OPTIONS_OPTIONS, m_wndOptOpt);
	DDX_Control(pDX, IDC_ARGFILE_LIST, m_wndArgList);
	//}}AFX_DATA_MAP
}


BEGIN_MESSAGE_MAP(CDevToolJavacPage, CPropertyPage)
	//{{AFX_MSG_MAP(CDevToolJavacPage)
	ON_CBN_SELCHANGE(IDC_COMBO_OPTIONS_OPTIONS, OnSelchangeComboOptionsOptions)
	ON_BN_CLICKED(IDC_CHECK_APPLY_TO_ALL, OnCheckApplyToAll)
	//}}AFX_MSG_MAP

	ON_CBN_SELCHANGE(IDC_SRC_LIST,OnSetCurSelSrcList)
	ON_LBN_SETCURSEL(IDC_SRC_LIST,OnSetCurSelSrcList)

	ON_HD_ITEMCLICKED(IDC_STATIC_SRCHEADER,OnSrcHeaderItemClicked)

	ON_BL_ITEMBROWSE(IDC_SRC_LIST,OnBrowseSrcList)
	ON_BL_ITEMBROWSE(IDC_ARGFILE_LIST,OnBrowseArgList)

    ON_LBN_ITEMADDED(IDC_SRC_LIST,OnAddItemSourceList)
	ON_LBN_ITEMDEL(IDC_SRC_LIST,OnDelItemSourceList)

    //relational listbox
	ON_RL_CHECKCHANGED(IDC_LIST_JAVAC_OPTIONS,OnOptionCheckChanged)
	ON_RL_PULLDOWN(IDC_LIST_JAVAC_OPTIONS,OnOptionPullDown)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CDevToolJavacPage message handlers
//	DDX_Control(pDX, IDC_LIST_JAVAC_OPTIONS, m_wndOptions);



BOOL CDevToolJavacPage::OnInitDialog() 
{
	CPropertyPage::OnInitDialog();
	m_imglist.Create(IDB_HEADERCTRL,16,2,RGB(255,0,255));

    m_wndOptions.SubclassDlgItem(IDC_LIST_JAVAC_OPTIONS,this);

	CRect rt;
	GetClientRect(&rt);
    

	//add options and thier associated data windows
	m_wndOptions.AddRelationalString(m_pOptions[0]);	
	m_wndOptions.AddRelationalString(m_pOptions[1]);    
	m_wndOptions.AddString(m_pOptions[2]);
	m_wndOptions.AddRelationalString(m_pOptions[3]);
	m_wndOptions.AddString(m_pOptions[4]);
	m_wndOptions.AddString(m_pOptions[5]);
	m_wndOptions.AddRelationalString(m_pOptions[6]);
	m_wndOptions.AddString(m_pOptions[7]);
	m_wndOptions.AddString(m_pOptions[8]);
	m_wndOptions.AddRelationalString(m_pOptions[9]);
	m_wndOptions.AddRelationalString(m_pOptions[10]);
    m_wndOptions.AddString(m_pOptions[11]);
	m_wndOptions.AddRelationalString(m_pOptions[12]);
	m_wndOptions.AddRelationalString(m_pOptions[13]);
	m_wndOptions.AddRelationalString(m_pOptions[14]);
	m_wndOptions.AddRelationalString(m_pOptions[15]);
    m_wndOptions.AddString(m_pOptions[16]);
    m_wndOptions.AddString(m_pOptions[17]);
	
	/******************************for manual**********************************/
	{
       CRect rc(rt.left+8,rt.top+57,rt.left+290,rt.top+82);
       m_wndSrcHeader.SubclassDlgItem(IDC_STATIC_SRCHEADER,this);
	   m_wndSrcHeader.m_pMsgWnd = this;
	   m_wndSrcHeader.MoveWindow(&rc);
       

	   {
         m_wndSrcHeader.SetImgList(&m_imglist);

		 m_wndSrcHeader.AddItem(0,25,16,"New");
		 m_wndSrcHeader.AddItem(1,25,16,"Delete");
		 m_wndSrcHeader.AddItem(2,25,16,"Move up");
		 m_wndSrcHeader.AddItem(3,25,16,"Move down");
	   }
	}

	//source static
	{
	  CRect rc(rt.left+6,rt.top+50,rt.left+290,rt.bottom-10);
      rc.InflateRect(2,4,4,4);
      GetDlgItem(IDC_STATIC_SRC)->MoveWindow(&rc);
	}

	//source list
    {
	  m_wndSources.SubclassDlgItem(IDC_SRC_LIST,this);
	  CRect rc(rt.left+8,rt.top+83,rt.left+290,rt.bottom-10);
      m_wndSources.MoveWindow(&rc);
	  
	  //pacth
	  m_wndSources.SetItemData(0,0);
	}

	//options static
	{
	  CRect rc(rt.left+305,rt.top+50,rt.right-5,rt.bottom-10);
      rc.InflateRect(4,4,4,4);
      GetDlgItem(IDC_STATIC_OPTIONS)->MoveWindow(&rc);
	}

	//options list
	{
	  CRect rc(rt.left+305,rt.top+62,rt.right-5,rt.bottom-30);
      m_wndOptions.MoveWindow(&rc);	
	}
    //apply check
	{
	  CRect rc(rt.left+305,rt.bottom-25,rt.right-10,rt.bottom-10);
	  GetDlgItem(IDC_CHECK_APPLY_TO_ALL)->MoveWindow(&rc);
	}

	/***********************arg*************************************/
	{
       CRect rc(rt.left+8,rt.top+60,rt.right-5,rt.top+87);
	   m_wndArgHeader.SubclassDlgItem(IDC_STATIC_ARGHEADER,this);
	   m_wndArgHeader.MoveWindow(&rc);
	   
	   m_wndArgHeader.SetImgList(&m_imglist);
	   m_wndArgHeader.AddItem(0,25,16,"New");
	   m_wndArgHeader.AddItem(1,25,16,"Delete");
	   m_wndArgHeader.AddItem(2,25,16,"Move up");
	   m_wndArgHeader.AddItem(3,25,16,"Move down");
	}
    //argument list
	{
	  CRect rc(rt.left+8,rt.top+87,rt.right-5,rt.bottom-10);
       m_wndArgList.MoveWindow(&rc);
	   m_wndArgList.ShowWindow(SW_HIDE);
	}

	//arg static
	{
       CRect rc(rt.left+8,rt.top+50,rt.right-5,rt.bottom-10);
	   rc.InflateRect(4,0,4,4);
	   GetDlgItem(IDC_STATIC_ARG)->MoveWindow(&rc);
	}

	m_wndOptOpt.SetCurSel(0);

	//load settings
	if(CVisualJavaApp::m_pCurWorkSpace != NULL &&
		CVisualJavaApp::m_pCurWorkSpace->GetActiveProject() != NULL)
	{
       //CVisualJavaApp::m_pCurWorkSpace->LoadJavacsetting(this);
	   XMLSerialize(0);
	   if(m_wndSources.GetCount()==0)
	   {
	     for(int i=0; i<m_wndOptions.GetCount(); i++)
		     m_wndOptions.Enable(i,FALSE);
	   }
	}
	else
	{
       //disable lists
	   m_wndSources.EnableWindow(FALSE);
	   m_wndArgList.EnableWindow(FALSE);
	   m_wndArgHeader.EnableWindow(FALSE);
	   m_wndSrcHeader.EnableWindow(FALSE);
       GetDlgItem(IDC_CHECK_APPLY_TO_ALL)->EnableWindow(FALSE);

	   for(int i=0; i<m_wndOptions.GetCount(); i++)
		   m_wndOptions.Enable(i,FALSE);
	}
	return TRUE;
}


void CDevToolJavacPage::OnSelchangeComboOptionsOptions() 
{
   CString szpSel;
   m_wndOptOpt.GetLBText(m_wndOptOpt.GetCurSel(),szpSel);
   CRect rt;
   GetClientRect(&rt);

   if(szpSel.Compare("Use Options from file") == 0)
   {
	  GetDlgItem(IDC_LIST_JAVAC_OPTIONS)->ShowWindow(SW_HIDE);
	  GetDlgItem(IDC_STATIC_OPTIONS)->ShowWindow(SW_HIDE);
	  m_wndSources.ShowWindow(SW_HIDE);
	  m_wndSrcHeader.ShowWindow(SW_HIDE);
	  GetDlgItem(IDC_CHECK_APPLY_TO_ALL)->ShowWindow(SW_HIDE);
      GetDlgItem(IDC_STATIC_SRC)->ShowWindow(SW_HIDE);


	  m_wndArgList.ShowWindow(SW_SHOW);
      GetDlgItem(IDC_STATIC_ARG)->ShowWindow(SW_SHOW);
	  m_wndArgHeader.ShowWindow(SW_SHOW);
   }
   else
   {
	  m_wndArgList.ShowWindow(SW_HIDE);
      GetDlgItem(IDC_STATIC_ARG)->ShowWindow(SW_HIDE);
	  m_wndArgHeader.ShowWindow(SW_HIDE);


	  GetDlgItem(IDC_LIST_JAVAC_OPTIONS)->ShowWindow(SW_SHOW);
	  GetDlgItem(IDC_STATIC_OPTIONS)->ShowWindow(SW_SHOW);
	  m_wndSources.ShowWindow(SW_SHOW);
	  m_wndSrcHeader.ShowWindow(SW_SHOW);
	  GetDlgItem(IDC_CHECK_APPLY_TO_ALL)->ShowWindow(SW_SHOW);
      GetDlgItem(IDC_STATIC_SRC)->ShowWindow(SW_SHOW);
   }
}
#define ACTION_ADDITEM   0
#define ACTION_DELETE    1
#define ACTION_MOVEUP    2
#define ACTION_MOVEDOWN  3

void CDevToolJavacPage::OnArgHeaderItemClicked()
{
  switch(m_wndArgHeader.GetClicked())
  {
	 case ACTION_ADDITEM:
		 {
          m_wndArgList.EditNew();
          break;
		 }
	 case ACTION_DELETE:
		 {
          m_wndArgList.DeleteSelected();
          break;
		 }
	 case ACTION_MOVEUP:
		 {
		  if(m_wndArgList.GetCurSel() != LB_ERR)
          m_wndArgList.MoveItemUp(m_wndArgList.GetCurSel());
		  break;
		 }
	 case ACTION_MOVEDOWN:
		 {
		   if(m_wndArgList.GetCurSel() != LB_ERR)
           m_wndArgList.MoveItemDown(m_wndArgList.GetCurSel());
           break;
		 }
  }
}

void CDevToolJavacPage::OnSrcHeaderItemClicked()
{
  
  switch(m_wndSrcHeader.GetClicked())
  {
	 case ACTION_ADDITEM:
		 {
          m_wndSources.EditNew();
          break;
		 }
	 case ACTION_DELETE:
		 {
          m_wndSources.DeleteSelected();
          break;
		 }
	 case ACTION_MOVEUP:
		 {
		  if(m_wndSources.GetCurSel() != LB_ERR)
          m_wndSources.MoveItemUp(m_wndSources.GetCurSel());
		  break;
		 }
	 case ACTION_MOVEDOWN:
		 {
		   if(m_wndSources.GetCurSel() != LB_ERR)
           m_wndSources.MoveItemDown(m_wndSources.GetCurSel());
           break;
		 }
  }  
}



void CDevToolJavacPage::OnBrowseSrcList()
{
   int iItem = m_wndSources.GetSelected();
   static char BASED_CODE szFilter[]="Java Source Files (*.java)|*.java|";
   DWORD flags = OFN_CREATEPROMPT|OFN_ALLOWMULTISELECT;
   CFileDialog dlg(TRUE,NULL,NULL,flags,szFilter);

   if(dlg.DoModal() == IDOK)
   {
	  POSITION nPos = dlg.GetStartPosition();	 

	  m_wndSources.EndEditing(TRUE);

      for(nPos; nPos != NULL;)
	  {
         CString szpPathName = dlg.GetNextPathName(nPos);
		   
		   //extract name
		 int nDot = szpPathName.Find('.');

		 for(int i=nDot;i--;)//reverse
		 {
           if(szpPathName.GetAt(i) == '\\')
		   {
			  ++i;
              CString szpName = szpPathName.Right(szpPathName.GetLength()-i);
			  CString szpPath = szpPathName.Left(i-1);

			  //add source name to list
			  szpName.TrimLeft();szpName.TrimRight();
			  int nIndex = m_wndSources.AddString(szpName);

			  //add source path for src
			  szpPath.TrimLeft();szpPath.TrimRight();
			  CArray<__option*,__option*>*parray = (CArray<__option*,__option*>*)m_wndSources.GetItemData(nIndex);
			  (*parray)[10]->m_szpData  = szpPath;//sourcepath
			  (*parray)[10]->m_bChecked = TRUE;
			  break;
		    }
		  }
	   }
    }
}


void CDevToolJavacPage::OnBrowseArgList()
{
   int iItem = m_wndArgList.GetCurSel();;
   static char BASED_CODE szFilter[]="Java Source Files (*.java)|*.java|";
   DWORD flags = OFN_CREATEPROMPT|OFN_ALLOWMULTISELECT;
   CFileDialog dlg(TRUE,NULL,NULL,flags,szFilter);

   if(dlg.DoModal() == IDOK)
   {
	  POSITION nPos = dlg.GetStartPosition();
	  CString szpPath;
		 
	  m_wndArgList.EndEditing(TRUE);
      for(nPos; nPos != NULL;)
	  {
        szpPath = dlg.GetNextPathName(nPos);
		m_wndArgList.AddString(szpPath);
	  }
   }

}
 

//#define STRICT
#include <windows.h>
#include <shlobj.h>


INT CALLBACK BrowseCallbackProc_1(HWND hwnd,UINT uMsg,LPARAM lp,LPARAM pData) 
{
   TCHAR szDir[MAX_PATH];   
   switch(uMsg) 
   {
     case BFFM_INITIALIZED: 
      if(GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir))
      {
         // WParam is TRUE since you are passing a path.
         // It would be FALSE if you were passing a pidl.
         SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
      }
      break;   
	 case BFFM_SELCHANGED: 
      // Set the status window to the currently selected path.
      if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))
      {
         SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
      }
      break;
   }return 0;
}


void CDevToolJavacPage::OnCheckApplyToAll() 
{
   int nSel = m_wndSources.GetCurSel();
   if(nSel != -1)
   {
     CArray<__option*,__option*>*pSellist =(CArray<__option*,__option*>*)
     m_wndSources.GetItemData(nSel);

	 int nCount = m_wndSources.GetCount();
	 for(int I=0; I<nCount; I++)
	 {
        CArray<__option*,__option*>*plist =(CArray<__option*,__option*>*)
        m_wndSources.GetItemData(I);

	    if(plist != pSellist)
		{
          int nOptionCount = plist->GetSize();
		  for(int I=0; I<nOptionCount; I++)
          {
		    (*plist)[I]->m_bChecked = (*pSellist)[I]->m_bChecked;
            (*plist)[I]->m_nIndex   = (*pSellist)[I]->m_nIndex;
			(*plist)[I]->m_szpData   = (*pSellist)[I]->m_szpData;
			(*plist)[I]->m_szpOption   = (*pSellist)[I]->m_szpOption;
		  }
		}
	 }
   }	
}



void CDevToolJavacPage::OnSetCurSelSrcList()
{
  int item = m_wndSources.GetCurSel();
  if(item>=0)
  {
     for(int i=0; i<m_wndOptions.GetCount(); i++)
		m_wndOptions.SetCheck(i,0);
 
     //load current option selections
 
     CArray<__option*,__option*>*plist = (CArray<__option*,__option*>*)
     m_wndSources.GetItemData(item);
 
	 int count = plist->GetSize();
     for(i =0; i<count; i++)
     {
       __option* pOpt = (*plist)[i];
 	   m_wndOptions.SetCheck(i,pOpt->m_bChecked);
	   m_wndOptions.SetItemData(i,(DWORD)pOpt);
     }
  }
  else
  {
     for(int i=0; i<m_wndOptions.GetCount(); i++)
	     m_wndOptions.Enable(i,FALSE);  
  }
}

void CDevToolJavacPage::OnSetCurSelArgList()
{

}


void CDevToolJavacPage::OnAddItemSourceList()
{  
  CArray<__option*,__option*>*plist = new CArray<__option*,__option*>;
  m_wndSources.SetItemData(m_wndSources.GetNewlyAdded(),(DWORD)plist);

  int nCount = m_wndOptions.GetCount();
  for(int i =0; i<nCount; i++)
  {
	m_wndOptions.Enable(i);
    __option* pOpt = new __option;
	pOpt->m_nIndex    = i;
	pOpt->m_szpOption = m_pOptions[i];plist->Add(pOpt);
  }m_wndSources.SetCurSel(m_wndSources.GetNewlyAdded());
}

void CDevToolJavacPage::OnDelItemSourceList()
{
	int nIndex = m_wndSources.GetNewlyDeleted();
    if(nIndex != -1)
	{
       CArray<__option*,__option*>*plist = (CArray<__option*,__option*>*)
	   m_wndSources.GetItemData(nIndex);
	   {
		  int count = plist->GetSize();
          for(int i =0; i<count; i++)
		   delete (*plist)[i];
	    
		  delete plist;
	   }
	}
	  
  
    if(m_wndSources.GetCount()==1||nIndex == -1)
	{
       for(int i=0; i<m_wndOptions.GetCount(); i++)
	      m_wndOptions.Enable(i,FALSE);
	}
}

void CDevToolJavacPage::OnOptionCheckChanged()
{
  int sel = m_wndOptions.GetCurSel();
  __option* option = (__option*)m_wndOptions.GetItemData(sel);
  option->m_bChecked = m_wndOptions.GetCheck(sel);
}

void CDevToolJavacPage::OnOptionPullDown()
{
  CJOptionsArgDlg dlg(this);;
  dlg.m_nIndex   = m_wndOptions.GetCurSel();
  dlg.m_nContext = JAVAC_CONTEXT;
  if(dlg.DoModal() == IDOK)
  {


  }
}

void CDevToolJavacPage::OnOK() 
{
  UpdateData();

  if(CVisualJavaApp::m_pCurWorkSpace != NULL && CVisualJavaApp::m_pCurWorkSpace->GetActiveProject() != NULL)
	XMLSerialize(1);
  
  int nCount = m_wndSources.GetCount();
  for(int i=0; i<nCount;i++)
  {
    CArray<__option*,__option*>*plist = (CArray<__option*,__option*>*)
    m_wndSources.GetItemData(i);

	int nOptionCount = plist->GetSize();
	for(int nIndex = 0; nIndex<nOptionCount; nIndex++)
		delete (*plist)[nIndex];
	delete plist;
  }CPropertyPage::OnOK();
}

void CDevToolJavacPage::OnCancel() 
{
  int nCount = m_wndSources.GetCount();
  for(int i=0; i<nCount;i++)
  {
    CArray<__option*,__option*>*plist = (CArray<__option*,__option*>*)
    m_wndSources.GetItemData(i);

	int nOptionCount = plist->GetSize();
	for(int nIndex = 0; nIndex<nOptionCount; nIndex++)
		delete (*plist)[nIndex];
  }CPropertyPage::OnCancel();
}




void CDevToolJavacPage::XMLSerialize(int type)
{
  #define LOADING 0
  #define STORING 1

  if(type == LOADING)
  {
     //get settings in xml objects
    if(CVisualJavaApp::m_pCurWorkSpace->GetActiveProject())
	{
       XMLelement* pXMLJavac = CVisualJavaApp::m_pCurWorkSpace->GetActiveProject()
	                           ->GetToolMgr()->GetXMLObject("javac");       
	
	   if(!pXMLJavac)return;

       m_wndOptOpt.SetCurSel(atoi(pXMLJavac->m_lAttributes.GetHead()->m_strValue));
       OnSelchangeComboOptionsOptions();

       XMLelement* pXMLClsFiles = pXMLJavac->m_lNestedElements.GetHead();//<srcFiles>
	   //match settings
       for(POSITION pos = pXMLClsFiles->m_lNestedElements.GetHeadPosition(); pos != NULL;)
	   {
         XMLelement* pXMLFile = pXMLClsFiles->m_lNestedElements.GetNext(pos);
		 int index = m_wndSources.AddString(pXMLFile->m_lAttributes.GetHead()->m_strValue);
         if(index != -1)
		 {
            CArray<__option*,__option*>*plOptions = (CArray<__option*,__option*>*)m_wndSources.GetItemData(index);
			int i = 0;

			XMLelement* pXMLOpts = pXMLFile->m_lNestedElements.GetHead();//<options>
		    for(POSITION pos = pXMLOpts->m_lNestedElements.GetHeadPosition(); pos !=NULL;)
			{
		       XMLelement* pXMLOption = pXMLOpts->m_lNestedElements.GetNext(pos);
			   __option* option = (*plOptions)[i];
			   {
				 POSITION apos = pXMLOption->m_lAttributes.GetHeadPosition();pXMLOption->m_lAttributes.GetNext(apos);
				 option->m_bChecked = atoi(pXMLOption->m_lAttributes.GetNext(apos)->m_strValue);
				 m_wndOptions.SetCheck(i,option->m_bChecked);
				 if(apos)//there's associated arguments
				   option->m_szpData = pXMLOption->m_lAttributes.GetNext(apos)->m_strValue;
			   }++i;
			}
		 }
	   }
	}
  }
  else
  {
    CVisualJavaApp::m_pCurWorkSpace->GetActiveProject()
	                            ->GetToolMgr()->m_bModified = TRUE;
    XMLelement* pXMLJavac = CVisualJavaApp::m_pCurWorkSpace->GetActiveProject()
	                            ->GetToolMgr()->GetXMLObject("javac");


	if(!pXMLJavac)
	{
       pXMLJavac = new XMLelement;pXMLJavac->m_strElementName = "javac";

	   XMLattribute* pAttr = new XMLattribute;pAttr->m_strName = "configsrc";
	   pAttr->m_strValue = "0";
       pXMLJavac->m_lAttributes.AddTail(pAttr);    
	      

	   XMLelement* pXMLSrcFiles = new XMLelement;
	   pXMLSrcFiles->m_strElementName = "srcFiles";
	   pXMLJavac->m_lNestedElements.AddTail(pXMLSrcFiles);
       CVisualJavaApp::m_pCurWorkSpace->GetActiveProject()
	   ->GetToolMgr()->m_lxmlSettings.GetHead()
	   ->m_lNestedElements.AddTail(pXMLJavac);
	}

	int sel = m_wndOptOpt.GetCurSel();(sel == -1)?sel = 0:sel = sel;
	CString strConfig;strConfig.Format("%d",sel);
    pXMLJavac->m_lAttributes.GetHead()->m_strValue = strConfig;


    XMLelement* pXMLSrcFiles = pXMLJavac->m_lNestedElements.GetHead();//<srcFiles>


    //decard previous setting
    for(POSITION pos = pXMLSrcFiles->m_lNestedElements.GetHeadPosition(); pos != NULL;)
      delete pXMLSrcFiles->m_lNestedElements.GetNext(pos);
    pXMLSrcFiles->m_lNestedElements.RemoveAll();



    int count =m_wndSources.GetCount();
    for(int i = 0; i<count; i++)
	{
       XMLelement* pXMLSrc = new XMLelement;pXMLSrc->m_strElementName = "file";

	   XMLattribute* pNameAttr = new XMLattribute;
	   pNameAttr->m_strName = "name";
	   m_wndSources.GetText(i,pNameAttr->m_strValue);
	   pXMLSrc->m_lAttributes.AddTail(pNameAttr);

       CArray<__option*,__option*>*plOptions = (CArray<__option*,__option*>*)m_wndSources.GetItemData(i);
	   int count =plOptions->GetSize();

	   XMLelement* pXMLOpts = new XMLelement;pXMLOpts->m_strElementName = "options";

       for(int oi = 0; oi<count; oi++)
	   {
          __option* option = (*plOptions)[oi];
          XMLelement* pXMLOpt = new XMLelement;		  
          
		  pXMLOpt->m_strElementName = "option";
		  CString strCheck;strCheck.Format("%d",option->m_bChecked);

		  XMLattribute* pAttrb = new XMLattribute;
		  pAttrb->m_strName = "name";
		  pAttrb->m_strValue = option->m_szpOption;
		  pXMLOpt->m_lAttributes.AddTail(pAttrb);

          pAttrb = new XMLattribute;
		  pAttrb->m_strName = "check";
		  pAttrb->m_strValue = strCheck;
		  pXMLOpt->m_lAttributes.AddTail(pAttrb);

		  if(!option->m_szpData.IsEmpty())
		  {
		    pAttrb = new XMLattribute;pAttrb->m_strName = "args";
            pAttrb->m_strValue = option->m_szpData;
            pXMLOpt->m_lAttributes.AddTail(pAttrb);
		  }
		  
		  pXMLOpts->m_lNestedElements.AddTail(pXMLOpt);	  
	   }
	   pXMLSrc->m_lNestedElements.AddTail(pXMLOpts);
	   pXMLSrcFiles->m_lNestedElements.AddTail(pXMLSrc);
     }
  }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Web Developer
United States United States
biography? I am not that old yet.

Comments and Discussions