📄 guinavigation.cpp.svn-base
字号:
RMstatus status = RM_OK; if (tvStandard == TV_NTSC_COMMAND && m_NTSCvideoOutCommandList.count != 0) RMMemcpy(videoOutCmdList, &m_NTSCvideoOutCommandList, sizeof(typeVideoOutCommands)); else if (tvStandard == TV_PAL_COMMAND && m_PALvideoOutCommandList.count != 0) RMMemcpy(videoOutCmdList, &m_PALvideoOutCommandList, sizeof(typeVideoOutCommands)); else return RM_ERROR; return status;}RMstatus RMcuracaoGuiNavigation::ModifyTVStandardMenu(RMuint32 commandId, RMuint32 linkId, RMascii *value){ // we look in the setup page if (m_setupPageId == 0) return RM_ERROR; RMASSERT(m_setupPageId < m_nbOsdPages); RMascii menuName[MAX_GUI_TEXT_VALUE]; RMuint8 i, j;#ifdef GUI_REFID_2 //The following decides what TV connector popup should be showed depending on TV standard if(linkId == 0 || linkId == 1111) { if(commandId == TV_NTSC_COMMAND) RMCopyAscii(menuName, "NTSCConnectorPopup"); else RMCopyAscii(menuName, "PALConnectorPopup"); } else { RMCopyAscii(menuName, value); } fprintf(stderr,"Changing TV standard and related links\n"); for(i = 0; i < m_osdPages[m_setupPageId]->nbMenus; i++) { for(j = 0; j < m_osdPages[m_setupPageId]->menus[i]->nbItems; j++) { if(RMCompareAscii(m_osdPages[m_setupPageId]->menus[i]->items[j]->name, "TvConnectorMenuItem")) { fprintf(stderr,"Found Menu item to perform link change.... current: %s, new: %s\n", m_osdPages[m_setupPageId]->menus[i]->items[j]->events[0]->link, menuName); RMCopyAscii(m_osdPages[m_setupPageId]->menus[i]->items[j]->events[0]->link, menuName); } } }#else // find menu button RMstatus status; RMuint32 buttonId = 0; if (linkId == 0) { RMascii commandName[MAX_GUI_TEXT_VALUE]; if (RMFAILED(GetCommandName(commandId, commandName))) return RM_ERROR; for (i = 0; i < m_osdPages[m_setupPageId]->nbMenus; i++) { // go through menu item lists for (j = 0; j < m_osdPages[m_setupPageId]->menus[i]->nbItems; j++) { // go thru button list for (RMuint8 k = 0; k < m_osdPages[m_setupPageId]->menus[i]->items[j]->nbButtons; k++) { for (RMuint8 m = 0; m < m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->nbEvents; m++) { // get command value if (RMCompareAsciiCaseInsensitively( m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->command, commandName)) { // [RC] TRICK not to create another function, change RMuint32 activePageId = m_activePageId; m_activePageId = m_setupPageId; status = GetObjectIdByName(m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->link, &buttonId); m_activePageId = activePageId; if (RMFAILED(status)) return RM_ERROR; RMCopyAscii(menuName, m_osdPages[m_setupPageId]->menus[i]->items[j]->buttons[k]->events[m]->value); goto done; } } } } } } else { buttonId = linkId; RMCopyAscii(menuName, value); } done: if (buttonId == 0) return RM_ERROR; for (i = 0; i < m_osdPages[m_setupPageId]->nbButtons; i++) { if (m_osdPages[m_setupPageId]->buttons[i]->id == buttonId) { for (j = 0; j < m_osdPages[m_setupPageId]->buttons[i]->nbEvents; j++) { if (RMCompareAsciiCaseInsensitively(m_osdPages[m_setupPageId]->buttons[i]->events[j]->name, SELECT_EVENT)) { RMCopyAscii(m_osdPages[m_setupPageId]->buttons[i]->events[j]->link, menuName); RMCopyAscii(m_osdPages[m_setupPageId]->buttons[i]->keyright, menuName); return RM_OK; } } } }#endif return RM_ERROR;}RMstatus RMcuracaoGuiNavigation::DisplayPage(RMuint32 pageId){ RMstatus status; RMuint16 i; RMuint32 selectedObjectId; if (!m_initialized) { RMDBGLOG((GUIDBG, "GUI not initialised !!\n")); return RM_ERROR; } // reset selected object and activate current page if (ISPOPUP(m_selectedObjectId)) DisplayPopup(m_selectedObjectId, FALSE); SetCurrentObjectDeSelectedAttribute(); // suppress event bitmap timeouts m_gui->gui->KillTimer(TIMER_EVENT); ShowOsd(TRUE); // guiOsdPageType* pageOld = m_osdPages[pageId]; if (m_osdPages[pageId]->object.dynamic) { HTTPFile* f; status = RM_OK; RMascii* where = RMCatAscii(m_parser->GetUrl(), m_osdPages[pageId]->object.url, NULL); RMint16 n = 0; f = fetchOpen(where, RM_HTTP_VERBOSE); if(f) { RMuint8 buffer[8192]; n = fetchRead(buffer, 8192, f); if(n != -1) { buffer[n] = '\0'; printf("%s\n %d \n", (RMascii*) buffer, n); guiOsdPageType* page = m_parser->ParseWEBPage(&page, pageId, buffer, n); if (page) m_osdPages[pageId] = page; else status = RM_ERROR; } else status = RM_ERROR; } else status = RM_ERROR; fetchClose(f); RFREE(where); // if(RMFAILED(status)) // return status; } // display background, bitmaps and buttons status = DisplayPageBitmaps(pageId); if (RMFAILED(status)) { return status; } m_activePageId = pageId; RMMemset(&m_List, 0, sizeof(typeListData)); if (m_osdPages[pageId]->selectedObject != (RMascii*) NULL) { status = GetObjectIdByName(m_osdPages[pageId]->selectedObject, &selectedObjectId); if (RMSUCCEEDED(status)) { SelectObject(selectedObjectId); } } // clear generic list data // display everything else for (i = 0; i < m_osdPages[pageId]->nbMenus; i++) { if (m_osdPages[pageId]->menus[i]->object.visible) { DisplayMenu(i, TRUE, FALSE); } } for (i = 0; i < m_osdPages[pageId]->nbLists; i++) { printf("list visible %d\n", m_osdPages[pageId]->lists[i]->object.visible); if (m_osdPages[pageId]->lists[i]->object.visible) { DisplayList(i, TRUE, TRUE); } } for (i = 0; i < m_osdPages[pageId]->nbStrings; i++) { if (m_osdPages[pageId]->strings[i]->object.visible) { DisplayString(i); } } if (m_osdPages[pageId]->temp) { RMBitmapObject bmp; bmp.x = 0; bmp.y = 0; bmp.file = m_osdPages[m_activePageId]->object.file; m_osdPages[pageId]->temp->object.stepnumber = m_osdPages[pageId]->temp->value; sprintf(m_osdPages[m_activePageId]->temp->object.text, "%d", (RMuint16) (m_osdPages[m_activePageId]->temp->object.stepnumber + m_osdPages[m_activePageId]->temp->min)); gfxDrawSlider(m_pRua, 0, 0, &m_osdPages[pageId]->temp->object, &bmp); } //DisplaySlider(TEMPERATURE_CONTROL, m_osdPages[pageId]->temp->value); // m_activePageId = pageId; // clear generic list data // RMMemset(&m_List, 0, sizeof(typeListData)); // display everything else // for(i = 0; i < m_osdPages[pageId]->nbMenus; i++){ // if(m_osdPages[pageId]->menus[i]->object.visible){ // DisplayMenu(i, TRUE, FALSE); // } // } // for(i = 0; i < m_osdPages[pageId]->nbLists; i++){ // if(m_osdPages[pageId]->lists[i]->object.visible){ // DisplayList(i, TRUE, FALSE); // } // } // for(i = 0; i < m_osdPages[pageId]->nbStrings; i++){ // if(m_osdPages[pageId]->strings[i]->object.visible){ // DisplayString(i); // } // } printf("display page\n"); m_gui->gui->RestoreNonTimedEvent(); return status;}RMstatus RMcuracaoGuiNavigation::DisplayButton(RMuint8 buttonIndex){ if (buttonIndex > MAX_GUI_BUTTONS) return RM_ERROR; if (ISPOPUP(m_selectedObjectId)) { for (RMuint8 i = 0; i < m_nbPopups; i++) { if (m_Popups[i]->id == m_selectedObjectId) { RMuint16 x, y; x = m_Popups[i]->object.x; y = m_Popups[i]->object.y;#ifdef WITH_WMVHD_SUPPORT if (m_wmvHDOn) { x = POPUP_XOFFSET; y = POPUP_YOFFSET; }#endif return gfxDrawPopupButton(m_pRua, &m_Popups[i]->object, x, y, &m_Popups[i]->buttons[buttonIndex]->object); } } return RM_ERROR; } else {#ifdef WITH_WMVHD_SUPPORT if (m_wmvHDOn) { return UpdateButton(buttonIndex); } else return gfxDrawButton(m_pRua, &m_osdPages[m_activePageId]->buttons[buttonIndex]->object);#else return gfxDrawButton(m_pRua, &m_osdPages[m_activePageId]->buttons[buttonIndex]->object);#endif }}RMstatus RMcuracaoGuiNavigation::UpdateButton(RMuint8 buttonIndex){ RMstatus status = RM_OK; RMuint8 i; RMuint16 l1, t1, r1, b1; RMuint16 bmpwidth, bmpheight; RMuint16 l2, t2, r2, b2; RMuint8 zIndex; RMBitmapObject bitmaps[MAX_GUI_BITMAPS]; RMuint8 nbitmaps = 0; l1 = m_osdPages[m_activePageId]->buttons[buttonIndex]->object.x; t1 = m_osdPages[m_activePageId]->buttons[buttonIndex]->object.y; // status = gfxGetBitmapDimensions(m_pRua, &m_osdPages[m_activePageId]->buttons[buttonIndex]->object, // &buttonwidth, &buttonheight); // if(RMFAILED(status)) // return status; // [RC] NEED TO CHANGE THIS TO HAVE THE REAL BITMAP DIMENSIONS!!!!!! r1 = l1 + m_osdPages[m_activePageId]->buttons[buttonIndex]->object.width; b1 = t1 + m_osdPages[m_activePageId]->buttons[buttonIndex]->object.height; zIndex = m_osdPages[m_activePageId]->buttons[buttonIndex]->object.zIndex; // get objects under current object // test bitmaps for (i = 0; i < m_osdPages[m_activePageId]->nbBitmaps; i++) { if (m_osdPages[m_activePageId]->bitmaps[i]->object.visible && (m_osdPages[m_activePageId]->bitmaps[i]->object.zIndex < zIndex)) { l2 = m_osdPages[m_activePageId]->bitmaps[i]->object.x; t2 = m_osdPages[m_activePageId]->bitmaps[i]->object.y; status = gfxGetBitmapDimensions(m_pRua, &m_osdPages[m_activePageId]->bitmaps[i]->object, &bmpwidth, &bmpheight); if (RMFAILED(status)) continue; r2 = l2 + bmpwidth; b2 = t2 + bmpheight; if (CheckRectsIntersect(l1, t1, r1, b1, l2, t2, r2, b2)) { RMMemcpy(&bitmaps[nbitmaps], &(m_osdPages[m_activePageId]->bitmaps[i]->object), sizeof(m_osdPages[m_activePageId]->bitmaps[i]->object)); nbitmaps++; } } } return gfxUpdateButton(m_pRua, &m_osdPages[m_activePageId]->object, bitmaps, nbitmaps, &m_osdPages[m_activePageId]->buttons[buttonIndex]->object);}RMstatus RMcuracaoGuiNavigation::DisplaySubMenuButton(RMuint8 menuIndex, RMuint8 menuItemId, RMuint8 buttonIndex){ if (buttonIndex > MAX_GUI_BUTTONS) return RM_ERROR; return gfxDrawButton(m_pRua, &m_osdPages[m_activePageId]->menus[menuIndex]->items[menuItemId]->buttons[buttonIndex]->object);}RMstatus RMcuracaoGuiNavigation::DisplayMenu(RMuint8 menuIndex, RMbool redraw, RMbool hasfocus){ RMMenuItemObject items[MAX_GUI_MENUITEMS]; RMstatus status; RMuint8 i; if (menuIndex > MAX_GUI_MENUS) return RM_ERROR; // pack menuitem drawing objects for (i = 0; i < m_osdPages[m_activePageId]->menus[menuIndex]->nbItems; i++) { RMMemcpy(&items[i], &m_osdPages[m_activePageId]->menus[menuIndex]->items[i]->object, sizeof(RMMenuItemObject)); } m_osdPages[m_activePageId]->menus[menuIndex]->object.hasfocus = hasfocus; m_osdPages[m_activePageId]->menus[menuIndex]->object.redraw = redraw; m_osdPages[m_activePageId]->menus[menuIndex]->object.visible = TRUE; status = gfxDrawMenu(m_pRua, &m_osdPages[m_activePageId]->menus[menuIndex]->object, items, m_osdPages[m_activePageId]->menus[menuIndex]->nbItems); m_activeMenuId = m_osdPages[m_activePageId]->menus[menuIndex]->id; //!!!!![RC] mark other menus in the page not visible to avoid repaint when removing popup // NEED TO CHANGE for (i = 0; i < m_osdPages[m_activePageId]->nbMenus; i++) { m_osdPages[m_activePageId]->menus[i]->object.visible = (i == menuIndex); } return status;}RMstatus RMcuracaoGuiNavigation::MorphLists(RMuint8 listindex, RMuint8 listindexto){ if (listindex > MAX_GUI_LISTS || listindexto > MAX_GUI_LISTS) return RM_ERROR; m_gui->gui->KillTimer(TIMER_WAIT_ANIMATION, FALSE); if (m_osdPages[m_activePageId]->lists[listindex]->type == LISTTYPE_STRING && m_osdPages[m_activePageId]->lists[listindexto]->type == LISTTYPE_STRING) return MorphStringList(listindex, TRUE, TRUE); if (m_osdPages[m_activePageId]->lists[listindex]->type == LISTTYPE_LIST) return MorphListList(listindex, listindexto, TRUE); if (m_osdPages[m_activePageId]->lists[listindexto]->type == LISTTYPE_LIST)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -