PythonGroupCommand::PythonGroupCommand(const char* name, PyObject * pcPyCommand) : Command(name),_pcPyCommand(pcPyCommand) { sGroup = "Python"; Py_INCREF(_pcPyCommand); // call the method "GetResources()" of the command object _pcPyResource = Interpreter().runMethodObject(_pcPyCommand, "GetResources"); // check if the "GetResources()" method returns a Dict object if (!PyDict_Check(_pcPyResource)) { throw Base::TypeError("PythonGroupCommand::PythonGroupCommand(): Method GetResources() of the Python " "command object returns the wrong type (has to be dict)"); } // check for command type std::string cmdType = getResource("CmdType"); if (!cmdType.empty()) { int type = 0; if (cmdType.find("AlterDoc") != std::string::npos) type += int(AlterDoc); if (cmdType.find("Alter3DView") != std::string::npos) type += int(Alter3DView); if (cmdType.find("AlterSelection") != std::string::npos) type += int(AlterSelection); if (cmdType.find("ForEdit") != std::string::npos) type += int(ForEdit); eType = type; } }
const char* PythonCommand::getHelpUrl(void) const { PyObject* pcTemp; pcTemp = Interpreter().runMethodObject(_pcPyCommand, "CmdHelpURL"); if (! pcTemp ) return ""; if (! PyString_Check(pcTemp) ) throw Base::Exception("PythonCommand::CmdHelpURL(): Method CmdHelpURL() of the Python command object returns no string"); return PyString_AsString(pcTemp); }
void PythonCommand::activated(int iMsg) { if (Activation.empty()) { try { if (isCheckable()) { Interpreter().runMethod(_pcPyCommand, "Activated", "", 0, "(i)", iMsg); } else { Interpreter().runMethodVoid(_pcPyCommand, "Activated"); } } catch (const Base::PyException& e) { Base::Console().Error("Running the Python command '%s' failed:\n%s\n%s", sName, e.getStackTrace().c_str(), e.what()); } catch (const Base::Exception&) { Base::Console().Error("Running the Python command '%s' failed, try to resume",sName); } } else { doCommand(Doc,Activation.c_str()); } }
PythonCommand::PythonCommand(const char* name,PyObject * pcPyCommand, const char* pActivationString) : Command(name),_pcPyCommand(pcPyCommand) { if (pActivationString) Activation = pActivationString; sGroup = "Python"; Py_INCREF(_pcPyCommand); // call the method "GetResources()" of the command object _pcPyResourceDict = Interpreter().runMethodObject(_pcPyCommand, "GetResources"); // check if the "GetResources()" method returns a Dict object if (!PyDict_Check(_pcPyResourceDict)) throw Base::Exception("PythonCommand::PythonCommand(): Method GetResources() of the Python command object returns the wrong type (has to be Py Dictonary)"); }
#if defined (_MSC_VER) : Command( _strdup(name) ) #else : Command( strdup(name) ) #endif ,_pcPyCommand(pcPyCommand) { if (pActivationString) Activation = pActivationString; sGroup = "Python"; Py_INCREF(_pcPyCommand); // call the method "GetResources()" of the command object _pcPyResourceDict = Interpreter().runMethodObject(_pcPyCommand, "GetResources"); // check if the "GetResources()" method returns a Dict object if (!PyDict_Check(_pcPyResourceDict)) { throw Base::Exception("PythonCommand::PythonCommand(): Method GetResources() of the Python " "command object returns the wrong type (has to be dict)"); } // check for command type std::string cmdType = getResource("CmdType"); if (!cmdType.empty()) { int type = 0; if (cmdType.find("AlterDoc") != std::string::npos) type += int(AlterDoc); if (cmdType.find("Alter3DView") != std::string::npos) type += int(Alter3DView); if (cmdType.find("AlterSelection") != std::string::npos)