Просмотр исходного кода

Save files for compare as utf8 (#786)

sabrogden 1 год назад
Родитель
Сommit
cc8ae2aeec
7 измененных файлов с 48 добавлено и 10 удалено
  1. 11 1
      AdvGeneral.cpp
  2. 9 2
      Clip.cpp
  3. 1 1
      Clip.h
  4. 13 5
      ClipCompare.cpp
  5. 1 1
      ClipCompare.h
  6. 10 0
      Options.cpp
  7. 3 0
      Options.h

+ 11 - 1
AdvGeneral.cpp

@@ -150,7 +150,8 @@ END_MESSAGE_MAP()
 #define SETTING_RTF_EDITOR_PATH 99
 #define SETTING_UPDATE_DESC_ON_CLIP_EDIT 100
 #define SETTING_QR_CODE_URL 101
-#define SETTING_APPEND_NAME_IP 120
+#define SETTING_APPEND_NAME_IP 102
+#define SETTING_USE_UTF8_FOR_DIFF 103
 
 BOOL CAdvGeneral::OnInitDialog()
 {
@@ -203,6 +204,8 @@ BOOL CAdvGeneral::OnInitDialog()
 	CMFCPropertyGridFileProperty* pDiffProp = new CMFCPropertyGridFileProperty(_T("Diff application path"), TRUE, CGetSetOptions::GetDiffApp(), _T("exe"), 0, szDiffFilter, (LPCTSTR)0, SETTING_DIFF_APP);
 	pGroupTest->AddSubItem(pDiffProp);
 
+	AddTrueFalse(pGroupTest, _T("Diff save compare files as utf8"), CGetSetOptions::GetPreferUtf8ForCompare(), SETTING_USE_UTF8_FOR_DIFF);
+
 	AddTrueFalse(pGroupTest, _T("Disable friends"), !CGetSetOptions::GetAllowFriends(), SETTING_DISABLE_FRIENDS);
 
 	AddTrueFalse(pGroupTest, _T("Display icon in system tray"), CGetSetOptions::GetShowIconInSysTray(), SETTING_SHOW_TASKBAR_ICON);
@@ -908,6 +911,13 @@ void CAdvGeneral::OnBnClickedOk()
 					CGetSetOptions::SetAppendRemoveComputerNameAndIPToDescription(val);
 				}
 				break;
+			case SETTING_USE_UTF8_FOR_DIFF:
+				if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
+				{
+					BOOL val = wcscmp(pNewValue->bstrVal, L"True") == 0;
+					CGetSetOptions::SetPreferUtf8ForCompare(val);
+				}
+				break;
 			}
 		}
 	}

+ 9 - 2
Clip.cpp

@@ -1734,7 +1734,7 @@ BOOL CClip::ContainsClipFormat(CLIPFORMAT clipFormat)
 	return this->Clips()->FindFormatEx(clipFormat) != NULL;
 }
 
