From: Andreas Monzner Date: Fri, 2 Dec 2005 14:30:21 +0000 (+0000) Subject: set foregroundcolor of non tuneable services in servicelist to gray (for linked tuner... X-Git-Tag: 2.6.0~4839 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/2c1f4947646d051133197a23a73ee985b56e1713 set foregroundcolor of non tuneable services in servicelist to gray (for linked tuner mode) --- diff --git a/lib/dvb/dvb.cpp b/lib/dvb/dvb.cpp index 4d78292a..676c0633 100644 --- a/lib/dvb/dvb.cpp +++ b/lib/dvb/dvb.cpp @@ -297,7 +297,7 @@ RESULT eDVBResourceManager::getChannelList(ePtr &list) } -RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel) +RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel, bool fake) { /* first, check if a channel is already existing. */ @@ -334,19 +334,22 @@ RESULT eDVBResourceManager::allocateChannel(const eDVBChannelID &channelid, eUse if (allocateFrontend(fe, feparm)) return errNoFrontend; - - RESULT res; - ePtr ch; - ch = new eDVBChannel(this, fe); - res = ch->setChannel(channelid, feparm); - if (res) + if (!fake) { - channel = 0; - return errChidNotFound; - } + RESULT res; + ePtr ch; + ch = new eDVBChannel(this, fe); + + res = ch->setChannel(channelid, feparm); + if (res) + { + channel = 0; + return errChidNotFound; + } - channel = ch; + channel = ch; + } return 0; } diff --git a/lib/dvb/dvb.h b/lib/dvb/dvb.h index fcfbdfe7..355e2469 100644 --- a/lib/dvb/dvb.h +++ b/lib/dvb/dvb.h @@ -156,9 +156,9 @@ public: errNoDemux = -2, errChidNotFound = -3 }; - + /* allocate channel... */ - RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel); + RESULT allocateChannel(const eDVBChannelID &channelid, eUsePtr &channel, bool fake=false); RESULT allocateRawChannel(eUsePtr &channel, int frontend_index); RESULT allocatePVRChannel(eUsePtr &channel); diff --git a/lib/dvb/pmt.cpp b/lib/dvb/pmt.cpp index 5a1b7c5c..0fc05240 100644 --- a/lib/dvb/pmt.cpp +++ b/lib/dvb/pmt.cpp @@ -9,6 +9,8 @@ #include #include +int eDVBServicePMTHandler::m_count; + eDVBServicePMTHandler::eDVBServicePMTHandler(int record) :m_ca_servicePtr(0) { @@ -17,6 +19,7 @@ eDVBServicePMTHandler::eDVBServicePMTHandler(int record) CONNECT(m_PMT.tableReady, eDVBServicePMTHandler::PMTready); CONNECT(m_PAT.tableReady, eDVBServicePMTHandler::PATready); eDebug("new PMT handler record: %d", m_record); + ++m_count; } eDVBServicePMTHandler::~eDVBServicePMTHandler() @@ -32,6 +35,7 @@ eDVBServicePMTHandler::~eDVBServicePMTHandler() eDVBCAService::unregister_service(m_reference, demux_num, ptr); eDVBCIInterfaces::getInstance()->removePMTHandler(this); } + --m_count; } void eDVBServicePMTHandler::channelStateChanged(iDVBChannel *channel) diff --git a/lib/dvb/pmt.h b/lib/dvb/pmt.h index 5f3d4777..b8ed76f9 100644 --- a/lib/dvb/pmt.h +++ b/lib/dvb/pmt.h @@ -66,7 +66,9 @@ class eDVBServicePMTHandler: public Object void PATready(int error); int m_record; + static int m_count; public: + static int getCount() { return m_count; } eDVBServicePMTHandler(int record); ~eDVBServicePMTHandler(); diff --git a/lib/dvb/sec.cpp b/lib/dvb/sec.cpp index 64443066..4842945c 100644 --- a/lib/dvb/sec.cpp +++ b/lib/dvb/sec.cpp @@ -184,7 +184,7 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite it->m_frontend->getData(1, oucsw); it->m_frontend->getData(2, oToneburst); it->m_frontend->getData(6, oRotorPos); - +#if 0 eDebug("compare csw %02x == lcsw %02x", csw, ocsw); if ( diseqc ) @@ -193,16 +193,16 @@ int eDVBSatelliteEquipmentControl::canTune(const eDVBFrontendParametersSatellite if ( rotor ) eDebug("compare pos %d == current pos %d", sat.orbital_position, oRotorPos); - +#endif if ( (csw != ocsw) || ( diseqc && (ucsw != oucsw || toneburst != oToneburst) ) || ( rotor && oRotorPos != sat.orbital_position ) ) { - eDebug("can not tune this transponder with linked tuner in use!!"); +// eDebug("can not tune this transponder with linked tuner in use!!"); ret=0; } - else - eDebug("OK .. can tune this transponder with linked tuner in use :)"); +// else +// eDebug("OK .. can tune this transponder with linked tuner in use :)"); } } } diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index 0b2e621c..9d68a5e8 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -2,6 +2,7 @@ #include #include #include +#include void eListboxServiceContent::setRoot(const eServiceReference &root) { @@ -165,10 +166,12 @@ void eListboxServiceContent::sort() DEFINE_REF(eListboxServiceContent); eListboxServiceContent::eListboxServiceContent() - :epgcache(eEPGCache::getInstance()), m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0) + :m_epgcache(eEPGCache::getInstance()), m_visual_mode(visModeSimple), m_size(0), m_current_marked(false), m_numberoffset(0) { cursorHome(); eServiceCenter::getInstance(m_service_center); + if (eDVBResourceManager::getInstance(m_res_mgr)) + eDebug("no resource manager"); } void eListboxServiceContent::cursorHome() @@ -334,12 +337,30 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const { painter.clip(eRect(offset, m_itemsize)); + bool tuneable=true; + + if (m_res_mgr && cursorValid() && !((m_cursor->flags & eServiceReference::flagDirectory) == eServiceReference::flagDirectory)) + { + if ( eDVBServicePMTHandler::getCount() > 1 ) + { + eServiceReferenceDVB &ref = (eServiceReferenceDVB&) *m_cursor; + eUsePtr channel; + eDVBChannelID chid; + ref.getChannelID(chid); + tuneable = !m_res_mgr->allocateChannel(chid, channel, true); // no real allocate channel..just fake + } + } + 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); + if (!tuneable) + painter.setForegroundColor(gRGB(0xbbbbbb)); + } painter.clear(); if (cursorValid()) @@ -381,7 +402,7 @@ void eListboxServiceContent::paint(gPainter &painter, eWindowStyle &style, const { ePtr evt; time_t t=-1; - if ( !epgcache->lookupEventTime(*m_cursor, t, evt) ) + if ( !m_epgcache->lookupEventTime(*m_cursor, t, evt) ) text = '(' + evt->getEventName() + ')'; else continue; diff --git a/lib/service/listboxservice.h b/lib/service/listboxservice.h index ae0ec5a6..6e8d5017 100644 --- a/lib/service/listboxservice.h +++ b/lib/service/listboxservice.h @@ -1,6 +1,7 @@ #ifndef __lib_service_listboxservice_h #define __lib_service_listboxservice_h +#include #include #include #include @@ -10,7 +11,8 @@ class eEPGCache; class eListboxServiceContent: public virtual iListboxContent { DECLARE_REF(eListboxServiceContent); - eEPGCache *epgcache; + eEPGCache *m_epgcache; + ePtr m_res_mgr; public: eListboxServiceContent(); void setRoot(const eServiceReference &ref);