⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 guiparser.cpp.svn-base

📁 sigmadesign smp8623 gui source code ,bingo
💻 SVN-BASE
📖 第 1 页 / 共 5 页
字号:
#ifdef GUI_REFID_2		page->object.file = RMCatAscii(m_bitmapsPath, "/", "background.jpg", NULL);#else		goto invalidPage;#endif	}	else {		page->object.file = RMCatAscii(m_bitmapsPath, "/", str, NULL);	}	str = pnode->Attribute(XMLX_NODE, true);	if (str == (RMascii *)NULL) {		RMDBGLOG((GUIPARSERDBG, "Could not read x (ParseOsdPage) ... error\n"));		page->object.x = 0;	}	else {		RMasciiToUInt16 (str, &(page->object.x));	}	str = pnode->Attribute(XMLY_NODE, true);	if (str == (RMascii *)NULL) {		RMDBGLOG((GUIPARSERDBG, "Could not read y (ParseOsdPage) ... error\n"));		page->object.y = 0;	}	else {		RMasciiToUInt16 (str, &(page->object.y));	}	str = pnode->Attribute(XMLVISIBLE_NODE, true);	if (str != (RMascii *)NULL) {		if (RMCompareAsciiCaseInsensitively (str, "TRUE")) {			page->object.visible = TRUE;		}		else if (RMCompareAsciiCaseInsensitively (str, "FALSE")) {			page->object.visible = FALSE;		}		else {			RMDBGLOG((GUIPARSERDBG, "Invalid visible value (ParseScreenFormat) ... error\n"));			goto invalidPage;		}	}	else		page->object.visible = TRUE;	str = pnode->Attribute(XMLDYNPAGE_NODE, true);	if (str != (RMascii *)NULL) {		if (RMCompareAsciiCaseInsensitively (str, "TRUE")) {			page->object.dynamic = TRUE;		}		else if (RMCompareAsciiCaseInsensitively (str, "FALSE")) {			page->object.dynamic = FALSE;		}		else {			RMDBGLOG((GUIPARSERDBG, "Invalid visible value (ParseScreenFormat) ... error\n"));			page->object.dynamic = FALSE;		}	}	else		page->object.dynamic = FALSE;	if(page->object.dynamic) {		str = pnode->Attribute(XMLURL_NODE, true);		if (str == (RMascii *)NULL) {			RMDBGLOG((GUIPARSERDBG, "Could not read url (ParseOsdPage) ... error\n"));			goto invalidPage;		}		else {			page->object.url = STRDUP(str);		}	}	str = pnode->Attribute(XMLSELECTEDOBJECT_NODE, true);	if (str == (RMascii *)NULL) {		RMDBGLOG((GUIPARSERDBG, "Could not read selectedObject ... ignoring\n"));	}	else {		page->selectedObject = STRDUP(str);	}	RMDBGLOG((GUIPARSERDBG, "osd page : name : %s, file : %s, x=%d, y=%d, visible : %s\n",		  page->name, page->object.file, page->object.x, page->object.y, page->object.visible?"TRUE":"FALSE"));	for(ptempNode = pnode->FirstChildElement(); ptempNode != NULL; ptempNode = ptempNode->NextSiblingElement()) {       		str = ptempNode->Value();		if (str == (RMascii *)NULL)			continue;		if (RMCompareAsciiCaseInsensitively (str, XMLEVENTLIST_NODE)) {			ParseEventList(ptempNode, (page->events), &(page->nbEvents));		}		else if (RMCompareAsciiCaseInsensitively (str, XMLBUTTONLIST_NODE)) {			ParseButtonList(ptempNode, (page->buttons), &(page->nbButtons), NULL);		}		else if (RMCompareAsciiCaseInsensitively (str, XMLSTRINGLIST_NODE)) {			ParseStringList(ptempNode, (page->strings), &(page->nbStrings));		}		else if (RMCompareAsciiCaseInsensitively (str, XMLBITMAPLIST_NODE)) {			ParseBitmapList(ptempNode, (page->bitmaps), &(page->nbBitmaps));		}		else if (RMCompareAsciiCaseInsensitively (str, XMLMENULIST_NODE)) {			ParseMenuList(ptempNode, (page->menus), &(page->nbMenus));		}		else if (RMCompareAsciiCaseInsensitively (str, XMLLISTS_NODE)) {			ParseLists(ptempNode, (page->lists), &(page->nbLists));		}		else if (RMCompareAsciiCaseInsensitively (str, XMLSLIDER_NODE)) {			page->temp = ParseSlider(ptempNode);		}		else {			RMDBGLOG((GUIPARSERDBG, "unknown node [%s] in osdPages\n", str));		}	}	// set ids	page->id = m_nbOsdPages;	// page auto key navigation	DoPageAutoKeyNavigation(page);	RMDBGLOG((GUIPARSERDBG, "end page\n"));	return page; invalidPage:	FreeOsdPage(page);	return (guiOsdPageType*)NULL;}void RMcuracaoGuiParser::FreePanel(guiPanelType *page){	RMuint16 i;	if(page == NULL)		return;	if(page->name != (RMascii *)NULL){		RFREE(page->name);		page->name = NULL;	}	if(page->object.file != (RMascii *)NULL){		RFREE(page->object.file);		page->object.file = NULL;	}	for(i = 0; i < page->nbButtons; i++){		FreeButton(page->buttons[i]);		page->buttons[i] = NULL;	}	if(page->slider)	{		FreeSlider(page->slider);		page->slider = NULL;	}	RFREE(page);}void RMcuracaoGuiParser::FreeAnimationItem(guiAnimationItem* item){	if(item == NULL)		return;	if(item->name)	{		RFREE(item->name);		item->name = NULL;	}	if(item->object.icon)	{		RFREE(item->object.icon);		item->object.icon = NULL;	}	RFREE(item);}void RMcuracaoGuiParser::FreeMediaControls(guiMediaControls *page){	RMuint16 i;	if(page == NULL)		return;	if(page->file)	{		RFREE(page->file);		page->file = NULL;	}	for(i = 0; i < 3; i++){		if(page->panels[i])			FreePanel(page->panels[i]);		page->panels[i] = NULL;	}	RFREE(page);}void RMcuracaoGuiParser::FreeTranslations(guiLangTranslations *page){	RMuint16 i,j;	if(page == NULL)		return;	for(i = 0; i < 128; i++){		if(page->translations[i])		{			if(page->translations[i]->name)			{				RFREE(page->translations[i]->name);				page->translations[i]->name = NULL;			}			for(j = 0; j < 10; j ++)			{				if(page->translations[i]->translations[j])				{					RFREE(page->translations[i]->translations[j]);					page->translations[i]->translations[j] = NULL;				}			}			RFREE(page->translations[i]);		}		page->translations[i] = NULL;	}	RFREE(page);}void RMcuracaoGuiParser::FreeAnimations(guiAnimationType *page){	if(page == NULL)		return;	FreeAnimationItem(page->item);	RFREE(page);}void RMcuracaoGuiParser::FreeOsdPage(guiOsdPageType *page){	RMuint16 i;	if(page == NULL)		return;	if(page->name != (RMascii *)NULL){		RFREE(page->name);		page->name = NULL;	}	if(page->selectedObject != (RMascii *)NULL){		RFREE(page->selectedObject);		page->selectedObject = NULL;	}	if(page->object.file != (RMascii *)NULL){		RFREE(page->object.file);		page->object.file = NULL;	}	if(page->object.url != (RMascii*) NULL) {		RFREE(page->object.url);		page->object.url = NULL;	}	if(page->temp != NULL)	{		FreeSlider(page->temp);		//RFREE(page->temp);		page->temp = NULL;	}	for(i = 0; i < page->nbEvents; i++){		FreeEvent(page->events[i]);		page->events[i] = NULL;	}	for(i = 0; i < page->nbButtons; i++){		FreeButton(page->buttons[i]);		page->buttons[i] = NULL;	}	for(i = 0; i < page->nbBitmaps; i++){		FreeBitmap(page->bitmaps[i]);		page->bitmaps[i] = NULL;	}	for(i = 0; i < page->nbMenus; i++){		FreeMenu(page->menus[i]);		page->menus[i] = NULL;	}	for(i = 0; i < page->nbLists; i++){		FreeList(page->lists[i]);		page->lists[i] = NULL;	}	for(i = 0; i < page->nbStrings; i++){		FreeString(page->strings[i]);		page->strings[i] = NULL;	}	RFREE(page);}RMstatus RMcuracaoGuiParser::GetPages(	guiOsdPageType *pages[MAX_GUI_PAGES],	RMuint16 *nPages){	if(m_nbOsdPages){		RMMemcpy(pages, m_osdPages, sizeof(m_osdPages));		*nPages = m_nbOsdPages;		return RM_OK;	}	return RM_ERROR;}RMstatus RMcuracaoGuiParser::GetMediaControls(	guiMediaControls **controls){	//RMMemcpy(controls, m_mediaControls, sizeof(m_mediaControls));	(*controls) = m_mediaControls;	return RM_OK;}RMstatus RMcuracaoGuiParser::GetAnimation(guiAnimationType **animation){	//RMMemcpy(controls, m_mediaControls, sizeof(m_mediaControls));	(*animation) = m_loadAnimation;	return RM_OK;}// contributed by KARL@KISS//This function will autogenerate navigation routes for buttons and special string types in pages, popups and menus.RMstatus RMcuracaoGuiParser::DoPageAutoKeyNavigation(guiOsdPageType *page){	//Special navigation commands can still be added in the XML file	RMuint16 highX = 1000;	RMuint16 highY = 1000;	RMuint16 lowX = 0;	RMuint16 lowY = 0;	RMuint8 right = 0;	RMuint8 down = 0;	RMuint8 left = 0;	RMuint8 up = 0;	RMuint16 currentX = 0;	RMuint16 currentY = 0;	RMuint16 targetX = 0;	RMuint16 targetY = 0;	// buttons within page	for(RMuint8 b = 0; b < page->nbButtons; b++){		//Analyse all buttons if more than one		currentX = page->buttons[b]->object.x;		currentY = page->buttons[b]->object.y;		RMDBGLOG((GUIPARSERDBG, "Page button found with coordinates: x %d, y %d\n", currentX, currentY));//		printf("Page button found with coordinates: x %d, y %d\n", currentX, currentY);		//Find neighbour buttons if any		for(RMuint8 c = 0; c < page->nbButtons; c++){			if( page->buttons[c]->object.state != STATE_DISABLED){				targetX = page->buttons[c]->object.x;				targetY = page->buttons[c]->object.y;				if((b != c) && (targetX == currentX)){					if((currentY > targetY) && (lowY < targetY)) {lowY = targetY; up = c+1;}					if((currentY < targetY) && (highY > targetY)) {highY = targetY; down = c+1;}				}				else if((b != c) && (targetY == currentY)){					if((currentX > targetX) && (lowX < targetX)) {lowX = targetX; left = c+1;}					if((currentX < targetX) && (highX > targetX)) {highX = targetX; right = c+1;}				}			}		}		//Assign neighbour buttons if available and not previously assigned		if(up && page->buttons[b]->keyup == (RMascii*)NULL)			 page->buttons[b]->keyup = STRDUP(page->buttons[up-1]->name);		if(down && page->buttons[b]->keydown == (RMascii*)NULL)			 page->buttons[b]->keydown = STRDUP(page->buttons[down-1]->name);		if(left && page->buttons[b]->keyleft == (RMascii*)NULL)			page->buttons[b]->keyleft = STRDUP(page->buttons[left-1]->name);		if(right && page->buttons[b]->keyright == (RMascii*)NULL)			page->buttons[b]->keyright = STRDUP(page->buttons[right-1]->name);		RMDBGLOG((GUIPARSERDBG, "Assigning index: up = %d down = %d left = %d right = %d\n", up, down, left, right));//		printf("Assigning index: up = %d down = %d left = %d right = %d\n", up, down, left, right);		up = 0; down = 0; left = 0; right = 0; lowX = 0; lowY = 0; highX = 1000; highY = 1000;	}	// menus within page	for(RMuint8 i = 0; i < page->nbMenus; i++){		if(page->menus[i]->nbItems ){			for(RMuint8 j = 0; j < page->menus[i]->nbItems; j++){				if(page->menus[i]->items[j]->nbButtons > 1){					//if(debug)printf("\n*** Page menuButton autonavigation starts for page index: %d\n", a);					for(RMuint8 b=0; b < page->menus[i]->items[j]->nbButtons; b++){						currentX = page->menus[i]->items[j]->buttons[b]->object.x;						currentY = page->menus[i]->items[j]->buttons[b]->object.y;						RMDBGLOG((GUIPARSERDBG, "Menuitem button found with coordinates: x %d, y %d\n", currentX, currentY));						//Find neighbour buttons if any						for(RMuint8 c=0; c < page->menus[i]->items[j]->nbButtons; c++){							if( page->menus[i]->items[j]->buttons[c]->object.state != STATE_DISABLED){								targetX = page->menus[i]->items[j]->buttons[c]->object.x;								targetY = page->menus[i]->items[j]->buttons[c]->object.y;								if((b != c) && (targetX == currentX)){									if((currentY > targetY) && (lowY < targetY))										{lowY = targetY; up = c+1;}									if((currentY < targetY) && (highY > targetY))										{highY = targetY; down = c+1;}								}								else if((b != c) && (targetY == currentY)){									if((currentX > targetX) && (lowX < targetX))										{lowX = targetX; left = c+1;}									if((currentX < targetX) && (highX > targetX))										{highX = targetX; right = c+1;}								}							}						}						//Assign neighbour buttons if available and not previously assigned						if(up && page->menus[i]->items[j]->buttons[b]->keyup == (RMascii*)NULL)							page->menus[i]->items[j]->buttons[b]->keyup = STRDUP(page->menus[i]->items[j]->buttons[up-1]->name);						if(down && page->menus[i]->items[j]->buttons[b]->keydown == (RMascii*)NULL)							page->menus[i]->items[j]->buttons[b]->keydown = STRDUP(page->menus[i]->items[j]->buttons[down-1]->name);						if(left && page->menus[i]->items[j]->buttons[b]->keyleft == (RMascii*)NULL)							page->menus[i]->items[j]->buttons[b]->keyleft = STRDUP(page->menus[i]->items[j]->buttons[left-1]->name);						if(right && page->menus[i]->items[j]->buttons[b]->keyright == (RMascii*)NULL)							page->menus[i]->items[j]->buttons[b]->keyright = STRDUP(page->menus[i]->items[j]->buttons[right-1]->name);						RMDBGLOG((GUIPARSERDBG, "Assigning index: up = %d down = %d left = %d right = %d\n", up, down, left, right));						up = 0; down = 0; left = 0; right = 0;						lowX = 0; lowY = 0; highX = 1000; highY = 1000;					}				}			}		}	}	return RM_OK;}////////////////////////////////////////////////////////////////////////////////// EVENTS////////////////////////////////////////////////////////////////////////////////RMstatus RMcuracaoGuiParser::GetEvents(	guiEventType *events[MAX_GUI_EVENTS],	RMuint16 *nEvents){	if(m_nbEvents){		RMMemcpy(events, m_Events, sizeof(m_Events));		*nEvents = m_nbEvents;	}	return RM_OK;}RMstatus RMcuracaoGuiParser::ParseEventList(TiXmlElement *pnode){	TiXmlElement *ptempNode;	const RMascii *str;	for(ptempNode = pnode->FirstChildElement(); ptempNode != NULL; ptempNode = ptempNode->NextSiblingElement()) {       		str = ptempNode->Value();		if (str == (RMascii *)NULL)			continue;		if (RMCompareAsciiCaseInsensitively (str, XMLEVENT_NODE)) {			if(m_nbEvents < MAX_GUI_EVENTS) {				m_Events[m_nbEvents] = ParseEvent(ptempNode);				if(m_Events[m_nbEvents] != (guiEventType*)NULL){					m_nbEvents++;				}			}			else{				RMDBGLOG((GUIPARSERDBG, "Exceed max number of global events (=%d)\n", MAX_GUI_EVENTS));			}		}		else {			RMDBGLOG((GUIPARSERDBG, "unknown node [%s] in global eventList\n", str));		}	}	return RM_OK;}RMstatus RMcuracaoGuiParser::ParseEventList(

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -