Внимание! Исходя из последних событий по блокировке ресурсов в сети. Хочу предупредить всех наших пользователей!
Публикация любых плейлистов содержащих телеканал «Наш Футбол» (эфирное название «Матч!Премьер» и «Матч! Футбол») ЗАПРЕЩЕНА!
К пользователям которые нарушат правила могут быть применены штрафные санкции!

Автор Тема: FAQ: Переделка скина для начинающих  (Прочитано 13392 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн ака Учкун

  • Забанен потеряшка
  • Фельдфебель
  • *****
  • Спасибо
  • -> Вы поблагодарили: 658
  • -> Вас поблагодарили: 18242
  • Сообщений: 982
  • Репутация: 20
  • Пол: Мужской
  • Мудр тот, кто знает, что не знает
  • награды Продвинутый пользователь Творческая личность Giclub.tv
    • Награды
  • Модель ресивера: GI+ultimo
FAQ: Переделка скина для начинающих

Решил написать некий FAQ по модификации скинов под себя, простым понятным языком для начинающих.
То есть для тех, кто никогда не занимался программированием, не изучал никаких языков программирования, даже Turbo Pascal, вобщем для тех у кого нет никаких навыков в этом деле, но у них скажем имеется во-первых ресивер на enigma2 и плюс желание переделать скины под себя. Также разумеется у них должно быть немалое свободное время для этого)))

Сразу хочу сказать, если вы более-менее профессионал и знаете толк в программировании, лучше не читайте эту тему и занимайтесь дальше своим путем. Потому как не найдете здесь тексты, испещренные правильными техническими терминами и понятные вам, но совершенно непонятные для начинающих.
Также и в ситуации наоборот, если ваши мозги устроены совершенно по-другому и еще когда-то в детстве ну никак не могли запомнить-выучить таблицу умножения, вам поверьте тоже не стоит терять свое время. Ну просто другие у вас в жизни интересы, просто устанавливайте скины от других как есть и радуйтесь. Вам в этой теме тоже делать нечего.

Для остальных же начну с подробного объяснения простым языком структуры скина, но дойдем также до того, какие конвертера и рендеры, с какими параметрами и какую информацию могут вывести (не только с примерами кода, но и примерами со скриншотами).....

Для начала я все-таки посоветовал бы начинающим прочесть все же статью в Википедии про XML. Конечно вам совершенно непонятны будут многие термины там, но это очень полезно. Во-первых, хотите-не хотите что-то останется в вашей памяти уже, во-вторых по ходу прочтения данной темы все больше будете вникать и информация от википедии будет как нельзя кстати.
http://ru.wikipedia.org/wiki/XML


Итак, начнем.

Все настройки всех скинов содержатся в одном единственном файле - это skin.xml. Все остальные файлы в скине только вспомогательные - это графические файлы используемые в качестве подложки для тех или иных диалоговых окон, иконки и так далее. Правда некоторые скины имеют еще при себе и собственный плагин для применения переменных настроек в скине.

Таким образом если придете к выводу, что файл skin.xml и есть сам скин, можно сказать это так и есть.
Для того, чтобы легче понять структуру этого файла, представьте себе русскую матрешку.
Точно также, как в русской матрешке в файле скина есть главная матрешка и много вложенных в нее матрешек.
Вот от этой строчки

<skin>
до этой строчки

</skin>

это и есть главная матрешка или скин или технически говоря - корневой элемент.

Вложенные матрешки (вложенные элементы) идут от главной отступом.
То есть строчка с отступом (табуляцией) обозначает, что данный элемент является вложенным.
Единственное отличие от матрешки, вложенных элементов вовсе не один.....

Итак выяснили что у скина есть много вложенных элементов, у которых в свою очередь свои вложенные элементы, а у тех опять-таки возможно свои вложенные и так далее.

Итак, у нас образовалось незыблимое правило:
Отступ в коде скина обозначает - что данный элемент (который идет с отступом) является вложенным в свой родительский вышестоящий элемент (который в строчке вверху) и работает только (и только) в пределах своего родительского элемента. И если вы при редактировании нарушите этот отступ, данный элемент перестанет быть вложенным в свой родительский, а станет вложенным в еще более вышестоящий элемент и в итоге вы получите зеленку в определенном диалоговом окне или при определенном действии.

У самого скина только два типа вложенных элементов плюс комментарии. Комментарии - это строки начинающиеся с вот таких знаков

<!--
и заканчивающиеся так

-->
Либо начинающиеся со знака решетки.
Комментарии не обрабатываются парсером, их программер пишет только для облегчения прочтения кода или для какого-нибудь объявления, например чтобы заявить свои права на этот труд..... Комментарии можете безболезненно удалять или редактировать как вам угодно, естественно не трогая данные знаки (если редактируете).... Тут кроме моральных, других правил нет....

Первый тип элемента непосредственно скина - объявления. Они идут обязательно в начале скина.
Что такое объявления в скине?
Это всего лишь обозначение цветов (colors) и шрифтов (fonts), примененных в элементах скина.
Шрифты - указывается их название в системной папке (/usr/share/fonts/), либо указывается путь к шрифту, если его в имидже нет, а применяется только в данном скине.

Еще одно незыблымое правило.
Так вот, если вы где-нибудь в каком-нибудь элементе скина примените шрифт или цвет, отсутствующий в этих самих объявлениях, то зеленка вам обеспечена или в случае с опенпли вечный перегруз........

Второй (основной) тип вложенных элементов в корневой элемент скина - это диалоговые окна, скрины (screen).
Это конечно инфобары, всякие меню, диалоговые окна плагинов, сообщения системы и так далее.
Все они идут с отступом от корневого элемента и начинаются так

<screen name="Element">

и заканчиваются так

</screen>
Тут же надо сказать еще об одном незыблимом правиле.
Любые элементы (вложенные куда угодно) обязательно должны иметь начальный
<element .........>и конечный
</element>теги. Обратный слеш является обозначением конечного тега.
Если здесь что-то не так, опять-таки невалидный документ и зеленка....


Ну и уже в этих скринах - Screen (диалоговое окно) имеются свои вложенные элементы - виджеты, графика и тексты.
Графика - epixmap,  это картинки и иконки в теле диалогового окна, что будет видно на экране.
Здесь важны технически характеристики картинок. Имидж понимает только определенные биты и цветность. Если имидж посчитает эти технические характеристики неприемлемыми (а у разных имиджей это может быть разные требования), то сколько не пытайтесь, вы эту картинку на экран не выведете...

Тексты - eLabel, это пометка, чаще всего это просто статические тексты, выводимые в диалоговом окне, например это может быть оглавление окна....

А виджеты (widget) - это элементы, выводящие различную информацию (в том числе картинки, пиконы...) на экран. Начиная от статического текста до переменной информации.
То есть просто при помощи конвертера или рендера вы не выведете ту или иную информацию в экран. Вы обязаны вложить это дело в тело виджета, придав ему соответствующие атрибуты....

Тут мы подходим как-раз таки к атрибутам. Любой элемент в скине сообщает информацию о себе имиджу через свои атрибуты.
Например свое местоположение на экране, что он выводит на экран и так далее...

Далее, в продолжении FAQ начнем разбираться в скине в обратном порядке. То есть сначала разберемся в атрибутах и их свойствах.....

Продолжение следует.....

Продолжим

Любой элемент через свои атрибуты сообщает имиджу информацию о себе.
Посмотрим вот такой элемент в скине, который просто выводит статический текст на экран.

<eLabel text="Green Panel" zPosition="2" position="80,30" size="450,36" font="Replacement;28" halign="left" valign="center" foregroundColor="un3ab297" backgroundColor="transpBlack" transparent="1" />   
Набравшись опыта, быстро разберетесь в таком коде, и прочтете, что это элемент Пометка (eLabel) выводящий надпись (текст)  Green Panel на участке размером 450,36 в диалоговом окне (смотри родительский элемент) с координатами 80,30, шрифт текста такой-то, цвет текста такой-то с выравниванием к левому краю участка....   

Пока же разберемся в атрибутах.

text="Green Panel" поняли это просто текст, если он идет внутри элемента eLabel, значит просто выводится на экран.

