1 #include <lib/components/listboxepg.h>
2 #include <lib/dvb/epgcache.h>
3 #include <lib/service/service.h>
5 void eListboxEPGContent::setRoot(const eServiceReference &root)
8 if ( !eEPGCache::getInstance(epg) )
14 if (!epg->startTimeQuery(root))
16 ePtr<eServiceEvent> ptr;
17 while( !epg->getNextTimeEntry(ptr) )
18 m_list.push_back(ptr);
21 eDebug("startTimeQuery failed %s", root.toString().c_str());
24 m_size = m_list.size();
28 m_listbox->entryReset();
32 void eListboxEPGContent::getCurrent(ePtr<eServiceEvent>& evt)
40 void eListboxEPGContent::setElementPosition(int element, eRect where)
42 if ((element >= 0) && (element < celElements))
43 m_element_position[element] = where;
46 void eListboxEPGContent::setElementFont(int element, gFont *font)
48 if ((element >= 0) && (element < celElements))
49 m_element_font[element] = font;
52 void eListboxEPGContent::sort()
55 ePtr<iListableService> lst;
56 if (!m_service_center->list(m_root, lst))
58 m_list.sort(iListableServiceCompare(lst));
59 /* FIXME: is this really required or can we somehow keep the current entry? */
62 m_listbox->entryReset();
67 DEFINE_REF(eListboxEPGContent);
69 eListboxEPGContent::eListboxEPGContent()
75 void eListboxEPGContent::cursorHome()
77 m_cursor = m_list.begin();
81 void eListboxEPGContent::cursorEnd()
83 m_cursor = m_list.end();
84 m_cursor_number = m_size;
87 int eListboxEPGContent::cursorMove(int count)
89 list::iterator old = m_cursor;
93 while(count && (m_cursor != m_list.end()))
101 while (count && (m_cursor != m_list.begin()))
112 int eListboxEPGContent::cursorValid()
114 return m_cursor != m_list.end();
117 int eListboxEPGContent::cursorSet(int n)
125 int eListboxEPGContent::cursorGet()
127 return m_cursor_number;
130 void eListboxEPGContent::cursorSave()
132 m_saved_cursor = m_cursor;
133 m_saved_cursor_number = m_cursor_number;
136 void eListboxEPGContent::cursorRestore()
138 m_cursor = m_saved_cursor;
139 m_cursor_number = m_saved_cursor_number;
140 m_saved_cursor = m_list.end();
143 int eListboxEPGContent::size()
148 void eListboxEPGContent::setSize(const eSize &size)
151 eSize s = m_itemsize;
152 s.setWidth(size.width()/20*5);
153 m_element_position[celBeginTime] = eRect(ePoint(0, 0), s);
154 m_element_font[celBeginTime] = new gFont("Arial", 20);
155 s.setWidth(size.width()/20*15);
156 m_element_position[celTitle] = eRect(ePoint(size.width()/20*5, 0), s);
157 m_element_font[celTitle] = new gFont("Arial", 20);
160 void eListboxEPGContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
162 painter.clip(eRect(offset, m_itemsize));
163 style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
168 for (int e = 0; e < celElements; ++e)
170 if (!m_element_font[e])
173 painter.setFont(m_element_font[e]);
175 std::string text = "<n/a>";
182 localtime_r(&(*m_cursor)->m_begin, &t);
184 snprintf(tmp, 13, "%02d.%02d, %02d:%02d",
185 t.tm_mday, t.tm_mon+1,
186 t.tm_hour, t.tm_min);
192 text = (*m_cursor)->m_event_name;
197 eRect area = m_element_position[e];
198 area.moveBy(offset.x(), offset.y());
200 painter.renderText(area, text);
204 style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);