Changes.txt 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311
  1. 04 Aug 31
  2. ---------
  3. ! Fixed "Corrupted QuickPaste position when closing Ditto while minimized /
  4. rolled-up" bug.
  5. . Reported By: Anthony Ford - tonyforduk 2004-08-27 14:08
  6. http://sourceforge.net/forum/message.php?msg_id=2732759
  7. * CWndEx::GetWindowRectEx() was not properly copying m_crFullSizeWindow
  8. when m_bMinimized was true.
  9. 04 May 30
  10. ---------
  11. + Toggle Connect to Clipboard to Connect or Disconnect the
  12. Clipboard Viewer from the chain.
  13. - removed "Reconnect to Clipboad Chain"
  14. + focus.dll and system-wide focus tracking implementation to correct
  15. mouse tray activation.
  16. + Sending clips across a network.
  17. 04 Jan 20
  18. ---------
  19. ! Fixed "multiple repaints on first show" bug.
  20. * CQuickPaste::ShowQPasteWnd:
  21. - m_pwndPaste->ShowWindow(SW_SHOW)
  22. . This caused premature drawing and activation of the window.
  23. It was replaced by a call to:
  24. + m_pwndPaste->ShowQPasteWindow()
  25. * CQPasteWnd:
  26. + bool m_bAllowRepaintImmediately:
  27. . This acts as an override for RefreshNc's bRepaintImmediately parameter,
  28. thereby stopping the status (titlebar) from being repeatedly redrawn
  29. during ShowQPasteWindow.
  30. * Misc. Painting Improvements:
  31. ! CWndEx::InvalidateNc(): redraw with RDW_NOCHILDREN
  32. . The client area was being invalidated without this.
  33. * CQListCtrl::OnEraseBkgnd(): faster when shift-scrolling.
  34. * CQListCtrl::OnSelectionChange(): delayed SetStatus for faster selection.
  35. 03 Sept 22
  36. ----------
  37. + Shared Data: Data can now be shared amongst multiple Clips.
  38. + DittoDB.mdb: Main.lDataID, Data.lDataID
  39. * SQL statements, e.g. INNER JOIN through Main.lID
  40. + Groups:
  41. + DittoDB.mdb: Main.bIsGroup, Main.lParentID, Main.dOrder
  42. * CCP_MainApp:
  43. + long m_GroupDefaultID; // new clips are saved to this group
  44. + long m_GroupID; // current group
  45. + long m_GroupParentID; // current group's parent
  46. + CString m_GroupText; // current group's description
  47. + BOOL EnterGroupID( long lID );
  48. + long GetValidGroupID(); // returns a valid id (not negative)
  49. + void SetGroupDefaultID( long lID ); // sets a valid id
  50. + Internal Clipboard for cut/copy/paste items between Groups
  51. CCP_MainApp:
  52. + bool m_IC_bCopy; // true to copy the items, false to move them
  53. + CClipIDs m_IC_IDs; // buffer
  54. + void IC_Cut( ARRAY* pIDs = NULL ); // if NULL, use current QPaste selection
  55. + void IC_Copy( ARRAY* pIDs = NULL ); // if NULL, use current QPaste selection
  56. + void IC_Paste();
  57. + Persistent QPasteWnd focus item
  58. + CCP_MainApp: long m_FocusID; // the ID given focus by CQPasteWnd::FillList
  59. * CQPasteWnd::FillList
  60. + Item Description: Show Leading WhiteSpace
  61. + CString CMainTable::GetDisplayText()
  62. * void CQPasteWnd::OnGetToolTipText()
  63. * CGetSetOptions:
  64. + static BOOL m_bDescShowLeadingWhiteSpace;
  65. + static void SetDescShowLeadingWhiteSpace(BOOL bVal);
  66. + static BOOL GetDescShowLeadingWhiteSpace();
  67. + QListCtrl Keys:
  68. + F7: Create a New Group
  69. + Ctrl-F7: Create a New Group of Selected Elements
  70. + Backspace: Go to parent group
  71. + Enter: Enter group or paste if clip
  72. + Alt-Home: Go to History Group
  73. + Alt-End: List all top level Groups
  74. + Ctrl-X: Move selection (establishes the source)
  75. + Ctrl-C: Copy selection (establishes the source)
  76. + Ctrl-V: Paste selection (Move or Copy)
  77. 03 Sept 14
  78. ----------
  79. + View caption on all sides (top, right, bottom, left)
  80. + Roll up window by button on caption or by auto roll up (rolls up when it looses focus)
  81. 03 Sept 10
  82. ----------
  83. + HistoryStartTop - History can be shown top-down or bottom-up
  84. + CGetSetOptions::m_bHistoryStartTop, SetHistoryStartTop, GetHistoryStartTop
  85. + BOOL CQPasteWnd::m_bAscending - sort ascending (true) or descending (false)
  86. * OptionsQuickPaste - added checkbox
  87. * CQListCtrl::
  88. + BOOL m_bStartTop - start at the top (true) or the bottom (false)
  89. + BOOL SetListPos( int index ) - moves cursor to a single index position
  90. + int GetFirstTenNum( int index ) - convert index to number
  91. + int GetFirstTenIndex( int num ) - convert number to index
  92. * OnCustomdrawList() - draws FirstTen block top or bottom
  93. * PreTranslateMessage() - handles FirstTen block (1-9,0) accelerators
  94. + CPopup - Manually display tooltips (Misc.h/.cpp)
  95. + View Full Description by pressing F3 using CPopup
  96. CQListCtrl::
  97. + CPopup m_Popup
  98. + OnKillFocus - removes Popup
  99. * PreTranslateMessage - handles F3 key
  100. * CopyProperties
  101. + CTokenizer (ASCII only) (Misc.h/.cpp)
  102. * Multiple delimiter characters are used rather than a single separator string.
  103. * Defaults to Focus on Description when not a NamedCopy
  104. * Uses CPopup for status
  105. 03 Sept 8
  106. ---------
  107. + static bool CDataTable::DeleteParent( long lParentID )
  108. . Deletes all records in Data Table with the given "lParentID"
  109. + Show Target Name in Status (TitleBar)
  110. + Ensure Connected to Clipboard Viewer Chain using dummy WM_DRAWCLIPBOARD
  111. CClipboardViewer:
  112. * OnCreate: SetTimer(TIMER_ENSURE_VIEWER_IN_CHAIN, ONE_MINUTE, 0);
  113. * WM_CV_RECONNECT - force reconnect if not in chain.
  114. * WM_CV_IS_CONNECTED - performs a ping of chain.
  115. + Custom Accelerators
  116. + Misc.h/.cpp: CAccel and CAccels
  117. ! fixes bug "can't use accelerators with clip IDs > 65535 (USHRT_MAX)"
  118. . this was due to win32 ACCEL only capable of handling a WORD cmd
  119. * Moved SendPaste to CCP_Main to implicitly use Target
  120. 03 Sept 5
  121. ---------
  122. + Snap to window now works on multiple monitors
  123. 03 Sept 4
  124. ---------
  125. + Ditto window snaps to window sides
  126. 03 Sept 3
  127. ---------
  128. + Text Item Parser in CopyProperties - parses a CF_TEXT item into multiple
  129. CF_TEXT items based upon a given separator string.
  130. + CEdit m_ParseEdit
  131. + CButton m_ParseButton
  132. + void OnBnClickedParseButton()
  133. + Misc
  134. + BYTE GetEscapeChar( BYTE ch );
  135. + CString RemoveEscapes( const char* str );
  136. + CClip::AddFormat
  137. + CClipList::AddToDB( bool bLatestTime = false, bool bShowStatus = true )
  138. * CClipFormat frees m_hgData on destruction
  139. * changed CCP_MainApp::SaveAllClips to CCP_MainApp::SaveCopyClips
  140. * changed CCP_MainApp::FixTime to CClip::MakeLatestTime()
  141. ! fixed bad connect / disconnect logic in CClipboardViewer
  142. 03 Sept 2
  143. ---------
  144. + ShowPersistent: always-on-top "persistent show"
  145. . Toggled by double clicking the titlebar or <Ctrl>-<Space>
  146. + theApp.ShowPersistent( bool bVal )
  147. * required modification of Target window tracking system.
  148. + Misc.h/.cpp
  149. + Utility functions (HGLOBAL funcs, IsAppWnd, StrF)
  150. + Debug functions (Log, SetThreadName)
  151. * ProcessCopy - redesigned to fix the fast copy bugs.
  152. . The same source object is used for the description as is stored in the db.
  153. . Actual copying from the clipboard is (usually) not interrupted.
  154. + CClip - For managing a Clip (copy of the clipboard) as a single unit.
  155. + CCopyThread - handles copying the clipboard when the clipboard changes and
  156. safely communicating with the Main thread.
  157. + CClipboardViewer - the Clipboard Viewer window (code factored out from
  158. MainWnd)
  159. + uses AllowDuplicates (non-sequential duplicates) flag
  160. * ProcessPaste - redesigned for delayed rendering during drag and drop and
  161. immediate rendering otherwise.
  162. + uses UpdateTimeOnPaste flag
  163. + uses SaveMultiPaste flag
  164. * CCP_MainApp Copy and Paste Management
  165. + bool EnableCbCopy(bool bState); // copy clipboad when it changes
  166. + long SaveAllClips(); // saves all clips copied by CCopyThread
  167. + void ReloadTypes(); // reloads the Types Table on demand
  168. + void Delayed_RemoveOldEntries( UINT delay ); // based on timer
  169. + void RefreshView(); // refreshes the view if it is visible
  170. + void OnCopyCompleted( long lLastID, int count = 1 );
  171. + void OnPasteCompleted();
  172. + void SetStatus(char*) // for displaying status in the titlebar.
  173. * Targeting the previous focus window
  174. + CCP_MainApp::
  175. + HWND m_hTargetWnd;
  176. + HWND TargetActiveWindow();
  177. + bool ActivateTarget();
  178. + bool ReleaseFocus(); // activate the target only if we are foreground
  179. * The foreground window is tracked rather than the focus window.
  180. . I think SetFocus doesn't do anything unless the hWnd is associated
  181. with our thread's message queue.
  182. + Targeting the previous focus window is handled properly when
  183. Ditto is activated by:
  184. 1. Mouse (in CMainFrame::PreTranslateMessage) OR
  185. 2. HotKey (in CQuickPaste::ShowQPasteWnd)
  186. !! Problems with Targeting still exist when Ditto is activated by a
  187. separate application (e.g. <Alt>-<Tab> or Taskbar Tray). This may
  188. eventually be fixed by using a system hook.
  189. . See source comment preceding TargetActiveWindow() in CP_Main.cpp
  190. * Streamlined <Ctrl> 0-9 Accelerators - now handled entirely in
  191. CQListCtrl::PreTranslateMessage
  192. - removed HACCEL m_acFirstTen in CQListCtrl
  193. * WndEx
  194. ! fixed the close "x" button display
  195. + bool SetCaptionColors( COLORREF left, COLORREF right );
  196. + bool SetCaptionColorActive( bool bVal );
  197. * Startup / Shutdown
  198. + CCP_MainApp::
  199. + bool m_bAppRunning;
  200. + bool m_bAppExiting;
  201. + CMainFrame* m_pMainFrame; // for quick access
  202. + void AfterMainCreate(); // called after main window creation
  203. + void BeforeMainClose(); // called before main window close
  204. * CGetSetOptions
  205. + Accessible through new global g_Opt
  206. + Some local flag variables so that always getting from Profile (registry)
  207. is not necessary (flags loaded on construction of g_Opt).
  208. * System HotKeys - Consolidated code in order to make adding and removing
  209. HotKeys programmatically easier.
  210. + class CHotKey and CHotKeys (g_HotKeys) in Misc.h/.cpp
  211. + CCP_MainApp
  212. + CHotKey* m_pDittoHotKey; // activate ditto's qpaste window
  213. + CHotKey* m_pCopyHotKey; // named copy
  214. . HotKey Management:
  215. . Create in CCP_MainApp::AfterMainCreate()
  216. . Handle in CMainFrame::OnHotKey()
  217. . Control user input in OptionsKeyBoard.
  218. 03 Aug 8
  219. --------
  220. + Implemented Multi-Selection Paste for CF_TEXT clips by "\r\n" concatenation
  221. * CQPasteWnd::OnListSelect()
  222. + BOOL CProcessPaste::MultiPaste( int numIDs, int* pIDs, HWND hWnd );
  223. + BOOL CProcessPaste::MultiDrag( int numIDs, int* pIDs, HWND hWnd );
  224. + CString CProcessPaste::AggregateText(int numIDs, int* pIDs, UINT uiPastType, char* pSeparator);
  225. + bool CopyToGlobal( HGLOBAL hGlobal, LPVOID pBuf, ULONG ulBufLen )
  226. + HGLOBAL NewGlobal( LPVOID pBuf, ULONG ulBufLen )
  227. * After a delete, position caret at first item deleted.
  228. * void CQPasteWnd::DeleteSelectedRows()
  229. ! Fixed Error "query too complex" when deleting large number of Clips
  230. * void CQPasteWnd::DeleteSelectedRows()
  231. + static BOOL CMainTable::DeleteAllClips();
  232. + static BOOL CMainTable::DeleteClip( int id );
  233. + static BOOL CMainTable::DeleteClips(ARRAY &IDs); (was called DeleteRows)
  234. 03 Aug 16
  235. ---------
  236. ! Perform GlobalUnlock after memcmp.
  237. * CDataTable::DataEqual
  238. ! Fixed "random" termination.
  239. * CMainFrame::OnTimer: added breaks to cases of switch.
  240. 03 Aug 11
  241. ---------
  242. ! Fixed string error in processcopy.cpp
  243. Legend:
  244. + = added
  245. - = removed
  246. * = modified
  247. ! = fixed
  248. . = info