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 epg->startTimeQuery(root);
15 ePtr<eServiceEvent> ptr;
16 while( !epg->getNextTimeEntry(ptr) )
17 m_list.push_back(ptr);
19 m_size = m_list.size();
23 m_listbox->entryReset();
27 void eListboxEPGContent::getCurrent(ePtr<eServiceEvent>& evt)
35 void eListboxEPGContent::setElementPosition(int element, eRect where)
37 if ((element >= 0) && (element < celElements))
38 m_element_position[element] = where;
41 void eListboxEPGContent::setElementFont(int element, gFont *font)
43 if ((element >= 0) && (element < celElements))
44 m_element_font[element] = font;
47 void eListboxEPGContent::sort()
50 ePtr<iListableService> lst;
51 if (!m_service_center->list(m_root, lst))
53 m_list.sort(iListableServiceCompare(lst));
54 /* FIXME: is this really required or can we somehow keep the current entry? */
57 m_listbox->entryReset();
62 DEFINE_REF(eListboxEPGContent);
64 eListboxEPGContent::eListboxEPGContent()
70 void eListboxEPGContent::cursorHome()
72 m_cursor = m_list.begin();
76 void eListboxEPGContent::cursorEnd()
78 m_cursor = m_list.end();
79 m_cursor_number = m_size;
82 int eListboxEPGContent::cursorMove(int count)
84 list::iterator old = m_cursor;
88 while(count && (m_cursor != m_list.end()))
96 while (count && (m_cursor != m_list.begin()))
107 int eListboxEPGContent::cursorValid()
109 return m_cursor != m_list.end();
112 int eListboxEPGContent::cursorSet(int n)
120 int eListboxEPGContent::cursorGet()
122 return m_cursor_number;
125 void eListboxEPGContent::cursorSave()
127 m_saved_cursor = m_cursor;
128 m_saved_cursor_number = m_cursor_number;
131 void eListboxEPGContent::cursorRestore()
133 m_cursor = m_saved_cursor;
134 m_cursor_number = m_saved_cursor_number;
135 m_saved_cursor = m_list.end();
138 int eListboxEPGContent::size()
143 void eListboxEPGContent::setSize(const eSize &size)
146 eSize s = m_itemsize;
147 s.setWidth((size.width()/4)-10);
148 m_element_position[celBeginTime] = eRect(ePoint(0, 0), s);
149 m_element_font[celBeginTime] = new gFont("Arial", 14);
150 s.setWidth(size.width()/4*3);
151 m_element_position[celTitle] = eRect(ePoint(size.width()/4, 0), s);
152 m_element_font[celTitle] = new gFont("Arial", 14);
155 void eListboxEPGContent::paint(gPainter &painter, eWindowStyle &style, const ePoint &offset, int selected)
157 painter.clip(eRect(offset, m_itemsize));
158 style.setStyle(painter, selected ? eWindowStyle::styleListboxSelected : eWindowStyle::styleListboxNormal);
163 for (int e = 0; e < celElements; ++e)
165 if (!m_element_font[e])
168 painter.setFont(m_element_font[e]);
170 std::string text = "<n/a>";
177 localtime_r(&(*m_cursor)->m_begin, &t);
179 snprintf(tmp, 13, "%02d.%02d, %02d:%02d",
180 t.tm_mday, t.tm_mon+1,
181 t.tm_hour, t.tm_min);
187 text = (*m_cursor)->m_event_name;
192 eRect area = m_element_position[e];
193 area.moveBy(offset.x(), offset.y());
195 painter.renderText(area, text);
199 style.drawFrame(painter, eRect(offset, m_itemsize), eWindowStyle::frameListboxEntry);