// TortoiseSVN - a Windows shell extension for easy version control\r
\r
-// Copyright (C) 2003-2008 - TortoiseSVN\r
+// Copyright (C) 2003-2009 - TortoiseSVN\r
\r
// This program is free software; you can redistribute it and/or\r
// modify it under the terms of the GNU General Public License\r
break;\r
case WM_CLOSE:\r
{\r
- CRegStdWORD w = CRegStdWORD(_T("Software\\TortoiseGit\\UDiffViewerWidth"), (DWORD)CW_USEDEFAULT);\r
- CRegStdWORD h = CRegStdWORD(_T("Software\\TortoiseGit\\UDiffViewerHeight"), (DWORD)CW_USEDEFAULT);\r
- CRegStdWORD p = CRegStdWORD(_T("Software\\TortoiseGit\\UDiffViewerPos"), 0);\r
+ CRegStdDWORD w = CRegStdDWORD(_T("Software\\TortoiseGit\\UDiffViewerWidth"), (DWORD)CW_USEDEFAULT);\r
+ CRegStdDWORD h = CRegStdDWORD(_T("Software\\TortoiseGit\\UDiffViewerHeight"), (DWORD)CW_USEDEFAULT);\r
+ CRegStdDWORD p = CRegStdDWORD(_T("Software\\TortoiseGit\\UDiffViewerPos"), 0);\r
\r
RECT rect;\r
::GetWindowRect(*this, &rect);\r
{\r
switch (id) \r
{\r
+ case ID_FILE_OPEN:\r
+ {\r
+ OPENFILENAME ofn = {0}; // common dialog box structure\r
+ TCHAR szFile[MAX_PATH] = {0}; // buffer for file name\r
+ // Initialize OPENFILENAME\r
+ ofn.lStructSize = sizeof(OPENFILENAME);\r
+ ofn.hwndOwner = *this;\r
+ ofn.lpstrFile = szFile;\r
+ ofn.nMaxFile = sizeof(szFile)/sizeof(TCHAR);\r
+ TCHAR filter[1024];\r
+ LoadString(hResource, IDS_PATCHFILEFILTER, filter, sizeof(filter)/sizeof(TCHAR));\r
+ TCHAR * pszFilters = filter;\r
+ // Replace '|' delimiters with '\0's\r
+ TCHAR *ptr = pszFilters + _tcslen(pszFilters); //set ptr at the NULL\r
+ while (ptr != pszFilters)\r
+ {\r
+ if (*ptr == '|')\r
+ *ptr = '\0';\r
+ ptr--;\r
+ }\r
+ ofn.lpstrFilter = pszFilters;\r
+ ofn.nFilterIndex = 1;\r
+ ofn.lpstrFileTitle = NULL;\r
+ ofn.nMaxFileTitle = 0;\r
+ ofn.lpstrInitialDir = NULL;\r
+ TCHAR opentitle[1024];\r
+ LoadString(hResource, IDS_OPENPATCH, opentitle, sizeof(opentitle)/sizeof(TCHAR));\r
+ ofn.lpstrTitle = opentitle;\r
+ ofn.Flags = OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST | OFN_ENABLESIZING | OFN_EXPLORER;\r
+ // Display the Open dialog box. \r
+ if (GetOpenFileName(&ofn)==TRUE)\r
+ {\r
+ LoadFile(ofn.lpstrFile);\r
+ }\r
+ }\r
+ break;\r
+ case ID_FILE_SAVEAS:\r
+ {\r
+ OPENFILENAME ofn = {0}; // common dialog box structure\r
+ TCHAR szFile[MAX_PATH] = {0}; // buffer for file name\r
+ // Initialize OPENFILENAME\r
+ ofn.lStructSize = sizeof(OPENFILENAME);\r
+ ofn.hwndOwner = *this;\r
+ ofn.lpstrFile = szFile;\r
+ ofn.nMaxFile = sizeof(szFile)/sizeof(TCHAR);\r
+ TCHAR filter[1024];\r
+ LoadString(hResource, IDS_PATCHFILEFILTER, filter, sizeof(filter)/sizeof(TCHAR));\r
+ TCHAR * pszFilters = filter;\r
+ // Replace '|' delimiters with '\0's\r
+ TCHAR *ptr = pszFilters + _tcslen(pszFilters); //set ptr at the NULL\r
+ while (ptr != pszFilters)\r
+ {\r
+ if (*ptr == '|')\r
+ *ptr = '\0';\r
+ ptr--;\r
+ }\r
+ ofn.lpstrFilter = pszFilters;\r
+ ofn.nFilterIndex = 1;\r
+ ofn.lpstrFileTitle = NULL;\r
+ ofn.nMaxFileTitle = 0;\r
+ ofn.lpstrInitialDir = NULL;\r
+ TCHAR savetitle[1024];\r
+ LoadString(hResource, IDS_SAVEPATCH, savetitle, sizeof(savetitle)/sizeof(TCHAR));\r
+ ofn.lpstrTitle = savetitle;\r
+ ofn.Flags = OFN_OVERWRITEPROMPT | OFN_ENABLESIZING | OFN_EXPLORER;\r
+ // Display the Open dialog box. \r
+ if (GetSaveFileName(&ofn)==TRUE)\r
+ {\r
+ SaveFile(ofn.lpstrFile);\r
+ }\r
+ }\r
+ break;\r
case ID_FILE_EXIT:\r
::PostQuitMessage(0);\r
return 0;\r
\r
bool CMainWindow::Initialize()\r
{\r
- CRegStdWORD pos(_T("Software\\TortoiseGit\\UDiffViewerPos"), 0);\r
- CRegStdWORD width(_T("Software\\TortoiseGit\\UDiffViewerWidth"), (DWORD)640);\r
- CRegStdWORD height(_T("Software\\TortoiseGit\\UDiffViewerHeight"), (DWORD)480);\r
+ CRegStdDWORD pos(_T("Software\\TortoiseGit\\UDiffViewerPos"), 0);\r
+ CRegStdDWORD width(_T("Software\\TortoiseGit\\UDiffViewerWidth"), (DWORD)640);\r
+ CRegStdDWORD height(_T("Software\\TortoiseGit\\UDiffViewerHeight"), (DWORD)480);\r
if (DWORD(pos) && DWORD(width) && DWORD(height))\r
{\r
RECT rc;\r
// Reusing TortoiseBlame's setting which already have an user friendly\r
// pane in TortoiseSVN's Settings dialog, while there is no such\r
// pane for TortoiseUDiff.\r
- CRegStdWORD(_T("Software\\TortoiseGit\\BlameFontSize"), 10),\r
+ CRegStdDWORD(_T("Software\\TortoiseGit\\BlameFontSize"), 10),\r
WideToMultibyte(CRegStdString(_T("Software\\TortoiseGit\\BlameFontName"), _T("Courier New"))).c_str());\r
SendEditor(SCI_SETTABWIDTH, 4);\r
SendEditor(SCI_SETREADONLY, TRUE);\r
{\r
//SetTitle();\r
char data[4096];\r
- int lenFile = fread(data, 1, sizeof(data), fp);\r
+ size_t lenFile = fread(data, 1, sizeof(data), fp);\r
bool bUTF8 = IsUTF8(data, lenFile);\r
while (lenFile > 0) \r
{\r
SendEditor(EM_EMPTYUNDOBUFFER);\r
SendEditor(SCI_SETSAVEPOINT);\r
SendEditor(SCI_GOTOPOS, 0);\r
- SendEditor(SCI_SETREADONLY, TRUE);\r
\r
SendEditor(SCI_CLEARDOCUMENTSTYLE, 0, 0);\r
SendEditor(SCI_SETSTYLEBITS, 5, 0);\r
return true;\r
}\r
\r
+bool CMainWindow::SaveFile(LPCTSTR filename)\r
+{\r
+ FILE *fp = NULL;\r
+ _tfopen_s(&fp, filename, _T("w+b"));\r
+ if (fp) \r
+ {\r
+ int len = SendEditor(SCI_GETTEXT, 0, 0);\r
+ char * data = new char[len+1];\r
+ SendEditor(SCI_GETTEXT, len, (LPARAM)data);\r
+ fwrite(data, sizeof(char), len-1, fp);\r
+ fclose(fp);\r
+ }\r
+ else \r
+ {\r
+ return false;\r
+ }\r
+\r
+ SendEditor(SCI_SETSAVEPOINT);\r
+ ::ShowWindow(m_hWndEdit, SW_SHOW);\r
+ return true;\r
+}\r
+\r
void CMainWindow::SetTitle(LPCTSTR title)\r
{\r
- int len = _tcslen(title);\r
+ size_t len = _tcslen(title);\r
TCHAR * pBuf = new TCHAR[len+40];\r
_stprintf_s(pBuf, len+40, _T("%s - TortoiseUDiff"), title);\r
SetWindowTitle(std::wstring(pBuf));\r
SendEditor(SCI_STYLESETFONT, style, reinterpret_cast<LPARAM>(face));\r
}\r
\r
-bool CMainWindow::IsUTF8(LPVOID pBuffer, int cb)\r
+bool CMainWindow::IsUTF8(LPVOID pBuffer, size_t cb)\r
{\r
if (cb < 2)\r
return true;\r
UINT8 * pVal2 = (UINT8 *)(pVal+1);\r
// scan the whole buffer for a 0x0000 sequence\r
// if found, we assume a binary file\r
- for (int i=0; i<(cb-2); i=i+2)\r
+ for (size_t i=0; i<(cb-2); i=i+2)\r
{\r
if (0x0000 == *pVal++)\r
return false;\r
}\r
// check for illegal UTF8 chars\r
pVal2 = (UINT8 *)pBuffer;\r
- for (int i=0; i<cb; ++i)\r
+ for (size_t i=0; i<cb; ++i)\r
{\r
if ((*pVal2 == 0xC0)||(*pVal2 == 0xC1)||(*pVal2 >= 0xF5))\r
return false;\r
}\r
pVal2 = (UINT8 *)pBuffer;\r
bool bUTF8 = false;\r
- for (int i=0; i<(cb-3); ++i)\r
+ for (size_t i=0; i<(cb-3); ++i)\r
{\r
if ((*pVal2 & 0xE0)==0xC0)\r
{\r