icon

Плазмоид Продвигайся!

Цель

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

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

Другая полезная функция — действия, которые выполняются, когда индикатор покажет 100%. Это может быть сообщение через стандартную систему уведомлений KDE или запуск внешней программы. Смотрите полное описание всех возможностей ниже.

Типы индикаторов

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

Вкладка Behavior при настройке Динамического индикатора

Для создания нового индикатора воспользуйтесь всплывающим меню.

Всплывающее меню

Для удаления нажмите кнопку Delete в диалоге настройки данного элемента.

Базовый

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

Динамический

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

Таймер

То же, что и динамический индикатор, только скорость фиксирована и равна 1000 единиц в секунду, а значение измеряется в количестве миллисекунд с начала отсчета. Попросту говоря, это обычный таймер.

Опрос

Этот тип индикатора спрашивает текущие параметры у внешней программы. Все, что нужно задать — это команду и интервал обновления. Плазмоид будет запускать команду, и она должна вернуть либо новое значение индикатора, либо набор параметров в виде {"minimum":0,"maximum":100,"value":77}. Опрос также имеет состояние активности, так что не забудьте включить его при использовании. С помощью этого состояния Вы можете временно отключить опрос, не стирая команды.

Интерфейсы

Плазмоид имеет несколько видов отображения данных, интерфейсов, и каждый из них имеет свой набор свойств, доступных для настройки на вкладке Style.

Вкладка Style при выбранном интерфейсе Круги
Круги

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

Интерфейс Круги

Следующие параметры можно настроить:

  • Цвета: переднего плана, фон, границы.
  • Направление увеличения: по часовой стрелке и против нее.
  • Точка начала: наверху, справа, внизу, слева.
  • Отображаемая часть: пройденная или оставшаяся. Полезно для таймеров.
Столбики

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

Интерфейс Столбики

В настоящий момент для настройки доступны только цвета.

Счетчики

Этот интерфейс является экспериментальным и незаконченным. Он использует родные индикаторы Плазмы и стандартные метки для отображения заголовка и процентов.

Интерфейс Счетчики

Цвета переднего плана доступны для настройки, но пока нигде не участвуют. На панелях использовать не получится.

Кнопки

Каждый индикатор снабжен кнопкой его конфигурации, которая вызывает диалог настройки. Если тип индикатора Динамический или Таймер, то появляется еще одна кнопка для управления текущим состоянием. Если индикатор остановлен, она запускает его, если он запущен, она останавливает его, если закончен — сбрасывает значение в минимум.

Состояния кнопки Старт

Видимость кнопок можно указать в настройках плазмоида.

Действия

Вы можете настроить действия, выполняемые в тот момент, когда индикатор закончится (процент выполнения = 100%).

Вкладка Actions при настройке индикатора
Сообщение

Показать сообщение через систему уведомлений KDE. Тип события (Уведомление, Предупреждение, Ошибка) влияет на издаваемый звук в настройках по умолчанию. Вы можете настроить поведение в Настройках системы. Сообщение — это шаблон, где Вы можете вставить %{name} или %{title} в качестве заменителей. Лимит времени определяет, как долго Ваше сообщение будет висеть в Последних уведомлениях. Значение, равное нулю, означает «всегда».

Уведомление о законченной задаче
Команда

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

Глобальные настройки

Глобальные настройки плазмоида
Основные
  • Имя. Оно используется в DBus для построения имени шины.
  • Интерфейс.
  • Фон: Прозрачный, стандартный или полупрозрачный.
  • Тема: Черное и белое, Серая зебра или Радуга. Темы используются для задания цветов новых индикаторов.
  • Видимость кнопок.

Это типы фона. Как можно видеть, прозрачный дает больше места для отрисовки, т.к. границы плазмоида не отображаются.

Фон: Прозрачный, стандартный и полупрозрачный

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

Плазмоиды на панели

А это встроенные темы.

Темы: Черное и белое, Серая зебра и Радуга
Действие по умолчанию

Та же форма, что и для конкретного элемента. Эти настройки наследуются при создании индикатора.

Интеграция с DBus

Источник данных

DBus интерфейс плазмоида создается с помощью источника данных Make Progress!, который устанавливается отдельно. Плазмоид полностью функционален без источника, однако последний открывает дополнительные возможности и позволяет внешним программам читать данные и управлять плазмоидом. Утилита qdbus, которая поставляется вместе с библиотекой Qt, предлагает удобный способ общения с плазмоидом. Запустите ее без аргументов, и qdbus вернет Вам все зарегистрированные в системе имена шин. Если все настроено правильно, Вы увидите среди них
name.­melnichenko.­nikita.­make-progress.­PlasmoidName,
где PlasmoidName — это имя плазмоида из настроек. Обратите внимание, что текущая версия не поддерживает переименование «на лету», и Вы должны перезапустить Плазму или жить со старым именем до этого. Давайте взглянем на интерфейс.

