OSDN Git Service

[dennco] The update for the implementation of plugin functionality.
authortkawata <tkawata@users.sourceforge.jp>
Mon, 11 Feb 2013 03:10:43 +0000 (12:10 +0900)
committertkawata <tkawata@users.sourceforge.jp>
Mon, 11 Feb 2013 03:10:43 +0000 (12:10 +0900)
Source/layer3/QtScript/dnqscontainer.cpp
Source/layer3/dnplugin.h
Source/layer3/dnpluginoutputcell.cpp
Source/layer3/dnpluginoutputcell.h
Source/layer3/platform/qt/qtdnplugin.cpp

index f5abfbe..b19d286 100644 (file)
@@ -179,4 +179,3 @@ TKCellCode* DNQSContainer::cellCodeFactory(std::string name, std::string cellapi
 {
     return new DNQSCellCode(name, cellapi, this, code);
 }
-
index dfc561a..5d2be8b 100644 (file)
@@ -24,22 +24,26 @@ class DNPlugin
 protected:
     typedef bool  (*InitFunction)();
     typedef bool  (*UnloadFunction)();
+    typedef bool  (*GetIsReadyFunction)();
     typedef float (*QueryPluginValueFunction)(const char*);
     typedef void  (*SetValueToPluginFunction)(const char*, float);
 
     bool                        d_isValid;
+    bool                        d_isReady;
     InitFunction                d_initFunction;
     UnloadFunction              d_unloadFunction;
+    GetIsReadyFunction          d_getIsReadyFunction;
     QueryPluginValueFunction    d_queryPluginValueFunction;
     SetValueToPluginFunction    d_setValueToPluginFunction;
 
     DNPlugin() :
-        d_isValid(false), d_initFunction(0), d_unloadFunction(0), d_queryPluginValueFunction(0), d_setValueToPluginFunction(0)
+        d_isValid(false), d_isReady(false), d_initFunction(0), d_unloadFunction(0), d_queryPluginValueFunction(0), d_setValueToPluginFunction(0)
     {}
 
 public:
     virtual ~DNPlugin(){}
     inline bool getIsValid() const { return d_isValid; }
+    inline bool getIsReady() const { return d_getIsReadyFunction ? d_getIsReadyFunction() : false; }
     inline bool init() { return d_initFunction ? d_initFunction() : false; }
     inline bool unload() { return d_unloadFunction ? d_unloadFunction() : true; }
     inline float queryPluginValue(const char* name) { return d_isValid ? d_queryPluginValueFunction(name) : 0.0f; }
index 7ad6b7b..bffd6b3 100644 (file)
@@ -28,7 +28,7 @@
 
 DNPluginOutputCell::DNPluginOutputCell(TKContainer *container, std::string location, std::string name, std::string pluginName, std::string valueName)
     : DNCellInterfaceable(container, location, name, false, true),
-      d_plugin(NULL), d_valueName(valueName), d_outputValue(std::numeric_limits<float>::quiet_NaN())
+      d_plugin(NULL), d_valueName(valueName), d_outputValue(std::numeric_limits<float>::quiet_NaN()), d_wasReady(false)
 {
     d_plugin = DNPluginManager::instance()->getPlugin(pluginName);
     if (!d_plugin)
@@ -54,12 +54,16 @@ bool DNPluginOutputCell::doTick(float time)
     }
 
     mAxon->setValue(value);
-    if (d_plugin && d_plugin->getIsValid() && d_outputValue != value)
+    if (d_plugin && d_plugin->getIsValid())
     {
-        d_outputValue = value;
-        d_plugin->setValueToPlugin(d_valueName.c_str(), value);
+        bool isReady = d_plugin->getIsReady();
+        if (isReady && (d_outputValue != value ||!d_wasReady))
+        {
+            d_outputValue = value;
+            d_plugin->setValueToPlugin(d_valueName.c_str(), value);
+        }
+        d_wasReady = isReady;
     }
-
     return true;
 }
 
index 2caa4c9..1468516 100644 (file)
@@ -28,6 +28,7 @@ class DNPluginOutputCell : public DNCellInterfaceable
     DNPlugin    *d_plugin;
     std::string d_valueName;
     float       d_outputValue;
+    bool        d_wasReady;
 
 public:
     DNPluginOutputCell(TKContainer *container, std::string location, std::string name, std::string pluginName, std::string valueName);
index 0bc5368..95eca57 100644 (file)
@@ -38,6 +38,7 @@ QtDNPlugin::QtDNPlugin(QString name) : DNPlugin()
     {
         d_initFunction              = (DNPlugin::InitFunction)d_library->resolve("init");
         d_unloadFunction            = (DNPlugin::UnloadFunction) d_library->resolve("unload");
+        d_getIsReadyFunction        = (DNPlugin::GetIsReadyFunction) d_library->resolve("getIsReady");
         d_queryPluginValueFunction  = (DNPlugin::QueryPluginValueFunction)d_library->resolve("queryPluginValue");
         d_setValueToPluginFunction  = (DNPlugin::SetValueToPluginFunction)d_library->resolve("setValueToPlugin");