qt-интерфейсКак уже рассказывал, совершил я страшный грех – перестал пользоваться виндой. В качестве рабочего стола теперь у меня KDE4. Красоты неописуемой, удобством не обделённый, загляденье, да и только. И всё вроде хорошо, но есть часть рутины, которая довольно привычна была на виндовом экране, но на linux её терпеть прямо нет никакого желания. Одним из примеров такой рутины был запуск rdp и radmin клиентов, если с первым под виндой ещё более-менее можно сладить (он хотя бы хранит учётные записи и настройки), то второй даже пароль сохранять не умеет.
Обычно всякие вспомогательные программки делаются на php, но не в этот раз – уж коль скоро захотелось запускать что-то с окошками, захотелось и свою облечь в какой-нибудь приличный вид. php-gtk был отвергнут сразу (ну не нравится мне gtk-ный интерфейс, не нравится и всё тут). Решил сделать на Qt4 – благо информации в интернете по данной теме полно.
А по скольку рабочего биндинга php к qt обнаружить сходу не удалось, то делать стал на ruby. Собственно делов было на несколько часов, с учётом того что ранее сталкиваться со всем этим не приходилось считаю что результат себя нашёл очень быстро. Форму накидал в qt-designer, полчаса гугления на предмет нужных библиотек для ruby и собственно сборки биндинга ruby-qt и вот уже виден первый результат. Полдня радости и счастья сменяются унынием – хороша программка, да вот мешается под руками. Ещё чуть-чуть гугления и вот она уже спрятана в трей. Ещё немного и она после восстановления из трея занимает прежнее положение. И вот вроде всё хорошо, только вот в таскбаре мешается. Искал-искал, но как его оттуда убрать не нашёл. Нет мне покоя.

И тут мой взгляд упал на плазмоиды, разбросанные по рабочему столу.
К слову сказать о рабочем столе – работая на винде я всегда отключал показ ярлыков на рабочем столе – доступ к ним неудобный, а порядок поддерживать сложно. Но вот с появлением kde4 я своё мнение о рабочем столе сильно поменял – теперь мне совершенно очевидно, что рабочий стол это тоже “инструмент”, а не просто самое верхнее окно…

plasmoidТак вот, плазмоиды… это такие махонькие приложения, разбросанные по пространству рабочего стола (плазмы). Какой-то показывает список файлов в директории, какой-то лог, какой-то последние rss-записи. И все они работают, и нет их в таскбаре, нет их в трее, и всегда они под рукой…
И захотелось мне сделать такой вот плазмоид самому. И захотелось сделать его как ни странно на ruby.

Я в принципе ожидал, что всё более чем просто и сконвертировать qt-ный интерфейс в plasmoid будет проще простого, но всё оказалось несколько сложнее и запутанней. Первое с чем пришлось столкнуться – все примеры, найденные в этих ваших интернетах безнадёжно устарели. На запуск “hello world” ушло несколько дней. Но формула счастья была в итоге найдена. Готовый к употреблению plasmoid это zip-архив в корне которого находится desktop-файл и директория contents.

Первое что надо сделать, когда создаётся plasmoid – файл metadata.desktop с описанием вашей будущей программы.

[Desktop Entry]
Name=Mega Plasmoid
Comment=Super-puper tool
Type=Service
ServiceTypes=Plasma/Applet
X-KDE-PluginInfo-Author=MiRacLe
X-KDE-PluginInfo-Email=miracle@rpz.name
X-KDE-PluginInfo-Name=megatool
X-KDE-PluginInfo-Version=0.1
X-KDE-PluginInfo-Website=http://miracle.rpz.name/
X-KDE-PluginInfo-Category=Examples
X-KDE-PluginInfo-Depends=
X-KDE-PluginInfo-License=GPL
X-KDE-PluginInfo-EnabledByDefault=true
X-Plasma-API=ruby-script
X-Plasma-MainScript=code/main.rb

Две последние строки – то, чего в мануалах не сыщешь, то ради чего был перекопаны мегабайты бесполезных копипастов по всей сети, то ради чего пишется эта чудо{вищная} заметка.
Далее рядом с этим файлом создаём директорию contents, в которой и будет всё содержимое будущей программы.

Сборка и просмотр полученного результата проходит быстрее, если сделать подобный скриптик:

#!/bin/sh
plasmapkg -r megaplasmoid #удаляю уже установленный плазмоид из системы
rm megaplasmoid.plasmoid # и туда же его исходник
cd megaplasmoid #в директорию с исходным кодом
zip -r ../megaplasmoid.plasmoid * # пакую новый плазмоид
plasmapkg -i ../megaplasmoid # устанавливаю его
plasmoidviewer megaplasmoid # и тут же хочу на него, красавца, посмотреть

Всё приготовления закончены и можно приступить непосредственно к коду. Его следует поместить туда, куда описали в metadata.desktop – в файл main.rb в директории code. В простейшем случае он будет выглядеть примерно так:

require 'plasma_applet'
module  Megaplasmoid
  class Main < PlasmaScripting::Applet
    def initialize(parent, args = nil)
      super
    end
    def init
      @mainlayout = Qt::GraphicsLinearLayout.new Qt::Vertical, self
      layout = @mainlayout
      self.layout = layout
    end
  end
end

После того, как это всё-таки запустилось, эйфория от полученного результата прошла, настала пора собственно перенести код, написанный под qt. Как оказалось “перенести” волшебным нажатием чего-нибудь оказалось невозможным, и визуальную часть пришлось делать заново, вооружившись api и скудными (и устаревшими) примерами. Был несколько пересмотрен интерфейс, и остались в нём только два combobox-а (где делать и что делать) и собственно та самая кнопка, о которой так много говорили большевики.

Конечно же запуском radmin и rdesktop дело не ограничилось, штука постепенно обрастает всяческими фичами – ибо нет предела совершенству. Помимо запуска всяческих утилит к делу уже пришит watir, d-bus и ещё много всего интересного, но об этом в следующих сериях.

Рубиновые плазмоиды
Tagged on:     

4 thoughts on “Рубиновые плазмоиды

  • 08.10.2009 at 10:19
    Permalink

    Привет. Тоже пытаюст сделать кое-какме плазмоиды на Ruby. Возникла проблема с выводом кириллических символов. В частности, не получается нормально вывести что-нибудь в Qt::Label. Как ты решил эту проблему? Какие настройки ставил для Qt::TextCodec? Если не сложно приведи пожалуйста полный код своего плазмоида.

  • 08.10.2009 at 10:28
    Permalink

    Ничего особенного не делал – файл main.rb сохранён в utf-8, советские строки выводятся как есть.
    Ну а код выложу чуть позже, вычистив немного 🙂

  • 13.04.2011 at 04:37
    Permalink

    > К слову сказать о рабочем столе – работая на винде я всегда отключал показ ярлыков на рабочем столе
    А на кой он тогда вообще нужен?

    > доступ к ним неудобный
    О боже.. Чем он неудобен??? Даже боюсь представить.

    > а порядок поддерживать сложно.
    Конечно, если всякой хренью его засирать..

    ИМХО, статья бредовая

  • 13.04.2011 at 16:11
    Permalink

    >О боже.. Чем он неудобен??? Даже боюсь представить.
    Тем что всё то, что было нажи^Wоткрыто с таким трудом надо свернуть, чтобы начать искать ярлыки.

    >ИМХО, статья бредовая
    Рад, что хоть у кого-то она вызвала желчеизвержение.

Leave a Reply