zPosition - загадочный для начинающих атрибут. Обозначает в каком слое этот элемент находится.
То есть, представьте трехмерное пространство, где x - это позиция по горизонтали, y - по вертикали, а z - в глубину (если минус) или в выпуклости (если плюс).
Думаю представили и поняли, что если присвоить одному элементу значение zPosition равный ="-2", а второму значение ="2", то второй элемент будет находиться в более верхнем слое, чем первый. И если вы не разведете эти элементы по горизонтали и вертикали, то второй элемент будет перекрывать первый.
Рассмотрим на примере. По данному коду видно, что два текстовых элемента находяться в одном и том же месте родительского элемента, но с разными значениями zPosition.

<eLabel text="Install extensions" position="200,350" zPosition="-1" size="400,34" font="Regular;28" halign="center" transparent="1" />
<eLabel text="Information" position="200,350" zPosition="0" size="300,34" font="Regular;28" halign="center" foregroundColor="red" transparent="1" />
         

Отсюда вывод, второй элемент должен перекрывать первый элемент (то есть быть как бы сверху) при условии прозрачности второго элемента.
Смотрим скриншот, так и есть




position - атрибут, который указывает элементу его позицию внутри родительского элемента по горизонтали (первая цифра) и по вертикали (вторая цифра).
Координаты привязаны в левом верхнем углу элемента.
То есть если допустим это позиция какого-то скрина (диалогового окна), тогда например position="80,30" будет означать, что левый верхний угол данного элемента будет находиться в 80 единицах от левого края экрана, и в 30 единицах от верхнего края экрана.
Если же этот элемент является вложенным в скрине (например в нашем случае), то тогда левый верхний угол данного элемента будет находиться в 80 единицах от левого края скрина (а не экрана - не путать!), и в 30 единицах от верхнего края скрина.

size - понятное дело размеры данного элемента.

font - шрифт текста, напоминаю, должен быть объявлен в начале скина.

halign - это словосочетание из двух слов horizontal и align, обозначающее горизонтальное выравнивание.
Может иметь три значения:

center
left
right


Значение center будет означать, что текст будет выравнен по центру выделенного участка этому элементу. Допустим в данном случае длина текста составила 300 единиц (зависит от шрифта), а длина участка выделенного элементу составляет (из атрибута size="450,36") 450 единиц, соответственно от левого и правого краев выделенного участка текст будет находиться на расстоянии 75 единиц.

Значение left будет означать, что текст будет привязан к левому краю выделенного участка этому элементу.

Значение right будет означать, что текст будет привязан к правому краю выделенного участка этому элементу.


valign - соответственно является атрибутом, указывающим элементу те же самые позиции, но уже по вертикали.
Имеет также три значения
center
top
bottom


transparent="1" - атрибут, определяющий прозрачность фона элемента, единица будет означать полную прозрачность (в пределах выделенного ему участка).
Значение 0 соответственно наоборот. Здесь конечно есть нюансы. Если в элементе есть вложенные элементы (например конвертер), который не поддерживает
прозрачность, тогда этот параметр бесполезен. Элемент в любом случае будет непрозрачен....

Конечно атрибутов, которые могут иметь элементы еще много, но эти самые распространенные, а остальные будем изучать по мере их применения....
Далее начнем рассматривать на конкретных примерах виджетов, работу с конвертерами и рендерами (далее компоненты), какие параметры может воспринимать тот или иной компонент и какую информацию в каком виде они выводят. И как эти параметры прописать в виджетах. Постараюсь также простым языком объяснить, как открыть конвертер и прочитать при всех этих непонятных кодах параметры ввода-вывода. Постараюсь со скриншотами.
Продолжение следует.....

