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())
if (m_visual_mode == visModeSimple)
{
m_element_position[celServiceName] = eRect(ePoint(0, 0), m_itemsize);
- m_element_font[celServiceName] = new gFont("Arial", 14);
+ m_element_font[celServiceName] = new gFont("Arial", 23);
m_element_position[celServiceNumber] = eRect();
m_element_font[celServiceNumber] = 0;
m_element_position[celIcon] = eRect();
DEFINE_REF(eListboxServiceContent);
eListboxServiceContent::eListboxServiceContent()
+ :m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0)
{
- m_visual_mode = visModeSimple;
- m_size = 0;
cursorHome();
eServiceCenter::getInstance(m_service_center);
}
void eListboxServiceContent::cursorHome()
{
- m_cursor = m_list.begin();
- m_cursor_number = 0;
+ 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()
{
- 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)
+{
+ bool prev = m_current_marked;
+ 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)
{
+ 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;
}
}
-
return 0;
}
{
m_cursor = m_saved_cursor;
m_cursor_number = m_saved_cursor_number;
+ m_saved_cursor = m_list.end();
}
int eListboxServiceContent::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);
case celServiceNumber:
{
char bla[10];
- sprintf(bla, "%d", m_cursor_number + 1);
+ sprintf(bla, "%d", m_numberoffset + m_cursor_number + 1);
text = bla;
break;
}