TBSimpleLayoutItemWidget::~TBSimpleLayoutItemWidget() { m_image_arrow.RemoveFromParent(); m_textfield.RemoveFromParent(); m_image.RemoveFromParent(); CloseSubMenu(); }
eOSState cOsdMenu::ProcessKey(eKeys Key) { if (subMenu) { eOSState state = subMenu->ProcessKey(Key); if (state == osBack) return CloseSubMenu(); return state; } cOsdItem *item = Get(current); if (marked < 0 && item) { eOSState state = item->ProcessKey(Key); if (state != osUnknown) { DisplayCurrent(true); return state; } } switch (int(Key)) { case k0: return osUnknown; case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown; case kUp|k_Repeat: case kUp: CursorUp(); break; case kDown|k_Repeat: case kDown: CursorDown(); break; case kLeft|k_Repeat: case kLeft: PageUp(); break; case kRight|k_Repeat: case kRight: PageDown(); break; case kBack: return osBack; case kOk: if (marked >= 0) { SetStatus(NULL); if (marked != current) Move(marked, current); marked = -1; break; } // else run into default default: if (marked < 0) return osUnknown; } return osContinue; }
eOSState cMenuAddChannelToFavourites::ProcessKey(eKeys Key) { bool hadSubMenu = HasSubMenu(); eOSState state = cOsdMenu::ProcessKey(Key); /* close sub menus if channel list is requested */ if (state == osShowChannelList) { CloseSubMenu(); return state; } /* redrawn menu, if submenu was closed (create new folder menu adds new folder entries)*/ if (hadSubMenu && !HasSubMenu()) { Set(true); // param true selects the last entry ie. newly created folder } if (state == osUnknown) { switch(Key) { case kOk: { const char* text = Get(Current())->Text(); if (text && strstr(text, tr("Create new folder"))) return AddSubMenu(new cMenuCreateFavouritesFolder); cOsdChannelItem *currItem = dynamic_cast<cOsdChannelItem*> (Get(Current())); if (currItem && currItem->Channel()) { bool success = AddChannelsToFavourites(channelsToAdd, currItem->Channel()); if (success) // added Skins.Message(mtInfo, tr("Channel added to favourites") , 1); else Skins.Message(mtError, tr("Channel not added to favourites") , 1); cMenuChannelList::ClearChannelSelectMode(); return standAlone?osBack:osShowChannelList; } // if fav bouquet available } break; case kRed: case kBlue: case kGreen: case kYellow: if (standAlone) // ignore colour keys when in standalone mode state = osContinue; break; default: break; } // switch } // if state == osUnknown return state; }
eOSState cOsdMenu::HotKey(eKeys Key) { #ifdef USE_LIEMIEXT bool match = false; bool highlight = false; int item_nr; int i; if (Key == kNone) { if (lastActivity.TimedOut()) Key = kOk; else return osContinue; } else { lastActivity.Set(MENUKEY_TIMEOUT); } for (cOsdItem *item = Last(); item; item = Prev(item)) { #else for (cOsdItem *item = First(); item; item = Next(item)) { #endif /* LIEMIEXT */ const char *s = item->Text(); #ifdef USE_LIEMIEXT i = 0; item_nr = 0; if (s && (s = skipspace(s)) != '\0' && '0' <= s[i] && s[i] <= '9') { do { item_nr = item_nr * 10 + (s[i] - '0'); } while ( !((s[++i] == '\t')||(s[i] == ' ')) && (s[i] != '\0') && ('0' <= s[i]) && (s[i] <= '9')); if ((Key == kOk) && (item_nr == key_nr)) { #else if (s && (s = skipspace(s)) != NULL) { if (*s == Key - k1 + '1') { #endif /* LIEMIEXT */ current = item->Index(); RefreshCurrent(); Display(); cRemote::Put(kOk, true); #ifdef USE_LIEMIEXT key_nr = -1; #endif /* LIEMIEXT */ break; } #ifdef USE_LIEMIEXT else if (Key != kOk) { if (!highlight && (item_nr == (Key - k0))) { highlight = true; current = item->Index(); } if (!match && (key_nr == -1) && ((item_nr / 10) == (Key - k0))) { match = true; key_nr = (Key - k0); } else if (((key_nr == -1) && (item_nr == (Key - k0))) || (!match && (key_nr >= 0) && (item_nr == (10 * key_nr + Key - k0)))) { current = item->Index(); cRemote::Put(kOk, true); key_nr = -1; break; } } #endif /* LIEMIEXT */ } } #ifdef USE_LIEMIEXT if ((!match) && (Key != kNone)) { key_nr = -1; } #endif /* LIEMIEXT */ #if REELVDR // RC: returning osContinue prevents the main menu and prob. others from automatic closing. side effects? //DDD("return osUnknown"); return osUnknown; #else return osContinue; #endif } eOSState cOsdMenu::AddSubMenu(cOsdMenu *SubMenu) { delete subMenu; subMenu = SubMenu; #if REELVDR /* close any preview/pip channels when adding a submenu, since it does not belong to the submenu*/ if(cReelBoxBase::Instance()) { cReelBoxBase::Instance()->StartPip(false); printf("\033[0;92mStop pip\033[0m\n"); } // Clear ID3 tags and cover-art/thumbnails that are stored in skinreel3's // global variables, // new osd should set the necessary thumbnails and id3 infos itself. #if 0 // thumbnails in install wizard were not shown! cPlugin *skinPlugin = cPluginManager::GetPlugin("skinreel3"); if (skinPlugin) { skinPlugin->Service("setThumb", NULL); skinPlugin->Service("setId3Infos", NULL); } #endif #endif subMenu->Display(); return osContinue; // convenience return value } eOSState cOsdMenu::CloseSubMenu() { delete subMenu; subMenu = NULL; RefreshCurrent(); Display(); return osContinue; // convenience return value } #ifdef REELVDR //#define SEPARATORS ":-\0" #define SEPARATORS ":-" ///< take menu-title substrings befor one of this chars eOSState cOsdMenu::DisplayHelpMenu(const char *Title) { char title[128]; // if we get Menu at first we assume Main Menu if (strstr(Title,tr("Main Menu")) == Title) { strncpy(title,tr("Main Menu"),128); } else { const char *sep = SEPARATORS; while (*sep != '\0') { //printf (" \t\t --- sep %c \n", *sep); char *s = NULL; strncpy(title,Title,128); title[127] = '\0'; s = strchr(title,*sep); if (s) { *s = '\0'; //break; } sep++; } } //cHelpSection *hs = HelpMenus.GetSectionByTitle(title); //return AddSubMenu(new cMenuHelp(hs, title)); } #endif /* REELVDR */ eOSState cOsdMenu::ProcessKey(eKeys Key) { if (subMenu) { eOSState state = subMenu->ProcessKey(Key); if (state == osBack) return CloseSubMenu(); return state; } cOsdItem *item = Get(current); if (marked < 0 && item) { eOSState state = item->ProcessKey(Key); if (state != osUnknown) { DisplayCurrent(true); return state; } } switch (int(Key)) { #ifdef USE_LIEMIEXT case kNone: case k0...k9: return hasHotkeys ? HotKey(Key) : osUnknown; #else case k0: return osUnknown; case k1...k9: return hasHotkeys ? HotKey(Key) : osUnknown; #endif /* LIEMIEXT */ case kUp|k_Repeat: case kUp: CursorUp(); break; case kDown|k_Repeat: case kDown: CursorDown(); break; case kLeft|k_Repeat: case kLeft: PageUp(); break; case kRight|k_Repeat: case kRight: PageDown(); break; case kBack: return osBack; #ifdef REELVDR case kInfo: return DisplayHelpMenu(title); #endif /* REELVDR */ case kOk: if (marked >= 0) { SetStatus(NULL); if (marked != current) Move(marked, current); marked = -1; break; } // else run into default default: if (marked < 0) return osUnknown; } return osContinue; }
eOSState cMenuSearchResults::Record(void) { UpdateCurrent(); cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current()); if (item) { if (item->timerMatch == tmFull) { eTimerMatch tm = tmNone; cTimer *timer = Timers.GetMatch(item->event, &tm); if (timer) { if (EPGSearchConfig.useVDRTimerEditMenu) return AddSubMenu(new cMenuEditTimer(timer)); else return AddSubMenu(new cMenuMyEditTimer(timer, false, item->event)); } } cTimer *timer = new cTimer(item->event); PrepareTimerFile(item->event, timer); cTimer *t = Timers.GetTimer(timer); if (EPGSearchConfig.onePressTimerCreation == 0 || t || !item->event || (!t && item->event && item->event->StartTime() - (Setup.MarginStart+2) * 60 < time(NULL))) { if (t) { delete timer; timer = t; } if (EPGSearchConfig.useVDRTimerEditMenu) return AddSubMenu(new cMenuEditTimer(timer, !t)); else return AddSubMenu(new cMenuMyEditTimer(timer, !t, item->event)); } else { string fullaux = ""; string aux = ""; if (item->event) { const cEvent* event = item->event; int bstart = event->StartTime() - timer->StartTime(); int bstop = timer->StopTime() - event->EndTime(); int checkmode = DefTimerCheckModes.GetMode(timer->Channel()); aux = UpdateAuxValue(aux, "channel", NumToString(timer->Channel()->Number()) + " - " + CHANNELNAME(timer->Channel())); aux = UpdateAuxValue(aux, "update", checkmode); aux = UpdateAuxValue(aux, "eventid", event->EventID()); aux = UpdateAuxValue(aux, "bstart", bstart); aux = UpdateAuxValue(aux, "bstop", bstop); fullaux = UpdateAuxValue(fullaux, "epgsearch", aux); } #ifdef USE_PINPLUGIN aux = ""; aux = UpdateAuxValue(aux, "protected", timer->FskProtection() ? "yes" : "no"); fullaux = UpdateAuxValue(fullaux, "pin-plugin", aux); #endif SetAux(timer, fullaux); Timers.Add(timer); gl_timerStatusMonitor->SetConflictCheckAdvised(); timer->Matches(); Timers.SetModified(); LogFile.iSysLog("timer %s added (active)", *timer->ToDescr()); if (HasSubMenu()) CloseSubMenu(); if (Update()) Display(); SetHelpKeys(); } } return osContinue; }
void TBSimpleLayoutItemWidget::OnWidgetDelete(TBWidget *widget) { assert(widget == m_menu); CloseSubMenu(); }
eOSState cMenuFavourites::ProcessKey(eKeys Key) { #if 1 /* exit key & yellow key goes to "previous" menu, ie. list of all fav. folders */ if (!HasSubMenu() && mode == eFavChannels && (NORMALKEY(Key) == kBack || NORMALKEY(Key) == kYellow)) { mode = eFavFolders; favouritesFilters.ClearFilters(); lastPosition = -1; // reset position of last selected item Set(); return osContinue; } #endif /* navigate folders with : Left and Right keys : if 'cursor' is on first/last item on osd OR with Channel up/down (unconditional jump to prev/next fav. folder) */ if (!HasSubMenu() && mode == eFavChannels) { bool isFirstItem = (Current() == 0); bool isLastItem = (Current() == Count()-1); if ( (kLeft == NORMALKEY(Key) && isFirstItem) || kChanDn == NORMALKEY(Key)) { ShowPrevFolder(); return osContinue; } else if ( (kRight == NORMALKEY(Key) && isLastItem) || kChanUp == NORMALKEY(Key)) { ShowNextFolder(); return osContinue; } } eOSState state = cOsdMenu::ProcessKey(Key); // refresh page if (state == osRefreshPage) { /* NOTE: call Set() before CloseSubMenu() CloseSubMenu() calls RefreshCurrent() to redraw the current item which might have just been deleted! Therefore, redraw updated list and then call CloseSubMenu() */ Set(); CloseSubMenu(); state = osContinue; } // refresh page // show side note info if no submenu and key has been handled if (!HasSubMenu() && state != osUnknown) ShowSideNoteInfo(); cOsdChannelItem *currItem = dynamic_cast<cOsdChannelItem*> (Get(Current())); if (state == osUnknown) { switch (Key) { case kOk: /* switching to channel successful? change state to osEnd */ state = osContinue; if (currItem && currItem->Channel()) { if (mode == eFavFolders) { // open fav folder favouritesFilters.AddBouquetFilter(currItem->Channel()->Name(), true); lastSelectedFolder = currItem->Channel()->Name(); //return AddSubMenu(new cMenuFavourites); mode = eFavChannels; lastPosition = -1; // reset position of last selected item Set(); } else { bool success = SwitchToFavChannel(currItem->Channel()); if (success) { state = osEnd; // switched to channel so close menu memoryOn = true; SaveFilteredChannelList(true); } else Skins.Message(mtError, tr("Switching to channel failed")); } // else } // if (currItem && currItem->Channel()) break; case kBlue: if (currItem && currItem->Channel()) return AddSubMenu(new cMenuFavouritesFunction(currItem->Channel())); break; default: break; } // switch } // if state == osUnknown if (state != osUnknown && !HasSubMenu() && currItem && mode == eFavChannels) { lastPosition = Current(); // update position of last selected fav. channel } // ignore color keys when this menu has submenus, // else vdr opens Macrobinding for these keys if (HasSubMenu() && state == osUnknown) switch (NORMALKEY(Key)) { case kRed: case kGreen: case kYellow: case kBlue: return osContinue; default: break; } // Handle color keys if (state == osUnknown) switch(Key) { case kRed: // no filter, all channels globalFilters.ClearFilters(); return AddSubMenu(new cMenuChannelList); break; case kGreen: // Sources globalFilters.ClearFilters(); return AddSubMenu(new cMenuSourceList); break; case kBlue: break; // blue is now function menu, ignore this key here case kYellow: // reset Fav listing, show fav. folders list if (mode != eFavFolders) { favouritesFilters.ClearFilters(); mode = eFavFolders; lastPosition = -1; // reset position of last selected item Set(); } state = osContinue; break; default: break; } // switch for colorkeys return state; }
eOSState cMenuBouquetsList::ProcessKey(eKeys Key) { if (!HasSubMenu() && Key == kBack && (mode_ == 2)) //go back to standard mode { cChannel *currentbouquet = GetBouquet(Current()); if (currentbouquet && FilteredBouquetIsEmpty(currentbouquet)) { for (cChannel * channel = currentbouquet; channel; channel = (cChannel *) channel->Next()) { if (channel->GroupSep() && !(FilteredBouquetIsEmpty(channel))) { currentbouquet = channel; break; } } } mode_ = 1; Setup(currentbouquet); SetStatus(NULL); return osContinue; } eOSState state = cOsdMenu::ProcessKey(NORMALKEY(Key)); //redraw if (HadSubMenu_ && !HasSubMenu()) { mode_ = 2; Setup(newChannel_); Options(); } HadSubMenu_ = HasSubMenu(); switch (state) { case osUser1: { // add bouquet cChannel *channel = Channels.Last(); if (channel) { cMenuBouquetItem *item = new cMenuBouquetItem(channel); item->Set(); Add(item, true); if (HasSubMenu()) return CloseSubMenu(); } break; } case osBack: if (mode_ == 2) { ; } else { if (::Setup.UseBouquetList == 1 && !calledFromkChan) return ViewChannels(); else return osEnd; } default: if (state == osUnknown) { switch (Key) { case kOk: if (bouquetMarked >= 0) { SetStatus(NULL); if (bouquetMarked != Current()) Move(bouquetMarked, Current()); bouquetMarked = -1; } else return ViewChannels(); break; default: //if (showHelp) //if helpkeys were not shown,donot act on them switch (Key) { case kRed: if (mode_ == 2) { return NewBouquet(); } else if (mode_ == 1) { return ViewChannels(); //back to Channels } break;; case kGreen: if (mode_ == 2) { // Move Bouquet Mark(); break; } break; case kYellow: if (mode_ == 2) { // Delete Bouquet return DeleteBouquet(); } break; case kBlue: if (mode_ == 2) { return EditBouquet(); } else if (mode_ == 1) { mode_ = 2; Setup(GetBouquet(Current())); return osContinue; } break; /*case kGreater: if (mode_ == 2) { newChannel_ = GetBouquet(Current()); return AddSubMenu(new cMenuChannels()); } break;*/ default: break; } // switch //else PRINTF("showHelp = %i\n", showHelp); break; } } } return state; }