Прежде чем приступить к рассмотрению компонентов еще раз о структуре файла скина.
Даже научившись тому, как выводить ту или иную информацию с помощью компонентов, порой начинающим бывает очень трудно отыскать, а собственно куда и в какое место скина это прописывать.
Уже поняли, что файл скина состоит из объявлений (где объявлены цвета и шрифты) и собственно диалоговые окна (Screen).
Поэтому в принципе все просто. Все что видите на экране ТВ (кроме базового изображения видеокартинки), менюшки ли это, сообщения системы, окна плагинов и т.д. , все это прописано в элементах скина под названием Screen.
Рассмотрим способы, как можно отыскать искомый нужный нам Screen, в элементах которого хотим редактировать.
Первый самый легкий способ - это пооткрывать все эти элементы по очереди в окне программы E2Skinner. В левом окне этой программы понажимаем на названия элементов Screen (диалоговых окон) а в правом окне при включенной кнопке Designer смотрим собственно как выглядит этот screen.
Этот способ легкий, но не эффективный. Конечно найти окна инфобаров и чаннел селекшн таким образом нетрудно, но более мудреные окна отыскать в е2скиннере непросто. Так как многие окна схожи по форме.
Тут должно придти вам на помощь базовое знание английского языка, если таковое у вас имеется.
Более эффективным способом считаю, это просто открыть файл скина в продвинутом текстовом редакторе, понимающим отступы (табуляции) и питон-формат, например в нотепад++. Почти всегда для удобства чтения скиномастер перед каждым окном пишет его название в виде комментария. Вот по этим названиям и надо искать включив как говорится свою интуицию. На самом деле все интуитивно понятно.
Необходимо также учесть, что в скине есть универсальные окна. Это например окна Setup, ChoiceBox и InputBox, которые применяются неоднократно и не для одного случая. Я сам например долго искал некое окно какого-то плагина, пока не дошло, что пользуется в этом случае именно один из универсальных скринов ChoiceBox.
Вот теперь я думаю можно приступить к изучению конкретных конвертеров.
 
Начну с конвертера EventName2.
Здесь тоже нужно сделать лирическое отступление. Никогда не пугайтесь открыть исходник конвертера (файл с расширением py) и заглянуть в потроха конвертера (или рендера). На самом деле не так страшен python, как его малюют. Поверьте даже при отсутствии специальных навыков вам под силу более-менее прочесть этот самый код и сделать для себя нужные выводы, что же делает этот конвертер, какие параметры в качестве ввода понимает (т.е. что нужно прописать в виджете) и какую информацию и в каком виде при этом он выводит. Это называется параметр ввода-вывода для компонента.
Поэтому сначала несколько слов о структуре уже файла конвертера для облегчения его прочтения.
Сначала там идет как бы перечень откуда из имиджа компонент будет черпать информацию.
Вот например в случае с конвертером EventName2.
(Этот конвертер будем рассматривать с примерами кода для более глубокого понимания вопроса, а в остальные конвертера будете лезть сами, там будем приводить только примеры виджета.)

from Components.Converter.Converter import Converter
from Components.Element import cached
from enigma import eEPGCache
from time import localtime

Это всего-навсего обозначает, что конвертер будет черпать информацию (from - это значит из) из системных конвертеров, из системного кеша (cashe), из системного кеша телегида (eEPGCache) а также из системной службы  времени (localtime).

И далее уже идет описание его класса. Сначала объявляется, что он будет выводит. Тут автор компонента сам решает как обзывать то, что он будет выводит (то есть это дело его совести, использовать универсальные понятия или придумать свое), потому как далее уже к этим понятиям будет привязывать возврат параметров из тех самых перечисленных вначале системных файлов. Если здесь он ошибется, и припишет возврат параметров из системных файлов-служб, которые в первых строках не перечислил, то конвертер работать не будет.

Значит вот это уже объявления

  NAME = 0
SHORT_DESCRIPTION = 1
EXTENDED_DESCRIPTION = 2
FULL_DESCRIPTION = 3
ID = 4
NEXT_NAME = 5
NEXT_DESCRIPTION = 6
NEXT_NAMEWT = 7

Вам это только для сведения, что в конвертере так "обозвано" то, что он будет выводит.
В таком виде никуда в скин это прописывать не надо.

А вот дальше уже идут два раздела нужных нам.

Первая дефка это _init_
Init значит всего лишь инициализация.
Вот тут прописаны параметры ввода.

        def __init__(self, type):
Converter.__init__(self, type)
self.epgcache = eEPGCache.getInstance()
if type == "Description" or type == "Short":
self.type = self.SHORT_DESCRIPTION
elif type == "ExtendedDescription":
self.type = self.EXTENDED_DESCRIPTION
elif type == "FullDescription" or type == "ShortOrExtendedDescription":
self.type = self.FULL_DESCRIPTION
elif type == "ID":
self.type = self.ID
elif type == "NextName":
self.type = self.NEXT_NAME
elif type == "NextNameWithOutTime":
self.type = self.NEXT_NAMEWT
elif type == "NextDescription" or type == "NextEvent":
self.type = self.NEXT_DESCRIPTION
else:
self.type = self.NAME

