[gnote] Add ability to get AddinInfo from addin



commit e96b43a40196d343e504d270952586aec0ce9bb1
Author: Aurimas Černius <aurisc4 gmail com>
Date:   Sat Mar 1 19:03:35 2014 +0200

    Add ability to get AddinInfo from addin

 src/addinmanager.cpp |   41 +++++++++++++++++++++++++++++++++++++++++
 src/addinmanager.hpp |    3 ++-
 2 files changed, 43 insertions(+), 1 deletions(-)
---
diff --git a/src/addinmanager.cpp b/src/addinmanager.cpp
index 0e7f988..8216654 100644
--- a/src/addinmanager.cpp
+++ b/src/addinmanager.cpp
@@ -38,6 +38,7 @@
 #include "debug.hpp"
 #include "ignote.hpp"
 #include "preferences.hpp"
+#include "preferencetabaddin.hpp"
 #include "watchers.hpp"
 #include "notebooks/notebookapplicationaddin.hpp"
 #include "notebooks/notebooknoteaddin.hpp"
@@ -71,8 +72,25 @@ namespace gnote {
       erase_note_addin_info(typeid(klass).name()); \
     } \
   } \
+  }
+
+namespace {
+  template <typename AddinType>
+  std::string get_id_for_addin(const AbstractAddin & addin, const std::map<std::string, AddinType*> & addins)
+  {
+    const AddinType *plugin = dynamic_cast<const AddinType*>(&addin);
+    if(plugin != NULL) {
+      for(typename std::map<std::string, AddinType*>::const_iterator iter = addins.begin(); iter != 
addins.end(); ++iter) {
+        if(iter->second == plugin) {
+          return iter->first;
+        }
+      }
+    }
+    return "";
+  }
 }
 
+
   AddinManager::AddinManager(NoteManager & note_manager, const std::string & conf_dir)
     : m_note_manager(note_manager)
     , m_gnote_conf_dir(conf_dir)
@@ -485,6 +503,29 @@ namespace gnote {
     return AddinInfo();
   }
 
+  AddinInfo AddinManager::get_addin_info(const AbstractAddin & addin) const
+  {
+    std::string id;
+    id = get_id_for_addin(addin, m_app_addins);
+    if(id.empty()) {
+      id = get_id_for_addin(addin, m_pref_tab_addins);
+    }
+    if(id.empty()) {
+      id = get_id_for_addin(addin, m_sync_service_addins);
+    }
+    if(id.empty()) {
+      id = get_id_for_addin(addin, m_import_addins);
+    }
+    for(NoteAddinMap::const_iterator iter = m_note_addins.begin();
+        id.empty() && iter != m_note_addins.end(); ++iter) {
+      id = get_id_for_addin(addin, iter->second);
+    }
+    if(id.empty()) {
+      return AddinInfo();
+    }
+    return get_addin_info(id);
+  }
+
   bool AddinManager::is_module_loaded(const std::string & id) const
   {
     AddinInfo info = get_addin_info(id);
diff --git a/src/addinmanager.hpp b/src/addinmanager.hpp
index f15f49b..a794cb9 100644
--- a/src/addinmanager.hpp
+++ b/src/addinmanager.hpp
@@ -1,7 +1,7 @@
 /*
  * gnote
  *
- * Copyright (C) 2010,2012-2013 Aurimas Cernius
+ * Copyright (C) 2010,2012-2014 Aurimas Cernius
  * Copyright (C) 2009 Debarshi Ray
  * Copyright (C) 2009 Hubert Figuiere
  *
@@ -79,6 +79,7 @@ public:
       return m_addin_infos;
     }
   AddinInfo get_addin_info(const std::string & id) const;
+  AddinInfo get_addin_info(const AbstractAddin & addin) const;
   bool is_module_loaded(const std::string & id) const;
   sharp::DynamicModule *get_module(const std::string & id);
 


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]