AdvGeneral.cpp 24 KB

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