int CKLBLifeCtrlTask::commandScript(CLuaState& lua) { int argc = lua.numArgs(); if(argc < 2) { lua.retBoolean(false); return 1; } int cmd = lua.getInt(2); int ret = 1; switch(cmd) { default: { lua.retBoolean(false); ret = 1; } break; case LIFECTRL_ADD_CHILD: { if(argc != 3) { lua.retBoolean(false); ret = 1; break; } CKLBTask * pTask = (CKLBTask *)lua.getPointer(3); child(pTask); // 自身の子として登録 } break; } return ret; }
int CKLBFormIF::updateNode(CLuaState& lua, int argc, int base, CKLBNode * pParent, int nodeIndex, int subcmd, void * item, int index) { CKLBNode * pNode = NULL; if(lua.isString(nodeIndex)) { const char * name = lua.getString(nodeIndex); if (name) { pNode = pParent->search(name); } klb_assert(pNode, "Node not found: name = \"%s\"", name); } else { pNode = (CKLBNode *)lua.getPointer(nodeIndex); } int ret = 0; if(base > argc) { lua.retBoolean(false); return 1; } if (!pNode) { lua.retNil(); return 1; } CKLBUITask* pTask = pNode->getUITask(); u32 classID; if (pTask) { classID = pTask->getClassID(); } else { classID = pNode->getClassID(); } // 対象のノードによって、可能な操作が異なる。 bool result; switch(classID) { default: result = updateStandardNode(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBUIELEMENT: result = updateUIElement(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBUISELECTABLE: result = updateUISelectable(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBUICONTAINER: result = updateUIContainer(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBUILABEL: case CLS_KLBLABEL: result = updateLabelNode(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBTEXTEDIT: case CLS_KLBUITEXTINPUT: result = updateUITextEdit(lua, argc, base, subcmd, pNode, ret, item, index); break; case CLS_KLBUIWEBVIEW: case CLS_KLBWEBVIEW: result = updateUIWebView(lua, argc, base, subcmd, pNode, ret, item, index); break; } // ここまでで処理されたコマンドが無い場合、標準コマンドを処理する。 if(!result) { // コマンドとして解釈できなかったので、falseを返す。 lua.retBoolean(false); ret = 1; } // 戻り値に相当するものはすでにLuaスタックに積んであるはずなので、戻り値の数を返す。 return ret; }
bool CKLBGenericTask::initScript(CLuaState &lua) { int argc = lua.numArgs(); if(argc < ARGS_REQUIRE || argc > ARGS_MAX) { return false; } const char * name_exec = lua.getString(ARGS_EXEC); const char * name_die = lua.getString(ARGS_DIE); const char * arr_index = lua.getString(ARGS_ARRAY); CKLBTask::TASK_PHASE phase = (CKLBTask::TASK_PHASE)((argc >= ARGS_PHASE) ? lua.getInt(ARGS_PHASE) : P_NORMAL); CKLBTask * pParent = (argc >= ARGS_PARENT) ? (CKLBTask *)lua.getPointer(ARGS_PARENT) : NULL; return init(pParent, phase, name_exec, name_die, arr_index); }