Index: src/ch/FeedbackNotEnoughSpaceDlg.cpp
===================================================================
diff -u -N -r3993a75a24145732742d61be638111d1d85c367b -re6f64ea0eecaf86dfa1a42c80604d227b69be768
--- src/ch/FeedbackNotEnoughSpaceDlg.cpp	(.../FeedbackNotEnoughSpaceDlg.cpp)	(revision 3993a75a24145732742d61be638111d1d85c367b)
+++ src/ch/FeedbackNotEnoughSpaceDlg.cpp	(.../FeedbackNotEnoughSpaceDlg.cpp)	(revision e6f64ea0eecaf86dfa1a42c80604d227b69be768)
@@ -1,27 +1,28 @@
-/***************************************************************************
-*   Copyright (C) 2001-2008 by J�zef Starosczyk                           *
-*   ixen@copyhandler.com                                                  *
-*                                                                         *
-*   This program is free software; you can redistribute it and/or modify  *
-*   it under the terms of the GNU Library General Public License          *
-*   (version 2) as published by the Free Software Foundation;             *
-*                                                                         *
-*   This program is distributed in the hope that it will be useful,       *
-*   but WITHOUT ANY WARRANTY; without even the implied warranty of        *
-*   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the         *
-*   GNU General Public License for more details.                          *
-*                                                                         *
-*   You should have received a copy of the GNU Library General Public     *
-*   License along with this program; if not, write to the                 *
-*   Free Software Foundation, Inc.,                                       *
-*   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
-***************************************************************************/
+// ============================================================================
+//  Copyright (C) 2001-2020 by Jozef Starosczyk
+//  ixen {at} copyhandler [dot] com
+//
+//  This program is free software; you can redistribute it and/or modify
+//  it under the terms of the GNU Library General Public License
+//  (version 2) as published by the Free Software Foundation;
+//
+//  This program is distributed in the hope that it will be useful,
+//  but WITHOUT ANY WARRANTY; without even the implied warranty of
+//  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+//  GNU General Public License for more details.
+//
+//  You should have received a copy of the GNU Library General Public
+//  License along with this program; if not, write to the
+//  Free Software Foundation, Inc.,
+//  59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// ============================================================================
 #include "stdafx.h"
 #include "ch.h"
 #include "FeedbackNotEnoughSpaceDlg.h"
-#include "StringHelpers.h"
 #include "resource.h"
 #include "../libchengine/EFeedbackResult.h"
+#include "RuleEditDlg.h"
+#include "StringHelpers.h"
 
 #ifdef _DEBUG
 #define new DEBUG_NEW
@@ -32,22 +33,15 @@
 /////////////////////////////////////////////////////////////////////////////
 // CFeedbackNotEnoughSpaceDlg dialog
 
-CFeedbackNotEnoughSpaceDlg::CFeedbackNotEnoughSpaceDlg(chengine::FeedbackRules& currentRules, unsigned long long ullSizeRequired, const wchar_t* pszSrcPath, const wchar_t* pszDstPath)
+CFeedbackNotEnoughSpaceDlg::CFeedbackNotEnoughSpaceDlg(chengine::FeedbackRules& currentRules, unsigned long long ullSizeRequired, const wchar_t* pszDstPath)
 	:ictranslate::CLanguageDialog(IDD_FEEDBACK_NOTENOUGHSPACE_DIALOG),
-	m_strDisk(pszDstPath),
+	m_strDstPath(pszDstPath),
 	m_ullRequired(ullSizeRequired),
-	m_bAllItems(FALSE),
 	m_fsLocal(GetLogFileData()),
 	m_rules(currentRules)
 {
-	m_vstrFiles.emplace_back(pszSrcPath);
 }
 