-BOOL CClip::WriteTextToFile(CString path, BOOL unicode, BOOL asci, BOOL rtf, BOOL forceUnicode)
+BOOL CClip::WriteTextToFile(CString path, BOOL unicode, BOOL asci, BOOL rtf, BOOL forceUnicode, BOOL utf8)
 {
 	BOOL ret = false;
 
@@ -1745,7 +1745,14 @@ BOOL CClip::WriteTextToFile(CString path, BOOL unicode, BOOL asci, BOOL rtf, BOO
 		CStringA a = GetCFTextTextFormat();
 		CStringA rtfA = GetRTFTextFormat();		
 
-		if(unicode && (w != _T("") || forceUnicode))
+		if (utf8 && w != _T(""))
+		{
+			CStringA utf8Data = CTextConvert::UnicodeToUTF8(w);
+			f.Write(utf8Data.GetBuffer(), utf8Data.GetLength());
+
+			ret = true;
+		}
+		else if(unicode && (w != _T("") || forceUnicode))
 		{
 			std::byte header[2];
 			header[0] = (std::byte)0xFF;

+ 1 - 1
Clip.h

@@ -193,7 +193,7 @@ public:
 
 	BOOL ContainsClipFormat(CLIPFORMAT clipFormat);
 
-	BOOL WriteTextToFile(CString path, BOOL unicode, BOOL asci, BOOL rtf, BOOL forceUnicode = FALSE);
+	BOOL WriteTextToFile(CString path, BOOL unicode, BOOL asci, BOOL rtf, BOOL forceUnicode = FALSE, BOOL utf8 = FALSE);
 	BOOL WriteImageToFile(CString path);
 	BOOL WriteTextToHtmlFile(CString path);
 

+ 13 - 5
ClipCompare.cpp

@@ -23,10 +23,18 @@ void CClipCompare::Compare(int leftId, int rightId)
 		{
 			bool saveW = true;
 			bool saveA = true;
+			bool saveUtf8 = true;
+
+			if (CGetSetOptions::GetPreferUtf8ForCompare() == FALSE)
+			{
+				Log(StrF(_T("CClipCompare::Compare, option is set to not use utf8")));
+				saveUtf8 = false;
+			}
 			
 			if(leftClip.GetUnicodeTextFormat() == _T("") || rightClip.GetUnicodeTextFormat() == _T(""))
 			{
 				saveW = false;
+				saveUtf8 = false;
 			}
 
 			if(leftClip.GetCFTextTextFormat() == "" || rightClip.GetCFTextTextFormat() == "")
@@ -34,10 +42,10 @@ void CClipCompare::Compare(int leftId, int rightId)
 				saveA = false;
 			}
 
-			if(saveW || saveA)
+			if(saveW || saveA || saveUtf8)
 			{
-				CString leftFile = SaveToFile(leftId, &leftClip, saveW, saveA);
-				CString rightFile = SaveToFile(rightId, &rightClip, saveW, saveA);
+				CString leftFile = SaveToFile(leftId, &leftClip, saveW, saveA, saveUtf8);
+				CString rightFile = SaveToFile(rightId, &rightClip, saveW, saveA, saveUtf8);
 
 				CString params = _T("");
 				CString path = GetComparePath(params);
@@ -192,7 +200,7 @@ CString CClipCompare::GetComparePath(CString &params)
 	return _T("");
 }
 
-CString CClipCompare::SaveToFile(int id, CClip *pClip, bool saveW, bool SaveA)
+CString CClipCompare::SaveToFile(int id, CClip *pClip, bool saveW, bool saveA, bool saveUtf8)
 {
 	CString path;
 	CString pathCompare = CGetSetOptions::GetPath(PATH_CLIP_DIFF);
@@ -219,7 +227,7 @@ CString CClipCompare::SaveToFile(int id, CClip *pClip, bool saveW, bool SaveA)
 	if(path != _T("") && 
 		pClip != NULL)
 	{
-		pClip->WriteTextToFile(path, saveW, SaveA, false);
+		pClip->WriteTextToFile(path, saveW, saveA, FALSE, FALSE, saveUtf8);
 	}
 
 	return path;

+ 1 - 1
ClipCompare.h

@@ -10,7 +10,7 @@ public:
 	void Compare(int leftId, int rightId);
 
 protected:
-	CString SaveToFile(int id, CClip *clip, bool saveW, bool SaveA);
+	CString SaveToFile(int id, CClip *clip, bool saveW, bool SaveA, bool saveUtf8);
 	CString GetComparePath(CString &params);
 };
 

+ 10 - 0
Options.cpp

@@ -3128,4 +3128,14 @@ void CGetSetOptions::SetAppendRemoveComputerNameAndIPToDescription(BOOL val)
 BOOL CGetSetOptions::GetAppendRemoveComputerNameAndIPToDescription()
 {
 	return GetProfileLong("AppendRemoveComputerNameAndIPToDescription", TRUE);
+}
+
+void CGetSetOptions::SetPreferUtf8ForCompare(BOOL val)
+{
+	SetProfileLong("PreferUtf8ForCompare", val);
+}
+
+BOOL CGetSetOptions::GetPreferUtf8ForCompare()
+{
+	return GetProfileLong("PreferUtf8ForCompare", TRUE);
 }

+ 3 - 0
Options.h

@@ -701,6 +701,9 @@ public:
 
 	static void SetAppendRemoveComputerNameAndIPToDescription(BOOL val);
 	static BOOL GetAppendRemoveComputerNameAndIPToDescription();
+
+	static void SetPreferUtf8ForCompare(BOOL val);
+	static BOOL GetPreferUtf8ForCompare();
 };
 
 // global for easy access and for initialization of fast access variables