diff options
| author | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-10-15 15:40:50 +0000 |
|---|---|---|
| committer | Andreas Monzner <andreas.monzner@multimedia-labs.de> | 2005-10-15 15:40:50 +0000 |
| commit | c9622ed49e250b776934dbd29a61bbb7a3ea2772 (patch) | |
| tree | 9685f6bcdfcb4df2e9b11376f84acc1253e9aa61 /lib | |
| parent | ea00936ee1a6bab7a2ba5957f7a46e8091050f22 (diff) | |
| download | enigma2-c9622ed49e250b776934dbd29a61bbb7a3ea2772.tar.gz enigma2-c9622ed49e250b776934dbd29a61bbb7a3ea2772.zip | |
add movemode in channellist (later it should only useable in bouquets)
Diffstat (limited to 'lib')
| -rw-r--r-- | lib/python/Components/ServiceList.py | 3 | ||||
| -rw-r--r-- | lib/python/Screens/ChannelSelection.py | 20 | ||||
| -rw-r--r-- | lib/service/listboxservice.cpp | 46 | ||||
| -rw-r--r-- | lib/service/listboxservice.h | 8 |
4 files changed, 67 insertions, 10 deletions
diff --git a/lib/python/Components/ServiceList.py b/lib/python/Components/ServiceList.py index 93c79296..0f71c44a 100644 --- a/lib/python/Components/ServiceList.py +++ b/lib/python/Components/ServiceList.py @@ -61,6 +61,9 @@ class ServiceList(HTMLComponent, GUIComponent): return marked + def setCurrentMarked(self, state): + self.l.setCurrentMarked(state) + def setMode(self, mode): if mode == self.MODE_NORMAL: self.instance.setItemHeight(20) diff --git a/lib/python/Screens/ChannelSelection.py b/lib/python/Screens/ChannelSelection.py index 5e35a7e1..8b9f9b8c 100644 --- a/lib/python/Screens/ChannelSelection.py +++ b/lib/python/Screens/ChannelSelection.py @@ -49,6 +49,7 @@ class ChannelSelection(Screen): def __init__(self, session): Screen.__init__(self, session) + self.entry_marked = False self.movemode = False self.bouquet_mark_edit = False @@ -121,9 +122,17 @@ class ChannelSelection(Screen): # ... def channelSelected(self): - self.session.nav.playService(self["list"].getCurrent()) - print "current: " + self["list"].getCurrent().toString() - self.close() + if not (self.movemode): + self.session.nav.playService(self["list"].getCurrent()) + print "current: " + self["list"].getCurrent().toString() + self.close() + else: + if self.entry_marked: + self["list"].setCurrentMarked(False) + self.entry_marked = False + else: + self["list"].setCurrentMarked(True) + self.entry_marked = True #called from infoBar def zap(self): @@ -139,7 +148,10 @@ class ChannelSelection(Screen): self.session.open(ChannelContextMenu, self) def setMoveMode(self, mode): - self.movemode = mode + if mode: + self.movemode = False + else: + self.movemode = True def showFavourites(self): l = self["list" ] diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index d4cbff20..f35c00a5 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -124,30 +124,49 @@ void eListboxServiceContent::sort() DEFINE_REF(eListboxServiceContent); eListboxServiceContent::eListboxServiceContent() + :m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_swap(m_list.end()) { - m_visual_mode = visModeSimple; - m_size = 0; cursorHome(); eServiceCenter::getInstance(m_service_center); } void eListboxServiceContent::cursorHome() { + list::iterator old = m_cursor; + m_cursor = m_list.begin(); m_cursor_number = 0; + + if ( m_current_marked && m_saved_cursor == m_list.end() ) + std::iter_swap( old, m_cursor ); } void eListboxServiceContent::cursorEnd() { + if ( m_current_marked && m_saved_cursor == m_list.end() && m_cursor != m_list.end() ) + m_swap = m_cursor; m_cursor = m_list.end(); m_cursor_number = m_size; } +int eListboxServiceContent::setCurrentMarked(bool state) +{ + bool prev = m_current_marked; + m_current_marked = state; + + if (state != prev && m_listbox) + m_listbox->entryChanged(m_cursor_number); + + return 0; +} + int eListboxServiceContent::cursorMove(int count) { + list::iterator old = m_cursor; + if (count > 0) { - while (count && (m_cursor != m_list.end())) + while(count && (m_cursor != m_list.end())) { ++m_cursor; ++m_cursor_number; @@ -162,7 +181,20 @@ int eListboxServiceContent::cursorMove(int count) ++count; } } - + + if ( m_current_marked && m_saved_cursor == m_list.end() ) + { + if ( m_cursor == m_list.end() ) + m_swap = old; + else if ( old == m_list.end() ) + { + std::iter_swap( m_swap, m_cursor ); + m_swap = m_list.end(); + } + else + std::iter_swap( old, m_cursor ); + } + return 0; } @@ -194,6 +226,7 @@ void eListboxServiceContent::cursorRestore() { m_cursor = m_saved_cursor; m_cursor_number = m_saved_cursor_number; + m_saved_cursor = m_list.end(); } int eListboxServiceContent::size() @@ -210,7 +243,10 @@ void eListboxServiceContent::setSize(const eSize &size) void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected) { painter.clip(eRect(offset, m_itemsize)); - if (cursorValid() && isMarked(*m_cursor)) + + if (m_current_marked && selected) + style.setStyle(painter, eWindowStyle::styleListboxMarked); + else if (cursorValid() && isMarked(*m_cursor)) style.setStyle(painter, eWindowStyle::styleListboxMarked); else style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal); diff --git a/lib/service/listboxservice.h b/lib/service/listboxservice.h index 4e5a8dd5..b2fc311b 100644 --- a/lib/service/listboxservice.h +++ b/lib/service/listboxservice.h @@ -47,6 +47,8 @@ public: void sort(); + int setCurrentMarked(bool); + protected: void cursorHome(); void cursorEnd(); @@ -82,11 +84,15 @@ private: ePtr<iServiceHandler> m_service_center; eServiceReference m_root; - + /* support for marked services */ std::set<eServiceReference> m_marked; std::set<eServiceReference>::const_iterator m_marked_iterator; + + /* support for movemode */ + bool m_current_marked; + list::iterator m_swap; }; #endif |