Список элементов

Положим, имя плазмоида есть «main».

# qdbus name.melnichenko.nikita.make-progress.main

/
/i1
/i2
/i3

Мы видим корневой объект и три индикатора, созданных ранее.

Корневой объект

# qdbus name.melnichenko.nikita.make-progress.main /

method QString org.freedesktop.DBus.Introspectable.Introspect()
method QString name.melnichenko.nikita.AddItem(QString type)
method QString name.melnichenko.nikita.Author()
method QString name.melnichenko.nikita.Homepage()
method QStringList name.melnichenko.nikita.Items()
method bool name.melnichenko.nikita.RemoveItem(QString name)
method QString name.melnichenko.nikita.Version()
  • Метод AddItem создает новые элементы. Ему нужно указать один параметр — тип индикатора. Возвращает имя созданного элемента.
  • Items — это еще один способ получить список элементов, но уже без слэшей.
  • RemoveItem удаляет элемент с заданным именем и возвращает true, если операция успешно завершена.
  • Author, Homepage, Version для информации.

Пример создания и удаления элементов:

# qdbus name.melnichenko.nikita.make-progress.main / AddItem 'Basic'

e1

# qdbus name.melnichenko.nikita.make-progress.main / Items

i1
i2
i3
e1

# qdbus name.melnichenko.nikita.make-progress.main / RemoveItem e1

true

# qdbus name.melnichenko.nikita.make-progress.main / RemoveItem i2

true

# qdbus name.melnichenko.nikita.make-progress.main / Items

i1
i3
Объект индикатора

Объекты индикаторов могут иметь разный набор методов в зависимости от типа.

# qdbus name.melnichenko.nikita.make-progress.main /i1

method QString org.freedesktop.DBus.Introspectable.Introspect()
method double name.melnichenko.nikita.GetMaximum()
method double name.melnichenko.nikita.GetMinimum()
method double name.melnichenko.nikita.GetValue()
method void name.melnichenko.nikita.SetMaximum(double value)
method void name.melnichenko.nikita.SetMinimum(double value)
method void name.melnichenko.nikita.SetValue(double value)
method QString name.melnichenko.nikita.Type()

# qdbus name.melnichenko.nikita.make-progress.main /i3

method QString org.freedesktop.DBus.Introspectable.Introspect()
method double name.melnichenko.nikita.GetMaximum()
method double name.melnichenko.nikita.GetMinimum()
method double name.melnichenko.nikita.GetSpeed()
method double name.melnichenko.nikita.GetValue()
method bool name.melnichenko.nikita.IsStarted()
method void name.melnichenko.nikita.SetMaximum(double value)
method void name.melnichenko.nikita.SetMinimum(double value)
method void name.melnichenko.nikita.SetSpeed(double value)
method void name.melnichenko.nikita.SetValue(double value)
method void name.melnichenko.nikita.Start()
method void name.melnichenko.nikita.Stop()
method QString name.melnichenko.nikita.Type()
  • Set*, Get* задают и считывают параметры индикатора.
  • Type возвращает тип индикатора.
  • Start и Stop управляют состоянием, а IsStarted возвращает текущее. Эти методы доступны только для типов 'Динамический' и 'Таймер'.

Пример управления индикатором:

# qdbus name.melnichenko.nikita.make-progress.main /i3 Type

Live

# qdbus name.melnichenko.nikita.make-progress.main /i3 SetValue 20

# qdbus name.melnichenko.nikita.make-progress.main /i3 GetValue

20

# qdbus name.melnichenko.nikita.make-progress.main /i3 SetSpeed 2

# qdbus name.melnichenko.nikita.make-progress.main /i3 Start

# qdbus name.melnichenko.nikita.make-progress.main /i3 IsStarted

true

# qdbus name.melnichenko.nikita.make-progress.main /i3 GetValue

34.8

# qdbus name.melnichenko.nikita.make-progress.main /i3 Stop

# qdbus name.melnichenko.nikita.make-progress.main /i3 IsStarted

false

# qdbus name.melnichenko.nikita.make-progress.main /i3 GetValue

51.58
Управление плазмоидом из скрипта

Если Ваш скрипт обрабатывает множество объектов в течение долгого времени, Вы, возможно, захотите отображать ход процесса на плазмоиде. Вам понадобятся методы AddItem и RemoveItem корневого объекта для создания и удаления индикатора, SetMaximum и SetValue объекта индикатора для задания свойств. Скачайте пример такого скрипта.

Управление скриптом из плазмоида

