diff options
author | louis <louis.braun@gmx.de> | 2014-01-18 14:10:42 +0100 |
---|---|---|
committer | louis <louis.braun@gmx.de> | 2014-01-18 14:10:42 +0100 |
commit | 475964a7810214229c9d60c79e00192fd65eb1a0 (patch) | |
tree | fea11d78348bd7cc1792f92f3eb398749170bcfc /recmenu.c | |
parent | 662a17df88a607e0179b2bb63cd984fafcc5d784 (diff) | |
download | vdr-plugin-tvguide-475964a7810214229c9d60c79e00192fd65eb1a0.tar.gz vdr-plugin-tvguide-475964a7810214229c9d60c79e00192fd65eb1a0.tar.bz2 |
left / right scroll page up / down in recmenu result lists
Diffstat (limited to 'recmenu.c')
-rw-r--r-- | recmenu.c | 95 |
1 files changed, 90 insertions, 5 deletions
@@ -150,7 +150,7 @@ void cRecMenu::AddMenuItem(cRecMenuItem *item, bool inFront) { menuItems.push_front(item); } -bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item) { +bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item, bool inFront) { currentHeight += item->GetHeight(); int totalHeight = headerHeight + footerHeight + currentHeight + 2*border; if (totalHeight >= geoManager.osdHeight) { @@ -161,9 +161,14 @@ bool cRecMenu::AddMenuItemInitial(cRecMenuItem *item) { } return false; } - stopIndex++; numItems++; - menuItems.push_back(item); + if (!inFront) { + stopIndex++; + menuItems.push_back(item); + } else { + startIndex--; + menuItems.push_front(item); + } return true; } @@ -315,6 +320,86 @@ bool cRecMenu::ScrollDown(void) { return true; } +void cRecMenu::PageUp(void) { + cRecMenuItem *activeItem = GetActiveMenuItem(); + if (!activeItem) + return; + if (!scrollable) { + JumpBegin(); + return; + } + int newActive = GetActive() - numItems; + if (newActive < 0) + newActive = 0; + activeItem->setInactive(); + activeItem->setBackground(); + ClearMenuItems(); + currentHeight = 0; + stopIndex = startIndex; + numItems = 0; + cRecMenuItem *newItem = NULL; + bool spaceLeft = true; + while (newItem = GetMenuItem(startIndex-1)) { + if (startIndex-1 == newActive) + newItem->setActive(); + spaceLeft = AddMenuItemInitial(newItem, true); + if (!spaceLeft) + break; + } + if (spaceLeft) { + while (newItem = GetMenuItem(stopIndex)) { + spaceLeft = AddMenuItemInitial(newItem); + if (!spaceLeft) + break; + } + } + if (GetActive() == numItems) + menuItems.front()->setActive(); + if (CalculateHeight(true)) + CreatePixmap(); + Arrange(deleteMenuItems); + Display(deleteMenuItems); +} + +void cRecMenu::PageDown(void) { + cRecMenuItem *activeItem = GetActiveMenuItem(); + if (!activeItem) + return; + if (!scrollable) { + JumpEnd(); + return; + } + int newActive = GetActive() + numItems; + activeItem->setInactive(); + activeItem->setBackground(); + ClearMenuItems(); + currentHeight = 0; + numItems = 0; + startIndex = stopIndex; + cRecMenuItem *newItem = NULL; + bool spaceLeft = true; + while (newItem = GetMenuItem(stopIndex)) { + if (stopIndex == newActive) + newItem->setActive(); + spaceLeft = AddMenuItemInitial(newItem); + if (!spaceLeft) + break; + } + if (spaceLeft) { + while (newItem = GetMenuItem(startIndex-1)) { + spaceLeft = AddMenuItemInitial(newItem, true); + if (!spaceLeft) + break; + } + } + if (GetActive() == GetTotalNumMenuItems()) + menuItems.back()->setActive(); + if (CalculateHeight(true)) + CreatePixmap(); + Arrange(deleteMenuItems); + Display(deleteMenuItems); +} + void cRecMenu::JumpBegin(void) { cRecMenuItem *activeItem = GetActiveMenuItem(); if (!scrollable) { @@ -551,11 +636,11 @@ eRecMenuState cRecMenu::ProcessKey(eKeys Key) { state = rmsConsumed; break; case kLeft: - JumpBegin(); + PageUp(); state = rmsConsumed; break; case kRight: - JumpEnd(); + PageDown(); state = rmsConsumed; break; default: |