Index: src/ch/CustomCopyDlg.cpp
===================================================================
diff -u -N -r0c09e62b3e90352413f389fdfe4b9bc49a1bcc89 -r2d7bee54f998ae8f5d4145a2cf3f4a589253016f
--- src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision 0c09e62b3e90352413f389fdfe4b9bc49a1bcc89)
+++ src/ch/CustomCopyDlg.cpp	(.../CustomCopyDlg.cpp)	(revision 2d7bee54f998ae8f5d4145a2cf3f4a589253016f)
@@ -38,30 +38,25 @@
 // CCustomCopyDlg dialog
 
 
-CCustomCopyDlg::CCustomCopyDlg() :ictranslate::CLanguageDialog(CCustomCopyDlg::IDD)
+CCustomCopyDlg::CCustomCopyDlg() :
+	ictranslate::CLanguageDialog(CCustomCopyDlg::IDD)
 {
-	//{{AFX_DATA_INIT(CCustomCopyDlg)
 	m_bOnlyCreate = FALSE;
 	m_bIgnoreFolders = FALSE;
 	m_bFilters = FALSE;
 	m_bAdvanced = FALSE;
 	m_bForceDirectories = FALSE;
-	//}}AFX_DATA_INIT
 	
-//	m_ccData.m_astrPaths.RemoveAll();	// unneeded
-//	m_ccData.m_strDestPath.Empty();
-	
-	m_ccData.m_iOperation=0;
-	m_ccData.m_iPriority=THREAD_PRIORITY_NORMAL;
+	GetConfig().ExtractSubConfig(BRANCH_TASK_SETTINGS, m_tTaskDefinition.GetConfiguration());
 
-	// m_ccData.m_bsSizes stays uninitialized
-	// m_ccData.m_afFilters - this too
-	
-	m_ccData.m_bIgnoreFolders=false;
-	m_ccData.m_bForceDirectories=false;
-	m_ccData.m_bCreateStructure=false;
+	m_bActualisation = false;
+}
 
-	m_bActualisation=false;
+CCustomCopyDlg::CCustomCopyDlg(const chcore::TTaskDefinition& rTaskDefinition) :
+	ictranslate::CLanguageDialog(CCustomCopyDlg::IDD),
+	m_tTaskDefinition(rTaskDefinition)
+{
+
 }
 
 void CCustomCopyDlg::DoDataExchange(CDataExchange* pDX)
@@ -184,8 +179,10 @@
 	m_ctlFiles.InsertColumn(1, &lvc);
 	
 	// fill paths' listbox
-	for (int i=0;i<m_ccData.m_astrPaths.GetSize();i++)
-		AddPath(m_ccData.m_astrPaths.GetAt(i));
+	for(size_t stIndex = 0; stIndex < m_tTaskDefinition.GetSourcePathCount(); stIndex++)
+	{
+		AddPath(m_tTaskDefinition.GetSourcePathAt(stIndex).ToString());
+	}
 
 	// image list for a combo with recent paths
 	m_ctlDstPath.SetImageList(&m_ilImages);
@@ -195,10 +192,10 @@
 	CString strText;
 	cbi.mask=CBEIF_IMAGE | CBEIF_TEXT;
 
-	for(size_t stIndex = 0; stIndex < m_ccData.m_vRecent.size(); ++stIndex)
+	for(size_t stIndex = 0; stIndex < m_vRecent.size(); ++stIndex)
 	{
 		cbi.iItem = stIndex;
-		strText=m_ccData.m_vRecent.at(stIndex);
+		strText = m_vRecent.at(stIndex);
 		cbi.pszText = strText.GetBuffer(1);
 		sfi.iIcon = -1;
 		SHGetFileInfo(strText, FILE_ATTRIBUTE_NORMAL, &sfi, sizeof(SHFILEINFO),
@@ -209,23 +206,23 @@
 	}
 
 	// destination path
-	SetComboPath(m_ccData.m_strDestPath);
+	SetComboPath(m_tTaskDefinition.GetDestinationPath().ToString());
 //	m_strDest=m_ccData.m_strDestPath;	//**
 
 	// operation type
 	m_ctlOperation.AddString(GetResManager().LoadString(IDS_CCDCOPY_STRING));
 	m_ctlOperation.AddString(GetResManager().LoadString(IDS_CCDMOVE_STRING));
 
 	// copying/moving
-	m_ctlOperation.SetCurSel(m_ccData.m_iOperation);
+	m_ctlOperation.SetCurSel(m_tTaskDefinition.GetOperationType() == chcore::eOperation_Move ? 1 : 0);
 
 	// fill priority combo
-	for (int i=0;i<7;i++)
+	for (int stIndex=0;stIndex<7;stIndex++)
 	{
-		m_ctlPriority.AddString(GetResManager().LoadString(IDS_PRIORITY0_STRING+i));
+		m_ctlPriority.AddString(GetResManager().LoadString(IDS_PRIORITY0_STRING+stIndex));
 	}
 
-	m_ctlPriority.SetCurSel(PriorityToIndex(m_ccData.m_iPriority));
+	m_ctlPriority.SetCurSel(PriorityToIndex(GetTaskPropValue<eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration())));
 
 	// fill buffer sizes listbox
 	SetBuffersizesString();