if type == "Description" or type == "Short":
   self.type = self.SHORT_DESCRIPTION

означает, что если в виджете введете параметр Description или Short, то конвертер вернет вам SHORT_DESCRIPTION,
а как он это будет делать уже прописано в следующей дефке:

           def getText(self):
      event = self.source.event
      if event is None:
         return ""
      if self.type == self.NAME:
         return event.getEventName()
      elif self.type == self.SHORT_DESCRIPTION:
         return event.getShortDescription()
                            ..............................


То есть получив команду Short из виджета конвертер обратится к системному eEPGCache (как прописано в начале конвертера) с "просьбой" event.getShortDescription() и если такой параметр имеется у системного eEPGCache он и возвратит ему это дело и на экран выведется результат....

Если кому-то это сложно, просто вызубрывайте тогда параметры, что далее буду приводить.....

 
Значит для конвертера EventName2 приемлемы следующие параметры ввода:

Description или Short - выведет краткую информацию о событии (телегида)

В паре с указанием конвертера прописывается так:

<convert type="EventName2">Description</convert>
либо

<convert type="EventName2">Short[</convert>
И естественно вставляется в тело виджета:

<widget source="session.Event_Now" render="ScrollLabel" position="824,390" zPosition="1" size="420,190" font="Regular;20" foregroundColor="white" backgroundColor="transpBlack" transparent="1">
  <convert type="EventName2">FullDescription</convert>
</widget>

Атрибуты самого виджета как выставлять вы уже поняли. Здесь нужно знать только через какой сурч (source) можно выводить эту информацию. source="session.Event_Now" означает что, обращаемся к системе требуя информацию о текущем событии.

Также конвертер понимает следующие параметры ввода.

ExtendedDescription - выведет расширенную информацию о событии

FullDescription или ShortOrExtendedDescription - выведет полную (краткую плюс расширенную) информацию о событии.

ID - выведет ID канала

Name  и NextName - выведет название текущего события и соответственно следующего, применяется с сурчом ServiceEvent кроме названия выводит и начало и продолжительность собитыя (применять не в инфобаре)

NextNameWithOutTime - следующее событие без времени....

NextDescription или NextEvent - следующее событие с кратким описанием применяется с сурчом ServiceEvent...

Думаю наверно для этого конвертера надобности в скриншотах нет. Все и так понятно.
Здесь важно знать в сочетании с каким сурчом можно применять те или иные параметры....

По основным атрибутам прошлись. Но есть еще атрибуты, которыми чаще всего интересуются те, которые переделывают скины под себя. Это свойства списка каналов в Channel Selection, то есть в списке каналов. Эти атрибуты востребованы, так как окно списка каналов  вместе с инфобарами пожалуй наиболее часто используемая "картинка" на экране телевизора.

Настройки списка каналов в скине находятся в разделе, то есть скрине

<screen name="ChannelSelection".......
и в этом скрине ищем виджет list

<widget name="list"........
Вот именно здесь и настраиваем шрифты и цвета имени канала, названия событий, номера канала. Причем можем настроить так, что например цвет элемента который в данный момент выбран будет отличаться от цвета невыбранного.....
А названия атрибутов можно самостоятельно посмотреть в исходниках.
Например в имидже VTI эти настройки находятся в файле ServiceList.py, который в свою очередь находится по пути
/usr/lib/enigma2/Components/
Открываем этот файл и находим все возможные атрибуты, которые может иметь селектор каналов

for (attrib, value) in self.skinAttributes:
if attrib == "foregroundColorMarked":
self.l.setColor(eListboxServiceContent.markedForeground, parseColor(value))
elif attrib == "foregroundColorMarkedSelected":
self.l.setColor(eListboxServiceContent.markedForegroundSelected, parseColor(value))
elif attrib == "backgroundColorMarked":
self.l.setColor(eListboxServiceContent.markedBackground, parseColor(value))
elif attrib == "backgroundColorMarkedSelected":
self.l.setColor(eListboxServiceContent.markedBackgroundSelected, parseColor(value))
elif attrib == "foregroundColorServiceNotAvail":
self.l.setColor(eListboxServiceContent.serviceNotAvail, parseColor(value))
elif attrib == "colorEventProgressbar":
self.l.setColor(eListboxServiceContent.serviceEventProgressbarColor, parseColor(value))
elif attrib == "colorEventProgressbarSelected":
self.l.setColor(eListboxServiceContent.serviceEventProgressbarColorSelected, parseColor(value))
elif attrib == "colorEventProgressbarBorder":
self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColor, parseColor(value))
elif attrib == "colorEventProgressbarBorderSelected":
self.l.setColor(eListboxServiceContent.serviceEventProgressbarBorderColorSelected, parseColor(value))
elif attrib == "colorServiceDescription":
self.l.setColor(eListboxServiceContent.serviceDescriptionColor, parseColor(value))
elif attrib == "colorServiceDescriptionSelected":
self.l.setColor(eListboxServiceContent.serviceDescriptionColorSelected, parseColor(value))
elif attrib == "picServiceEventProgressbar":
pic = LoadPixmap(resolveFilename(SCOPE_CURRENT_SKIN, value))
if pic:
self.l.setPixmap(self.l.picServiceEventProgressbar, pic)
elif attrib == "serviceItemHeight":
self.ItemHeight = int(value)
elif attrib == "serviceNameFont":
self.ServiceNameFont = parseFont(value, ((1,1),(1,1)))
elif attrib == "serviceInfoFont":
self.ServiceInfoFont = parseFont(value, ((1,1),(1,1)))
elif attrib == "serviceNumberFont":