-bool CFeedbackNotEnoughSpaceDlg::IsApplyToAllItemsChecked() const
-{
-	return m_bAllItems;
-}
-
 const chengine::FeedbackRules& CFeedbackNotEnoughSpaceDlg::GetRules() const
 {
 	return m_rules;
@@ -56,53 +50,47 @@
 void CFeedbackNotEnoughSpaceDlg::DoDataExchange(CDataExchange* pDX)
 {
 	CLanguageDialog::DoDataExchange(pDX);
-	//{{AFX_DATA_MAP(CFeedbackNotEnoughSpaceDlg)
-	DDX_Control(pDX, IDC_FILES_LIST, m_ctlFiles);
-	//}}AFX_DATA_MAP
-	DDX_Check(pDX, IDC_ALL_ITEMS_CHECK, m_bAllItems);
+
+	DDX_Control(pDX, IDC_LOCATION_EDIT, m_ctlLocationEdit);
+	DDX_Control(pDX, IDC_REQUIRED_SPACE_STATIC, m_ctlRequiredSpaceStatic);
+	DDX_Control(pDX, IDC_AVAILABLE_SPACE_STATIC, m_ctlAvailableSpaceStatic);
+	DDX_Control(pDX, IDC_RETRY_BUTTON, m_btnRetry);
+	DDX_Control(pDX, IDC_IGNORE_BUTTON, m_btnIgnore);
+	DDX_Control(pDX, IDC_CUSTOM_RULES_BUTTON, m_btnCustomRules);
+	DDX_Control(pDX, IDC_PAUSE_BUTTON, m_btnPause);
+	DDX_Control(pDX, IDCANCEL, m_btnCancel);
 }
 
 
 BEGIN_MESSAGE_MAP(CFeedbackNotEnoughSpaceDlg,ictranslate::CLanguageDialog)
-	//{{AFX_MSG_MAP(CFeedbackNotEnoughSpaceDlg)
 	ON_WM_TIMER()
-	ON_BN_CLICKED(IDC_RETRY_BUTTON, OnRetryButton)
-	ON_BN_CLICKED(IDC_IGNORE_BUTTON, OnIgnoreButton)
-	//}}AFX_MSG_MAP
-	ON_BN_CLICKED(IDCANCEL, &CFeedbackNotEnoughSpaceDlg::OnBnClickedCancel)
+	ON_BN_CLICKED(IDC_RETRY_BUTTON, OnBnRetry)
+	ON_BN_CLICKED(IDC_IGNORE_BUTTON, OnBnIgnore)
+	ON_BN_CLICKED(IDCANCEL, OnCancel)
+	ON_BN_CLICKED(IDC_CUSTOM_RULES_BUTTON, OnBnCustomRules)
+	ON_BN_CLICKED(IDC_PAUSE_BUTTON, OnBnPause)
 END_MESSAGE_MAP()
 
 /////////////////////////////////////////////////////////////////////////////
 // CFeedbackNotEnoughSpaceDlg message handlers
 void CFeedbackNotEnoughSpaceDlg::UpdateDialog()
 {
-	// format needed text
-	ictranslate::CFormat fmt(GetResManager().LoadString(IDS_NERPATH_STRING));
-	fmt.SetParam(_T("%path"), m_strDisk);
+	// update size information
+	m_ctlRequiredSpaceStatic.SetWindowText(GetSizeString(m_ullRequired));
 
-	CWnd* pWnd=GetDlgItem(IDC_HEADER_STATIC);
-	if (pWnd)
-		pWnd->SetWindowText(fmt.ToString());
-
-	// now the sizes
-	pWnd=GetDlgItem(IDC_REQUIRED_STATIC);
-	if (pWnd)
-		pWnd->SetWindowText(GetSizeString(m_ullRequired));
-
 	unsigned long long ullFree = 0, ullTotal = 0;
-	pWnd=GetDlgItem(IDC_AVAILABLE_STATIC);
-	if(pWnd)
+	try
 	{
-		try
-		{
-			m_fsLocal.GetDynamicFreeSpace(chcore::PathFromString(m_strDisk), ullFree, ullTotal);
-		}
-		catch(const std::exception&)
-		{
-			ullFree = 0;
-		}
-		pWnd->SetWindowText(GetSizeString(ullFree));
+		m_fsLocal.GetDynamicFreeSpace(chcore::PathFromString(m_strDstPath), ullFree, ullTotal);
 	}
+	catch(const std::exception&)
+	{
+		ullFree = 0;
+	}
+	m_ctlAvailableSpaceStatic.SetWindowText(GetSizeString(ullFree));
+
+	// location
+	m_ctlLocationEdit.SetWindowText(m_strDstPath);
 }
 
 BOOL CFeedbackNotEnoughSpaceDlg::OnInitDialog() 
@@ -114,31 +102,29 @@
 	SetIcon(hIcon, FALSE);
 
 	AddResizableControl(IDC_HEADER_STATIC, 0.0, 0.0, 1.0, 0.0);
-	AddResizableControl(IDC_001_STATIC, 0.0, 0.0, 0.0, 0.0);
+	AddResizableControl(IDC_DETAILS_STATIC, 0.0, 0.0, 1.0, 1.0);
+	AddResizableControl(IDC_ICON_STATIC, 0.0, 0.0, 0.0, 0.0);
 
-	AddResizableControl(IDC_FILES_LIST, 0.0, 0.0, 1.0, 1.0);
+	AddResizableControl(IDC_LOCATION_STATIC, 0.0, 0.0, 0.0, 0.0);
+	AddResizableControl(IDC_LOCATION_EDIT, 0.0, 0.0, 0.0, 1.0);
 
-	AddResizableControl(IDC_003_STATIC, 0.0, 1.0, 0.0, 0.0);
-	AddResizableControl(IDC_004_STATIC, 0.0, 1.0, 0.0, 0.0);
+	AddResizableControl(IDC_REQUIRED_SPACE_HDR_STATIC, 0.0, 0.0, 0.0, 0.0);
+	AddResizableControl(IDC_REQUIRED_SPACE_STATIC, 0.0, 0.0, 1.0, 0.0);
 
-	AddResizableControl(IDC_REQUIRED_STATIC, 0.0, 1.0, 1.0, 0.0);
-	AddResizableControl(IDC_AVAILABLE_STATIC, 0.0, 1.0, 1.0, 0.0);
+	AddResizableControl(IDC_AVAILABLE_SPACE_HDR_STATIC, 0.0, 0.0, 0.0, 0.0);
+	AddResizableControl(IDC_AVAILABLE_SPACE_STATIC, 0.0, 0.0, 1.0, 0.0);
 
-	AddResizableControl(IDC_RETRY_BUTTON, 1.0, 1.0, 0.0, 0.0);
-	AddResizableControl(IDC_IGNORE_BUTTON, 1.0, 1.0, 0.0, 0.0);
-	AddResizableControl(IDCANCEL, 1.0, 1.0, 0.0, 0.0);
+	AddResizableControl(IDC_RETRY_BUTTON, 0.34, 1.0, 0.33, 0.0);
+	AddResizableControl(IDC_IGNORE_BUTTON, 0.67, 1.0, 0.33, 0.0);
+	AddResizableControl(IDC_CUSTOM_RULES_BUTTON, 0.0, 1.0, 0.34, 0.0);
+	AddResizableControl(IDC_PAUSE_BUTTON, 0.34, 1.0, 0.33, 0.0);
+	AddResizableControl(IDCANCEL, 0.67, 1.0, 0.33, 0.0);
 
-	AddResizableControl(IDC_ALL_ITEMS_CHECK, 0.0, 1.0, 1.0, 0.0);
-
 	InitializeResizableControls();
 
 	// set to top
-	SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE /*| SWP_SHOWWINDOW*/);
+	//SetWindowPos(&wndNoTopMost, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE /*| SWP_SHOWWINDOW*/);
 
