[Winmerge-svn] SF.net SVN: winmerge: [3850] branches/R2_6/Src
Windows visual diff and merge for files and directories
Brought to you by:
christianlist,
grimmdp
From: <ki...@us...> - 2006-11-26 11:29:15
|
Revision: 3850 http://svn.sourceforge.net/winmerge/?rev=3850&view=rev Author: kimmov Date: 2006-11-26 03:29:07 -0800 (Sun, 26 Nov 2006) Log Message: ----------- PATCH: [ 1602365 ] Move SelectFile and SelectFolder routines to separate file Modified Paths: -------------- branches/R2_6/Src/Changes.txt branches/R2_6/Src/Common/PreferencesDlg.cpp branches/R2_6/Src/DirActions.cpp branches/R2_6/Src/DirCmpReportDlg.cpp branches/R2_6/Src/FileFiltersDlg.cpp branches/R2_6/Src/MainFrm.cpp branches/R2_6/Src/Merge.cpp branches/R2_6/Src/Merge.dsp branches/R2_6/Src/Merge.h branches/R2_6/Src/MergeDoc.cpp branches/R2_6/Src/OpenDlg.cpp branches/R2_6/Src/PatchDlg.cpp branches/R2_6/Src/ProjectFilePathsDlg.cpp branches/R2_6/Src/PropRegistry.cpp branches/R2_6/Src/PropVss.cpp Added Paths: ----------- branches/R2_6/Src/FileOrFolderSelect.cpp branches/R2_6/Src/FileOrFolderSelect.h Modified: branches/R2_6/Src/Changes.txt =================================================================== --- branches/R2_6/Src/Changes.txt 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/Changes.txt 2006-11-26 11:29:07 UTC (rev 3850) @@ -2,6 +2,14 @@ Add new items to top. (This summarizes all changes to all files under Src, including Src\Languages.) +2006-11-26 Kimmo + PATCH: [ 1602365 ] Move SelectFile and SelectFolder routines to separate file + Src: DirActions.cpp DirCmpReportDlg.cpp FileFiltersDlg.cpp MainFrm.cpp Merge.cpp + Merge.dsp Merge.h MergeDoc.cpp OpenDlg.cpp PatchDlg.cpp ProjectFilePathsDlg.cpp + PropRegistry.cpp PropVss.cpp + Src/Common: PreferencesDlg.cpp + Src new files: FileOrFolderSelect.cpp FileOrFolderSelect.h + 2006-11-25 Kimmo PATCH: [ 1596692 ] Change the way modified docs are saved to fix several issues Src: MainFrm.cpp MergeDiffDetailView.cpp MergeDoc.cpp MergeDoc.h Modified: branches/R2_6/Src/Common/PreferencesDlg.cpp =================================================================== --- branches/R2_6/Src/Common/PreferencesDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/Common/PreferencesDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -18,7 +18,7 @@ #include "PreferencesDlg.h" #include "MainFrm.h" #include "coretools.h" //SplitFilename() -#include "Merge.h" // SelectFile() +#include "FileOrFolderSelect.h" #include "winclasses.h" #include "wclassdefines.h" Modified: branches/R2_6/Src/DirActions.cpp =================================================================== --- branches/R2_6/Src/DirActions.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/DirActions.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -32,6 +32,7 @@ #include "FileActionScript.h" #include "LoadSaveCodepageDlg.h" #include "IntToIntMap.h" +#include "FileOrFolderSelect.h" #ifdef _DEBUG #define new DEBUG_NEW Modified: branches/R2_6/Src/DirCmpReportDlg.cpp =================================================================== --- branches/R2_6/Src/DirCmpReportDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/DirCmpReportDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -9,11 +9,11 @@ // #include "stdafx.h" -#include "Merge.h" #include "Coretools.h" #include "DirCmpReportDlg.h" #include "DirReportTypes.h" #include "paths.h" +#include "FileOrFolderSelect.h" IMPLEMENT_DYNAMIC(DirCmpReportDlg, CDialog) Modified: branches/R2_6/Src/FileFiltersDlg.cpp =================================================================== --- branches/R2_6/Src/FileFiltersDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/FileFiltersDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -32,6 +32,7 @@ #include "paths.h" #include "SharedFilterDlg.h" #include "TestFilterDlg.h" +#include "FileOrFolderSelect.h" #ifdef _DEBUG #define new DEBUG_NEW Added: branches/R2_6/Src/FileOrFolderSelect.cpp =================================================================== --- branches/R2_6/Src/FileOrFolderSelect.cpp (rev 0) +++ branches/R2_6/Src/FileOrFolderSelect.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -0,0 +1,176 @@ +///////////////////////////////////////////////////////////////////////////// +// WinMerge: an interactive diff/merge utility +// Copyright (C) 1997-2000 Thingamahoochie Software +// Author: Dean Grimm +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// 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 General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +///////////////////////////////////////////////////////////////////////////// +/** + * @file FileOrFolderSelect.cpp + * + * @brief Implementation of the file and folder selection routines. + */ + +#include "stdafx.h" +#include "FileOrFolderSelect.h" +#include "coretools.h" +#include "paths.h" + +/** + * @brief Helper function for selecting dir/file + * @param [in] parent Handle to parent window. Can be a NULL, but then + * CMainFrame is used which can cause modality problems. + * @param [out] path Selected path is returned in this string + * @param [in] initialPath Initial path (and file) shown when dialog is opened + * @param [in] title Title for path selection dialog + * @param [in] filterid 0 or STRING ID for filter string + * - 0 means "All files (*.*)" + * @param [in] is_open Selects Open/Save -dialog + */ +BOOL SelectFile(HWND parent, CString& path, LPCTSTR initialPath /*=NULL*/, + LPCTSTR title /*= _T("Open")*/, UINT filterid /*=0*/, + BOOL is_open /*=TRUE*/) +{ + path.Empty(); // Clear output param + + // This will tell common file dialog what to show + // and also this will hold its return value + CString sSelectedFile; + + // check if specified path is a file + if (initialPath && initialPath[0]) + { + // If initial path info includes a file + // we put the bare filename into sSelectedFile + // so the common file dialog will start up with that file selected + if (paths_DoesPathExist(initialPath) == IS_EXISTING_FILE) + { + SplitFilename(initialPath, 0, &sSelectedFile, 0); + } + } + + if (parent == NULL) + parent = AfxGetMainWnd()->GetSafeHwnd(); + + if (!filterid) + filterid = IDS_ALLFILES; + CString filters = LoadResString(filterid); + + // Convert extension mask from MFC style separators ('|') + // to Win32 style separators ('\0') + LPTSTR filtersStr = filters.GetBuffer(0); + ConvertFilter(filtersStr); + filters.ReleaseBuffer(); + + OPENFILENAME ofn; + memset(&ofn, 0, sizeof(ofn)); + ofn.lStructSize = sizeof(ofn); + ofn.hwndOwner = parent; + ofn.lpstrFilter = filtersStr; + ofn.lpstrCustomFilter = NULL; + ofn.nFilterIndex = 1; + ofn.lpstrFile = sSelectedFile.GetBuffer(MAX_PATH); + ofn.nMaxFile = MAX_PATH; + ofn.lpstrInitialDir = initialPath; + ofn.lpstrTitle = title; + ofn.lpstrFileTitle = NULL; + ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST; + + BOOL bRetVal = FALSE; + if (is_open) + bRetVal = GetOpenFileName(&ofn); + else + bRetVal = GetSaveFileName(&ofn); + // common file dialog populated sSelectedFile variable's buffer + sSelectedFile.ReleaseBuffer(); + SetCurrentDirectory(paths_GetWindowsDirectory()); // Free handle held by GetOpenFileName + + if (bRetVal) + path = sSelectedFile; + + return bRetVal; +} + +/** + * @brief Helper function for selecting directory + * @param [out] path Selected path is returned in this string + * @param [in] root_path Initial path shown when dialog is opened + * @param [in] title Title for path selection dialog + * @param [in] hwndOwner Handle to owner window or NULL + * @return TRUE if valid folder selected (not cancelled) + */ +BOOL SelectFolder(CString& path, LPCTSTR root_path /*=NULL*/, + LPCTSTR title /*=NULL*/, + HWND hwndOwner /*=NULL*/) +{ + UNREFERENCED_PARAMETER(root_path); + BROWSEINFO bi; + LPMALLOC pMalloc; + LPITEMIDLIST pidl; + TCHAR szPath[MAX_PATH] = {0}; + BOOL bRet = FALSE; + + bi.hwndOwner = hwndOwner; + bi.pidlRoot = NULL; // Start from desktop folder + bi.pszDisplayName = szPath; + bi.lpszTitle = title; + bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; + bi.lpfn = NULL; + bi.lParam = NULL; + + pidl = SHBrowseForFolder(&bi); + + if (pidl) + { + if (SHGetPathFromIDList(pidl, szPath)) + { + path = szPath; + bRet = TRUE; + } + + SHGetMalloc(&pMalloc); + pMalloc->Free(pidl); + pMalloc->Release(); + } + return bRet; +} + +/** + * @brief Helper function for converting filter format. + * + * MFC functions separate filter strings with | char which is also + * good choice to safe into resource. But WinAPI32 functions we use + * needs '\0' as separator. This function replaces '|'s with '\0's. + * + * @param [in,out] filterStr + * - in Mask string to convert + * - out Converted string + */ +void ConvertFilter(LPTSTR filterStr) +{ + TCHAR *ch = 0; + TCHAR *strPtr = filterStr; + do + { + ch = _tcschr(strPtr, '|'); + if (ch) + { + strPtr = ch + 1; + *ch = '\0'; + } + } + while (ch != 0); +} Added: branches/R2_6/Src/FileOrFolderSelect.h =================================================================== --- branches/R2_6/Src/FileOrFolderSelect.h (rev 0) +++ branches/R2_6/Src/FileOrFolderSelect.h 2006-11-26 11:29:07 UTC (rev 3850) @@ -0,0 +1,40 @@ +///////////////////////////////////////////////////////////////////////////// +// WinMerge: an interactive diff/merge utility +// Copyright (C) 1997-2006 Thingamahoochie Software +// Author: Dean Grimm +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// 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 General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +// +///////////////////////////////////////////////////////////////////////////// +/** + * @file FileOrFolderSelect.h + * + * @brief Declaration of the file and folder selection routines. + */ + +#ifndef _FILE_OR_FOLDER_SELECTION_H_ +#define _FILE_OR_FOLDER_SELECTION_H_ + +BOOL SelectFile(HWND parent, CString& path, LPCTSTR root_path = NULL, + LPCTSTR title = _T("Open"), UINT filterid = 0, + BOOL is_open =TRUE); + +BOOL SelectFolder(CString& path, LPCTSTR root_path = NULL, + LPCTSTR title = NULL, + HWND hwndOwner = NULL); + +void ConvertFilter(LPTSTR filterStr); + +#endif \ No newline at end of file Modified: branches/R2_6/Src/MainFrm.cpp =================================================================== --- branches/R2_6/Src/MainFrm.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/MainFrm.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -69,6 +69,7 @@ #include "PreferencesDlg.h" #include "AppSerialize.h" #include "ProjectFilePathsDlg.h" +#include "FileOrFolderSelect.h" /* One source file must compile the stubs for multimonitor Modified: branches/R2_6/Src/Merge.cpp =================================================================== --- branches/R2_6/Src/Merge.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/Merge.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -368,152 +368,7 @@ ///////////////////////////////////////////////////////////////////////////// // CMergeApp commands -/** - * @brief Helper function for selecting dir/file - * @param [in] parent Handle to parent window. Can be a NULL, but then - * CMainFrame is used which can cause modality problems. - * @param [out] path Selected path is returned in this string - * @param [in] initialPath Initial path (and file) shown when dialog is opened - * @param [in] title Title for path selection dialog - * @param [in] filterid 0 or STRING ID for filter string - * - 0 means "All files (*.*)" - * @param [in] is_open Selects Open/Save -dialog - */ -BOOL SelectFile(HWND parent, CString& path, LPCTSTR initialPath /*=NULL*/, - LPCTSTR title /*= _T("Open")*/, UINT filterid /*=0*/, - BOOL is_open /*=TRUE*/) -{ - path.Empty(); // Clear output param - // This will tell common file dialog what to show - // and also this will hold its return value - CString sSelectedFile; - - // check if specified path is a file - if (initialPath && initialPath[0]) - { - // If initial path info includes a file - // we put the bare filename into sSelectedFile - // so the common file dialog will start up with that file selected - if (paths_DoesPathExist(initialPath) == IS_EXISTING_FILE) - { - SplitFilename(initialPath, 0, &sSelectedFile, 0); - } - } - - if (parent == NULL) - parent = AfxGetMainWnd()->GetSafeHwnd(); - - if (!filterid) - filterid = IDS_ALLFILES; - CString filters = LoadResString(filterid); - - // Convert extension mask from MFC style separators ('|') - // to Win32 style separators ('\0') - LPTSTR filtersStr = filters.GetBuffer(0); - ConvertFilter(filtersStr); - filters.ReleaseBuffer(); - - OPENFILENAME ofn; - memset(&ofn, 0, sizeof(ofn)); - ofn.lStructSize = sizeof(ofn); - ofn.hwndOwner = parent; - ofn.lpstrFilter = filtersStr; - ofn.lpstrCustomFilter = NULL; - ofn.nFilterIndex = 1; - ofn.lpstrFile = sSelectedFile.GetBuffer(MAX_PATH); - ofn.nMaxFile = MAX_PATH; - ofn.lpstrInitialDir = initialPath; - ofn.lpstrTitle = title; - ofn.lpstrFileTitle = NULL; - ofn.Flags = OFN_OVERWRITEPROMPT | OFN_HIDEREADONLY | OFN_PATHMUSTEXIST; - - BOOL bRetVal = FALSE; - if (is_open) - bRetVal = GetOpenFileName(&ofn); - else - bRetVal = GetSaveFileName(&ofn); - // common file dialog populated sSelectedFile variable's buffer - sSelectedFile.ReleaseBuffer(); - SetCurrentDirectory(paths_GetWindowsDirectory()); // Free handle held by GetOpenFileName - - if (bRetVal) - path = sSelectedFile; - - return bRetVal; -} - -/** - * @brief Helper function for selecting directory - * @param [out] path Selected path is returned in this string - * @param [in] root_path Initial path shown when dialog is opened - * @param [in] title Title for path selection dialog - * @param [in] hwndOwner Handle to owner window or NULL - * @return TRUE if valid folder selected (not cancelled) - */ -BOOL SelectFolder(CString& path, LPCTSTR root_path /*=NULL*/, - LPCTSTR title /*=NULL*/, - HWND hwndOwner /*=NULL*/) -{ - UNREFERENCED_PARAMETER(root_path); - BROWSEINFO bi; - LPMALLOC pMalloc; - LPITEMIDLIST pidl; - TCHAR szPath[MAX_PATH] = {0}; - BOOL bRet = FALSE; - - bi.hwndOwner = hwndOwner; - bi.pidlRoot = NULL; // Start from desktop folder - bi.pszDisplayName = szPath; - bi.lpszTitle = title; - bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI; - bi.lpfn = NULL; - bi.lParam = NULL; - - pidl = SHBrowseForFolder(&bi); - - if (pidl) - { - if (SHGetPathFromIDList(pidl, szPath)) - { - path = szPath; - bRet = TRUE; - } - - SHGetMalloc(&pMalloc); - pMalloc->Free(pidl); - pMalloc->Release(); - } - return bRet; -} - -/** - * @brief Helper function for converting filter format. - * - * MFC functions separate filter strings with | char which is also - * good choice to safe into resource. But WinAPI32 functions we use - * needs '\0' as separator. This function replaces '|'s with '\0's. - * - * @param [in,out] filterStr - * - in Mask string to convert - * - out Converted string - */ -void ConvertFilter(LPTSTR filterStr) -{ - TCHAR *ch = 0; - TCHAR *strPtr = filterStr; - do - { - ch = _tcschr(strPtr, '|'); - if (ch) - { - strPtr = ch + 1; - *ch = '\0'; - } - } - while (ch != 0); -} - BOOL CMergeApp::PreTranslateMessage(MSG* pMsg) { // CG: The following lines were added by the Splash Screen component. Modified: branches/R2_6/Src/Merge.dsp =================================================================== --- branches/R2_6/Src/Merge.dsp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/Merge.dsp 2006-11-26 11:29:07 UTC (rev 3850) @@ -421,6 +421,10 @@ # End Source File # Begin Source File +SOURCE=.\FileOrFolderSelect.cpp +# End Source File +# Begin Source File + SOURCE=.\FilepathEdit.cpp # End Source File # Begin Source File @@ -1145,6 +1149,10 @@ # End Source File # Begin Source File +SOURCE=.\FileOrFolderSelect.h +# End Source File +# Begin Source File + SOURCE=.\FilepathEdit.h # End Source File # Begin Source File Modified: branches/R2_6/Src/Merge.h =================================================================== --- branches/R2_6/Src/Merge.h 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/Merge.h 2006-11-26 11:29:07 UTC (rev 3850) @@ -119,16 +119,7 @@ ///////////////////////////////////////////////////////////////////////////// CMergeDoc *GetDoc(); -BOOL SelectFile(HWND parent, CString& path, LPCTSTR root_path = NULL, - LPCTSTR title = _T("Open"), UINT filterid = 0, - BOOL is_open =TRUE); -BOOL SelectFolder(CString& path, LPCTSTR root_path = NULL, - LPCTSTR title = NULL, - HWND hwndOwner = NULL); - -void ConvertFilter(LPTSTR filterStr); - //{{AFX_INSERT_LOCATION}} // Microsoft Developer Studio will insert additional declarations immediately before the previous line. Modified: branches/R2_6/Src/MergeDoc.cpp =================================================================== --- branches/R2_6/Src/MergeDoc.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/MergeDoc.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -62,6 +62,7 @@ #include "OptionsMgr.h" #include "ProjectFile.h" #include "MergeLineFlags.h" +#include "FileOrFolderSelect.h" #ifdef _DEBUG #define new DEBUG_NEW Modified: branches/R2_6/Src/OpenDlg.cpp =================================================================== --- branches/R2_6/Src/OpenDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/OpenDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -40,6 +40,7 @@ #include "MainFrm.h" #include "OptionsMgr.h" #include "dlgutil.h" +#include "FileOrFolderSelect.h" #ifdef COMPILE_MULTIMON_STUBS #undef COMPILE_MULTIMON_STUBS Modified: branches/R2_6/Src/PatchDlg.cpp =================================================================== --- branches/R2_6/Src/PatchDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/PatchDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -29,6 +29,7 @@ #include "coretools.h" #include "paths.h" #include "CompareOptions.h" +#include "FileOrFolderSelect.h" #ifdef _DEBUG #define new DEBUG_NEW Modified: branches/R2_6/Src/ProjectFilePathsDlg.cpp =================================================================== --- branches/R2_6/Src/ProjectFilePathsDlg.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/ProjectFilePathsDlg.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -14,6 +14,7 @@ #include "ProjectFile.h" #include "coretools.h" #include "ProjectFilePathsDlg.h" +#include "FileOrFolderSelect.h" #ifdef _DEBUG #define new DEBUG_NEW Modified: branches/R2_6/Src/PropRegistry.cpp =================================================================== --- branches/R2_6/Src/PropRegistry.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/PropRegistry.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -27,7 +27,7 @@ #include "PropRegistry.h" #include "RegKey.h" #include "coretools.h" -#include "Merge.h" // SelectFile() +#include "FileOrFolderSelect.h" #include "MainFrm.h" // GetDefaultEditor() #include "OptionsDef.h" #include "OptionsMgr.h" Modified: branches/R2_6/Src/PropVss.cpp =================================================================== --- branches/R2_6/Src/PropVss.cpp 2006-11-25 23:30:46 UTC (rev 3849) +++ branches/R2_6/Src/PropVss.cpp 2006-11-26 11:29:07 UTC (rev 3850) @@ -22,7 +22,7 @@ // #include "stdafx.h" -#include "merge.h" +#include "FileOrFolderSelect.h" #include "MainFrm.h" // VCS_* constants #include "PropVss.h" #include "OptionsDef.h" This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |