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 подписчика

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

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

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

Вы смотрите срез комментариев. Показать все
3
Автор поста оценил этот комментарий
Братюнь, ну что мучаешься, тебе на хабр надо.
раскрыть ветку (12)
8
Автор поста оценил этот комментарий

Чтобы обосрали как нуба?

раскрыть ветку (6)
3
Автор поста оценил этот комментарий
Да там не только нубов обсирают. Точнее нубов не очень то и обсирают а вот несогласных с мнением стада сразу минусят и карму портят. Иногда дело доходит до долбоебизма типа когда написал что новая аська умеет в видеозвонки меня обвинили во лжи что вобще за гранью. Её же тупо любой может скачать и посмотреть. Вобще хабр это самый уебищный it-ресурс. На всяких иксбитах и прочих опенках народ заметно адекватнее.
0
Автор поста оценил этот комментарий
Ну так попробовать надо, для песочницы пойдет кмк. Тама фидбэк гораздо толще будет, может и обосрут немного, но качество всё равно лучше чем тут будет.
раскрыть ветку (4)
2
Автор поста оценил этот комментарий
Качество будет хорошим, когда на develop.kde.org мультиязычность завезут (знаю, что лучшая документация на международном, но иногда нужен непередаваемый фольклор).
раскрыть ветку (3)
0
Автор поста оценил этот комментарий
Учи инглиш, советую.
раскрыть ветку (2)
0
Автор поста оценил этот комментарий
Для чтения технической документации хватает, я про другое говорю, что при локализации некоторые вещи объяснить проще для пользователей на родном языке.
раскрыть ветку (1)
Автор поста оценил этот комментарий
Да нет, проще инглиш. Учи и исходи из этого.
3
DELETED
Автор поста оценил этот комментарий

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

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

ой не сравнивай, хабру до пикабу по способам настройки контента как до луны....

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

Я про сам контент, а не про настройки. По настройкам и удобству хабр в полной жопе.

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

в контенте тоже недостатки - нет школоты и не много срача :)

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

Вот как раз срача там хватает. Насчет школоты, хз кто есть кто. Иногда вроде такую хрень пишут, что думаешь ну 100% школьник, а в профиле написано что нет.

Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества