소스 검색

- backup db on db update
- removed refresh and properties in global clips window
- check for the file "portable" and create settings file if it exists

git-svn-id: svn://svn.code.sf.net/p/ditto-cp/code/trunk@594 595ec19a-5cb4-439b-94a8-42fb3063c22c

sabrogden 14 년 전
부모
커밋
4a94a1828f
12개의 변경된 파일216개의 추가작업 그리고 79개의 파일을 삭제
  1. 4 6
      CP_Main.rc
  2. 6 2
      CP_Main.vcxproj.filters
  3. 44 0
      DatabaseUtilities.cpp
  4. 2 0
      DatabaseUtilities.h
  5. 1 1
      DittoSetup/Build Portable ZIP_10.bat
  6. 34 2
      DittoSetup/BuildDitto.bld
  7. 0 7
      DittoSetup/Ditto.settings
  8. 41 43
      GlobalClips.cpp
  9. 0 2
      GlobalClips.h
  10. 23 5
      Options.cpp
  11. 60 11
      QPasteWnd.cpp
  12. 1 0
      QPasteWnd.h

+ 4 - 6
CP_Main.rc

@@ -719,15 +719,13 @@ BEGIN
     GROUPBOX        "Copy Buffer 3",IDC_BUFFER_GROUP_3,7,139,273,61
 END
 
-IDD_GLOBAL_CLIPS DIALOGEX 0, 0, 369, 202
+IDD_GLOBAL_CLIPS DIALOGEX 0, 0, 369, 199
 STYLE DS_SETFONT | DS_FIXEDSYS | DS_CENTER | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_THICKFRAME
 CAPTION "Global Hot Keys"
 FONT 8, "MS Shell Dlg", 400, 0, 0x1
 BEGIN
-    PUSHBUTTON      "Close",IDCANCEL,312,181,50,14
-    CONTROL         "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,31,355,142
-    PUSHBUTTON      "Refresh",IDC_BUTTON_REFRESH,7,7,34,15
-    PUSHBUTTON      "Properties",IDC_BUTTON_PROPERTIES,43,7,34,15
+    PUSHBUTTON      "Close",IDCANCEL,312,178,50,14
+    CONTROL         "",IDC_LIST2,"SysListView32",LVS_REPORT | LVS_ALIGNLEFT | WS_BORDER | WS_TABSTOP,7,7,355,166
 END
 
 
@@ -914,7 +912,7 @@ BEGIN
         LEFTMARGIN, 7
         RIGHTMARGIN, 362
         TOPMARGIN, 7
-        BOTTOMMARGIN, 195
+        BOTTOMMARGIN, 192
     END
 END
 #endif    // APSTUDIO_INVOKED

+ 6 - 2
CP_Main.vcxproj.filters

@@ -316,10 +316,12 @@
     <ClCompile Include="Misc.cpp">
       <Filter>source</Filter>
     </ClCompile>
-    <ClCompile Include="GlobalClips.cpp" />
     <ClCompile Include="ShowTaskBarIcon.cpp">
       <Filter>source</Filter>
     </ClCompile>
+    <ClCompile Include="GlobalClips.cpp">
+      <Filter>source</Filter>
+    </ClCompile>
   </ItemGroup>
   <ItemGroup>
     <ClInclude Include="sqlite\CppSQLite3.h">
@@ -679,10 +681,12 @@
     <ClInclude Include="TinyXml\tinystr.h">
       <Filter>tineyxml</Filter>
     </ClInclude>
-    <ClInclude Include="GlobalClips.h" />
     <ClInclude Include="ShowTaskBarIcon.h">
       <Filter>header</Filter>
     </ClInclude>
+    <ClInclude Include="GlobalClips.h">
+      <Filter>header</Filter>
+    </ClInclude>
   </ItemGroup>
   <ItemGroup>
     <ResourceCompile Include="CP_Main.rc">

+ 44 - 0
DatabaseUtilities.cpp

