void eListboxServiceContent::cursorHome() { if (m_current_marked && m_saved_cursor == m_list.end()) { if (m_cursor_number >= m_size) { m_cursor_number = m_size-1; --m_cursor; } while (m_cursor_number) { swapServices(m_cursor--, m_cursor); --m_cursor_number; if (m_listbox && m_cursor_number) m_listbox->entryChanged(cursorResolve(m_cursor_number)); } } else { m_cursor = m_list.begin(); m_cursor_number = 0; while (m_cursor != m_list.end()) { if (!((m_hide_number_marker && (m_cursor->flags & eServiceReference::isNumberedMarker)) || (m_cursor->flags & eServiceReference::isInvisible))) break; m_cursor++; m_cursor_number++; } } }
int eListboxServiceContent::cursorMove(int count) { int prev = m_cursor_number, last = m_cursor_number + count; if (count > 0) { while(count && m_cursor != m_list.end()) { list::iterator prev_it = m_cursor++; if ( m_current_marked && m_cursor != m_list.end() && m_saved_cursor == m_list.end() ) { swapServices(prev_it, m_cursor); if ( m_listbox && prev != m_cursor_number && last != m_cursor_number ) m_listbox->entryChanged(cursorResolve(m_cursor_number)); } ++m_cursor_number; if (!(m_hide_number_marker && m_cursor->flags & eServiceReference::isNumberedMarker) && !(m_cursor->flags & eServiceReference::isInvisible)) --count; } } else if (count < 0) { while (count && m_cursor != m_list.begin()) { 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() ) { swapServices(prev_it, m_cursor); if ( m_listbox && prev != m_cursor_number && last != m_cursor_number ) m_listbox->entryChanged(cursorResolve(m_cursor_number)); } --m_cursor_number; if (!(m_hide_number_marker && m_cursor->flags & eServiceReference::isNumberedMarker) && !(m_cursor->flags & eServiceReference::isInvisible)) ++count; } while (m_cursor != m_list.end()) { if (!((m_hide_number_marker && (m_cursor->flags & eServiceReference::isNumberedMarker)) || (m_cursor->flags & eServiceReference::isInvisible))) break; m_cursor++; m_cursor_number++; } } return 0; }
void eListboxServiceContent::removeCurrent() { if (m_size && m_listbox) { if (m_cursor_number == --m_size) { m_list.erase(m_cursor--); if (m_size) { --m_cursor_number; m_listbox->entryRemoved(cursorResolve(m_cursor_number+1)); } else m_listbox->entryRemoved(cursorResolve(m_cursor_number)); } else { m_list.erase(m_cursor++); m_listbox->entryRemoved(cursorResolve(m_cursor_number)); } } }
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; } if (m_listbox) m_listbox->moveSelectionTo(cursorResolve(index)); }
int eListboxServiceContent::getNextMarkerPos() { if (!m_listbox) return 0; list::iterator i(m_cursor); int index = m_cursor_number; while (index < (m_size-1)) { ++i; ++index; if ((i->flags & eServiceReference::isMarker) && !(i->flags & eServiceReference::isInvisible)) break; } return cursorResolve(index); }
void eListboxServiceContent::addService(const eServiceReference &service, bool beforeCurrent) { if (beforeCurrent && m_size) m_list.insert(m_cursor, service); else m_list.push_back(service); if (m_size++) { ++m_cursor_number; if (m_listbox) m_listbox->entryAdded(cursorResolve(m_cursor_number-1)); } else { m_cursor = m_list.begin(); m_cursor_number=0; m_listbox->entryAdded(0); } }
int eListboxServiceContent::setCurrentMarked(bool state) { bool prev = m_current_marked; m_current_marked = state; if (state != prev && m_listbox) { m_listbox->entryChanged(cursorResolve(m_cursor_number)); if (!state) { if (!m_lst) m_service_center->list(m_root, m_lst); if (m_lst) { ePtr<iMutableServiceList> list; if (m_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"); } } } else eDebug("no list available!"); } } return 0; }
void eListboxServiceContent::cursorEnd() { 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() ) { swapServices(m_cursor, prev); if ( m_listbox ) m_listbox->entryChanged(cursorResolve(m_cursor_number)); } } } else { m_cursor = m_list.end(); m_cursor_number = m_size; } }
int eListboxServiceContent::getPrevMarkerPos() { if (!m_listbox) return 0; list::iterator i(m_cursor); int index = m_cursor_number; while (index) // Skip precending markers { --i; --index; if (! ((i->flags & eServiceReference::isMarker) && !(i->flags & eServiceReference::isInvisible))) break; } while (index) { --i; --index; if ((i->flags & eServiceReference::isMarker) && !(i->flags & eServiceReference::isInvisible)) break; } return cursorResolve(index); }
void eListboxServiceContent::cursorHome() { if (m_current_marked && m_saved_cursor == m_list.end()) { if (m_cursor_number >= m_size) { m_cursor_number = m_size-1; --m_cursor; } while (m_cursor_number) { swapServices(m_cursor--, m_cursor); --m_cursor_number; if (m_listbox && m_cursor_number) m_listbox->entryChanged(cursorResolve(m_cursor_number)); } } else { m_cursor = m_list.begin(); m_cursor_number = 0; } }
int eListboxServiceContent::cursorGet() { return cursorResolve(m_cursor_number); }
void eListboxServiceContent::removeMarked(const eServiceReference &ref) { m_marked.erase(ref); if (m_listbox) m_listbox->entryChanged(cursorResolve(lookupService(ref))); }