BOOL DeleteFormats(int parentID, ARRAY& formatIDs) { if(formatIDs.GetSize() <= 0) return TRUE; try { //Delete the requested data formats INT_PTR count = formatIDs.GetSize(); for(int i = 0; i < count; i++) { theApp.m_db.execDMLEx(_T("DELETE FROM Data WHERE lID = %d;"), formatIDs[i]); } CClip clip; if(clip.LoadFormats(parentID)) { DWORD CRC = clip.GenerateCRC(); //Update the main table with new size theApp.m_db.execDMLEx(_T("UPDATE Main SET CRC = %d WHERE lID = %d"), CRC, parentID); } } CATCH_SQLITE_EXCEPTION return TRUE; }
void CMainFrame::OnFirstSavecurrentclipboard() { Log(_T("Start Saving the current clipboard to the database")); CClip* pClip = new CClip; if(pClip) { CClipTypes* pTypes = theApp.LoadTypesFromDB(); if(pTypes) { if(pClip->LoadFromClipboard(pTypes, false)) { Log(_T("Loaded clips from the clipboard, sending message to save to the db")); ::PostMessage(m_hWnd, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0); } else { Log(_T("Failed to load clips from the clipboard, not saving to db")); delete pClip; pClip = NULL; } } else { Log(_T("Failed to load supported types from the db, not saving to the db")); } } Log(_T("Start Saving the current clipboard to the database")); }
void CCopyProperties::OnOK() { UpdateData(); try { if(m_lCopyID == -1 && m_pMemoryClip != NULL) { LoadDataIntoCClip(*m_pMemoryClip); m_DeletedData.SortDescending(); INT_PTR count = m_DeletedData.GetSize(); for(int i = 0; i < count; i++) { m_pMemoryClip->m_Formats.RemoveAt(m_DeletedData[i]); } } else { CClip clip; if(clip.LoadMainTable(m_lCopyID)) { LoadDataIntoCClip(clip); if(CheckGlobalHotKey(clip) == FALSE) { if(MessageBox(_T("Error registering global hot key\n\nContinue?"), _T(""), MB_YESNO|MB_ICONWARNING) == IDNO) { return; } } if(CheckMoveToGroupGlobalHotKey(clip) == FALSE) { if(MessageBox(_T("Error registering global move to group hot key\n\nContinue?"), _T(""), MB_YESNO|MB_ICONWARNING) == IDNO) { return; } } if(clip.ModifyMainTable()) { if(m_bDeletedData) { DeleteFormats(m_lCopyID, m_DeletedData); } } } } m_bHandleKillFocus = true; } CATCH_SQLITE_EXCEPTION CDialog::OnOK(); }
void CEditListEditor::OpenFile(LPCTSTR lpFileName) { CString strLine; CStdioFile editListFile; CString strUser; CString strHotFolders; CloseFile(); m_strFileName.Format(_T("%s.edl"), lpFileName); if (editListFile.Open(m_strFileName, CFile::modeRead)) { m_bFileOpen = true; while (editListFile.ReadString(strLine)) { //int nPos = 0; CString strIn; // = strLine.Tokenize(_T(" \t"), nPos); CString strOut; // = strLine.Tokenize(_T(" \t"), nPos); CString strName; // = strLine.Tokenize(_T(" \t"), nPos); AfxExtractSubString(strIn, strLine, 0, _T('\t')); AfxExtractSubString(strOut, strLine, 1, _T('\t')); AfxExtractSubString(strName, strLine, 2, _T('\t')); if (strUser.IsEmpty()) { AfxExtractSubString(strUser, strLine, 3, _T('\t')); SelectCombo(strUser, m_cbUsers); } if (strHotFolders.IsEmpty()) { AfxExtractSubString(strHotFolders, strLine, 4, _T('\t')); SelectCombo(strHotFolders, m_cbHotFolders); } if (!strIn.IsEmpty() && !strOut.IsEmpty()) { CClip NewClip; NewClip.SetIn(strIn); NewClip.SetOut(strOut); NewClip.SetName(strName); InsertClip(nullptr, NewClip); } } editListFile.Close(); } else { m_bFileOpen = false; } if (m_nameList.IsEmpty()) { CStdioFile nameFile; CString str; if (nameFile.Open(_T("EditListNames.txt"), CFile::modeRead)) { while (nameFile.ReadString(str)) { m_nameList.Add(str); } nameFile.Close(); } } }
BOOL CCopyProperties::OnInitDialog() { CDialog::OnInitDialog(); m_GroupCombo.FillCombo(); try { if(m_lCopyID == -1 && m_pMemoryClip != NULL) { LoadDataFromCClip(*m_pMemoryClip); } else { CClip Clip; if(Clip.LoadMainTable(m_lCopyID)) { Clip.LoadFormats(m_lCopyID); LoadDataFromCClip(Clip); } } } CATCH_SQLITE_EXCEPTION UpdateData(FALSE); if(m_bSetToTopMost) SetWindowPos(&CWnd::wndTopMost, 0, 0, 0, 0, SWP_NOMOVE|SWP_NOSIZE); if(m_lCopyID == -1 && m_pMemoryClip != NULL) { GetDlgItem(IDOK)->SetFocus(); } else { m_description.SetFocus(); } m_Resize.SetParent(m_hWnd); m_Resize.AddControl(IDC_EDIT_PROPERTIES, DR_SizeHeight | DR_SizeWidth); m_Resize.AddControl(IDC_STATIC_FORMATS, DR_MoveTop); m_Resize.AddControl(IDC_COPY_DATA, DR_MoveTop | DR_SizeWidth); m_Resize.AddControl(IDC_DELETE_COPY_DATA, DR_MoveTop); m_Resize.AddControl(IDOK, DR_MoveTop | DR_MoveLeft); m_Resize.AddControl(IDCANCEL, DR_MoveTop | DR_MoveLeft); m_Resize.AddControl(IDC_EDIT_QUICK_PASTE, DR_SizeWidth); m_Resize.AddControl(IDC_COMBO1, DR_SizeWidth); theApp.m_Language.UpdateClipProperties(this); return FALSE; }
void CCopyProperties::OnOK() { UpdateData(); try { if(m_lCopyID == -1 && m_pMemoryClip != NULL) { LoadDataIntoCClip(*m_pMemoryClip); m_DeletedData.SortDescending(); int nCount = m_DeletedData.GetSize(); for(int i = 0; i < nCount; i++) { m_pMemoryClip->m_Formats.RemoveAt(m_DeletedData[i], 1); } } else { CClip Clip; if(Clip.LoadMainTable(m_lCopyID)) { LoadDataIntoCClip(Clip); Clip.ModifyMainTable(); if(m_bDeletedData) { DeleteFormats(m_lCopyID, m_DeletedData); } } } m_bHandleKillFocus = true; } CATCH_SQLITE_EXCEPTION CDialog::OnOK(); }
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; }
//##ModelId=474D3058036E BOOL COleClipSource::DoImmediateRender() { if(m_bLoadedFormats) return TRUE; m_bLoadedFormats = true; int count = m_ClipIDs.GetSize(); if(count <= 0) return 0; BOOL bProcessedMult = FALSE; if(count > 1) { CStringA SepA = CTextConvert::ConvertToChar(g_Opt.GetMultiPasteSeparator()); CCF_TextAggregator CFText(SepA); if(m_ClipIDs.AggregateData(CFText, CF_TEXT, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_TEXT, CFText.GetHGlobal()); bProcessedMult = TRUE; } CStringW SepW = CTextConvert::ConvertToUnicode(g_Opt.GetMultiPasteSeparator()); CCF_UnicodeTextAggregator CFUnicodeText(SepW); if(m_ClipIDs.AggregateData(CFUnicodeText, CF_UNICODETEXT, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_UNICODETEXT, CFUnicodeText.GetHGlobal()); bProcessedMult = TRUE; } if(m_bOnlyPaste_CF_TEXT == false) { CCF_HDropAggregator HDrop; if(m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(CF_HDROP, HDrop.GetHGlobal()); bProcessedMult = TRUE; } CRichTextAggregator RichText(SepA); if(m_ClipIDs.AggregateData(RichText, theApp.m_RTFFormat, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(theApp.m_RTFFormat, RichText.GetHGlobal()); bProcessedMult = TRUE; } CHTMLFormatAggregator Html(SepA); if(m_ClipIDs.AggregateData(Html, theApp.m_HTML_Format, g_Opt.m_bMultiPasteReverse && g_Opt.m_bHistoryStartTop)) { CacheGlobalData(theApp.m_HTML_Format, Html.GetHGlobal()); bProcessedMult = TRUE; } } } if(count >= 1 && bProcessedMult == FALSE) { CClip clip; CClipFormats formats; clip.LoadFormats(m_ClipIDs[0], m_bOnlyPaste_CF_TEXT); return PutFormatOnClipboard(&clip.m_Formats, m_bPasteHTMLFormatAs_CF_TEXT); } return bProcessedMult; }
//##ModelId=474D305803BB BOOL COleClipSource::OnRenderGlobalData(LPFORMATETC lpFormatEtc, HGLOBAL* phGlobal) { static bool bInHere = false; if(bInHere) { return FALSE; } bInHere = true; HGLOBAL hData = NULL; CClipFormat *pFind = m_DelayRenderedFormats.FindFormat(lpFormatEtc->cfFormat); if(pFind) { if(pFind->m_hgData) { hData = NewGlobalH(pFind->m_hgData, GlobalSize(pFind->m_hgData)); } } else { CClip clip; clip.LoadFormats(m_ClipIDs[0]); CClipFormat *pDittoDelayCF_HDROP = clip.m_Formats.FindFormat(theApp.m_RemoteCF_HDROP); CClipFormat *pCF_HDROP = clip.m_Formats.FindFormat(CF_HDROP); if(pDittoDelayCF_HDROP && pCF_HDROP) { CDittoCF_HDROP *pData = (CDittoCF_HDROP*)GlobalLock(pDittoDelayCF_HDROP->m_hgData); if(pData) { CString csComputerName; CString csIP; CTextConvert::ConvertFromUTF8(pData->m_cIP, csIP); CTextConvert::ConvertFromUTF8(pData->m_cComputerName, csComputerName); GlobalUnlock(pDittoDelayCF_HDROP->m_hgData); CClient cl; hData = cl.RequestCopiedFiles(*pCF_HDROP, csIP, csComputerName); } } else { hData = m_ClipIDs.Render(lpFormatEtc->cfFormat); } //Add to a cache of already rendered data //Windows seems to call this function multiple times //so only the first time do we need to go get the data HGLOBAL hCopy = NULL; if(hData) { hCopy = NewGlobalH(hData, GlobalSize(hData)); } CClipFormat format(lpFormatEtc->cfFormat, hCopy); format.bDeleteData = false; //owned by m_DelayRenderedFormats m_DelayRenderedFormats.Add(format); } BOOL bRet = FALSE; if(hData) { // if phGlobal is null, we can just give the allocated mem // else, our data must fit within the GlobalSize(*phGlobal) if(*phGlobal == 0) *phGlobal = hData; else { UINT len = min(::GlobalSize(*phGlobal), ::GlobalSize(hData)); if(len) CopyToGlobalHH(*phGlobal, hData, len); ::GlobalFree(hData); } bRet = TRUE; } bInHere = false; return bRet; }
HGLOBAL COleClipSource::ConvertToFileDrop() { CString path = CGetSetOptions::GetPath(PATH_DRAG_FILES); CreateDirectory(path, NULL); CFileRecieve fileList; int dragId = CGetSetOptions::GetDragId(); int origDragId = dragId; for (int i = 0; i < m_ClipIDs.GetCount(); i++) { CClip fileClip; fileClip.LoadFormats(m_ClipIDs[i]); CClipFormat *unicodeText = fileClip.m_Formats.FindFormat(CF_UNICODETEXT); if (unicodeText) { CString file; file.Format(_T("%stext_%d.txt"), path, dragId++); fileClip.WriteTextToFile(file, TRUE, FALSE, FALSE); fileList.AddFile(file); } else { CClipFormat *asciiText = fileClip.m_Formats.FindFormat(CF_TEXT); if (asciiText) { CString file; file.Format(_T("%stext_%d.txt"), path, dragId++); fileClip.WriteTextToFile(file, FALSE, TRUE, FALSE); fileList.AddFile(file); } else { CClipFormat *bitmap = fileClip.m_Formats.FindFormat(CF_DIB); if (bitmap) { CString file; file.Format(_T("%simage_%d.png"), path, dragId++); LPVOID pvData = GlobalLock(bitmap->m_hgData); ULONG size = (ULONG) GlobalSize(bitmap->m_hgData); WriteCF_DIBToFile(file, pvData, size); GlobalUnlock(bitmap->m_hgData); fileList.AddFile(file); } } } } if(dragId != origDragId) { CGetSetOptions::SetDragId(dragId); } HGLOBAL hData = fileList.CreateCF_HDROPBuffer(); return hData; }
BOOL COleClipSource::DoImmediateRender() { if(m_bLoadedFormats) return TRUE; m_bLoadedFormats = true; if(m_pasteOptions.m_pPasteFormats != NULL) { return PutFormatOnClipboard(m_pasteOptions.m_pPasteFormats) > 0; } INT_PTR count = m_ClipIDs.GetSize(); if(count <= 0) return 0; CClip clip; if(count > 1) { CStringA SepA = CTextConvert::ConvertToChar(g_Opt.GetMultiPasteSeparator()); CCF_TextAggregator CFText(SepA); if(m_ClipIDs.AggregateData(CFText, CF_TEXT, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_TEXT, CFText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CStringW SepW = CTextConvert::ConvertToUnicode(g_Opt.GetMultiPasteSeparator()); CCF_UnicodeTextAggregator CFUnicodeText(SepW); if(m_ClipIDs.AggregateData(CFUnicodeText, CF_UNICODETEXT, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_UNICODETEXT, CFUnicodeText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } if ((m_pasteOptions.LimitFormatsToText()) && clip.m_Formats.GetCount() == 0) { CCF_HDropAggregator HDrop; if (m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_UNICODETEXT, HDrop.GetHGlobalAsString()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } } else if (m_pasteOptions.LimitFormatsToText() == false) { CCF_HDropAggregator HDrop; if(m_ClipIDs.AggregateData(HDrop, CF_HDROP, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(CF_HDROP, HDrop.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CRichTextAggregator RichText(SepA); if(m_ClipIDs.AggregateData(RichText, theApp.m_RTFFormat, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(theApp.m_RTFFormat, RichText.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } CHTMLFormatAggregator Html(SepA); if(m_ClipIDs.AggregateData(Html, theApp.m_HTML_Format, g_Opt.m_bMultiPasteReverse)) { CClipFormat cf(theApp.m_HTML_Format, Html.GetHGlobal()); clip.m_Formats.Add(cf); //clip.m_Formats now owns the global data cf.m_autoDeleteData = false; } } } if (count >= 1 && clip.m_Formats.GetCount() == 0) { clip.LoadFormats(m_ClipIDs[0], m_pasteOptions.LimitFormatsToText(), m_pasteOptions.IncludeRTFForTextOnly()); } if (m_pasteOptions.LimitFormatsToText()) { PlainTextFilter(clip); } if(m_pasteOptions.m_pasteUpperCase || m_pasteOptions.m_pasteLowerCase) { DoUpperLowerCase(clip, m_pasteOptions.m_pasteUpperCase); } else if(m_pasteOptions.m_pasteCapitalize) { Capitalize(clip); } else if(m_pasteOptions.m_pasteSentenceCase) { SentenceCase(clip); } else if(m_pasteOptions.m_pasteRemoveLineFeeds) { RemoveLineFeeds(clip); } else if(m_pasteOptions.m_pasteAddOneLineFeed) { AddLineFeeds(clip, 1); } else if (m_pasteOptions.m_pasteAddTwoLineFeeds) { AddLineFeeds(clip, 2); } else if (m_pasteOptions.m_pasteTypoglycemia) { Typoglycemia(clip); } return PutFormatOnClipboard(&clip.m_Formats) > 0; }
// Called within Copy Thread: void CCopyThread::OnClipboardChange() { Log(_T("OnClipboardChange - Start")); SyncConfig(); // synchronize with the main thread's copy configuration // if we are told not to copy on change, then we have nothing to do. if(!m_LocalConfig.m_bCopyOnChange) return; CClip* pClip = new CClip; CClipTypes* pSupportedTypes = m_LocalConfig.m_pSupportedTypes; bool bDeleteMemory = false; //If we are copying from a Ditto Buffer then save all to the database, so when we paste this it will paste //just like you were using Ctrl-V if(theApp.m_CopyBuffer.Active()) { Log(_T("LoadFromClipboard - Copy buffer Active Start")); pSupportedTypes = new CClipTypes; if(pSupportedTypes) { bDeleteMemory = true; COleDataObject oleData; if(oleData.AttachClipboard()) { oleData.BeginEnumFormats(); FORMATETC format; while(oleData.GetNextFormat(&format)) { pSupportedTypes->Add(format.cfFormat); } oleData.Release(); } } else { pSupportedTypes = m_LocalConfig.m_pSupportedTypes; } Log(_T("LoadFromClipboard - Copy buffer Active End")); } Log(_T("LoadFromClipboard - Before")); bool bResult = pClip->LoadFromClipboard(pSupportedTypes); Log(_T("LoadFromClipboard - After")); if(!bResult) { DWORD delay = CGetSetOptions::GetNoFormatsRetryDelay(); if(delay > 0) { Log(StrF(_T("LoadFromClipboard didn't find any clips to save, sleeping %dms, then trying again"), delay)); Sleep(delay); Log(_T("LoadFromClipboard #2 - Before")); bResult = pClip->LoadFromClipboard(pSupportedTypes); Log(_T("LoadFromClipboard #2 - After")); } else { Log(_T("LoadFromClipboard didn't find any clips to save, retry setting is not set, not retrying")); } } if(bDeleteMemory) { delete pSupportedTypes; pSupportedTypes = NULL; } if(!bResult) { delete pClip; return; // error } if(m_LocalConfig.m_bAsyncCopy) ::PostMessage(m_LocalConfig.m_hClipHandler, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0); else ::SendMessage(m_LocalConfig.m_hClipHandler, WM_CLIPBOARD_COPIED, (WPARAM)pClip, 0); Log(_T("OnClipboardChange - End")); }
void CClipCompare::Compare(int leftId, int rightId) { CClip leftClip; if(leftClip.LoadFormats(leftId, true)) { CClip rightClip; if(rightClip.LoadFormats(rightId, true)) { bool saveW = true; bool saveA = true; if(leftClip.GetUnicodeTextFormat() == _T("") || rightClip.GetUnicodeTextFormat() == _T("")) { saveW = false; } if(leftClip.GetCFTextTextFormat() == "" || rightClip.GetCFTextTextFormat() == "") { saveA = false; } if(saveW || saveA) { CString leftFile = SaveToFile(leftId, &leftClip, saveW, saveA); CString rightFile = SaveToFile(rightId, &rightClip, saveW, saveA); CString path = GetComparePath(); if(path != _T("")) { SHELLEXECUTEINFO sei = { sizeof(sei) }; sei.lpFile = path; CString csParam; csParam.Format(_T("%s %s"), leftFile, rightFile); sei.lpParameters = csParam; sei.nShow = SW_NORMAL; Log(StrF(_T("Comparing two clips, left Id %d, right Id %d, Path: %s %s"), leftId, rightId, path, csParam)); if (!ShellExecuteEx(&sei)) { } } else { Log(StrF(_T("CClipCompare::Compare, No Valid compare apps, not doing compare"))); ShellExecute(NULL, _T("open"), _T("http://winmerge.org/"), NULL,NULL, SW_SHOW); } } else { Log(StrF(_T("CClipCompare::Compare, did not find valid text for both passed in clips"))); } } else { Log(StrF(_T("CClipCompare::Compare, Failed to load RIGHT clip formats Id: %d"), rightId)); } } else { Log(StrF(_T("CClipCompare::Compare, Failed to load LEFT clip formats Id: %d"), leftId)); } }
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; }