AdvGeneral.cpp 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662
  1. // AdvGeneral.cpp : implementation file
  2. //
  3. #include "stdafx.h"
  4. #include "CP_Main.h"
  5. #include "AdvGeneral.h"
  6. #include "afxdialogex.h"
  7. #include "ScriptEditor.h"
  8. #include "DimWnd.h"
  9. // CAdvGeneral dialog
  10. IMPLEMENT_DYNAMIC(CAdvGeneral, CDialogEx)
  11. CAdvGeneral::CAdvGeneral(CWnd* pParent /*=NULL*/)
  12. : CDialogEx(CAdvGeneral::IDD, pParent)
  13. {
  14. }
  15. CAdvGeneral::~CAdvGeneral()
  16. {
  17. }
  18. void CAdvGeneral::DoDataExchange(CDataExchange* pDX)
  19. {
  20. CDialogEx::DoDataExchange(pDX);
  21. DDX_Control(pDX, IDC_MFCPROPERTYGRID1, m_propertyGrid);
  22. }
  23. BEGIN_MESSAGE_MAP(CAdvGeneral, CDialogEx)
  24. ON_BN_CLICKED(IDOK, &CAdvGeneral::OnBnClickedOk)
  25. ON_WM_SIZE()
  26. ON_BN_CLICKED(IDC_BT_COMPACT_AND_REPAIR, &CAdvGeneral::OnBnClickedBtCompactAndRepair)
  27. ON_BN_CLICKED(IDC_BUTTON_COPY_SCRIPTS, &CAdvGeneral::OnBnClickedButtonCopyScripts)
  28. ON_BN_CLICKED(IDC_BUTTON_PASTE_SCRIPTS, &CAdvGeneral::OnBnClickedButtonPasteScripts2)
  29. END_MESSAGE_MAP()
  30. // CAdvGeneral message handlers
  31. #define SETTING_DESC_SIZE 1
  32. #define SETTING_SHOW_TASKBAR_ICON 2
  33. #define SETTING_SAVE_MULTI_PASTE 3
  34. #define SETTING_HIDE_ON_HOTKEY_IF_VISIBLE 4
  35. #define SETTING_PASTE_IN_ACTIVE_WINDOW 5
  36. #define SETTING_MAX_CLIP_SIZE 6
  37. #define SETTING_CLIP_SEPARATOR 7
  38. #define SETTING_ENSURE_CONNECTED 8
  39. #define SETTING_COPY_PLAY_SOUND 9
  40. #define SETTING_TEXT_FIRST_TEN 10
  41. #define SETTING_SHOW_LEADING_WHITESPACE 11
  42. #define SETTING_LINES_PER_ROW 12
  43. #define SETTING_ENABLE_TRANSPARENCY 13
  44. #define SETTING_DRAW_THUMBNAILS 14
  45. #define SETTING_DRAW_RTF 15
  46. #define SETTING_FIND_AS_TYPE 16
  47. #define SETTING_ENSURE_WINDOW_IS_VISIBLE 17
  48. #define SETTING_SHOW_GROUP_CLIPS_IN_LIST 18
  49. #define SETTING_PROMP_ON_DELETE 19
  50. #define SETTING_ALWAYS_SHOW_SCROLL_BAR 20
  51. #define SETTING_PASTE_AS_ADMIN 21
  52. #define SETTTING_SHOW_IN_TASKBAR 22
  53. #define SETTING_SHOW_CLIP_PASTED 23
  54. #define SETTING_DIFF_APP 24
  55. #define SETTING_TRANSPARENCY 25
  56. #define SETTING_UPDATE_ORDER 26
  57. #define SETTING_ALLOW_DUPLICATES 27
  58. #define SETTING_REGEX_FILTERING_1 28
  59. #define SETTING_REGEX_FILTERING_2 29
  60. #define SETTING_REGEX_FILTERING_3 30
  61. #define SETTING_REGEX_FILTERING_4 31
  62. #define SETTING_REGEX_FILTERING_5 32
  63. #define SETTING_REGEX_FILTERING_6 33
  64. #define SETTING_REGEX_FILTERING_7 34
  65. #define SETTING_REGEX_FILTERING_8 35
  66. #define SETTING_REGEX_FILTERING_9 36
  67. #define SETTING_REGEX_FILTERING_10 37
  68. #define SETTING_REGEX_FILTERING_11 38
  69. #define SETTING_REGEX_FILTERING_12 39
  70. #define SETTING_REGEX_FILTERING_13 40
  71. #define SETTING_REGEX_FILTERING_14 41
  72. #define SETTING_REGEX_FILTERING_15 42
  73. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_1 43
  74. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_2 44
  75. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_3 45
  76. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_4 46
  77. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_5 47
  78. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_6 48
  79. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_7 49
  80. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_8 50
  81. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_9 51
  82. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_10 52
  83. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_11 53
  84. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_12 54
  85. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_13 55
  86. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_14 56
  87. #define SETTING_REGEX_FILTERING_BY_PROCESS_NAME_15 57
  88. #define SETTING_SHOW_STARTUP_MESSAGE 58
  89. #define SETTING_TOOLTIP_TIMEOUT 59
  90. #define SETTING_SELECTED_INDEX 60
  91. #define SETTING_CLIPBOARD_SAVE_DELAY 61
  92. BOOL CAdvGeneral::OnInitDialog()
  93. {
  94. CDialogEx::OnInitDialog();
  95. m_propertyGrid.ModifyStyle(0, WS_CLIPCHILDREN);
  96. CMFCPropertyGridProperty * pGroupTest = new CMFCPropertyGridProperty( _T( "Ditto" ) );
  97. m_propertyGrid.AddProperty(pGroupTest);
  98. m_Resize.SetParent(m_hWnd);
  99. m_Resize.AddControl(IDC_MFCPROPERTYGRID1, DR_SizeWidth | DR_SizeHeight);
  100. m_Resize.AddControl(IDOK, DR_MoveTop | DR_MoveLeft);
  101. m_Resize.AddControl(IDCANCEL, DR_MoveTop | DR_MoveLeft);
  102. m_Resize.AddControl(IDC_BT_COMPACT_AND_REPAIR, DR_MoveTop);
  103. m_Resize.AddControl(IDC_BUTTON_COPY_SCRIPTS, DR_MoveTop);
  104. m_Resize.AddControl(IDC_BUTTON_PASTE_SCRIPTS, DR_MoveTop);
  105. HDITEM hdItem;
  106. hdItem.mask = HDI_WIDTH; // indicating cxy is width
  107. hdItem.cxy = 300; // whatever you want the property name column width to be
  108. m_propertyGrid.GetHeaderCtrl().SetItem(0, &hdItem);
  109. m_propertyGrid.SetFont(this->GetFont());
  110. AddTrueFalse(pGroupTest, _T("Allow Duplicates"), CGetSetOptions::GetAllowDuplicates(), SETTING_ALLOW_DUPLICATES);
  111. AddTrueFalse(pGroupTest, _T("Always Show Scroll Bar"), CGetSetOptions::GetShowScrollBar(), SETTING_ALWAYS_SHOW_SCROLL_BAR);
  112. pGroupTest->AddSubItem( new CMFCPropertyGridProperty(_T("Amount of text to save for description"), g_Opt.m_bDescTextSize, _T(""), SETTING_DESC_SIZE));
  113. static TCHAR BASED_CODE szDiffFilter[] = _T("Diff Applications(*.exe)|*.exe||");
  114. CMFCPropertyGridFileProperty* pDiffProp = new CMFCPropertyGridFileProperty(_T("Diff Application Path"), TRUE, CGetSetOptions::GetDiffApp(), _T("exe"), 0, szDiffFilter, (LPCTSTR)0, SETTING_DIFF_APP);
  115. pGroupTest->AddSubItem(pDiffProp);
  116. AddTrueFalse(pGroupTest, _T("Display Icon in System Tray"), CGetSetOptions::GetShowIconInSysTray(), SETTING_SHOW_TASKBAR_ICON);
  117. AddTrueFalse(pGroupTest, _T("Draw RTF Text in List(for RTF types) (Could Increase Memory Usage an Display Speed)"), CGetSetOptions::GetDrawRTF(), SETTING_DRAW_RTF);
  118. AddTrueFalse(pGroupTest, _T("Elevated privileges to paste into elevated apps"), CGetSetOptions::GetPasteAsAdmin(), SETTING_PASTE_AS_ADMIN);
  119. AddTrueFalse(pGroupTest, _T("Ensure Ditto is always connected to the clipboard"), CGetSetOptions::GetEnsureConnectToClipboard(), SETTING_ENSURE_CONNECTED);
  120. AddTrueFalse(pGroupTest, _T("Ensure Entire Window is Visible"), CGetSetOptions::GetEnsureEntireWindowCanBeSeen(), SETTING_ENSURE_WINDOW_IS_VISIBLE);
  121. AddTrueFalse(pGroupTest, _T("Find As You Type"), CGetSetOptions::GetFindAsYouType(), SETTING_FIND_AS_TYPE);
  122. AddTrueFalse(pGroupTest, _T("Hide Ditto on Hot Key if Ditto is Visible"), CGetSetOptions::GetHideDittoOnHotKeyIfAlreadyShown(), SETTING_HIDE_ON_HOTKEY_IF_VISIBLE);
  123. pGroupTest->AddSubItem( new CMFCPropertyGridProperty(_T("Maximum Clip Size in Bytes (0 for no limit)"), g_Opt.m_lMaxClipSizeInBytes, _T(""), SETTING_MAX_CLIP_SIZE));
  124. pGroupTest->AddSubItem( new CMFCPropertyGridProperty(_T("Multi-Paste clip separator ([LF] = line feed)"), g_Opt.GetMultiPasteSeparator(false), _T(""), SETTING_CLIP_SEPARATOR));
  125. static TCHAR BASED_CODE szFilter[] = _T("Sounds(*.wav)|*.wav||");
  126. CMFCPropertyGridFileProperty* pFileProp = new CMFCPropertyGridFileProperty(_T("On copy play the sound"), TRUE, CGetSetOptions::GetPlaySoundOnCopy(), _T("wav"), 0, szFilter, (LPCTSTR)0, SETTING_COPY_PLAY_SOUND);
  127. pGroupTest->AddSubItem(pFileProp);
  128. AddTrueFalse(pGroupTest, _T("Paste Clip in active window after selection"), CGetSetOptions::GetSendPasteAfterSelection(), SETTING_PASTE_IN_ACTIVE_WINDOW);
  129. AddTrueFalse(pGroupTest, _T("Prompt when deleting clips"), CGetSetOptions::GetPromptWhenDeletingClips(), SETTING_PROMP_ON_DELETE);
  130. pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Save Clipboard Delay (ms, default: 100))"), (long)(CGetSetOptions::GetProcessDrawClipboardDelay()), _T(""), SETTING_CLIPBOARD_SAVE_DELAY));
  131. AddTrueFalse(pGroupTest, _T("Save Multi-Pastes"), CGetSetOptions::GetSaveMultiPaste(), SETTING_SAVE_MULTI_PASTE);
  132. pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Selected Index"), (long)(CGetSetOptions::SelectedIndex()+1), _T(""), SETTING_SELECTED_INDEX));
  133. AddTrueFalse(pGroupTest, _T("Show Clips That are in Groups in Main List"), CGetSetOptions::GetShowAllClipsInMainList(), SETTING_SHOW_GROUP_CLIPS_IN_LIST);
  134. AddTrueFalse(pGroupTest, _T("Show leading whitespace"), CGetSetOptions::GetDescShowLeadingWhiteSpace(), SETTING_SHOW_LEADING_WHITESPACE);
  135. AddTrueFalse(pGroupTest, _T("Show In Taskbar"), CGetSetOptions::GetShowInTaskBar(), SETTTING_SHOW_IN_TASKBAR);
  136. AddTrueFalse(pGroupTest, _T("Show indicator a clip has been pasted"), CGetSetOptions::GetShowIfClipWasPasted(), SETTING_SHOW_CLIP_PASTED);
  137. AddTrueFalse(pGroupTest, _T("Show startup tooltip message"), CGetSetOptions::GetShowStartupMessage(), SETTING_SHOW_STARTUP_MESSAGE);
  138. AddTrueFalse(pGroupTest, _T("Show text for first ten copy hot keys"), CGetSetOptions::GetShowTextForFirstTenHotKeys(), SETTING_TEXT_FIRST_TEN);
  139. AddTrueFalse(pGroupTest, _T("Show thumbnails(for CF_DIB types) (Could Increase Memory Usage and Display Speed)"), CGetSetOptions::GetDrawThumbnail(), SETTING_DRAW_THUMBNAILS);
  140. pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Text Lines per Clip"), CGetSetOptions::GetLinesPerRow(), _T(""), SETTING_LINES_PER_ROW));
  141. pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Tooltip timeout(ms) max of 32000"), g_Opt.m_tooltipTimeout, _T(""), SETTING_TOOLTIP_TIMEOUT));
  142. AddTrueFalse(pGroupTest, _T("Transparency Enabled"), CGetSetOptions::GetEnableTransparency(), SETTING_ENABLE_TRANSPARENCY);
  143. pGroupTest->AddSubItem(new CMFCPropertyGridProperty(_T("Transparency Percentage"), CGetSetOptions::GetTransparencyPercent(), _T(""), SETTING_TRANSPARENCY));
  144. AddTrueFalse(pGroupTest, _T("Update Clip Order On Paste"), CGetSetOptions::GetUpdateTimeOnPaste(), SETTING_UPDATE_ORDER);
  145. CMFCPropertyGridProperty * regexFilterGroup = new CMFCPropertyGridProperty(_T("Exlude clips by Regular Expressions"));
  146. m_propertyGrid.AddProperty(regexFilterGroup);
  147. CString processFilterDesc = _T("Process making the copy first must match this before the Regex will be applied (empty or * for all processes) (separate multiples by ;)");
  148. CString regexFilterDesc = _T("If copied text matches this regular expression then the clip will not be saved to Ditto");
  149. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("1 Regex"), CGetSetOptions::GetRegexFilter(0), regexFilterDesc, SETTING_REGEX_FILTERING_1));
  150. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("1 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(0), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_1));
  151. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("2 Regex"), CGetSetOptions::GetRegexFilter(1), regexFilterDesc, SETTING_REGEX_FILTERING_2));
  152. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("2 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(1), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_2));
  153. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("3 Regex"), CGetSetOptions::GetRegexFilter(2), regexFilterDesc, SETTING_REGEX_FILTERING_3));
  154. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("3 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(2), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_3));
  155. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("4 Regex"), CGetSetOptions::GetRegexFilter(3), regexFilterDesc, SETTING_REGEX_FILTERING_4));
  156. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("4 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(3), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_4));
  157. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("5 Regex"), CGetSetOptions::GetRegexFilter(4), regexFilterDesc, SETTING_REGEX_FILTERING_5));
  158. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("5 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(4), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_5));
  159. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("6 Regex"), CGetSetOptions::GetRegexFilter(5), regexFilterDesc, SETTING_REGEX_FILTERING_6));
  160. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("6 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(5), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_6));
  161. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("7 Regex"), CGetSetOptions::GetRegexFilter(6), regexFilterDesc, SETTING_REGEX_FILTERING_7));
  162. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("7 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(6), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_7));
  163. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("8 Regex"), CGetSetOptions::GetRegexFilter(7), regexFilterDesc, SETTING_REGEX_FILTERING_8));
  164. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("8 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(7), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_8));
  165. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("9 Regex"), CGetSetOptions::GetRegexFilter(8), regexFilterDesc, SETTING_REGEX_FILTERING_9));
  166. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("9 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(8), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_9));
  167. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("10 Regex"), CGetSetOptions::GetRegexFilter(9), regexFilterDesc, SETTING_REGEX_FILTERING_10));
  168. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("10 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(9), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_10));
  169. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("11 Regex"), CGetSetOptions::GetRegexFilter(10), regexFilterDesc, SETTING_REGEX_FILTERING_11));
  170. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("11 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(10), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_11));
  171. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("12 Regex"), CGetSetOptions::GetRegexFilter(11), regexFilterDesc, SETTING_REGEX_FILTERING_12));
  172. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("12 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(11), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_12));
  173. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("13 Regex"), CGetSetOptions::GetRegexFilter(12), regexFilterDesc, SETTING_REGEX_FILTERING_13));
  174. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("13 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(12), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_13));
  175. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("14 Regex"), CGetSetOptions::GetRegexFilter(13), regexFilterDesc, SETTING_REGEX_FILTERING_14));
  176. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("14 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(13), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_14));
  177. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("15 Regex"), CGetSetOptions::GetRegexFilter(14), regexFilterDesc, SETTING_REGEX_FILTERING_15));
  178. regexFilterGroup->AddSubItem(new CMFCPropertyGridProperty(_T("15 Process Name"), CGetSetOptions::GetRegexFilterByProcessName(14), processFilterDesc, SETTING_REGEX_FILTERING_BY_PROCESS_NAME_14));
  179. regexFilterGroup->Expand(FALSE);
  180. return TRUE;
  181. }
  182. void CAdvGeneral::AddTrueFalse(CMFCPropertyGridProperty * pGroupTest, CString desc, BOOL value, int settingId)
  183. {
  184. CString stringValue = _T("False");
  185. if(value)
  186. {
  187. stringValue = _T("True");
  188. }
  189. CMFCPropertyGridProperty *pCombo = new CMFCPropertyGridProperty(desc, stringValue, _T(""), settingId);
  190. pCombo->AddOption(_T("True"));
  191. pCombo->AddOption(_T("False"));
  192. pCombo->AllowEdit(FALSE);
  193. pGroupTest->AddSubItem(pCombo);
  194. }
  195. void CAdvGeneral::OnBnClickedOk()
  196. {
  197. int topLevelCount = m_propertyGrid.GetPropertyCount();
  198. for (int topLevel = 0; topLevel < topLevelCount; topLevel++)
  199. {
  200. int count = m_propertyGrid.GetProperty(topLevel)->GetSubItemsCount();
  201. for (int row = 0; row < count; row++)
  202. {
  203. CMFCPropertyGridProperty* prop = m_propertyGrid.GetProperty(topLevel)->GetSubItem(row);
  204. COleVariant i = prop->GetValue();
  205. LPVARIANT pNewValue = (LPVARIANT)i;
  206. COleVariant iOrig = prop->GetOriginalValue();
  207. LPVARIANT pOrigValue = (LPVARIANT)iOrig;
  208. switch ((int)prop->GetData())
  209. {
  210. case SETTING_DESC_SIZE:
  211. if (pNewValue->lVal != pOrigValue->lVal)
  212. {
  213. CGetSetOptions::SetDescTextSize(pNewValue->lVal);
  214. }
  215. break;
  216. case SETTING_SELECTED_INDEX:
  217. if (pNewValue->lVal != pOrigValue->lVal)
  218. {
  219. CGetSetOptions::SetSelectedIndex(max((pNewValue->lVal-1), 0));
  220. }
  221. break;
  222. case SETTING_CLIPBOARD_SAVE_DELAY:
  223. if (pNewValue->lVal != pOrigValue->lVal)
  224. {
  225. CGetSetOptions::SetProcessDrawClipboardDelay(max(pNewValue->lVal, 0));
  226. }
  227. break;
  228. case SETTING_SHOW_TASKBAR_ICON:
  229. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  230. {
  231. BOOL val = false;
  232. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  233. {
  234. val = true;
  235. }
  236. CGetSetOptions::SetShowIconInSysTray(val);
  237. }
  238. break;
  239. case SETTING_SAVE_MULTI_PASTE:
  240. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  241. {
  242. BOOL val = false;
  243. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  244. {
  245. val = true;
  246. }
  247. CGetSetOptions::SetSaveMultiPaste(val);
  248. }
  249. break;
  250. case SETTING_HIDE_ON_HOTKEY_IF_VISIBLE:
  251. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  252. {
  253. BOOL val = false;
  254. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  255. {
  256. val = true;
  257. }
  258. CGetSetOptions::SetHideDittoOnHotKeyIfAlreadyShown(val);
  259. }
  260. break;
  261. case SETTING_PASTE_IN_ACTIVE_WINDOW:
  262. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  263. {
  264. BOOL val = false;
  265. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  266. {
  267. val = true;
  268. }
  269. CGetSetOptions::SetSendPasteAfterSelection(val);
  270. }
  271. break;
  272. case SETTING_MAX_CLIP_SIZE:
  273. if (pNewValue->lVal != pOrigValue->lVal)
  274. {
  275. CGetSetOptions::SetMaxClipSizeInBytes(pNewValue->lVal);
  276. }
  277. break;
  278. case SETTING_CLIP_SEPARATOR:
  279. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  280. {
  281. CGetSetOptions::SetMultiPasteSeparator(pNewValue->bstrVal);
  282. }
  283. break;
  284. case SETTING_ENSURE_CONNECTED:
  285. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  286. {
  287. BOOL val = false;
  288. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  289. {
  290. val = true;
  291. }
  292. CGetSetOptions::SetEnsureConnectToClipboard(val);
  293. }
  294. break;
  295. case SETTING_COPY_PLAY_SOUND:
  296. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  297. {
  298. CGetSetOptions::SetPlaySoundOnCopy(pNewValue->bstrVal);
  299. }
  300. break;
  301. case SETTING_TEXT_FIRST_TEN:
  302. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  303. {
  304. BOOL val = false;
  305. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  306. {
  307. val = true;
  308. }
  309. CGetSetOptions::SetShowTextForFirstTenHotKeys(val);
  310. }
  311. break;
  312. case SETTING_SHOW_LEADING_WHITESPACE:
  313. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  314. {
  315. BOOL val = false;
  316. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  317. {
  318. val = true;
  319. }
  320. CGetSetOptions::SetDescShowLeadingWhiteSpace(val);
  321. }
  322. break;
  323. case SETTING_LINES_PER_ROW:
  324. if (pNewValue->lVal != pOrigValue->lVal)
  325. {
  326. CGetSetOptions::SetLinesPerRow(pNewValue->lVal);
  327. }
  328. break;
  329. case SETTING_ENABLE_TRANSPARENCY:
  330. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  331. {
  332. BOOL val = false;
  333. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  334. {
  335. val = true;
  336. }
  337. CGetSetOptions::SetEnableTransparency(val);
  338. }
  339. break;
  340. case SETTING_TRANSPARENCY:
  341. if (pNewValue->lVal != pOrigValue->lVal)
  342. {
  343. int value = 100;
  344. if (pNewValue->lVal <= 100 && pNewValue->lVal > 0)
  345. {
  346. value = pNewValue->lVal;
  347. }
  348. CGetSetOptions::SetTransparencyPercent(value);
  349. }
  350. break;
  351. case SETTING_DRAW_THUMBNAILS:
  352. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  353. {
  354. BOOL val = false;
  355. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  356. {
  357. val = true;
  358. }
  359. CGetSetOptions::SetDrawThumbnail(val);
  360. }
  361. break;
  362. case SETTING_DRAW_RTF:
  363. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  364. {
  365. BOOL val = false;
  366. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  367. {
  368. val = true;
  369. }
  370. CGetSetOptions::SetDrawRTF(val);
  371. }
  372. break;
  373. case SETTING_FIND_AS_TYPE:
  374. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  375. {
  376. BOOL val = false;
  377. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  378. {
  379. val = true;
  380. }
  381. CGetSetOptions::SetFindAsYouType(val);
  382. }
  383. break;
  384. case SETTING_ENSURE_WINDOW_IS_VISIBLE:
  385. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  386. {
  387. BOOL val = false;
  388. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  389. {
  390. val = true;
  391. }
  392. CGetSetOptions::SetEnsureEntireWindowCanBeSeen(val);
  393. }
  394. break;
  395. case SETTING_SHOW_GROUP_CLIPS_IN_LIST:
  396. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  397. {
  398. BOOL val = false;
  399. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  400. {
  401. val = true;
  402. }
  403. CGetSetOptions::SetShowAllClipsInMainList(val);
  404. }
  405. break;
  406. case SETTING_PROMP_ON_DELETE:
  407. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  408. {
  409. BOOL val = false;
  410. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  411. {
  412. val = true;
  413. }
  414. CGetSetOptions::SetPromptWhenDeletingClips(val);
  415. }
  416. break;
  417. case SETTING_ALWAYS_SHOW_SCROLL_BAR:
  418. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  419. {
  420. BOOL val = false;
  421. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  422. {
  423. val = true;
  424. }
  425. CGetSetOptions::SetShowScrollBar(val);
  426. }
  427. break;
  428. case SETTING_PASTE_AS_ADMIN:
  429. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  430. {
  431. BOOL val = false;
  432. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  433. {
  434. val = true;
  435. }
  436. CGetSetOptions::SetPasteAsAdmin(val);
  437. }
  438. break;
  439. case SETTTING_SHOW_IN_TASKBAR:
  440. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  441. {
  442. BOOL val = false;
  443. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  444. {
  445. val = true;
  446. }
  447. CGetSetOptions::SetShowInTaskBar(val);
  448. }
  449. break;
  450. case SETTING_SHOW_CLIP_PASTED:
  451. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  452. {
  453. BOOL val = false;
  454. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  455. {
  456. val = true;
  457. }
  458. CGetSetOptions::SetShowIfClipWasPasted(val);
  459. }
  460. break;
  461. case SETTING_DIFF_APP:
  462. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  463. {
  464. CGetSetOptions::SetDiffApp(pNewValue->bstrVal);
  465. }
  466. break;
  467. case SETTING_UPDATE_ORDER:
  468. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  469. {
  470. BOOL val = false;
  471. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  472. {
  473. val = true;
  474. }
  475. CGetSetOptions::SetUpdateTimeOnPaste(val);
  476. }
  477. break;
  478. case SETTING_ALLOW_DUPLICATES:
  479. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  480. {
  481. BOOL val = false;
  482. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  483. {
  484. val = true;
  485. }
  486. CGetSetOptions::SetAllowDuplicates(val);
  487. }
  488. break;
  489. case SETTING_REGEX_FILTERING_1:
  490. case SETTING_REGEX_FILTERING_2:
  491. case SETTING_REGEX_FILTERING_3:
  492. case SETTING_REGEX_FILTERING_4:
  493. case SETTING_REGEX_FILTERING_5:
  494. case SETTING_REGEX_FILTERING_6:
  495. case SETTING_REGEX_FILTERING_7:
  496. case SETTING_REGEX_FILTERING_8:
  497. case SETTING_REGEX_FILTERING_9:
  498. case SETTING_REGEX_FILTERING_10:
  499. case SETTING_REGEX_FILTERING_11:
  500. case SETTING_REGEX_FILTERING_12:
  501. case SETTING_REGEX_FILTERING_13:
  502. case SETTING_REGEX_FILTERING_14:
  503. case SETTING_REGEX_FILTERING_15:
  504. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  505. {
  506. CGetSetOptions::SetRegexFilter(pNewValue->bstrVal, (((int)prop->GetData()) - SETTING_REGEX_FILTERING_1));
  507. }
  508. break;
  509. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_1:
  510. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_2:
  511. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_3:
  512. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_4:
  513. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_5:
  514. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_6:
  515. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_7:
  516. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_8:
  517. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_9:
  518. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_10:
  519. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_11:
  520. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_12:
  521. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_13:
  522. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_14:
  523. case SETTING_REGEX_FILTERING_BY_PROCESS_NAME_15:
  524. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  525. {
  526. CGetSetOptions::SetRegexFilterByProcessName(pNewValue->bstrVal, (((int)prop->GetData()) - SETTING_REGEX_FILTERING_BY_PROCESS_NAME_1));
  527. }
  528. break;
  529. case SETTING_SHOW_STARTUP_MESSAGE:
  530. if (wcscmp(pNewValue->bstrVal, pOrigValue->bstrVal) != 0)
  531. {
  532. BOOL val = false;
  533. if (wcscmp(pNewValue->bstrVal, L"True") == 0)
  534. {
  535. val = true;
  536. }
  537. CGetSetOptions::SetShowStartupMessage(val);
  538. }
  539. break;
  540. case SETTING_TOOLTIP_TIMEOUT:
  541. if (pNewValue->lVal != pOrigValue->lVal)
  542. {
  543. CGetSetOptions::SetToolTipTimeout(pNewValue->lVal);
  544. }
  545. break;
  546. }
  547. }
  548. }
  549. CDialogEx::OnOK();
  550. }
  551. void CAdvGeneral::OnSize(UINT nType, int cx, int cy)
  552. {
  553. CDialogEx::OnSize(nType, cx, cy);
  554. m_Resize.MoveControls(CSize(cx, cy));
  555. }
  556. void CAdvGeneral::OnBnClickedBtCompactAndRepair()
  557. {
  558. CWaitCursor wait;
  559. try
  560. {
  561. try
  562. {
  563. for (int i = 0; i < 100; i++)
  564. {
  565. int toDeleteCount = theApp.m_db.execScalar(_T("SELECT COUNT(clipID) FROM MainDeletes"));
  566. if (toDeleteCount <= 0)
  567. break;
  568. RemoveOldEntries(false);
  569. }
  570. }
  571. CATCH_SQLITE_EXCEPTION
  572. theApp.m_db.execDML(_T("PRAGMA auto_vacuum = 1"));
  573. theApp.m_db.execQuery(_T("VACUUM"));
  574. }
  575. CATCH_SQLITE_EXCEPTION
  576. }
  577. void CAdvGeneral::OnBnClickedButtonCopyScripts()
  578. {
  579. CDimWnd dim(this);
  580. CScriptEditor e(this);
  581. e.m_xml.Load(CGetSetOptions::GetCopyScriptsXml());
  582. if (e.DoModal() == IDOK)
  583. {
  584. CGetSetOptions::SetCopyScriptsXml(e.m_xml.Save());
  585. }
  586. }
  587. void CAdvGeneral::OnBnClickedButtonPasteScripts2()
  588. {
  589. CDimWnd dim(this);
  590. CScriptEditor e(this);
  591. e.m_xml.Load(CGetSetOptions::GetPasteScriptsXml());
  592. if (e.DoModal() == IDOK)
  593. {
  594. CGetSetOptions::SetPasteScriptsXml(e.m_xml.Save());
  595. }
  596. }