@@ -279,14 +276,17 @@
 	lvc.cchTextMax=lstrlen(lvc.pszText);
 	lvc.cx=static_cast<int>(0.1*rc.Width());
 	m_ctlFilters.InsertColumn(6, &lvc);
-	
-	m_bFilters = !m_ccData.m_afFilters.IsEmpty();
 
+	CFiltersArray afFilters;
+	GetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
+
+	m_bFilters = !afFilters.IsEmpty();
+
 	// other custom flags
-	m_bAdvanced=(m_ccData.m_bIgnoreFolders | m_ccData.m_bCreateStructure);
-	m_bIgnoreFolders=m_ccData.m_bIgnoreFolders;
-	m_bForceDirectories=m_ccData.m_bForceDirectories;
-	m_bOnlyCreate=m_ccData.m_bCreateStructure;
+	m_bIgnoreFolders = GetTaskPropValue<eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration());
+	m_bForceDirectories = GetTaskPropValue<eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration());
+	m_bOnlyCreate = GetTaskPropValue<eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration());
+	m_bAdvanced = (m_bIgnoreFolders | m_bForceDirectories | m_bOnlyCreate);
 
 	UpdateData(FALSE);
 
@@ -378,10 +378,11 @@
 	m_ctlFilters.InsertColumn(6, &lvc);
 
 	// refresh the entries in filters' list
+	CFiltersArray afFilters = GetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration());
 	m_ctlFilters.DeleteAllItems();
-	for (size_t stIndex = 0; stIndex < m_ccData.m_afFilters.GetSize(); ++stIndex)
+	for(size_t stIndex = 0; stIndex < afFilters.GetSize(); ++stIndex)
 	{
-		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(stIndex);
+		const CFileFilter* pFilter = afFilters.GetAt(stIndex);
 		if(pFilter)
 			AddFilter(*pFilter, boost::numeric_cast<int>(stIndex));
 	}
