| 
					
				 | 
			
			
				@@ -1,308 +1,322 @@ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "stdafx.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "clip.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "CP_Main.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "shared/TextConvert.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include ".\dittorulerricheditctrl.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#include "CopyProperties.h" 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-CDittoRulerRichEditCtrl::CDittoRulerRichEditCtrl(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_SaveTypes = stCF_UNICODETEXT|stCF_TEXT|stRTF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_lID = -1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-CDittoRulerRichEditCtrl::~CDittoRulerRichEditCtrl(void) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool CDittoRulerRichEditCtrl::LoadItem(long lID, CString csDesc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	bool bSetText = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CClipFormat Clip; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_lID = lID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_csDescription = csDesc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//If creating a new clip 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(m_lID < 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		m_rtf.SetModify(FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Clip.m_cfType = RegisterClipboardFormat(CF_RTF); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		LPVOID pvData = GlobalLock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(pvData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			SetRTF((char*)pvData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			bSetText = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		GlobalUnlock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Clip.Free(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Clip.Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(bSetText == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Clip.m_cfType = CF_UNICODETEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LPVOID pvData = GlobalLock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(pvData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CString csText = (WCHAR*)pvData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SetText(csText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				bSetText = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			GlobalUnlock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.Free(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(bSetText == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Clip.m_cfType = CF_TEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(theApp.GetClipData(lID, Clip) && Clip.m_hgData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LPVOID pvData = GlobalLock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(pvData) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CString csText = (char*)pvData; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				SetText(csText); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				bSetText = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			GlobalUnlock(Clip.m_hgData); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.Free(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.Clear(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_rtf.SetModify(FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return bSetText; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-long CDittoRulerRichEditCtrl::GetTypeFlags(long lID) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	long lRet = stNONE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		CLIPFORMAT cfType = CF_TEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(q.eof() == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			lRet |= stCF_TEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cfType = CF_UNICODETEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(q.eof() == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			lRet |= stCF_UNICODETEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		cfType = RegisterClipboardFormat(_T("Rich Text Format")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(q.eof() == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			lRet |= stRTF; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CATCH_SQLITE_EXCEPTION 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return lRet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-void CDittoRulerRichEditCtrl::d() 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CString cs = m_rtf.GetText(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CString s; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	s.Format(_T("error = %d, %s"), GetLastError(), cs); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	MessageBox(s); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-int CDittoRulerRichEditCtrl::SaveToDB(BOOL bUpdateDesc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	int nRet = FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(m_SaveTypes == stNONE && m_lID >= 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return DIDNT_NEED_TO_SAVE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(m_rtf.GetModify() == FALSE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Log(_T("Clip has not been modified")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return DIDNT_NEED_TO_SAVE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	bool bSetModifyToFalse = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	try 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		CClip Clip; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Clip.m_id = m_lID; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(m_SaveTypes & stRTF) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LoadRTFData(Clip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(m_SaveTypes & stCF_TEXT || m_SaveTypes & stCF_UNICODETEXT) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			LoadTextData(Clip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(Clip.m_Formats.GetSize() <= 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return FALSE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		theApp.m_db.execDML(_T("begin transaction;")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(m_lID >= 0) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.SaveFromEditWnd(bUpdateDesc); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			bSetModifyToFalse = false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Clip.MakeLatestOrder(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			CCopyProperties Prop(-1, this, &Clip); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Prop.SetHandleKillFocus(true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Prop.SetToTopMost(false); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(Prop.DoModal() == IDOK) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				Clip.AddToDB(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				m_csDescription = Clip.m_Desc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				m_lID = Clip.m_id; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				bUpdateDesc = TRUE; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				bSetModifyToFalse = true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		nRet = SAVED_CLIP_TO_DB; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		theApp.m_db.execDML(_T("commit transaction;")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(bUpdateDesc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			theApp.RefreshView(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CATCH_SQLITE_EXCEPTION 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(bSetModifyToFalse) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		m_rtf.SetModify(FALSE); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return nRet; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool CDittoRulerRichEditCtrl::LoadRTFData(CClip &Clip) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CString csRTFOriginal = GetRTF(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(csRTFOriginal.IsEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		Log(_T("Rtf is empty, returning")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	//remove the line feed at the end, not sure why the righ text always adds this 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CString right = csRTFOriginal.Right(9); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if (right == _T("\\par\r\n}\r\n")) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		CString r = csRTFOriginal.Left(csRTFOriginal.GetLength() - 9); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		r += _T("}"); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		csRTFOriginal = r; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CStringA csRTF = CTextConvert::ConvertToChar(csRTFOriginal); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CClipFormat format; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_cfType = RegisterClipboardFormat(_T("Rich Text Format")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	int nLength = csRTF.GetLength() + 1; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_hgData = NewGlobalP(csRTF.GetBuffer(nLength), nLength); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Clip.m_Formats.Add(format); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_hgData = NULL; //Clip.m_formats owns data now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool CDittoRulerRichEditCtrl::LoadTextData(CClip &Clip) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CString csText = GetText(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(csText.IsEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		for(int i = 0; i < 20; i++) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Sleep(100); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			csText = GetText(); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(csText.IsEmpty() == FALSE) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				break; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Log(StrF(_T("Get Text still empty pass = %d"), i)); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(csText.IsEmpty()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			Log(_T("Get Text still empty pass returning")); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	CClipFormat format; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#ifdef _UNICODE 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_cfType = CF_UNICODETEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#else 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_cfType = CF_TEXT; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-#endif 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	int nLength = csText.GetLength() * sizeof(TCHAR) + sizeof(TCHAR); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_hgData = NewGlobalP(csText.GetBuffer(nLength), nLength); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Clip.SetDescFromText(format.m_hgData, true); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_csDescription = Clip.m_Desc; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	m_csDescription = m_csDescription.Left(15); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	Clip.m_Formats.Add(format); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	format.m_hgData = NULL; //Clip.m_formats owns data now 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-bool CDittoRulerRichEditCtrl::CloseEdit(bool bPrompt, BOOL bUpdateDesc) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	if(m_rtf.GetModify()) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	{		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		int nRet = IDYES; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(bPrompt) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			CString cs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			cs.Format(_T("%s '%s'"), theApp.m_Language.GetString("SaveChanges", "Do you want to save changes to"), m_csDescription); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			::SetForegroundWindow(m_hWnd); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			nRet = MessageBox(cs, _T("Ditto"), MB_YESNOCANCEL); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		if(nRet == IDYES) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			if(SaveToDB(bUpdateDesc) == false) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				CString cs; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				cs.Format(_T("%s '%s'"), theApp.m_Language.GetString("ErrorSaving", "Error saving clip"), m_csDescription); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-				MessageBox(cs, _T("Ditto"), MB_OK); 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		else if(nRet == IDCANCEL) 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		{ 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-			return false; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-		} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	} 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				- 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				-	return true; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "stdafx.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "clip.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "CP_Main.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "shared/TextConvert.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include ".\dittorulerricheditctrl.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#include "CopyProperties.h"
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CDittoRulerRichEditCtrl::CDittoRulerRichEditCtrl(void)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{	
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_lID = -1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+CDittoRulerRichEditCtrl::~CDittoRulerRichEditCtrl(void)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool CDittoRulerRichEditCtrl::LoadItem(long lID, CString csDesc)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{	
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool bSetText = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CClipFormat Clip;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_lID = lID;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_csDescription = csDesc;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//If creating a new clip
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(m_lID < 0)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_rtf.SetModify(FALSE);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Clip.m_cfType = RegisterClipboardFormat(CF_RTF);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(theApp.GetClipData(lID, Clip) && Clip.m_hgData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		LPVOID pvData = GlobalLock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(pvData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			SetRTF((char*)pvData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bSetText = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		GlobalUnlock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Clip.Free();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Clip.Clear();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(bSetText == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Clip.m_cfType = CF_UNICODETEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(theApp.GetClipData(lID, Clip) && Clip.m_hgData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LPVOID pvData = GlobalLock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(pvData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				CString csText = (WCHAR*)pvData;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SetText(csText);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				bSetText = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			GlobalUnlock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.Free();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.Clear();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(bSetText == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Clip.m_cfType = CF_TEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(theApp.GetClipData(lID, Clip) && Clip.m_hgData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LPVOID pvData = GlobalLock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(pvData)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				CString csText = (char*)pvData;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				SetText(csText);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				bSetText = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			GlobalUnlock(Clip.m_hgData);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.Free();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.Clear();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_rtf.SetModify(FALSE);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return bSetText;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+long CDittoRulerRichEditCtrl::GetTypeFlags(long lID)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	long lRet = stNONE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	try
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CLIPFORMAT cfType = CF_TEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CppSQLite3Query q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(q.eof() == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			lRet |= stCF_TEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		cfType = CF_UNICODETEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(q.eof() == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			lRet |= stCF_UNICODETEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		cfType = RegisterClipboardFormat(_T("Rich Text Format"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		q = theApp.m_db.execQueryEx(_T("SELECT lID FROM Data WHERE lParentID = %d AND strClipboardFormat = '%s'"), lID, GetFormatName(cfType));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(q.eof() == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			lRet |= stRTF;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CATCH_SQLITE_EXCEPTION
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return lRet;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+void CDittoRulerRichEditCtrl::d()
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString cs = m_rtf.GetText();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString s;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	s.Format(_T("error = %d, %s"), GetLastError(), cs);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	MessageBox(s);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+int CDittoRulerRichEditCtrl::SaveToDB(BOOL bUpdateDesc)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nRet = FALSE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(m_rtf.GetModify() == FALSE)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Log(_T("Clip has not been modified"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return DIDNT_NEED_TO_SAVE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	bool bSetModifyToFalse = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	try
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		//only save the types if they have them set as save types, mainly rtf type
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int saveTypes = 0;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CClipTypes* pTypes = theApp.LoadTypesFromDB();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		INT_PTR numTypes = pTypes->GetSize();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for (int i = 0; i < numTypes; i++)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if (pTypes->ElementAt(i) == theApp.m_RTFFormat)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				saveTypes |= stRTF;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			else if (pTypes->ElementAt(i) == CF_TEXT ||
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				pTypes->ElementAt(i) == CF_UNICODETEXT)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				saveTypes |= stCF_TEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				saveTypes |= stCF_UNICODETEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CClip Clip;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Clip.m_id = m_lID;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(saveTypes & stRTF)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LoadRTFData(Clip);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(saveTypes & stCF_TEXT || saveTypes & stCF_UNICODETEXT)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			LoadTextData(Clip);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(Clip.m_Formats.GetSize() <= 0)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return FALSE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		theApp.m_db.execDML(_T("begin transaction;"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(m_lID >= 0)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.SaveFromEditWnd(bUpdateDesc);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			bSetModifyToFalse = false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Clip.MakeLatestOrder();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CCopyProperties Prop(-1, this, &Clip);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Prop.SetHandleKillFocus(true);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Prop.SetToTopMost(false);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(Prop.DoModal() == IDOK)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				Clip.AddToDB();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				m_csDescription = Clip.m_Desc;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				m_lID = Clip.m_id;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				bUpdateDesc = TRUE;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				bSetModifyToFalse = true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		nRet = SAVED_CLIP_TO_DB;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		theApp.m_db.execDML(_T("commit transaction;"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(bUpdateDesc)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			theApp.RefreshView();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CATCH_SQLITE_EXCEPTION
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(bSetModifyToFalse)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		m_rtf.SetModify(FALSE);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return nRet;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool CDittoRulerRichEditCtrl::LoadRTFData(CClip &Clip)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString csRTFOriginal = GetRTF();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(csRTFOriginal.IsEmpty())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		Log(_T("Rtf is empty, returning"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	//remove the line feed at the end, not sure why the righ text always adds this
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString right = csRTFOriginal.Right(9);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if (right == _T("\\par\r\n}\r\n"))
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		CString r = csRTFOriginal.Left(csRTFOriginal.GetLength() - 9);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		r += _T("}");
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		csRTFOriginal = r;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CStringA csRTF = CTextConvert::ConvertToChar(csRTFOriginal);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CClipFormat format;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_cfType = RegisterClipboardFormat(_T("Rich Text Format"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nLength = csRTF.GetLength() + 1;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_hgData = NewGlobalP(csRTF.GetBuffer(nLength), nLength);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Clip.m_Formats.Add(format);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_hgData = NULL; //Clip.m_formats owns data now
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool CDittoRulerRichEditCtrl::LoadTextData(CClip &Clip)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CString csText = GetText();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(csText.IsEmpty())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		for(int i = 0; i < 20; i++)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Sleep(100);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			csText = GetText();
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(csText.IsEmpty() == FALSE)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				break;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Log(StrF(_T("Get Text still empty pass = %d"), i));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(csText.IsEmpty())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			Log(_T("Get Text still empty pass returning"));
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	CClipFormat format;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#ifdef _UNICODE
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_cfType = CF_UNICODETEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#else
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_cfType = CF_TEXT;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+#endif
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	int nLength = csText.GetLength() * sizeof(TCHAR) + sizeof(TCHAR);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_hgData = NewGlobalP(csText.GetBuffer(nLength), nLength);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Clip.SetDescFromText(format.m_hgData, true);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_csDescription = Clip.m_Desc;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	m_csDescription = m_csDescription.Left(15);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	Clip.m_Formats.Add(format);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	format.m_hgData = NULL; //Clip.m_formats owns data now
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+bool CDittoRulerRichEditCtrl::CloseEdit(bool bPrompt, BOOL bUpdateDesc)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	if(m_rtf.GetModify())
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	{		
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		int nRet = IDYES;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(bPrompt)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			CString cs;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			cs.Format(_T("%s '%s'"), theApp.m_Language.GetString("SaveChanges", "Do you want to save changes to"), m_csDescription);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			::SetForegroundWindow(m_hWnd);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			nRet = MessageBox(cs, _T("Ditto"), MB_YESNOCANCEL);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		if(nRet == IDYES)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			if(SaveToDB(bUpdateDesc) == false)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				CString cs;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				cs.Format(_T("%s '%s'"), theApp.m_Language.GetString("ErrorSaving", "Error saving clip"), m_csDescription);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+				MessageBox(cs, _T("Ditto"), MB_OK);
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		else if(nRet == IDCANCEL)
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		{
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+			return false;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+		}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	}
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				+	return true;
 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				 } 
			 |