wxString PYTHON_FOOTPRINT_WIZARD::SetParameterValues( int aPage, wxArrayString& aValues )
{
    int         len = aValues.size();

    PyLOCK      lock;

    PyObject*   py_list = PyList_New( len );

    for( int i = 0; i < len; i++ )
    {
        wxString&    str     = aValues[i];
        PyObject*   py_str  = PyString_FromString( (const char*) str.mb_str() );
        PyList_SetItem( py_list, i, py_str );
    }

    PyObject*   arglist;

    arglist = Py_BuildValue( "(i,O)", aPage, py_list );
    wxString    res = CallRetStrMethod( "SetParameterValues", arglist );
    Py_DECREF( arglist );

    return res;
}
MODULE* PYTHON_FOOTPRINT_WIZARD::GetFootprint( wxString * aMessages )
{
    PyLOCK      lock;

    PyObject*   result = CallMethod( "GetFootprint", NULL );

    if( aMessages )
        *aMessages = CallRetStrMethod( "GetBuildMessages", NULL );

    if( !result )
        return NULL;

    PyObject* obj = PyObject_GetAttrString( result, "this" );

    if( PyErr_Occurred() )
    {
        PyErr_Print();
        PyErr_Clear();
    }

    MODULE* mod = PyModule_to_MODULE( obj );

    return mod;
}
wxString PYTHON_FOOTPRINT_WIZARD::GetDescription()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetDescription" );
}
wxString PYTHON_FOOTPRINT_WIZARD::GetImage()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetImage" );
}
wxString PYTHON_ACTION_PLUGIN::GetPluginPath()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetPluginPath" );
}
wxString PYTHON_ACTION_PLUGIN::GetIconFileName()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetIconFileName" );
}
wxString PYTHON_ACTION_PLUGIN::GetDescription()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetDescription" );
}
wxString PYTHON_ACTION_PLUGIN::GetCategoryName()
{
    PyLOCK lock;

    return CallRetStrMethod( "GetCategoryName" );
}