aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-10-15 15:40:50 +0000
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>2005-10-15 15:40:50 +0000
commitc9622ed49e250b776934dbd29a61bbb7a3ea2772 (patch)
tree9685f6bcdfcb4df2e9b11376f84acc1253e9aa61 /lib
parentea00936ee1a6bab7a2ba5957f7a46e8091050f22 (diff)
downloadenigma2-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.py3
-rw-r--r--lib/python/Screens/ChannelSelection.py20
-rw-r--r--lib/service/listboxservice.cpp46
-rw-r--r--lib/service/listboxservice.h8
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