OSDN Git Service

Improve plugin system (#797) (2)
authorTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 20 Jun 2021 12:57:09 +0000 (21:57 +0900)
committerTakashi Sawanaka <sdottaka@users.sourceforge.net>
Sun, 20 Jun 2021 12:57:09 +0000 (21:57 +0900)
Src/FileTransform.cpp
Src/MainFrm.cpp
Src/MergeDoc.cpp

index ddd54c0..161dd3c 100644 (file)
@@ -755,6 +755,10 @@ CreatePluginMenuInfos(const String& filteredFilenames, const std::vector<std::ws
        std::map<String, int> captions;
        unsigned id = baseId;
        bool addedNoneAutomatic = false;
+       static PluginInfo noPlugin;
+       static PluginInfo autoPlugin;
+       if (autoPlugin.m_name.empty())
+               autoPlugin.m_name = _T("<Automatic>");
        for (const auto& event: events)
        {
                auto pScriptArray =
@@ -769,8 +773,8 @@ CreatePluginMenuInfos(const String& filteredFilenames, const std::vector<std::ws
                                        {
                                                String process = _T("");
                                                allPlugins.insert_or_assign(process, std::vector<std::tuple<String, String, unsigned, PluginInfo *>>());
-                                               allPlugins[process].emplace_back(_("<None>"), _T(""), id++, plugin.get());
-                                               allPlugins[process].emplace_back(_("<Automatic>"), _T("<Automatic>"), id++, plugin.get());
+                                               allPlugins[process].emplace_back(_("<None>"), _T(""), id++, &noPlugin);
+                                               allPlugins[process].emplace_back(_("<Automatic>"), _T("<Automatic>"), id++, &autoPlugin);
                                                addedNoneAutomatic = true;
                                        }
                                        const auto menuCaption = plugin->GetExtendedPropertyValue(_T("MenuCaption"));
index 6c0adba..c7d5372 100644 (file)
@@ -2960,17 +2960,15 @@ String CMainFrame::GetPluginPipelineByMenuId(unsigned idSearch, const std::vecto
 {
        PluginInfo* pluginFound = nullptr;
        auto [suggestedPlugins, allPlugins] = FileTransform::CreatePluginMenuInfos(_T(""), events, baseId);
-       for (const auto& [caption, name, id, plugin] : suggestedPlugins)
-       {
-               if (id == idSearch)
-                       pluginFound = plugin;
-       }
        for (const auto& [processType, pluginList] : allPlugins)
        {
                for (const auto& [caption, name, id, plugin] : pluginList)
                {
                        if (id == idSearch)
+                       {
                                pluginFound = plugin;
+                               break;
+                       }
                }
        }
        if (pluginFound)
index 5f66004..6bc48a2 100644 (file)
@@ -3400,7 +3400,7 @@ void CMergeDoc::OnOpenWithUnpacker()
        int nID = m_ptBuf[0]->GetTableEditing() ? ID_MERGE_COMPARE_TABLE : ID_MERGE_COMPARE_TEXT;
 
        if (GetMainFrame()->DoFileOpen(nID, &paths, dwFlags, strDesc, _T(""), &infoUnpacker))
-               CloseNow();
+               GetParentFrame()->DestroyWindow();
 }
 
 void CMergeDoc::OnApplyPrediffer() 
@@ -3494,7 +3494,7 @@ void CMergeDoc::OnFileRecompareAs(UINT nID)
        }
 
        if (GetMainFrame()->ShowMergeDoc(nID, pDirDoc, nBuffers, fileloc, dwFlags, strDesc, _T(""), &infoUnpacker))
-               CloseNow();
+               GetParentFrame()->DestroyWindow();
 }
 
 // Return file extension either from file name