47

Разработка виджетов Plasma - часть 1

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


Инструменты, которые рекомендую использовать (есть аналоги, но если вы без опыта, то это быстрее):

1. QtCreator - IDE специально для Qt, имеет самую лучшую поддержку языка QML (альтернатива - Kdevelop). Во многих дистрибутивах идет в комплекте по-умолчанию - если нет, установите с помощью пакетного менеджера вашего дистрибутива.

2. Plasmoidviewer (входит в пакет plasma-sdk) - очень рекомендую, дабы не перезапускать Plasmashell при тестировании виджета. Позволяет тестировать виджет в отдельном окне (альтернатива - plasmawindowed, но меньше настроек).

3. Любая консоль (для чтения логов во время тестирования).

4. Настоятельно рекомендую ознакомится с QML и QtQuick (именно на нем будет происходить вся магия + JS). Язык очень простой, но некоторые вещи неочевидны. Ссылка - https://doc.qt.io/qt-5/qtquick-qmlmodule.html


Самый простой способ обучения - это посмотреть исходный код других виджетов. Встроенные виджеты (или добавленные мейнтейнерами вашего дистрибутива) находятся в /usr/share/plasma/plasmoids/, а сторонние (отдельно установленные для пользователя) в /home/%username%/.local/share/plasma/plasmoids/ (я сам лично начинал именно так, потому что документации практически никакой, а та, которую нашел была очень устаревшей - сейчас понемногу ситуация исправляется).


Структура файлов плазмоида: Уникальное имя папки (например: com.mydomain.myplasmoid), внутри это:

├── contents

│ ├── ui

│ │ ├── main.qml

│ │ └── configGeneral.qml

│ └── config

│ ├── config.qml

│ └── main.xml

└── metadata.desktop


Начнем с описания виджета (файл metadata.desktop). Этот файл необходим для работы виджета и определения его системой. Вот примерное его содержание:


[Desktop Entry]

Name=My Plasmoid

Comment=A widget to take over the world!

Type=Service

Icon=battery

X-KDE-ServiceTypes=Plasma/Applet

X-Plasma-API=declarativeappletscript

X-Plasma-MainScript=ui/main.qml

X-KDE-PluginInfo-Author=My Name

X-KDE-PluginInfo-Email=myemail@gmail.com

X-KDE-PluginInfo-Name=com.mydomain.myplasmoid

X-KDE-PluginInfo-Version=1

X-KDE-PluginInfo-Website=https://github.com/username/myplasmoid

X-KDE-PluginInfo-Category=System Information


Кратко пройдусь по основным строкам:


Name - название плазмоида

Comment - описание виджета (опционально)

Type (тут точно Service, т.к. не является отдельным приложением)

Icon - иконка для отображения при установке (название берется из темы, путь прописать пока нельзя)

X-KDE-ServiceTypes=Plasma/Applet, X-Plasma-API=declarativeappletscript - оставляем как есть

X-Plasma-MainScript - путь к исполняемому файлу (с него начинается выполнение)

X-KDE-PluginInfo-Author, X-KDE-PluginInfo-Email - данные автора виджета

X-KDE-PluginInfo-Name - ВАЖНО - должно совпадать с названием основной папки виджета

X-KDE-PluginInfo-Version - используется во внутренних процессах, например для отображения версии клиенту (стоит менять при обновлении)

X-KDE-PluginInfo-Website - ссылка на исходник (опционально)

X-KDE-PluginInfo-Category - используется для определения категории в репозитории store.kde.orgpling.com) Примеры категорий здесь: https://techbase.kde.org/Projects/Plasma/PIG


Содержимое main.qml (далее немного копипасты, если непонятно, пишите в комментариях) -

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

У вас может быть виджет на панели, который представляет собой просто значок, при нажатии на который будет отображаться всплывающее окно.

Вы также можете разместить его на рабочем столе как виджет рабочего стола, размер которого может быть изменен пользователем. Как виджет рабочего стола, он может переключаться между «видом значков», когда он меньше (который открывает всплывающее окно), и прямым отображением содержимого всплывающего окна на рабочем столе, когда достаточно места.

Вы также можете разместить виджет внутри другого виджета (контейнера), такого как системный трей или сама панель.


Пример самого простого файла main.qml:


import QtQuick 2.0

import org.kde.plasma.components 2.0 as PlasmaComponents

PlasmaComponents.Label {

text: "Hello world in Plasma 5 ";

color: "black";

}


Если вы ранее пользовались QtQuick, то все должно быть понятно, если нет, научиться несложно, там очень простой синтаксис для построения интерфейсов (ссылка в начале поста). Дополнение: PlasmaComponents - отдельный класс для Plasma (обычно наследуется от QtQuickControls - позже опишу чуть подробнее).


Остальные файлы и папки в структуре необязательны (но без них не сделать что-то полезное), опишу в следующих постах.


