Grizli предложил организовать такой твик и меня это заинтересовало.
Смысл твика:
Если в скине в разделе ChannelSelection использован виджет "Title", то название окна выбора каналов внутри фаворитов выглядит так:
Выбор канала (ТВ) - Фавориты / Название_фаворита Так вот
grizli предложил оставить только
Название_фаворита , что будет куда логичнее, смотрибельнее, да и место освободится рядом для чего-то еще.....
Покажу на примере как это сделать.
Вот как выглядит это окно (обращаем внимание на название окна) до организации данного твика
То есть пока название окна выглядит так
Выбор канала (ТВ) - Фавориты /Любимое ТВ Открываем файл
ChannelSelection.py , находящийся в имидже по пути:
Находим класс
ChannelSelectionBase , то есть:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И в этом классе внутри инструкции инициализации, то есть здесь:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
находим строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
и переделаем ее в такой вид:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Далее находим
def getServiceName(self, ref): , а в ней строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
и переделаем ее так:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И наконец добираемся до самой нужной инструкции
def buildTitleString(self): , которая собственно и создает название окна выбора каналов. Здесь находим строчку:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
И переделаем ее тоже:
Вам не разрешен просмотр кода. Войдите или Зарегистрируйтесь для просмотра.
Внимание! При всех изменениях в питоновском файле не забываем о "золотом" правиле об отступах-табуляциях! Также не забываем, что редактировать файлы питона можно только на самых продвинутых текстовых редакторах. При нарушении любого из этих правил, просто испортите файл и будете зеленеть....
На всякий случай прописываю здесь тот самый измененный класс (вернее часть класса) из опенпли 4.0...
Спойлер :
class ChannelSelectionBase(Screen): def __init__(self, session): Screen.__init__(self, session) self["key_red"] = Button(_("All")) self["key_green"] = Button(_("Satellites")) self["key_yellow"] = Button(_("Provider")) self["key_blue"] = Button(_("Favourites")) self["list"] = ServiceList() self.servicelist = self["list"] self.numericalTextInput = NumericalTextInput() self.numericalTextInput.setUseableChars(u'1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ') self.servicePathTV = [ ] self.servicePathRadio = [ ] self.servicePath = [ ] self.history = [ ] self.rootChanged = False self.startRoot = None self.mode = MODE_TV self.dopipzap = False self.pathChangeDisabled = False self["ChannelSelectBaseActions"] = NumberActionMap(["ChannelSelectBaseActions", "NumberActions", "InputAsciiActions"], { "ServiceDown": self.moveDown, "ServiceUp": self.moveUp, "ServicePageDown": self.movePageDown, "ServicePageUp": self.movePageUp, "showFavourites": self.showFavourites, "showAllServices": self.showAllServices, "showProviders": self.showProviders, "showSatellites": self.showSatellites, "nextBouquet": self.nextBouquet, "prevBouquet": self.prevBouquet, "nextMarker": self.nextMarker, "prevMarker": self.prevMarker, "gotAsciiCode": self.keyAsciiCode, "1": self.keyNumberGlobal, "2": self.keyNumberGlobal, "3": self.keyNumberGlobal, "4": self.keyNumberGlobal, "5": self.keyNumberGlobal, "6": self.keyNumberGlobal, "7": self.keyNumberGlobal, "8": self.keyNumberGlobal, "9": self.keyNumberGlobal, "0": self.keyNumber0 }, -1) self.maintitle = "" self.recallBouquetMode() def movePageUp(self): self.servicelist.servicePageUp() def movePageDown(self): self.servicelist.servicePageDown() def getBouquetNumOffset(self, bouquet): if not config.usage.multibouquet.value: return 0 str = bouquet.toString() offset = 0 if 'userbouquet.' in bouquet.toCompareString(): serviceHandler = eServiceCenter.getInstance() servicelist = serviceHandler.list(bouquet) if not servicelist is None: while True: serviceIterator = servicelist.getNext() if not serviceIterator.valid(): #check if end of list break number = serviceIterator.getChannelNum() if number > 0: offset = number - 1 break return offset def recallBouquetMode(self): if self.mode == MODE_TV: self.service_types = service_types_tv if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.tv" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.tv" ORDER BY bouquet'%(self.service_types) else: self.service_types = service_types_radio if config.usage.multibouquet.value: self.bouquet_rootstr = '1:7:1:0:0:0:0:0:0:0:FROM BOUQUET "bouquets.radio" ORDER BY bouquet' else: self.bouquet_rootstr = '%s FROM BOUQUET "userbouquet.favourites.radio" ORDER BY bouquet'%(self.service_types) self.bouquet_root = eServiceReference(self.bouquet_rootstr) def setTvMode(self): self.mode = MODE_TV self.servicePath = self.servicePathTV self.recallBouquetMode() title = self.maintitle pos = title.find(" (") if pos != -1: title = title[:pos] title += _(" (TV)") self.setTitle(title) def setRadioMode(self): self.mode = MODE_RADIO self.servicePath = self.servicePathRadio self.recallBouquetMode() title = self.maintitle pos = title.find(" (") if pos != -1: title = title[:pos] title += _(" (Radio)") self.setTitle(title) def setRoot(self, root, justSet=False): if self.startRoot is None: self.startRoot = self.getRoot() path = root.getPath() isBouquet = 'FROM BOUQUET' in path and (root.flags & eServiceReference.isDirectory) inBouquetRootList = 'FROM BOUQUET "bouquets.' in path #FIXME HACK if not inBouquetRootList and isBouquet: self.servicelist.setMode(ServiceList.MODE_FAVOURITES) else: self.servicelist.setMode(ServiceList.MODE_NORMAL) self.servicelist.setRoot(root, justSet) self.rootChanged = True self.buildTitleString() def removeModeStr(self, str): if self.mode == MODE_TV: pos = str.find(_(" (TV)")) else: pos = str.find(_(" (Radio)")) if pos != -1: return str[:pos] return str def getServiceName(self, ref): str = self.removeModeStr(ServiceReference(ref).getServiceName()) if 'User - bouquets' in str: return "" if not str: pathstr = ref.getPath() if 'FROM PROVIDERS' in pathstr: return _("Provider") if 'FROM SATELLITES' in pathstr: return _("Satellites") if ') ORDER BY name' in pathstr: return _("All") return str def buildTitleString(self): titleStr = self.getTitle() pos = titleStr.find(']') if pos == -1: pos = titleStr.find(')') if pos != -1: titleStr = titleStr[:pos+1] Len = len(self.servicePath) if Len > 0: base_ref = self.servicePath[0] if Len > 1: end_ref = self.servicePath[Len-1] else: end_ref = None nameStr = self.getServiceName(base_ref) titleStr += ' - ' + nameStr if end_ref is not None: if Len > 2: titleStr += '/../' else: titleStr += '' nameStr = self.getServiceName(end_ref) titleStr += nameStr self.setTitle(titleStr)
А вот как теперь выглядит это окно после этого твика (вернее название окна выбора каналов):
То есть теперь вместо вот этой строчки
Выбор канала (ТВ) - Фавориты /Любимое ТВ вот такая строчка
(ТВ) - Любимое ТВ Еще раз уточняю, что данный твик будет работоспособен, если только на вашем скине в разделе
"Channel Selection" использован виджет
"Title" .
Некоторые скиномастера не используют этот виджет.
Например насколько я знаю многоуважаемый Sirius0103 предпочитает вместо этого виджета использовать статический текст.
Если так, в таком скине этот твик не заработает.....