По просьбе fanbox исключительно для форума уважаемого мной spartak73 выкладываю свой FAQ для начинающих по модификации скинов для себя.
С некоторыми названиями терминов, примененными в FAQ в данный момент я сам не соглашусь (так как теперь-то поднаторел в питоне) но все по сути правильно.......
Решил написать некий FAQ по модификации скинов под себя, простым понятным языком для начинающих.
То есть для тех, кто никогда не занимался программированием, не изучал никаких языков программирования, даже Turbo Pascal, вобщем для тех у кого нет никаких навыков в этом деле, но у них скажем имеется во-первых ресивер на enigma2 и плюс желание переделать скины под себя. Также разумеется у них должно быть немалое свободное время для этого)))
Сразу хочу сказать, если вы более-менее профессионал и знаете толк в программировании, лучше не читайте эту тему и занимайтесь дальше своим путем. Потому как не найдете здесь тексты, испещренные правильными техническими терминами и понятные вам, но совершенно непонятные для начинающих.
Также и в ситуации наоборот, если ваши мозги устроены совершенно по-другому и еще когда-то в детстве ну никак не могли запомнить-выучить таблицу умножения, вам поверьте тоже не стоит терять свое время. Ну просто другие у вас в жизни интересы, просто устанавливайте скины от других как есть и радуйтесь. Вам в этой теме тоже делать нечего.
Для остальных же начну с подробного объяснения простым языком структуры скина, но дойдем также до того, какие конвертера и рендеры, с какими параметрами и какую информацию могут вывести (не только с примерами кода, но и примерами со скриншотами).....
Для начала я все-таки посоветовал бы начинающим прочесть все же статью в Википедии про XML. Конечно вам совершенно непонятны будут многие термины там, но это очень полезно. Во-первых, хотите-не хотите что-то останется в вашей памяти уже, во-вторых по ходу прочтения данной темы все больше будете вникать и информация от википедии будет как нельзя кстати.
http://ru.wikipedia.org/wiki/XML
Итак, начнем.
Все настройки всех скинов содержатся в одном единственном файле - это skin.xml. Все остальные файлы в скине только вспомогательные - это графические файлы используемые в качестве подложки для тех или иных диалоговых окон, иконки и так далее. Правда некоторые скины имеют еще при себе и собственный плагин для применения переменных настроек в скине.
Таким образом если придете к выводу, что файл skin.xml и есть сам скин, можно сказать это так и есть.
Для того, чтобы легче понять структуру этого файла, представьте себе русскую матрешку.
Точно также, как в русской матрешке в файле скина есть главная матрешка и много вложенных в нее матрешек.
Вот от этой строчки
до этой строчки
это и есть главная матрешка или скин или технически говоря - корневой элемент.
Вложенные матрешки (вложенные элементы) идут от главной отступом.
То есть строчка с отступом (табуляцией) обозначает, что данный элемент является вложенным.
Единственное отличие от матрешки, вложенных элементов вовсе не один.....
Итак выяснили что у скина есть много вложенных элементов, у которых в свою очередь свои вложенные элементы, а у тех опять-таки возможно свои вложенные и так далее.
Итак, у нас образовалось незыблимое правило:
Отступ в коде скина обозначает - что данный элемент (который идет с отступом) является вложенным в свой родительский вышестоящий элемент (который в строчке вверху) и работает только (и только) в пределах своего родительского элемента. И если вы при редактировании нарушите этот отступ, данный элемент перестанет быть вложенным в свой родительский, а станет вложенным в еще более вышестоящий элемент и в итоге вы получите зеленку в определенном диалоговом окне или при определенном действии.
У самого скина только два типа вложенных элементов плюс комментарии. Комментарии - это строки начинающиеся с вот таких знаков
и заканчивающиеся так
Либо начинающиеся со знака решетки.
Комментарии не обрабатываются парсером, их программер пишет только для облегчения прочтения кода или для какого-нибудь объявления, например чтобы заявить свои права на этот труд..... Комментарии можете безболезненно удалять или редактировать как вам угодно, естественно не трогая данные знаки (если редактируете).... Тут кроме моральных, других правил нет....
Первый тип элемента непосредственно скина - объявления. Они идут обязательно в начале скина.
Что такое объявления в скине?
Это всего лишь обозначение цветов (colors) и шрифтов (fonts), примененных в элементах скина.
Шрифты - указывается их название в системной папке (/usr/share/fonts/), либо указывается путь к шрифту, если его в имидже нет, а применяется только в данном скине.
Еще одно незыблымое правило.
Так вот, если вы где-нибудь в каком-нибудь элементе скина примените шрифт или цвет, отсутствующий в этих самих объявлениях, то зеленка вам обеспечена или в случае с опенпли вечный перегруз........
Второй (основной) тип вложенных элементов в корневой элемент скина - это диалоговые окна, скрины (screen).
Это конечно инфобары, всякие меню, диалоговые окна плагинов, сообщения системы и так далее.
Все они идут с отступом от корневого элемента и начинаются так
и заканчиваются так
Тут же надо сказать еще об одном незыблимом правиле.
Любые элементы (вложенные куда угодно) обязательно должны иметь начальный
и конечный
теги. Обратный слеш является обозначением конечного тега.
Если здесь что-то не так, опять-таки невалидный документ и зеленка....
Ну и уже в этих скринах - Screen (диалоговое окно) имеются свои вложенные элементы - виджеты, графика и тексты.
Графика - epixmap, это картинки и иконки в теле диалогового окна, что будет видно на экране.
Здесь важны технически характеристики картинок. Имидж понимает только определенные биты и цветность. Если имидж посчитает эти технические характеристики неприемлемыми (а у разных имиджей это может быть разные требования), то сколько не пытайтесь, вы эту картинку на экран не выведете...
Тексты - eLabel, это пометка, чаще всего это просто статические тексты, выводимые в диалоговом окне, например это может быть оглавление окна....
А виджеты (widget) - это элементы, выводящие различную информацию (в том числе картинки, пиконы...) на экран. Начиная от статического текста до переменной информации.
То есть просто при помощи конвертера или рендера вы не выведете ту или иную информацию в экран. Вы обязаны вложить это дело в тело виджета, придав ему соответствующие атрибуты....
Тут мы подходим как-раз таки к атрибутам. Любой элемент в скине сообщает информацию о себе имиджу через свои атрибуты.
Например свое местоположение на экране, что он выводит на экран и так далее...
Далее, в продолжении FAQ начнем разбираться в скине в обратном порядке. То есть сначала разберемся в атрибутах и их свойствах.....
Продолжение следует.....
---------- Сообщение добавлено в 13:24 ---------- Предыдущее сообщение размещено в 13:22 ----------
Продолжим
Любой элемент через свои атрибуты сообщает имиджу информацию о себе.
Посмотрим вот такой элемент в скине, который просто выводит статический текст на экран.
Набравшись опыта, быстро разберетесь в таком коде, и прочтете, что это элемент Пометка (eLabel) выводящий надпись (текст) Green Panel на участке размером 450,36 в диалоговом окне (смотри родительский элемент) с координатами 80,30, шрифт текста такой-то, цвет текста такой-то с выравниванием к левому краю участка....
Пока же разберемся в атрибутах.
text="Green Panel" поняли это просто текст, если он идет внутри элемента eLabel, значит просто выводится на экран.
zPosition - загадочный для начинающих атрибут. Обозначает в каком слое этот элемент находится.
То есть, представьте трехмерное пространство, где x - это позиция по горизонтали, y - по вертикали, а z - в глубину (если минус) или в выпуклости (если плюс).
Думаю представили и поняли, что если присвоить одному элементу значение zPosition равный ="-2", а второму значение ="2", то второй элемент будет находиться в более верхнем слое, чем первый. И если вы не разведете эти элементы по горизонтали и вертикали, то второй элемент будет перекрывать первый.
Рассмотрим на примере. По данному коду видно, что два текстовых элемента находяться в одном и том же месте родительского элемента, но с разными значениями zPosition.
Отсюда вывод, второй элемент должен перекрывать первый элемент (то есть быть как бы сверху) при условии прозрачности второго элемента.
Смотрим скриншот, так и есть
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 соответственно наоборот. Здесь конечно есть нюансы. Если в элементе есть вложенные элементы (например конвертер), который не поддерживает
прозрачность, тогда этот параметр бесполезен. Элемент в любом случае будет непрозрачен....
Конечно атрибутов, которые могут иметь элементы еще много, но эти самые распространенные, а остальные будем изучать по мере их применения....
Далее начнем рассматривать на конкретных примерах виджетов, работу с конвертерами и рендерами (далее компоненты), какие параметры может воспринимать тот или иной компонент и какую информацию в каком виде они выводят. И как эти параметры прописать в виджетах. Постараюсь также простым языком объяснить, как открыть конвертер и прочитать при всех этих непонятных кодах параметры ввода-вывода. Постараюсь со скриншотами.
Продолжение следует.....
С некоторыми названиями терминов, примененными в FAQ в данный момент я сам не соглашусь (так как теперь-то поднаторел в питоне) но все по сути правильно.......
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 начнем разбираться в скине в обратном порядке. То есть сначала разберемся в атрибутах и их свойствах.....
Продолжение следует.....
---------- Сообщение добавлено в 13:24 ---------- Предыдущее сообщение размещено в 13:22 ----------
Продолжим
Любой элемент через свои атрибуты сообщает имиджу информацию о себе.
Посмотрим вот такой элемент в скине, который просто выводит статический текст на экран.
Код:
<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 соответственно наоборот. Здесь конечно есть нюансы. Если в элементе есть вложенные элементы (например конвертер), который не поддерживает
прозрачность, тогда этот параметр бесполезен. Элемент в любом случае будет непрозрачен....
Конечно атрибутов, которые могут иметь элементы еще много, но эти самые распространенные, а остальные будем изучать по мере их применения....
Далее начнем рассматривать на конкретных примерах виджетов, работу с конвертерами и рендерами (далее компоненты), какие параметры может воспринимать тот или иной компонент и какую информацию в каком виде они выводят. И как эти параметры прописать в виджетах. Постараюсь также простым языком объяснить, как открыть конвертер и прочитать при всех этих непонятных кодах параметры ввода-вывода. Постараюсь со скриншотами.
Продолжение следует.....
Последнее редактирование: