namespace ModeSupervisorNamespace {
- typedef void valueChangedCb(const std::string &key, void *userData);
-
class Plugin {
public:
Plugin()
{
return std::string();
}
- virtual int setChangedCallback(valueChangedCb callback, const std::string &key, void *userData)
- {
- return MODES_ERROR_NOT_SUPPORTED;
- }
-
- virtual int unSetChangedCallback(valueChangedCb callback, const std::string &key, void *userData)
- {
- return MODES_ERROR_NOT_SUPPORTED;
- }
private:
std::string name; /* plugin key */
};
namespace ModeSupervisorNamespace {
+ typedef void (*valueChangedCB)(void *userData);
+
class PluginAction {
public:
PluginAction(const std::string &actionName)
{
return MODES_ERROR_NOT_SUPPORTED;
}
+ virtual int setChangedCallback(valueChangedCB callback, void *userData)
+ {
+ return MODES_ERROR_NOT_SUPPORTED;
+ }
+ virtual int unSetChangedCallback(valueChangedCB callback, void *userData)
+ {
+ return MODES_ERROR_NOT_SUPPORTED;
+ }
private:
const std::string name;
};
double getDouble(const std::string &key) override;
bool getBool(const std::string &key) override;
std::string getString(const std::string &key) override;
-
- int setChagnedCallback(valueChangedCb callback, const std::string &key, void *userData);
- int unSetChagnedCallback(valueChangedCb callback, const std::string &key, void *userData);
};
extern "C" API Plugin *objectCreate(void)
DBG("TestPlugin::getString(%s)", key.c_str());
return std::string("test");
}
-
-int TestPlugin::setChagnedCallback(valueChangedCb callback, const std::string &key, void *userData)
-{
- return MODES_ERROR_NONE;
-}
-
-int TestPlugin::unSetChagnedCallback(valueChangedCb callback, const std::string &key, void *userData)
-{
- return MODES_ERROR_NONE;
-}
DBG("serialized info(%s)", info.c_str());
return MODES_ERROR_NONE;
}
+
+int TestPluginAction::setChangedCallback(valueChangedCB callback, void *userData)
+{
+ return MODES_ERROR_NONE;
+}
+
+int TestPluginAction::unSetChangedCallback(valueChangedCB callback, void *userData)
+{
+ return MODES_ERROR_NONE;
+}
int undo() override;
std::string serialize() override;
int parse(const std::string &data) override;
+ int setChangedCallback(valueChangedCB callback, void *userData) override;
+ int unSetChangedCallback(valueChangedCB callback, void *userData) override;
};
MODES_NAMESPACE_END
MODES_NAMESPACE_USE;
-void Action::valueChangedCallback(const std::string &key, void *userData)
+void Action::valueChangedCallback(void *userData)
{
Action *action = (Action*)userData;
RET_IF(NULL == action);
action->setIsChanged();
- DBG("Action(%s) Changed", key.c_str());
+ DBG("Action(%s) Changed", action->ruleName.c_str());
}
Action::Action()
std::string ruleName;
Plugin *plugin;
PluginAction *piAction;
- static void valueChangedCallback(const std::string &key, void *userData);
+ static void valueChangedCallback(void *userData);
private:
std::string id;
ERR("plugin(%s) getUndoAction() Fail", plugin->getName().c_str());
return MODES_ERROR_NOT_SUPPORTED;
}
- plugin->setChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
+ tmpAction->setChangedCallback(valueChangedCallback, this);
piAction = tmpAction;
return MODES_ERROR_NONE;
ERR("plugin(%s) set() Fail(%d)", plugin->getName().c_str(), ret);
return ret;
}
- plugin->setChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
+ if (tmpAction)
+ tmpAction->setChangedCallback(valueChangedCallback, this);
piAction = tmpAction;
return MODES_ERROR_NONE;
{
RETM_IF(NULL == plugin, "Action(%s) : No plugin", ruleName.c_str());
- int pos = ruleName.find_first_of(".");
- plugin->unSetChangedCallback(valueChangedCallback, ruleName.substr(pos + 1), this);
if (nullptr != piAction) {
- plugin->undo(piAction);
+ piAction->unSetChangedCallback(valueChangedCallback, this);
+ plugin->undo(piAction); // piAction is deleted in undo()
piAction = nullptr;
} else {
ERR("Action(%s) : value changed or no Action", ruleName.c_str());