Рассмотрим по очереди. В принципе если у вас есть базовое знание английского все интуитивно просто.

Атрибут foregroundColorMarked - цвет элементов, если не выберите другие атрибуты, то это будет цветом всех элементов списка каналов;

Атрибут foregroundColorMarkedSelected - цвет элементов, которые в данный момент выбраны, если не выберите цвета для отдельных выбранных элементов, то это будет цветом всех выбранных элементов;

Атрибут backgroundColorMarked - то же самое, что и первый атрибут, только это цвет фона;

Атрибут backgroundColorMarkedSelected - то же самое, что и второй атрибут, только это цвет фона;

Атрибут foregroundColorServiceNotAvail - честно говоря сам ломал голову что это за атрибут, затем понял, это цвет сервиса, который не существует, то есть нет сигнала на этом транспондере или по каким другим причинам (то есть NotAvailable), рекомендуется конечно делать темнее;
 
Атрибут colorEventProgressbar - цвет прогресс-бара;

Атрибут colorEventProgressbarSelected - цвет выбранного на данный момент прогресс-бара;

Атрибут colorEventProgressbarBorder - цвет границы прогресс-бара;

Атрибут colorEventProgressbarBorderSelected - цвет границы выбранного на данный момент прогресс-бара;

Атрибут colorServiceDescription - цвет названия передачи;

Атрибут colorServiceDescriptionSelected - цвет названия выбранного на данный момент передачи;

Атрибут picServiceEventProgressbar - интересный атрибут, здесь вы можете предложить свой собственный рисунок прогресс-бара. Конечно размер и битность файла картинки должны быть соответствующими. Просто указываете путь к файлу-картинке;

Атрибут serviceItemHeight - это высота строчки в списке каналов, по умолчанию равна 30 единицам (если не укажете отдельно);

Атрибут serviceNameFont - шрифт имени канала;

Атрибут serviceInfoFont - шрифт названия передачи;

Атрибут serviceNumberFont - шрифт номера канала;

 Разумеется вовсе необязательно прописывать эти атрибуты, если не пропишите их, будут приняты значения по умолчанию.....

Углубляемся дальше в лес. Все хочу приступить к описанию конвертеров и их параметров ввода-вывода, но получается есть еще нюансы, которые необходимо знать тем, кто собрался переделать под себя или "оживить" скин....

Вот например один интересный нюанс. Вернее особенность работы парсера (парсер это обработчик файлов xml), как он считывает файл skin.xml при загрузке системы.

Довольно распространена такая ситуация, особенно на имидже опенпли. Запускаем какой-то скин. Он удачно грузится. Но открываем например инфобар, а он совершенно пуст. Сразу недоуменный вопрос. Как же так может быть? Неужели все диалоговое окно (Screen) не подходит этому имиджу? А ведь в инфобаре с десяток и даже больше виджетов, елейблов, епиксмапов. Неужели все они неправильные для этого имиджа?
Конечно же нет. Тогда почему инфобар совершенно пуст, то есть ни один из элементов инфобара не заработал (кроме подложки), несмотря на то, что правильные для этого имиджа виджеты там присутствуют. И компонент там правильный (конвертер-рендер) и атрибуты там правильные.
Это и есть как раз таки особенность работы парсера. Дело в том что парсер считывает файл skin.xml строго последовательно. То есть с первого до последнего элемента строго по очереди их вписывания в файле.
И если при этом в каком-нибудь вложенном элементе он встретит препятствие в виде невозможности выполнения команды, то он откажется читать дальше весь родительский элемент и перескачет на следующее диалоговое окно. Подчеркиваю, именно встретив КОМАНДУ, КОТОРУЮ НЕ МОЖЕТ ВЫПОЛНИТЬ. Конечно если это препятствие будет в виде невалидности документа (т.е. незаявленные шрифт или цвет, отсутствующий или лишний тег, отсутствующий пробел и т.д.) то имидж просто кинется в зеленку или откажется загружаться.
А командой, которую он не может выполнить (при валидности документа), могут быть например такие. В виджете прописан конвертер, в котором есть параметры невыполнимые для данного имиджа, возможно конвертер из другого имиджа например.
Или же невыполнимой командой может быть просто команда вывести картинку с несоответствующими битами или цветностью.

То есть, вы поняли, если на вашем экране инфобар (или любое другое окно) совершенно пуст, ищите проблему именно в самом первом элементе данного Screen в скине. И вполне даже возможно, что устранив одну единственную проблему вы сразу получите полностью работающий инфобар например.

Это так к сведению, но думаю очень полезное знание особенности работы парсера. И я в начале (когда еще не углубился в питон) было дело встретившись с пустым окном, терял уйму времени в поисках проблемы в элементах этого окна, не догадавшись заглянуть в самый первый.

Ну и конечно другая похожая ситуация, часть элементов окна работает, а часть нет.
Самый легкий и быстрый вариант отыскания проблем в этом случае это открыть скин в e2skinner и включив это окно параллельно на экране ТВ, проверять все элементы Screen, но работая как и парсер, строго последовательно, пройти по очереди по элементам.
Нажимаем на первый элемент, смотрим в окно e2skinner, узнаем месторасположение элемента, смотрим на экран ТВ, ага этот элемент работает, пробуем второй и так далее, пока не увидим пустое место на экране ТВ, и таким образом быстро находим неработающий элемент в Screen и уже потом будем копаться в этом элементе - виджете, елейбле или епиксмапе.........

Теперь научимся добавлять иконки для элементов главного меню (можно и в других меню).
Потому как обычно в скинах такие иконки присутствуют, но только на обычные элементы меню, и то иногда на элементы старых версии имиджа. Не говоря о том, что в разных имиджах элементы меню могут отличаться.
Иконки в меню имидж выводит только по их идентификационному имени, то есть это параметр естественно entryID.
То есть нам всего лишь нужно узнать это самое идентификационное имя элемента, для которого хотим добавить иконку в меню.
Где искать эти самые entryID? Некоторые ищут в других скинах, надеясь что кто-то уже добавил. Но этот способ совершенно непродуктивен. Мало того, что потеряете уйму времени, даже если и найдете, вы просто ни на шаг не продвинетесь в углублении изучения скиноделия. Такие действия извините я называю тупым времяпровождением.
Не чурайтесь, лезьте в исходники, таким образом вы только будете продвигаться в своих знаниях и умениях.
Первое место где нужно искать идентификационные имена элементов меню это файл menu.xml (находится в /usr/share/enigma2/). И ищем параметр entryID, соответствующий этому элементу. Если там нет, нужно уже искать в соответствующих исходниках.
Например это какой-нибудь плагин. Допустим пусть это будет плагин MediaPlayer. Идем по пути /usr/lib/enigma2/python/Plugins/ и там уже в одной из двух папок SystemPlugins или Extensions находим искомую папку плагина MediaPlayer и открываем файл plugin.py. И ищем дефку menu, то есть def menu и вот там в параметре возврата return автор плагина и прописывает имя отображаемое в меню и его идентификационное имя. В данном случае нашли вот такую строчку