Идея состоит в том, чтобы читать текущее состояние плазмоида, используемого в предыдущем примере, для того, чтобы определить желание пользователя остановить выполнение скрипта или наоборот продолжить выполнение. Для начала нужно создать Динамический индикатор взамен Базового, установить скорость равной нулю и запустить индикатор. Каждый раз перед обработкой очередного объекта внутри скрипта проверять результат функции IsStarted и, если он не равен true, ждать пока он не станет true. Вот пример такого скрипта.

С точки зрения пользователя это выглядит так. Он запускает скрипт, тот создает индикатор и начинает увеличивать значение. Пользователь кликает Стоп. Обработка останавливается. Пользователь кликает Старт. Обработка продолжается. Здорово, не правда ли?!

Зависимости

  • KDE SC 4.4.1 или выше.
  • PyQt 4.7 или выше (для Qt 4.6 или выше).

Лицензия

The GNU General Public License (GPL), Version 2.

Загрузка и установка

Плазмоид

Текущая версия: Плазмоид Продвигайся! 0.1.3.

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

Установить/обновить из консоли:

# plasmapkg -u make-progress-0.1.3.plasmoid

Удалить из консоли:

# plasmapkg -r name.melnichenko.nikita.make-progress

Источник данных

Текущая версия: Источник данных Make Progress! 0.1.3.

Установить/обновить из консоли:

# plasmapkg -u make-progress-0.1.3.engine -t dataengine

Удалить из консоли:

# plasmapkg -r name-melnichenko-nikita-make-progress-engine -t dataengine

Обсуждение

Вы можете задавать вопросы и вносить предложения в соответствующей теме блога или прислать по почте. Есть также страница проекта на KDE-Look.org, но только зарегистрированные пользователи могут комментировать там.

Известные проблемы

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

  • Если Вы меняете имя плазмоида в настройках, имя шины DBus не меняется до тех пор, пока Плазма не будет перезапущена. Это можно починить. Кстати, Вы можете перезапустить Плазму не выходя из KDE. Выполните "kquitapp plasma-desktop", а затем "plasma-desktop".
  • Интерфейс Счетчики ведет себя странно, не работает на панелях, нет цветов. Это можно починить.
  • DBus интерфейс иногда остается, когда плазмоид удаляется. Похоже, баг в Javascript API, нужно исследовать.
  • Все плазмоиды имеют один и тот же DBus интерфейс в некоторых KDE-комнатах. Это потому, что они создают нечто вроде разделяемого источника данных, что не предполагалось. Похоже, баг в Javascript API или непредсказуемое поведение, нужно исследовать.
  • Плазмоид неправильно работает в программе plasmoidviewer в KDE SC 4.6 (см. ошибку Плазмы №271533). Это должно быть исправлено командой KDE.

Список задач

Некоторые функции пока не возможно реализовать в виду ограничений Javascript API. Они помечены тэгом [no API].

  • исправить известные проблемы, которые возможно исправить
  • новый тип индикатора: временной интервал
  • циклические уведомления
  • анимация для завершенных индикаторов
  • кнопка удаления элементов прямо на плазмоиде
  • настраиваемая ширина столбиков, колец
  • настраиваемая svg для столбиков
  • управление порядком элементов
  • скрытые индикаторы
  • удобное управление индикаторами на панелях, когда кнопки маленькие
  • добавить тени для улучшения дизайна
  • сохранение полного стиля индикаторов в ранее использованных интерфейсов
  • отображение заголовка и процентов на кругах и столбиках (по запросу в настройках)
  • [no API] всплывающие подсказки для отображения параметров
  • [no API] изменение значений индикаторов перетаскиванием мыши
  • [no API] изменение порядка индикаторов перетаскиванием мыши
  • [no API] родные диалоги для элементов

Награды

Второе место и звание Творческого гения в конкурсе 2010 KDE Javascript Jam Session.

Спасибо

  • Aaron Seigo за помощь и поддержку для всех участников конкурса и за починку важных багов в Javascript API
  • Ulf Sauer за тестирование и отчеты об ошибках
  • команде KDE за превосходное окружение рабочего стола

Список изменений плазмоида

версия 0.1.3 [25.04.2011]

версия 0.1.2 [14.04.2011]

  • новое: параметр Единицы измерения

версия 0.1.1 [03.05.2010]

  • новое: шаблон для перевода интерфейса
  • новое: русская локализация

версия 0.1.0 [31.03.2010]

первоначальный релиз для конкурса Javascript Jam Session

Список изменений источника данных

версия 0.1.3 [25.04.2011]

версия 0.1.2 [09.05.2010]

версия 0.1.1 [17.04.2010]

  • исправлено: управление индикаторами с помощью qdbus не работало на некоторых системах (сообщил Ulf Sauer)

версия 0.1.0 [31.03.2010]

первоначальный релиз для конкурса Javascript Jam Session