Esempio n. 1
0
TBSimpleLayoutItemWidget::~TBSimpleLayoutItemWidget()
{
	m_image_arrow.RemoveFromParent();
	m_textfield.RemoveFromParent();
	m_image.RemoveFromParent();
	CloseSubMenu();
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 4
0
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;
}
Esempio n. 5
0
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;
}
Esempio n. 6
0
void TBSimpleLayoutItemWidget::OnWidgetDelete(TBWidget *widget)
{
	assert(widget == m_menu);
	CloseSubMenu();
}
Esempio n. 7
0
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;
}
Esempio n. 8
0
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;
}