return [(_("Media player"), main, "media_player", 45)]
Значит entryID плагина media_player
И прописываем это дело виджетом посредством сурча menu и рендера Pixmap (так как это картинка), с помощью конвертеров MenuEntryCompare и ConditionalShowHide
И конечно прописывается в Screen menu_mainmenu

<widget source="menu" render="Pixmap" pixmap="путь_к_файлу_картинке" position="размер,размер" size="размер,размер" alphatest="blend" transparent="1">
  <convert type="MenuEntryCompare">media_player</convert>
  <convert type="ConditionalShowHide" />

Естественно подбираете картинку по своему усмотрению. Размер картинки, внешний вид зависит только от вашего воображения и вкуса и вовсе не должны совпадать с другими иконками меню. Только в атрибуте size="размер,размер" надо выставить истинные размеры картинки.........



Добавлено: 12 Июль 2013, 10:33:10
Нет, все еще форум не дает добавить текста.
Ладно, завтра добавлю, если настройки форума позволят....
Эти пользователи сказали Вам СПАСИБО:

Оффлайн calgary88

  • Младший фейерверкер
  • ***
  • Спасибо
  • -> Вы поблагодарили: 266
  • -> Вас поблагодарили: 20
  • Сообщений: 138
  • Репутация: 18
  • Пол: Мужской
    • Награды
  • Модель ресивера: vu+ultimo4k
FAQ: Переделка скина для начинающих
« Ответ #1 : 21 Май 2014, 21:44:12 »
подскажите кто знает где и что поправить в скине.при переключении канала выскакивает инфобар а там температура воздуха в городе МУКАЧЕВО.как сделать чтоб отображалась температура в городе МИНСКЕ?скин-SimpleHD

Оффлайн Kirillm

  • Продвинутый
  • Старший фейерверкер
  • *****
  • Спасибо
  • -> Вы поблагодарили: 314
  • -> Вас поблагодарили: 232
  • Сообщений: 405
  • Репутация: 227
  • Пол: Мужской
  • награды Активист Giclub.TV
    • Награды
  • Модель ресивера: Formuler F3+USB DVB-C Sundtek OpenPLi 4
FAQ: Переделка скина для начинающих
« Ответ #2 : 22 Май 2014, 12:35:26 »
Ннадо смотреть файл скина skin.xml, скорее всего внутри за погоду отвечает конвертер YWeather.py в середине его меняем номер города на Ваш строка weather_city = '834463' уже Минск  ;)
Эти пользователи сказали Вам СПАСИБО:

Оффлайн urez19

  • Бомбардир
  • **
  • Спасибо
  • -> Вы поблагодарили: 157
  • -> Вас поблагодарили: 14
  • Сообщений: 52
  • Репутация: 8
  • Пол: Мужской
    • Награды
  • Модель ресивера: GI-S7800 GI-S780 GI-S890C GIST 9196 GI 9895 GI 9995 Vu+dou 2
FAQ: Переделка скина для начинающих
« Ответ #3 : 21 Ноябрь 2016, 20:40:59 »
здравствуйте! можно на форуме выкладывать свои бекапы если в них будут чужие скины. плагины. итд.    Спасибо.
GI-S7800 GI-S780  GI-S890CR  GI- ST 9196 GI 9895 GI 9995 Vu+dou 2

Оффлайн Vytenis P.

  • Бомбардир
  • **
  • Спасибо
  • -> Вы поблагодарили: 46
  • -> Вас поблагодарили: 44
  • Сообщений: 66
  • Репутация: 42
  • Пол: Мужской
    • Награды
  • Модель ресивера: Vu+ Duo2, Openbox S2 HD
FAQ: Переделка скина для начинающих
« Ответ #4 : 22 Ноябрь 2016, 08:27:55 »
здравствуйте! можно на форуме выкладывать свои бекапы если в них будут чужие скины. плагины. итд.    Спасибо.
Недопонял, это вопрос или подтверждение факта? :) В любом случае - имиджи, скины и плагины - равноценные творения кого-то и сотворены они для общего пользования. Так, что, если вы их не изувечили своими "новшествами" и не присвоили их авторство, можете смело выкладывать их бекапы, перед тем убрав свои настройки шары.
Эти пользователи сказали Вам СПАСИБО:

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal