m_listbox->entryReset();
}
+void eListboxServiceContent::setCurrent(const eServiceReference &ref)
+{
+ int index=0;
+ for (list::iterator i(m_list.begin()); i != m_list.end(); ++i, ++index)
+ if ( *i == ref )
+ {
+ m_cursor = i;
+ m_cursor_number = index;
+ break;
+ }
+}
+
void eListboxServiceContent::getCurrent(eServiceReference &ref)
{
if (cursorValid())
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), m_current_marked(false), m_numberoffset(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 );
+ if (m_current_marked && m_saved_cursor == m_list.end())
+ {
+ while (m_cursor_number)
+ {
+ std::iter_swap(m_cursor--, m_cursor);
+ --m_cursor_number;
+ if (m_listbox && m_cursor_number)
+ m_listbox->entryChanged(m_cursor_number);
+ }
+ }
+ else
+ {
+ m_cursor = m_list.begin();
+ m_cursor_number = 0;
+ }
}
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;
+ if (m_current_marked && m_saved_cursor == m_list.end())
+ {
+ while (m_cursor != m_list.end())
+ {
+ list::iterator prev = m_cursor++;
+ ++m_cursor_number;
+ if ( prev != m_list.end() && m_cursor != m_list.end() )
+ {
+ std::iter_swap(m_cursor, prev);
+ if ( m_listbox )
+ m_listbox->entryChanged(m_cursor_number);
+ }
+ }
+ }
+ else
+ {
+ m_cursor = m_list.end();
+ m_cursor_number = m_size;
+ }
}
int eListboxServiceContent::setCurrentMarked(bool state)
m_current_marked = state;
if (state != prev && m_listbox)
+ {
m_listbox->entryChanged(m_cursor_number);
+ if (!state)
+ {
+ ePtr<iListableService> lst;
+ if (m_service_center->list(m_root, lst))
+ eDebug("no list available!");
+ else
+ {
+ ePtr<iMutableServiceList> list;
+ if (lst->startEdit(list))
+ eDebug("no editable list");
+ else
+ {
+ eServiceReference ref;
+ getCurrent(ref);
+ if(!ref)
+ eDebug("no valid service selected");
+ else
+ {
+ int pos = cursorGet();
+ eDebugNoNewLine("move %s to %d ", ref.toString().c_str(), pos);
+ if (list->moveService(ref, cursorGet()))
+ eDebug("failed");
+ else
+ eDebug("ok");
+ }
+ }
+ }
+ }
+ }
return 0;
}
int eListboxServiceContent::cursorMove(int count)
{
- list::iterator old = m_cursor;
-
+ int prev = m_cursor_number, last = m_cursor_number + count;
if (count > 0)
{
- while(count && (m_cursor != m_list.end()))
+ while(count && m_cursor != m_list.end())
{
- ++m_cursor;
+ list::iterator prev_it = m_cursor++;
+ if ( m_current_marked && m_cursor != m_list.end() && m_saved_cursor == m_list.end() )
+ {
+ std::iter_swap(prev_it, m_cursor);
+ if ( m_listbox && prev != m_cursor_number && last != m_cursor_number )
+ m_listbox->entryChanged(m_cursor_number);
+ }
++m_cursor_number;
--count;
- }
+ }
} else if (count < 0)
{
- while (count && (m_cursor != m_list.begin()))
+ while (count && m_cursor != m_list.begin())
{
- --m_cursor;
+ list::iterator prev_it = m_cursor--;
+ if ( m_current_marked && m_cursor != m_list.end() && prev_it != m_list.end() && m_saved_cursor == m_list.end() )
+ {
+ std::iter_swap(prev_it, m_cursor);
+ if ( m_listbox && prev != m_cursor_number && last != m_cursor_number )
+ m_listbox->entryChanged(m_cursor_number);
+ }
--m_cursor_number;
++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;
}
case celServiceNumber:
{
char bla[10];
- sprintf(bla, "%d", m_cursor_number + 1);
+ sprintf(bla, "%d", m_numberoffset + m_cursor_number + 1);
text = bla;
break;
}