LeechCraft Quarks.

Dec 12, 2013 12:29



Не так давно в leechcraft появился новый вид "плагинов" - кварки. Управлением и отображением кварков занимается плагин SB2. В общем плане все кварки можно разделить на 3 вида:
  1. Кварк-плагин
  2. Кварк-часть-плагина.
  3. Кварк-дополнение.

1. Кварк-плагин.
Ключевая особенностьэтого вида кварков в том, что они являются полноценными плагинами - компилируются в динамические библиотеки, распространяются наравне с обыными плагинами для leechcraft через репозитории дистрибутивов. Пример: TPI.
2. Кварк-часть-плагина.
Этот вид кварков скорее виртуальный, чем реальный. Просто некоторые плагины отображают какие-то свои события или что-то еще в sb2, как это делает kbswitch (флаг текущей раскладки - это и есть кварк), или, например, GMailNotifier (отображает кварк в случае наличия непрочитанных сообщений)
3. Кварк-дополнение.
Ближайшая аналогия - дополнения в firefox. Устанавливается через LackMan, а значит не является бинарным файлом. В данный момент наилучшим вариантом для создания таких кварков является QML. Именно на этом варианте кварков я остановлюсь более подробно.Создание кварка-дополнения.

Для того, что бы у нас появился рабочий кварк нам необходимо 2 файла: файл кварка и манифест. Файл кварка именуется как QuarkName.qml, а манифест - QuarkName.qml.manifest соответственно.
Для начала рассмотрим синтаксис файла-манифеста.

{
"quarkName": "Meteor",
"description": "Weather forecast quark",
"icon": "weather-clouds",
"areas": [ "panel" ]
}

Ну, с quarkname и description - все понятно. С icon тоже (иконка кварка из системной темы, которая будет отображаться в панели.) Еще может быть поле quarkID, но я пока не понял является ли оно обязательным или нет. Без него все работает. areas - задает список допустимых позиций для кварка. На данный момент поддерживается только panel, которая указывает на то, что кварк может быть встроен в sb2-панель. Еще одно допустимое значение - dashboard, но в данный момент оно игнорируется в связи с отсутствием этого самого dashboard.
Теперь сокращенный вид моего главного файла кварка - Meteor.qml

import QtQuick 1.1
import org.LC.common 1.0

Item
{
id: rootRect

implicitWidth: parent.quarkBaseSize
implicitHeight: parent.quarkBaseSize

ActionButton
{
id: weatherButton
anchors.fill: parent
}
}

На что тут стоит обратить в первую очередь внимание? На размер кварка: implicitWidth и implicitHeight. Значения для них берутся из SB2 и хранятся в параметре quarkBaseSize.
Вообще многие необходимые вещи уже созданы или определены в SB2. В конце я дам ссылки на файлы и опишу, что там можно найти полезного.
Собственно, самый простейший, ничего не делающий кварк создан.Настройки кварка.

Что нам делать, если для кварка нам необходимы настройки? Разработчики и об этом тоже позаботились. Достаточно создать файл QuarkName.qml.settings, а внутри него описать настройки в обычном для личкрафтов xsd-формате.
Все параметры-ключи настроек становятся доступны в кварке, как параметры. Например, это часть настроек Meteor.qml.settings



А в коде это используется так:

Timer
{
id: updateTimer
interval: UpdateTemperatureInterval *60*1000
repeat: true
running: true
triggeredOnStart: true
onTriggered:
{
requestNewWeather ();
requestWeatherForecast ();
}
}

Как мы видим - ничего сложного. Это что касательно чтения настроек.
Для записи имеется специальный объект QuarkName_Settings у которого есть метод setSettingsValue (key, value);

Открытие дополнительных окон

Часто возникает необходимость открыть какое-то окошко или просто показать расширенный тултип с картинками и текстом. В этом нам поможет quarkProxy и его метод openWindow
В моем кварке по клику открывается окошко с прогнозом погоды. Выглядит вызов следующим образом:

onTriggered:
{
var global= commonJS.getTooltipPos (rootRect);
var params = {
x: global.x,
y: global.y,
existing: "toggle",
weatherIcon: weatherButton.actionIconURL,
weatherScaleImage: useSystemIconSet,
weatherInfo: rootRect.weatherData,
forecastInfo: rootRect.weatherForecastData,
TemperatureUnit: TemperatureUnit,
PressureUnit: PressureUnit,
WindSpeedUnit: WindSpeedUnit,
UseSystemIconSet: UseSystemIconSet,
ForecastDaysCount: ForecastDaysCount,
Meteor_Settings: Meteor_Settings
};
showForecastWindow = !showForecastWindow;
rootRect.forecastWindow = quarkProxy.openWindow(sourceURL,
"MeteorForecastWindow.qml", params);

}
Тут стоит обратить внимание на несколько ключевых моментов.
  1. Нам нужно получить позиции, где показывать окно. В этом нам помогает getTooltipPos.

  2. Необходтимо передать все необходимые параметры в новое окно. Обратите внимание, что так же передаются все параметры настроек, потому что иначе в новом окне настройки будут не доступны.
  3. Стоит обратить внимание на параметр existing. Если он равен 'toggle" или вообще отсутствует, то при повторном вызове метода openWindow с этим же параметром закроет окно.

"Новое окно" должно так же иметь сигнал closeRequested () и функцию beforeDelete (). Функция beforeDelete () вызывается перед удалением окна и позволяет подчистить или подрпавить какие-то параметры. closeRequested я так и не понял когда надо излучать, но раз требуется, значит требуется.Внешний вид

Главное условие - не забываем использовать личкрафтовые темы для градиентов и цветов.Заключение

Вот собственно все ключевые моменты я описал. Ничего очень сложного нету. Сейчас я приведу ссылки на файлы, которые по-моему полезны для разработки кварков:
  1. сolorthemeproxy.h - тут можно посмотреть все возможные параметры для задания цветов.
  2. quarksettingsmanager.h - тут методы для работы с настройками для кварков.
  3. quarkproxy.h - а это проксик для кварков. Методы октрытия окон и всякое другое. Не менее полезен, чем предыдущие.
  4. Ну и конечно лучшим подспорьем всегда будет уже готовый кварк. В репозитории есть AnalogClock или посмотрите кварки в GMailNotifier или KBSwith

Надеюсь все, что я тут написал, поможет кому-то в создании своих кварков.
Posted via LeechCraft Blogique.

programming, tutorial, qml, leechcraftdevblog, прекрасное, quark, coding is my life, leechcraft

Previous post Next post
Up