@@ -461,34 +462,37 @@
 {
 	UpdateData(TRUE);
 
-	// copy files from listctrl to an array
-	m_ccData.m_astrPaths.RemoveAll();
 	CString strPath;
+	m_ctlDstPath.GetWindowText(strPath);
 
-	for (int i=0;i<m_ctlFiles.GetItemCount();i++)
-		m_ccData.m_astrPaths.Add(m_ctlFiles.GetItemText(i, 0));
+	if(strPath.IsEmpty() || m_ctlFiles.GetItemCount() == 0)
+	{
+		MsgBox(IDS_MISSINGDATA_STRING);
+		return;
+	}
 
+	// copy files from listctrl to an array
+	m_tTaskDefinition.ClearSourcePaths();
+
 	// dest path
-	m_ctlDstPath.GetWindowText(m_ccData.m_strDestPath);
-//	m_ccData.m_strDestPath=m_strDest;	//**
+	m_tTaskDefinition.SetDestinationPath(chcore::PathFromString(strPath));
 
+	for (int i = 0; i < m_ctlFiles.GetItemCount(); i++)
+	{
+		m_tTaskDefinition.AddSourcePath(chcore::PathFromString(m_ctlFiles.GetItemText(i, 0)));
+	}
+
 	// operation type
-	m_ccData.m_iOperation=m_ctlOperation.GetCurSel();
+	m_tTaskDefinition.SetOperationType(m_ctlOperation.GetCurSel() == 0 ? chcore::eOperation_Copy: chcore::eOperation_Move);
 
 	// priority
-	m_ccData.m_iPriority=IndexToPriority(m_ctlPriority.GetCurSel());
+	SetTaskPropValue<eTO_ThreadPriority>(m_tTaskDefinition.GetConfiguration(), m_ctlPriority.GetCurSel());
 
-	// buffersize is being changed realtime
-	// so as filter
+	SetTaskPropValue<eTO_IgnoreDirectories>(m_tTaskDefinition.GetConfiguration(), (m_bIgnoreFolders != 0));
+	SetTaskPropValue<eTO_CreateDirectoriesRelativeToRoot>(m_tTaskDefinition.GetConfiguration(), (m_bForceDirectories != 0));
+	SetTaskPropValue<eTO_CreateEmptyFiles>(m_tTaskDefinition.GetConfiguration(), (m_bOnlyCreate != 0));
 
-	m_ccData.m_bIgnoreFolders=(m_bIgnoreFolders != 0);
-	m_ccData.m_bForceDirectories=(m_bForceDirectories != 0);
-	m_ccData.m_bCreateStructure=(m_bOnlyCreate != 0);
-
-	if (m_ccData.m_strDestPath.IsEmpty() || m_ccData.m_astrPaths.GetSize() == 0)
-		MsgBox(IDS_MISSINGDATA_STRING);
-	else
-		CLanguageDialog::OnOK();
+	CLanguageDialog::OnOK();
 }
 
 void CCustomCopyDlg::SetBuffersizesString()
@@ -506,37 +510,58 @@
 	TCHAR szSize[64];
 	ictranslate::CFormat fmt;
 
+	BUFFERSIZES bsSizes;
+	bsSizes.m_bOnlyDefault = GetTaskPropValue<eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration());
+	bsSizes.m_uiDefaultSize = GetTaskPropValue<eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration());
+	bsSizes.m_uiOneDiskSize = GetTaskPropValue<eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration());
+	bsSizes.m_uiTwoDisksSize = GetTaskPropValue<eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration());
+	bsSizes.m_uiCDSize = GetTaskPropValue<eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration());
+	bsSizes.m_uiLANSize = GetTaskPropValue<eTO_LANBufferSize>(m_tTaskDefinition.GetConfiguration());
+
 	fmt.SetFormat(GetResManager().LoadString(IDS_BSEDEFAULT_STRING));
-	fmt.SetParam(_t("%size"), GetSizeString(m_ccData.m_bsSizes.m_uiDefaultSize, szSize, 64, true));
+	fmt.SetParam(_t("%size"), GetSizeString(bsSizes.m_uiDefaultSize, szSize, 64, true));
 	m_ctlBufferSizes.AddString(fmt);
 	
-	if (!m_ccData.m_bsSizes.m_bOnlyDefault)
+	if (!bsSizes.m_bOnlyDefault)
 	{
 		fmt.SetFormat(GetResManager().LoadString(IDS_BSEONEDISK_STRING));
-		fmt.SetParam(_t("%size"), GetSizeString(m_ccData.m_bsSizes.m_uiOneDiskSize, szSize, 64, true));
+		fmt.SetParam(_t("%size"), GetSizeString(bsSizes.m_uiOneDiskSize, szSize, 64, true));
 		m_ctlBufferSizes.AddString(fmt);
 		
 		fmt.SetFormat(GetResManager().LoadString(IDS_BSETWODISKS_STRING));
-		fmt.SetParam(_t("%size"), GetSizeString(m_ccData.m_bsSizes.m_uiTwoDisksSize, szSize, 64, true));
+		fmt.SetParam(_t("%size"), GetSizeString(bsSizes.m_uiTwoDisksSize, szSize, 64, true));
 		m_ctlBufferSizes.AddString(fmt);
 		
 		fmt.SetFormat(GetResManager().LoadString(IDS_BSECD_STRING));
-		fmt.SetParam(_t("%size"), GetSizeString(m_ccData.m_bsSizes.m_uiCDSize, szSize, 64, true));
+		fmt.SetParam(_t("%size"), GetSizeString(bsSizes.m_uiCDSize, szSize, 64, true));
 		m_ctlBufferSizes.AddString(fmt);
 		
 		fmt.SetFormat(GetResManager().LoadString(IDS_BSELAN_STRING));
-		fmt.SetParam(_t("%size"), GetSizeString(m_ccData.m_bsSizes.m_uiLANSize, szSize, 64, true));
+		fmt.SetParam(_t("%size"), GetSizeString(bsSizes.m_uiLANSize, szSize, 64, true));
 		m_ctlBufferSizes.AddString(fmt);
 	}
 }
 
 void CCustomCopyDlg::OnChangebufferButton() 
 {
 	CBufferSizeDlg dlg;
-	dlg.m_bsSizes=m_ccData.m_bsSizes;
-	if (dlg.DoModal() == IDOK)
+
+	dlg.m_bsSizes.m_bOnlyDefault = GetTaskPropValue<eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration());
+	dlg.m_bsSizes.m_uiDefaultSize = GetTaskPropValue<eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration());
+	dlg.m_bsSizes.m_uiOneDiskSize = GetTaskPropValue<eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration());
+	dlg.m_bsSizes.m_uiTwoDisksSize = GetTaskPropValue<eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration());
+	dlg.m_bsSizes.m_uiCDSize = GetTaskPropValue<eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration());
+	dlg.m_bsSizes.m_uiLANSize = GetTaskPropValue<eTO_LANBufferSize>(m_tTaskDefinition.GetConfiguration());
+
+	if(dlg.DoModal() == IDOK)
 	{
-		m_ccData.m_bsSizes=dlg.m_bsSizes;
+		SetTaskPropValue<eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_bOnlyDefault);
+		SetTaskPropValue<eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiDefaultSize);
+		SetTaskPropValue<eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiOneDiskSize);
+		SetTaskPropValue<eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiTwoDisksSize);
+		SetTaskPropValue<eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiCDSize);
+		SetTaskPropValue<eTO_LANBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiLANSize);
+
 		SetBuffersizesString();
 	}
 }
@@ -566,9 +591,11 @@
 {
 	CFilterDlg dlg;
 	CString strData;
-	for (size_t i=0;i<m_ccData.m_afFilters.GetSize();i++)
+
+	CFiltersArray afFilters = GetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration());
+	for (size_t i = 0; i < afFilters.GetSize(); i++)
 	{
-		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(i);
+		const CFileFilter* pFilter = afFilters.GetAt(i);
 		BOOST_ASSERT(pFilter);
 		if(pFilter)
 		{
@@ -579,12 +606,12 @@
 		}
 	}
 	
-	if (dlg.DoModal() == IDOK)
+	if(dlg.DoModal() == IDOK)
 	{
-		if (dlg.m_ffFilter.m_bUseMask || dlg.m_ffFilter.m_bUseExcludeMask || dlg.m_ffFilter.m_bUseSize 
-			|| dlg.m_ffFilter.m_bUseDate || dlg.m_ffFilter.m_bUseAttributes)
+		if(dlg.m_ffFilter.m_bUseMask || dlg.m_ffFilter.m_bUseExcludeMask || dlg.m_ffFilter.m_bUseSize || dlg.m_ffFilter.m_bUseDate || dlg.m_ffFilter.m_bUseAttributes)
 		{
-			m_ccData.m_afFilters.Add(dlg.m_ffFilter);
+			afFilters.Add(dlg.m_ffFilter);
+			SetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
 			AddFilter(dlg.m_ffFilter);
 		}
 		else
@@ -735,9 +762,11 @@
 
 void CCustomCopyDlg::OnRemovefilterButton() 
 {
+	CFiltersArray afFilters = GetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration());
+
 	POSITION pos;
 	int iItem;
-	while (true)
+	while(true)
 	{
 		pos=m_ctlFilters.GetFirstSelectedItemPosition();
 		if (pos == NULL)
@@ -746,7 +775,9 @@
 		{
 			iItem=m_ctlFilters.GetNextSelectedItem(pos);
 			m_ctlFilters.DeleteItem(iItem);
-			m_ccData.m_afFilters.RemoveAt(iItem);
+			afFilters.RemoveAt(iItem);
+
+			SetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
 		}
 	}
 }
