DittoAddins.cpp 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. #include "stdafx.h"
  2. #include ".\dittoaddins.h"
  3. #include "InternetUpdate.h"
  4. #include "CP_Main.h"
  5. CDittoAddins::CDittoAddins(void)
  6. {
  7. }
  8. CDittoAddins::~CDittoAddins(void)
  9. {
  10. UnloadAll();
  11. }
  12. bool CDittoAddins::UnloadAll()
  13. {
  14. Log(StrF(_T("Ditto Addin - Unloading all addins Count: %d"), m_Addins.size()));
  15. int nCount = m_Addins.size();
  16. for(int i = 0; i < nCount; i++)
  17. {
  18. CDittoAddin *pAddin = m_Addins[i];
  19. if(pAddin)
  20. {
  21. delete pAddin;
  22. pAddin = NULL;
  23. }
  24. }
  25. m_Addins.clear();
  26. return true;
  27. }
  28. bool CDittoAddins::LoadAll()
  29. {
  30. CDittoInfo DittoInfo;
  31. LoadDittoInfo(DittoInfo);
  32. CString csDir = CGetSetOptions::GetPath(PATH_ADDINS);
  33. CFileFind find;
  34. BOOL bCont = find.FindFile(csDir + _T("*.dll"));
  35. while(bCont)
  36. {
  37. bCont = find.FindNextFile();
  38. Log(StrF(_T("Ditto Addin - Trying to load addin file %s"), find.GetFilePath()));
  39. CDittoAddin *pAddin = new CDittoAddin;
  40. if(pAddin->DoLoad(find.GetFilePath(), DittoInfo))
  41. {
  42. Log(StrF(_T("Ditto Addin - Success, loaded addin: %s"), find.GetFilePath()));
  43. m_Addins.push_back(pAddin);
  44. }
  45. else
  46. {
  47. Log(StrF(_T("Ditto Addin - Failed loading Adding Error: %s"), pAddin->LastError()));
  48. delete pAddin;
  49. pAddin = NULL;
  50. }
  51. }
  52. return m_Addins.size() > 0;
  53. }
  54. bool CDittoAddins::AddPrePasteAddinsToMenu(CMenu *pMenu)
  55. {
  56. bool bRet = false;
  57. m_FunctionMap.RemoveAll();
  58. int nMenuId = 3000;
  59. HMENU AllAddinsMenu = ::CreateMenu();
  60. int nCount = m_Addins.size();
  61. for(int i = 0; i < nCount; i++)
  62. {
  63. CDittoAddin *pAddin = m_Addins[i];
  64. if(pAddin)
  65. {
  66. int nSubCount = pAddin->m_PrePasteFunctions.size();
  67. if(nSubCount > 0)
  68. {
  69. HMENU AddinMenu = ::CreateMenu();
  70. for(int x = 0; x < nSubCount; x++)
  71. {
  72. ::AppendMenu(AddinMenu, MF_ENABLED, nMenuId, pAddin->m_PrePasteFunctions[x].m_csDisplayName);
  73. CFunctionLookup lookup;
  74. lookup.m_csFunctionName = pAddin->m_PrePasteFunctions[x].m_csFunction;
  75. lookup.m_pAddin = pAddin;
  76. m_FunctionMap.SetAt(nMenuId, lookup);
  77. nMenuId++;
  78. }
  79. ::AppendMenu(AllAddinsMenu, MF_ENABLED|MF_POPUP, (UINT)AddinMenu, pAddin->DisplayName());
  80. bRet = true;
  81. }
  82. }
  83. }
  84. if(bRet)
  85. {
  86. pMenu->InsertMenu(3, MF_BYPOSITION|MF_ENABLED|MF_STRING|MF_POPUP, (UINT)AllAddinsMenu, _T("Add-Ins"));
  87. }
  88. return bRet;
  89. }
  90. bool CDittoAddins::CallPrePasteFunction(int Id, IClip *pClip)
  91. {
  92. bool bRet = false;
  93. CFunctionLookup func;
  94. if(m_FunctionMap.Lookup(Id, func))
  95. {
  96. CDittoInfo DittoInfo;
  97. LoadDittoInfo(DittoInfo);
  98. bRet = func.m_pAddin->PrePasteFunction(DittoInfo, func.m_csFunctionName, pClip);
  99. }
  100. return bRet;
  101. }
  102. void CDittoAddins::LoadDittoInfo(CDittoInfo &DittoInfo)
  103. {
  104. DittoInfo.m_csDatabasePath = CGetSetOptions::GetDBPath();
  105. DittoInfo.m_csLanguageCode = theApp.m_Language.GetLangCode();
  106. CInternetUpdate update;
  107. DittoInfo.m_nVersion = update.GetRunningVersion();
  108. DittoInfo.m_csSqliteVersion = sqlite3_libversion();
  109. DittoInfo.m_hWndDitto = theApp.QPastehWnd();
  110. }