PyObject* Window_New(PyTypeObject *type, PyObject *args, PyObject *kwds) { Window *self; self = (Window*)type->tp_alloc(type, 0); if (!self) return NULL; new(&self->sXMLFileName) string(); new(&self->sFallBackPath) string(); new(&self->vecControls) std::vector<Control*>(); self->iWindowId = -1; if (!PyArg_ParseTuple(args, (char*)"|i", &self->iWindowId)) return NULL; // create new GUIWindow if (!Window_CreateNewWindow(self, false)) { // error is already set by Window_CreateNewWindow, just release the memory self->vecControls.clear(); self->vecControls.~vector(); self->sFallBackPath.~string(); self->sXMLFileName.~string(); self->ob_type->tp_free((PyObject*)self); return NULL; } return (PyObject*)self; }
PyObject* WindowXMLDialog_New(PyTypeObject *type, PyObject *args, PyObject *kwds) { WindowXMLDialog *self; self = (WindowXMLDialog*)type->tp_alloc(type, 0); if (!self) return NULL; new(&self->sXMLFileName) string(); new(&self->sFallBackPath) string(); new(&self->vecControls) std::vector<Control*>(); self->iWindowId = -1; PyObject* pyOXMLname = NULL; PyObject* pyOname = NULL; PyObject* pyDName = NULL; bool bForceDefaultSkin = false; string strXMLname, strFallbackPath; string strDefault = "Default"; if (!PyArg_ParseTuple(args, (char*)"OO|Ob", &pyOXMLname, &pyOname, &pyDName, &bForceDefaultSkin )) return NULL; PyGetUnicodeString(strXMLname, pyOXMLname); PyGetUnicodeString(strFallbackPath, pyOname); if (pyDName) PyGetUnicodeString(strDefault, pyDName); RESOLUTION res; CStdString strSkinPath; if (!bForceDefaultSkin) { // Check to see if the XML file exists in current skin. If not use fallback path to find a skin for the script strSkinPath = g_SkinInfo.GetSkinPath(strXMLname, &res); if (!XFILE::CFile::Exists(strSkinPath)) { // Check for the matching folder for the skin in the fallback skins folder CStdString basePath; CUtil::AddFileToFolder(strFallbackPath, "resources", basePath); CUtil::AddFileToFolder(basePath, "skins", basePath); CUtil::AddFileToFolder(basePath, CUtil::GetFileName(g_SkinInfo.GetBaseDir()), basePath); strSkinPath = g_SkinInfo.GetSkinPath(strXMLname, &res, basePath); if (!XFILE::CFile::Exists(strSkinPath)) { // Finally fallback to the DefaultSkin as it didn't exist in either the XBMC Skin folder or the fallback skin folder bForceDefaultSkin = true; } } } if (bForceDefaultSkin) { CSkinInfo skinInfo; CStdString basePath; CUtil::AddFileToFolder(strFallbackPath, "resources", basePath); CUtil::AddFileToFolder(basePath, "skins", basePath); CUtil::AddFileToFolder(basePath, strDefault, basePath); skinInfo.Load(basePath); // if no skin.xml file exists default to PAL_4x3 and PAL_16x9 if (skinInfo.GetDefaultResolution() == INVALID) skinInfo.SetDefaults(); strSkinPath = skinInfo.GetSkinPath(strXMLname, &res, basePath); if (!XFILE::CFile::Exists(strSkinPath)) { PyErr_SetString(PyExc_TypeError, "XML File for Window is missing"); return NULL; } } self->sFallBackPath = strFallbackPath; self->sXMLFileName = strSkinPath; self->bUsingXML = true; // create new GUIWindow if (!Window_CreateNewWindow((Window*)self, true)) { // error is already set by Window_CreateNewWindow, just release the memory self->sFallBackPath.~string(); self->sXMLFileName.~string(); self->ob_type->tp_free((PyObject*)self); return NULL; } ((CGUIWindow*)(self->pWindow))->SetCoordsRes(res); return (PyObject*)self; }
PyObject* WindowXML_New(PyTypeObject *type, PyObject *args, PyObject *kwds) { WindowXML *self; self = (WindowXML*)type->tp_alloc(type, 0); if (!self) return NULL; new(&self->sXMLFileName) string(); new(&self->sFallBackPath) string(); new(&self->vecControls) std::vector<Control*>(); self->iWindowId = -1; PyObject* pyOXMLname = NULL; PyObject* pyOname = NULL; PyObject* pyDName = NULL; PyObject* pyRes = NULL; string strXMLname, strFallbackPath; string strDefault = "Default"; string resolution = "720p"; if (!PyArg_ParseTuple(args, (char*)"OO|OO", &pyOXMLname, &pyOname, &pyDName, &pyRes)) return NULL; PyXBMCGetUnicodeString(strXMLname, pyOXMLname); PyXBMCGetUnicodeString(strFallbackPath, pyOname); if (pyDName) PyXBMCGetUnicodeString(strDefault, pyDName); if (pyRes) PyXBMCGetUnicodeString(resolution, pyRes); // Check to see if the XML file exists in current skin. If not use fallback path to find a skin for the script RESOLUTION_INFO res; CStdString strSkinPath = g_SkinInfo->GetSkinPath(strXMLname, &res); if (!XFILE::CFile::Exists(strSkinPath)) { // Check for the matching folder for the skin in the fallback skins folder CStdString fallbackPath = URIUtils::AddFileToFolder(strFallbackPath, "resources"); fallbackPath = URIUtils::AddFileToFolder(fallbackPath, "skins"); CStdString basePath = URIUtils::AddFileToFolder(fallbackPath, g_SkinInfo->ID()); strSkinPath = g_SkinInfo->GetSkinPath(strXMLname, &res, basePath); if (!XFILE::CFile::Exists(strSkinPath)) { // Finally fallback to the DefaultSkin as it didn't exist in either the XBMC Skin folder or the fallback skin folder CStdString str("none"); AddonProps props(str, ADDON_SKIN, "", ""); props.path = URIUtils::AddFileToFolder(fallbackPath, strDefault); CSkinInfo::TranslateResolution(resolution, res); CSkinInfo skinInfo(props, res); skinInfo.Start(); strSkinPath = skinInfo.GetSkinPath(strXMLname, &res); if (!XFILE::CFile::Exists(strSkinPath)) { PyErr_SetString(PyExc_TypeError, "XML File for Window is missing"); return NULL; } } } self->sFallBackPath = strFallbackPath; self->sXMLFileName = strSkinPath; self->bUsingXML = true; // create new GUIWindow if (!Window_CreateNewWindow((Window*)self, false)) { // error is already set by Window_CreateNewWindow, just release the memory self->vecControls.clear(); self->vecControls.~vector(); self->sFallBackPath.~string(); self->sXMLFileName.~string(); self->ob_type->tp_free((PyObject*)self); return NULL; } ((CGUIWindow*)(self->pWindow))->SetCoordsRes(res); return (PyObject*)self; }