- add pageUp/pageDown movements
[enigma2.git] / lib / gui / elistbox.cpp
index 4598fa091e8a696291dba216d5b82cb428690401..4f799a176cc60b26c664c7402bf1ef0808f0dfe8 100644 (file)
@@ -51,17 +51,39 @@ void eListbox::moveSelection(int dir)
                if (!m_content->cursorValid())
                        m_content->cursorMove(-1);
                break;
+       case pageUp:
+               if (m_content->cursorGet() >= m_items_per_page)
+               {
+                       m_content->cursorMove(-m_items_per_page);
+                       m_top -= m_items_per_page;
+                       if (m_top < 0)
+                               m_top = 0;
+               } else
+               {
+                       m_top = 0;
+                       m_content->cursorHome();
+               }
+               break;
        case moveTop:
                m_content->cursorHome();
                m_top = 0; /* align with top, speeds up process */
                break;
+
+       case pageDown:
+               m_content->cursorMove(m_items_per_page);
+               if (m_content->cursorValid())
+                       break;
+                               /* fall through */
        case moveEnd:
                        /* move to last existing one ("end" is already invalid) */
                m_content->cursorEnd(); m_content->cursorMove(-1); 
-               
-               m_top = m_content->cursorGet() - m_items_per_page + 1;
-               if (m_top < 0)
-                       m_top = 0;
+                       /* current selection invisible? */
+               if (m_top + m_items_per_page <= m_content->cursorGet())
+               {
+                       m_top = m_content->cursorGet() - m_items_per_page + 1;
+                       if (m_top < 0)
+                               m_top = 0;
+               }
                break;
        case justCheck:
                break;