-	// needed data
-	for (size_t i=0;i<m_vstrFiles.size();i++)
-		m_ctlFiles.AddString(m_vstrFiles.at(i).c_str());
-
 	// format needed text
 	UpdateDialog();
 
@@ -152,59 +138,61 @@
 	if (nIDEvent == 1601)
 	{
 		// update free space
-		CWnd *pWnd=GetDlgItem(IDC_AVAILABLE_STATIC);
-		if (pWnd)
+		
+		unsigned long long ullFree = 0;
+		try
 		{
-			unsigned long long ullFree = 0;
-			try
-			{
-				unsigned long long ullTotal = 0;
-				m_fsLocal.GetDynamicFreeSpace(chcore::PathFromString(m_strDisk), ullFree, ullTotal);
-			}
-			catch(const std::exception&)
-			{
-				ullFree = 0;
-			}
+			unsigned long long ullTotal = 0;
+			m_fsLocal.GetDynamicFreeSpace(chcore::PathFromString(m_strDstPath), ullFree, ullTotal);
+		}
+		catch(const std::exception&)
+		{
+			ullFree = 0;
+		}
 
-			pWnd->SetWindowText(GetSizeString(ullFree));
+		m_ctlAvailableSpaceStatic.SetWindowText(GetSizeString(ullFree));
 
-			// end dialog if this is enough
-			if (m_ullRequired <= ullFree)
-			{
-				CLanguageDialog::OnTimer(nIDEvent);
-				EndDialog(chengine::EFeedbackResult::eResult_Retry);
-			}
+		// end dialog if this is enough
+		if (m_ullRequired <= ullFree)
+		{
+			KillTimer(1601);
+			EndDialog(chengine::EFeedbackResult::eResult_Retry);
 		}
 	}
 	
 	CLanguageDialog::OnTimer(nIDEvent);
 }
 
-void CFeedbackNotEnoughSpaceDlg::OnRetryButton() 
+void CFeedbackNotEnoughSpaceDlg::OnLanguageChanged()
 {
-	UpdateData(TRUE);
-	EndDialog(chengine::EFeedbackResult::eResult_Retry);
+	UpdateDialog();
 }
 
-void CFeedbackNotEnoughSpaceDlg::OnIgnoreButton() 
+void CFeedbackNotEnoughSpaceDlg::OnBnRetry() 
 {
-	UpdateData(TRUE);
-	EndDialog(chengine::EFeedbackResult::eResult_Ignore);
+	EndDialog(chengine::EFeedbackResult::eResult_Retry);
 }
 
-void CFeedbackNotEnoughSpaceDlg::OnLanguageChanged()
+void CFeedbackNotEnoughSpaceDlg::OnBnIgnore() 
 {
-	UpdateDialog();
+	EndDialog(chengine::EFeedbackResult::eResult_Ignore);
 }
 
 void CFeedbackNotEnoughSpaceDlg::OnCancel()
 {
-	UpdateData(TRUE);
 	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
 }
 
-void CFeedbackNotEnoughSpaceDlg::OnBnClickedCancel()
+void CFeedbackNotEnoughSpaceDlg::OnBnCustomRules()
 {
-	UpdateData(TRUE);
-	EndDialog(chengine::EFeedbackResult::eResult_Cancel);
+	RuleEditDlg dlg(m_rules);
+	if(dlg.DoModal() == IDOK)
+	{
+		m_rules = dlg.GetRules();
+	}
 }
+
+void CFeedbackNotEnoughSpaceDlg::OnBnPause()
+{
+	EndDialog(chengine::EFeedbackResult::eResult_Pause);
+}