Если вы сделали уникальное имя папки плазмоида, указали ее название в metadata.desktop и существует файл main.qml (название и путь может отличаться, настраивается в metadata.desktop) - вы уже можете скопировать корневую папку в /home/%username%/.local/share/plasma/plasmoids/ и добавить ваш виджет на панель или рабочий стол. Самым лучшим способом тестирования является plasmoidviewer (как я писал выше). Запустите в консоли команду plasmoidviewer -a com.mydomain.myplasmoid (укажите атрибут X-KDE-PluginInfo-Name вместо com.mydomain.myplasmoid) и вы увидите результат в отдельном окне (позже я покажу несколько атрибутов команды plasmoidviewer, для опытных man plasmoidviewer).


Пока на этом все, продолжение следует.

Не стесняйтесь задавать вопросы в комментариях )


GNU/Linux

1.2K поста15.6K подписчиков

Правила сообщества

Все дистрибутивы хороши.

Будьте людьми.

0
Автор поста оценил этот комментарий
Ну так попробовать надо, для песочницы пойдет кмк. Тама фидбэк гораздо толще будет, может и обосрут немного, но качество всё равно лучше чем тут будет.
раскрыть ветку (1)
2
Автор поста оценил этот комментарий
Качество будет хорошим, когда на develop.kde.org мультиязычность завезут (знаю, что лучшая документация на международном, но иногда нужен непередаваемый фольклор).
показать ответы
1
Автор поста оценил этот комментарий

Дак не понятно что именно такое плазмойд и для чего он нужен. Если это виджеты на рабочий стол, то нафиг они нужны? Лично я рабочий стол вижу пару секунд после старта компа, а потом только ide и браузер.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Плазмоид может быть не только на рабочем столе, но и на панели. Вот пример:

Иллюстрация к комментарию
0
DELETED
Автор поста оценил этот комментарий

А как поддержка включается? Куда копать, если захочу такое сделать. Просто писал в винде приложение для сайдбара, со своими вкладками и на Linux писал (QT) панель с поддержкой плагинов, но на этом и закончил. Наверное проще было бы виджеты написать, если есть стандартный функционал.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Можно опционально вид переключить для compactRepresentation (можно посмотреть в моем виджете радио как пример: https://store.kde.org/p/1313987/)

показать ответы
Автор поста оценил этот комментарий

Это не win9x , учи матчасть. И даже не один процесс. Каждый сраный виджет даже под сраный xfce жрёт полный набор всех используемых либов и свой процесс. Не как в старовиндовом гаджетном - всё в одном процессе(с оговорками особых типов, но и в них куда меньше). Тут у тебя будет полный набор.

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Не собираюсь холиварить, но повторю, все (за редким исключением) используемые либы уже загружаются в память при старте сессии, далее используются прямо оттуда (никаких дополнительных загрузок библиотек в память не происходит). Все уже используется в Plasmashell при старте.

показать ответы
Автор поста оценил этот комментарий

Теперь понятно почему KDE такой тупой... Даже виджеты winvista/7 отдыхают.... Он половину QT загрузит на один виджет...

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Эм..., больше половины Qt заргузится при старте сессии, а мой самый "толстый" виджет весит 90Кб (из них половина - локализация).

показать ответы
2
DELETED
Автор поста оценил этот комментарий

Вам бы картинок в пост, а то ничего не понятно

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Когда слайды будут необходимы, обязательно добавлю (пока это введение) )))

показать ответы
0
Автор поста оценил этот комментарий

Жду с нетерпением)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
0
Автор поста оценил этот комментарий

А продолжение будет?)

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

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

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Плазмоид может быть не только на рабочем столе, но и на панели. (пример с картинкой выше).

0
DELETED
Автор поста оценил этот комментарий

Вопрос. Можно ли в KDE добавить боковую панель широкую и на ней размещать виджеты? Типа сайдбара.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий
Можно, но требует поддержки этого в плазмоиде (обычно отображение для панели это иконка).
показать ответы
0
DELETED
Автор поста оценил этот комментарий

Че-то я не видел этого полюбовного решения. Насколько я понял, вопрос завис в воздухе, а само KDE могут очень так сильно опрокинуть, потому что Qt ориентируется теперь в основном на Android и automotive.

Я по этой причине перестал рассматривать Qt для своих open-source поделок.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Вкратце: Qt решила закрутить гайки поиметь максимально золота от KDE (по договору сотрудничества). В ответ они получили много говна ответной реакции в виде "так делать не надо" (причем не только от KDE). После этого Qt заявили, что ничего такого не планировалось и это все происки нечистой силы слухи.

показать ответы
0
DELETED
Автор поста оценил этот комментарий

Кстати, а что там с обещаниями Qt Project не открывать исходники версий в open-source в течение 12 месяцев с релиза? Есть какие-то подвижки, или KDE всё так же в напряженном ожидании?

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Там вроде порешали полюбовно (KDE Foundation не коснется).

показать ответы