@@ -9,6 +9,7 @@
 #include <io.h>
 #include "AccessToSqlite.h"
 #include "Path.h"
+#include "InternetUpdate.h"
 
 //////////////////////////////////////////////////////////////////////
 // Construction/Destruction
@@ -222,9 +223,15 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 {
 	try
 	{
+		BOOL didBackup = FALSE;
+		CString backupFilePrefix = _T("Before_Update_To");
+
 		CppSQLite3DB db;
 		db.open(csPath);
 
+		if(didBackup == FALSE)
+			didBackup = BackupDB(csPath, backupFilePrefix);
+
 		db.execQuery(_T("SELECT lID, lDate, mText, lShortCut, lDontAutoDelete, ")
 								_T("CRC, bIsGroup, lParentID, QuickPasteText ")
 								_T("FROM Main"));
@@ -254,6 +261,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		//This was added later so try to add each time and catch the exception here
  		try
  		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			db.execDML(_T("CREATE TRIGGER delete_data_trigger BEFORE DELETE ON Main FOR EACH ROW\n")
 				_T("BEGIN\n")
 					_T("INSERT INTO MainDeletes VALUES(old.lID, datetime('now'));\n")
@@ -271,6 +281,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		}
 		catch(CppSQLite3Exception& e)
 		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			e.errorCode();
 
 			db.execDML(_T("CREATE TABLE CopyBuffers(")
@@ -286,6 +299,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		}
 		catch(CppSQLite3Exception& e)
 		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			e.errorCode();
 
 			db.execDML(_T("CREATE TABLE MainDeletes(")
@@ -316,6 +332,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		}
 		catch(CppSQLite3Exception& e)
 		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			db.execDML(_T("ALTER TABLE Main ADD clipOrder REAL"));
 			db.execDML(_T("ALTER TABLE Main ADD clipGroupOrder REAL"));
 
@@ -335,6 +354,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		}
 		catch(CppSQLite3Exception& e)
 		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			db.execDML(_T("ALTER TABLE Main ADD globalShortCut INTEGER"));
 
 			e.errorCode();
@@ -346,6 +368,9 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 		}
 		catch(CppSQLite3Exception& e)
 		{
+			if(didBackup == FALSE)
+				didBackup = BackupDB(csPath, backupFilePrefix);
+
 			db.execDML(_T("ALTER TABLE Main ADD lastPasteDate INTEGER"));
 			db.execDML(_T("Update Main set lastPasteDate = lDate"));
 			db.execDMLEx(_T("Update Main set lastPasteDate = %d where lastPasteDate <= 0"), CTime::GetCurrentTime().GetTime());
@@ -358,6 +383,25 @@ BOOL ValidDB(CString csPath, BOOL bUpgrade)
 	return TRUE;                                                     
 }
 
+BOOL BackupDB(CString dbPath, CString prefix)
+{
+	CString backup = GetFilePath(dbPath);
+
+	CInternetUpdate update;
+
+	long runningVersion = update.GetRunningVersion();
+	CString versionString = update.GetVersionString(runningVersion);
+
+	backup += GetFileName(dbPath) += _T("_") + prefix + _T("_") + versionString;
+	backup.Replace(_T(".db"), _T(""));
+	backup.Replace(_T("."), _T("_"));
+	backup +=  + _T(".db");
+
+	BOOL ret = CopyFile(dbPath, backup, TRUE);
+
+	return ret;
+}
+
 BOOL CreateDB(CString csFile)
 {
 	try

+ 2 - 0
DatabaseUtilities.h

@@ -27,6 +27,8 @@ BOOL RemoveOldEntries();
 
 BOOL EnsureDirectory(CString csPath);
 
+BOOL BackupDB(CString dbPath, CString prefix);
+
 //BOOL CopyDownDatabase();
 //BOOL CopyUpDatabase();
 

+ 1 - 1
DittoSetup/Build Portable ZIP_10.bat

@@ -31,7 +31,7 @@ copy mfc-crt64\* Ditto\
 
 copy Changes.txt Ditto\Changes.txt
 
-copy Ditto.Settings Ditto\Ditto.Settings
+copy Ditto.Settings Ditto\portable
 
 copy ..\Help\*.* Ditto\Help\
 copy ..\Debug\language\*.xml Ditto\language\

+ 34 - 2
DittoSetup/BuildDitto.bld

@@ -9,7 +9,7 @@
 			<DelDirs type='11'>-1</DelDirs>
 			<Ext>*</Ext>
 			<HideOn type='11'>-1</HideOn>
-			<LogDel type='11'>-1</LogDel>
+			<LogDel type='11'>0</LogDel>
 			<Path>%workdir%</Path>
 			<Recurse type='11'>-1</Recurse>
 			<SysOn type='11'>-1</SysOn>
@@ -21,7 +21,7 @@
 			<DelDirs type='11'>-1</DelDirs>
 			<Ext>*</Ext>
 			<HideOn type='11'>-1</HideOn>
-			<LogDel type='11'>-1</LogDel>
+			<LogDel type='11'>0</LogDel>
 			<Path>%testBuildWorkDir%</Path>
 			<Recurse type='11'>-1</Recurse>
 			<SysOn type='11'>-1</SysOn>
@@ -205,6 +205,38 @@ DittoSetup*]]></X>
 			<indent type='3'>1</indent>
 			<name>Zip Debug Files</name>
 		</step>
+		<step action='Write File'>
+			<Filename>%workDir%\%branch%\DittoSetup\output\index.php</Filename>
+			<Text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="content-type" content="text/html; charset=utf-8" />
+<title>Ditto clipboard manager - Beta %version%</title>
+<meta name="description" content="" />
+</head>
+
+<body>       
+%DATETIME%
+<br>
+<br>
+<b>Ditto beta, version %version%</b>
+<br><br>
+<a href="DittoSetup_%versionFileName%.exe">Ditto Setup</a><br>
+<a href="DittoSetup_64bit_%versionFileName%.exe">Ditto Setup 64bit</a><br>
+<a href="DittoPortable_%versionFileName%.zip">Ditto Portable</a><br>
+<a href="DittoPortable_64bit_%versionFileName%.zip">Ditto Portable 64</a><br>
+
+<br>
+<a href="DittoDebug_%versionFileName%.7z">Ditto Debug Files</a><br>
+<a href="DittoSource_%versionFileName%.zip">Ditto Source</a><br>
+
+<br><br>
+
+<a href="AllFiles.php">Previouse Builds</a><br>
+</body>]]></Text>
+			<indent type='3'>1</indent>
+			<name>Beta web page</name>
+		</step>
 		<step action='FTP'>
 			<Ext>*.*</Ext>
 			<Filename>%workDir%\%branch%\DittoSetup\output\</Filename>

+ 0 - 7
DittoSetup/Ditto.settings

@@ -1,7 +0,0 @@
-[Ditto]
-SetCurrentDirectory = 1
-Portable = 1
-DisableRecieve = 1
-CheckForMaxEntries=1
-MaxEntries=100
-UseHookDllForFocus=0

+ 41 - 43
GlobalClips.cpp

@@ -32,8 +32,6 @@ void GlobalClips::DoDataExchange(CDataExchange* pDX)
 BEGIN_MESSAGE_MAP(GlobalClips, CDialogEx)
 	ON_WM_CLOSE()
 	ON_WM_SIZE()
-	ON_BN_CLICKED(IDC_BUTTON_REFRESH, &GlobalClips::OnBnClickedButtonRefresh)
-	ON_NOTIFY(NM_DBLCLK, IDC_LIST2, &GlobalClips::OnNMDblclkList2)
 	ON_WM_NCDESTROY()
 END_MESSAGE_MAP()
 
@@ -134,47 +132,47 @@ void GlobalClips::OnSize(UINT nType, int cx, int cy)
 	m_Resize.MoveControls(CSize(cx, cy));
 }
 
-void GlobalClips::OnBnClickedButtonRefresh()
-{
-	LoadItems();
-}
-
-void GlobalClips::OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult)
-{
-	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
-	// TODO: Add your control notification handler code here
-
-	int id = (int)m_List.GetItemData(pNMItemActivate->iItem);
-
-	int count = (int)g_HotKeys.GetCount();
-
-	int row = 0;
-	for (int i = 0; i < count; i++)
-	{
-		CHotKey *pHotKey = g_HotKeys[i];
-
-		if(pHotKey->m_globalId == id)
-		{
-			if(pHotKey->m_clipId > 0)
-			{
-				CCopyProperties props(pHotKey->m_clipId, this);
-				props.SetToTopMost(false);
-				INT_PTR doModalRet = props.DoModal();
-
-				if(doModalRet == IDOK)
-				{
-				}
-			}
-			else
-			{
-
-			}
-			break;
-		}
-	}
-	
-	*pResult = 0;
-}
+//void GlobalClips::OnBnClickedButtonRefresh()
+//{
+//	LoadItems();
+//}
+//
+//void GlobalClips::OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult)
+//{
+//	LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);
+//	// TODO: Add your control notification handler code here
+//
+//	int id = (int)m_List.GetItemData(pNMItemActivate->iItem);
+//
+//	int count = (int)g_HotKeys.GetCount();
+//
+//	int row = 0;
+//	for (int i = 0; i < count; i++)
+//	{
+//		CHotKey *pHotKey = g_HotKeys[i];
+//
+//		if(pHotKey->m_globalId == id)
+//		{
+//			if(pHotKey->m_clipId > 0)
+//			{
+//				CCopyProperties props(pHotKey->m_clipId, this);
+//				props.SetToTopMost(false);
+//				INT_PTR doModalRet = props.DoModal();
+//
+//				if(doModalRet == IDOK)
+//				{
+//				}
+//			}
+//			else
+//			{
+//
+//			}
+//			break;
+//		}
+//	}
+//	
+//	*pResult = 0;
+//}
 
 void GlobalClips::OnNcDestroy()
 {

+ 0 - 2
GlobalClips.h

@@ -32,7 +32,5 @@ public:
 	virtual BOOL OnInitDialog();
 	afx_msg void OnClose();
 	afx_msg void OnSize(UINT nType, int cx, int cy);
-	afx_msg void OnBnClickedButtonRefresh();
-	afx_msg void OnNMDblclkList2(NMHDR *pNMHDR, LRESULT *pResult);
 	afx_msg void OnNcDestroy();
 };

+ 23 - 5
Options.cpp

@@ -76,7 +76,7 @@ CGetSetOptions::~CGetSetOptions()
 
 void CGetSetOptions::LoadSettings()
 {
-	m_csIniFileName = GetIniFileName(false);
+	m_csIniFileName = GetIniFileName(true);
 
 	if(m_bU3)
 	{
@@ -84,18 +84,36 @@ void CGetSetOptions::LoadSettings()
 	}
 	else
 	{
-		//First check to see if they have an ini file in my docs&settings - ditto
+		//first check if ini file is in app directory
 		if(FileExists(m_csIniFileName))
 		{
 			m_bFromIni = true;
 		}
 		else
 		{
-			//next check if they have an ini file in the application directory
-			m_csIniFileName = GetIniFileName(true);
-			if(FileExists(m_csIniFileName))
+			CString portable = GetFilePath(m_csIniFileName);
+			portable += _T("portable");
+			if(FileExists(portable))
 			{
 				m_bFromIni = true;
+
+				//local ini file doesn't exist but portable file does, create the ini file with defaults
+				//This is done so they can copy the entire directory for portable zip files and not overright there settings file
+				SetProfileLong(_T("SetCurrentDirectory"), 1);
+				SetProfileLong(_T("Portable"), 1);
+				SetProfileLong(_T("DisableRecieve"), 1);
+				SetProfileLong(_T("CheckForMaxEntries"), 1);
+				SetProfileLong(_T("MaxEntries"), 100);
+				SetProfileLong(_T("UseHookDllForFocus"), 0);
+			}
+			else
+			{
+				//next check if it's in app data
+				m_csIniFileName = GetIniFileName(false);
+				if(FileExists(m_csIniFileName))
+				{
+					m_bFromIni = true;
+				}
 			}
 		}
 	}

+ 60 - 11
QPasteWnd.cpp

@@ -1066,16 +1066,65 @@ void CQPasteWnd::OnRclickQuickPaste(NMHDR *pNMHDR, LRESULT *pResult)
 
         theApp.m_Addins.AddPrePasteAddinsToMenu(cmSubMenu);
 
-        theApp.m_Language.UpdateRightClickMenu(cmSubMenu);
+		//HideMenuGroup(cmSubMenu, "Groups");
+		//HideMenuGroup(cmSubMenu, "Quick Options");
+		//HideMenuGroup(cmSubMenu, "Send To");
+		//HideMenuGroup(cmSubMenu, "Add-Ins");
+		//HideMenuGroup(cmSubMenu, "Quick Properties");
+        
+		theApp.m_Language.UpdateRightClickMenu(cmSubMenu);
 
         SetMenuChecks(cmSubMenu);
 
+		//cmSubMenu->RemoveMenu(32860, MF_BYCOMMAND);
+		//cmSubMenu->RemoveMenu(32775, MF_BYCOMMAND);
+		//cmSubMenu->RemoveMenu(32867, MF_BYCOMMAND); 
+		//cmSubMenu->RemoveMenu(32855, MF_BYCOMMAND);
+		//cmSubMenu->RemoveMenu(32853, MF_BYCOMMAND);
+		//cmSubMenu->RemoveMenu(32819, MF_BYCOMMAND);
+
+		//CString csMenuText;
+		//int nCount = cmSubMenu->GetMenuItemCount();
+		//int pos = 0;
+		//bool lastMenuEmpty = false;
+		//for(int i = 0; i < nCount; i++)
+		//{
+		//	cmSubMenu->GetMenuString(pos, csMenuText, MF_BYPOSITION);
+		//	if(csMenuText.IsEmpty())
+		//	{
+		//		if(lastMenuEmpty)
+		//		{
+		//			cmSubMenu->RemoveMenu(pos, MF_BYPOSITION);
+		//		}
+		//		else
+		//		{
+		//			pos++;
+		//			lastMenuEmpty = true;
+		//		}
+		//	}
+		//	else
+		//	{
+		//		pos++;
+		//		lastMenuEmpty = false;
+		//	}
+		//}
+
         cmSubMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON, pp.x, pp.y, this, NULL);
     }
 
     *pResult = 0;
 }
 
+void CQPasteWnd::HideMenuGroup(CMenu* menu, CString text)
+{
+	int nMenuPos;
+	CMenu *pNewMenu = CMultiLanguage::GetMenuPos(menu, text, nMenuPos);
+	if(pNewMenu)
+	{
+		menu->RemoveMenu(nMenuPos, MF_BYPOSITION);
+	}
+}
+
 void CQPasteWnd::SetMenuChecks(CMenu *pMenu)
 {
     //Set the transparency Check
@@ -1509,7 +1558,7 @@ void CQPasteWnd::OnMenuProperties()
         {
 			ATL::CCritSecLock csLock(m_CritSection.m_sect);
             
-            if(row < m_listItems.size())
+            if(row < (int)m_listItems.size())
             {
                 CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT * FROM Main WHERE lID = %d"), id);
                 if(!q.eof())
@@ -1690,7 +1739,7 @@ void CQPasteWnd::OnMenuQuickpropertiesSettoneverautodelete()
         count = Indexs.GetSize();
         for(int row = 0; row < count; row++)
         {
-			if(Indexs[row] < m_listItems.size())
+			if(Indexs[row] < (int)m_listItems.size())
 			{
 				m_listItems[Indexs[row]].m_bDontAutoDelete = true;
 			}
@@ -1724,7 +1773,7 @@ void CQPasteWnd::OnMenuQuickpropertiesAutodelete()
         count = Indexs.GetSize();
         for(int row = 0; row < count; row++)
         {
-			if(Indexs[row] < m_listItems.size())
+			if(Indexs[row] < (int)m_listItems.size())
 			{
 				m_listItems[Indexs[row]].m_bDontAutoDelete = false;
 			}
@@ -1759,7 +1808,7 @@ void CQPasteWnd::OnMenuQuickpropertiesRemovehotkey()
         count = Indexs.GetSize();
         for(int row = 0; row < count; row++)
         {
-			if(Indexs[row] < m_listItems.size())
+			if(Indexs[row] < (int)m_listItems.size())
 			{
 				m_listItems[Indexs[row]].m_bHasShortCut = false;
 			}
@@ -1794,7 +1843,7 @@ void CQPasteWnd::OnQuickpropertiesRemovequickpaste()
         count = Indexs.GetSize();
         for(int row = 0; row < count; row++)
         {
-			if(Indexs[row] < m_listItems.size())
+			if(Indexs[row] < (int)m_listItems.size())
 			{
 				m_listItems[Indexs[row]].m_QuickPaste.Empty();
 			}
@@ -2192,7 +2241,7 @@ void CQPasteWnd::DeleteSelectedRows()
 
         for(int i = 0; i < count; i++)
         {
-			if(Indexs[i] < m_listItems.size())
+			if(Indexs[i] < (int)m_listItems.size())
 			{
 				m_listItems.erase(m_listItems.begin( ) + Indexs[i]);
                 erasedCount++;
@@ -2569,7 +2618,7 @@ void CQPasteWnd::GetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
 					ATL::CCritSecLock csLock(m_CritSection.m_sect);
 
                     int c = m_lstHeader.GetItemCount();
-					if(m_listItems.size() > pItem->iItem)
+					if((int)m_listItems.size() > pItem->iItem)
                     {
                         CString cs;
                         if(m_listItems[pItem->iItem].m_bDontAutoDelete)
@@ -2645,7 +2694,7 @@ void CQPasteWnd::GetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
                 {
 					ATL::CCritSecLock csLock(m_CritSection.m_sect);
 
-                    if(m_listItems.size() > pItem->iItem)
+                    if((int)m_listItems.size() > pItem->iItem)
                     {
                         pItem->lParam = m_listItems[pItem->iItem].m_lID;
                     }
@@ -2659,7 +2708,7 @@ void CQPasteWnd::GetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
     {
 		ATL::CCritSecLock csLock(m_CritSection.m_sect);
      
-		if(m_listItems.size() > pItem->iItem)
+		if((int)m_listItems.size() > pItem->iItem)
         {
             CF_DibTypeMap::iterator iterDib = m_cf_dibCache.find(m_listItems[pItem->iItem].m_lID);
             if(iterDib == m_cf_dibCache.end())
@@ -2700,7 +2749,7 @@ void CQPasteWnd::GetDispInfo(NMHDR *pNMHDR, LRESULT *pResult)
     {
 		ATL::CCritSecLock csLock(m_CritSection.m_sect);
 
-        if(m_listItems.size() > pItem->iItem)
+        if((int)m_listItems.size() > pItem->iItem)
         {
             CF_DibTypeMap::iterator iterRTF = m_cf_rtfCache.find(m_listItems[pItem->iItem].m_lID);
             if(iterRTF == m_cf_rtfCache.end())

+ 1 - 0
QPasteWnd.h

@@ -163,6 +163,7 @@ public:
     void SetKeyModiferState(bool bActive);
 	void SaveWindowSize();
 	void SelectFocusID();
+	void HideMenuGroup(CMenu* menu, CString text);
 
     // Generated message map functions
 protected: