OSDN Git Service

Fix build errors
[winmerge-jp/winmerge-jp.git] / Src / PluginManager.cpp
1 /**
2  *  @file PluginManager.cpp
3  *
4  *  @brief Implementation of PluginManager class
5  */ 
6 //////////////////////////////////////////////////////////////////////
7
8 #include "pch.h"
9 #include "PluginManager.h"
10 #include <Poco/ScopedLock.h>
11
12 using Poco::FastMutex;
13
14 PluginManager::~PluginManager()
15 {
16 }
17
18 /**
19  * @brief retrieve relevant plugin settings for specified comparison
20  */
21 void PluginManager::FetchPluginInfos(const String& filteredFilenames, 
22                                      PackingInfo ** infoUnpacker, 
23                                      PrediffingInfo ** infoPrediffer)
24 {
25         FastMutex::ScopedLock lock(m_mutex);
26         PluginFileInfoPtr fi;
27         PluginFileInfoMap::iterator it = m_pluginSettings.find(filteredFilenames);
28         if (it == m_pluginSettings.end())
29         {
30                 // This might be a good place to set any user-specified default values
31                 fi.reset(new PluginFileInfo);
32                 m_pluginSettings[filteredFilenames] = fi;
33         }
34         else
35         {
36                 fi = it->second;
37         }
38         *infoUnpacker = &fi->m_infoUnpacker;
39         *infoPrediffer = &fi->m_infoPrediffer;
40 }
41
42 /**
43  * @brief Store specified prediff choice for specified comparison
44  */
45 void PluginManager::SetPrediffSetting(const String& filteredFilenames, PLUGIN_MODE newsetting)
46 {
47         PackingInfo * infoUnpacker = nullptr;
48         PrediffingInfo * infoPrediffer = nullptr;
49         FetchPluginInfos(filteredFilenames, &infoUnpacker, &infoPrediffer);
50         infoPrediffer->Initialize(newsetting);
51 }
52
53 void PluginManager::SetPrediffSettingAll(PLUGIN_MODE newsetting)
54 {
55         FastMutex::ScopedLock lock(m_mutex);
56         for (PluginFileInfoMap::iterator it = m_pluginSettings.begin(); it != m_pluginSettings.end(); ++it)
57         {
58                 PluginFileInfoPtr fi;
59                 fi.reset(new PluginFileInfo);
60                 fi->m_infoPrediffer.Initialize(newsetting);
61                 (*it).second = fi;
62         }
63 }
64
65 void PluginManager::SetPrediffer(const String& filteredFilenames, const String & prediffer)
66 {
67         PackingInfo * infoUnpacker = nullptr;
68         PrediffingInfo * infoPrediffer = nullptr;
69         FetchPluginInfos(filteredFilenames, &infoUnpacker, &infoPrediffer);
70         infoPrediffer->m_PluginName = prediffer;
71 }