@@ -789,20 +820,22 @@
 
 void CCustomCopyDlg::OnDblclkFiltersList(NMHDR* /*pNMHDR*/, LRESULT* pResult) 
 {
-	POSITION pos=m_ctlFilters.GetFirstSelectedItemPosition();
-	if (pos != NULL)
+	POSITION pos = m_ctlFilters.GetFirstSelectedItemPosition();
+	if(pos != NULL)
 	{
-		int iItem=m_ctlFilters.GetNextSelectedItem(pos);
+		CFiltersArray afFilters = GetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration());
+
+		int iItem = m_ctlFilters.GetNextSelectedItem(pos);
 		CFilterDlg dlg;
-		const CFileFilter* pFilter = m_ccData.m_afFilters.GetAt(iItem);
+		const CFileFilter* pFilter = afFilters.GetAt(iItem);
 		BOOST_ASSERT(pFilter);
 		if(pFilter)
-		dlg.m_ffFilter = *pFilter;
+			dlg.m_ffFilter = *pFilter;
 		
 		CString strData;
-		for (size_t stIndex = 0; stIndex < m_ccData.m_afFilters.GetSize(); ++stIndex)
+		for(size_t stIndex = 0; stIndex < afFilters.GetSize(); ++stIndex)
 		{
-			pFilter = m_ccData.m_afFilters.GetAt(stIndex);
+			pFilter = afFilters.GetAt(stIndex);
 			BOOST_ASSERT(pFilter);
 			if(pFilter)
 			{
@@ -823,7 +856,8 @@
 			if (dlg.m_ffFilter.m_bUseMask || dlg.m_ffFilter.m_bUseExcludeMask || dlg.m_ffFilter.m_bUseSize 
 				|| dlg.m_ffFilter.m_bUseDate || dlg.m_ffFilter.m_bUseAttributes)
 			{
-				m_ccData.m_afFilters.SetAt(iItem, dlg.m_ffFilter);
+				afFilters.SetAt(iItem, dlg.m_ffFilter);
+				SetTaskPropValue<eTO_Filters>(m_tTaskDefinition.GetConfiguration(), afFilters);
 				AddFilter(dlg.m_ffFilter, iItem);
 			}
 		}
@@ -834,15 +868,28 @@
 
 void CCustomCopyDlg::OnDblclkBuffersizesList() 
 {
-	int iItem=m_ctlBufferSizes.GetCurSel();
-	if (iItem != LB_ERR)
+	int iItem = m_ctlBufferSizes.GetCurSel();
+	if(iItem != LB_ERR)
 	{
 		CBufferSizeDlg dlg;
-		dlg.m_bsSizes=m_ccData.m_bsSizes;
-		dlg.m_iActiveIndex=iItem;
-		if (dlg.DoModal() == IDOK)
+
+		dlg.m_bsSizes.m_bOnlyDefault = GetTaskPropValue<eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration());
+		dlg.m_bsSizes.m_uiDefaultSize = GetTaskPropValue<eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration());
+		dlg.m_bsSizes.m_uiOneDiskSize = GetTaskPropValue<eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration());
+		dlg.m_bsSizes.m_uiTwoDisksSize = GetTaskPropValue<eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration());
+		dlg.m_bsSizes.m_uiCDSize = GetTaskPropValue<eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration());
+		dlg.m_bsSizes.m_uiLANSize = GetTaskPropValue<eTO_LANBufferSize>(m_tTaskDefinition.GetConfiguration());
+
+		dlg.m_iActiveIndex = iItem;
+		if(dlg.DoModal() == IDOK)
 		{
-			m_ccData.m_bsSizes=dlg.m_bsSizes;
+			SetTaskPropValue<eTO_UseOnlyDefaultBuffer>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_bOnlyDefault);
+			SetTaskPropValue<eTO_DefaultBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiDefaultSize);
+			SetTaskPropValue<eTO_OneDiskBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiOneDiskSize);
+			SetTaskPropValue<eTO_TwoDisksBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiTwoDisksSize);
+			SetTaskPropValue<eTO_CDBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiCDSize);
+			SetTaskPropValue<eTO_LANBufferSize>(m_tTaskDefinition.GetConfiguration(), dlg.m_bsSizes.m_uiLANSize);
+
 			SetBuffersizesString();
 		}
 	}