-
Notifications
You must be signed in to change notification settings - Fork 78
How to create panel plugin (rus)
#How to по написанию плагинов для панели. ##Немного теории. Плагин для панели - это библиотека написаная на C++. Еще одна обязательная вещь - это desktop-файл описывающий этот плагин. Так же могут быть дополнительные файлы, вроде переводов. Сами плагины будут установлены в /usr/local/lib/razor-panel или /usr/lib/razor-panel (зависит от опции -DCMAKE_INSTALL_PREFIX у cmake). Desktop файлы устанавливаются в /usr/local/share/razor/razor-panel, переводы в /usr/local/share/razor/razor-panel/ИМЯ_ПЛАГИНА.
Для сборки Вам нужно дерево исходников, последнюю версию можно взять из GIT git clone git://github.com/Razor-qt/razor-qt.git
или как архив отсюда. Исходники плагинов для панели находятся в поддиректории razorqt-panel.
Давайте напишем простейший плагин - helloworld. Создаем директорию razorqt-panel/plugin-helloworld. Cmake проект не может иметь два подпроекта с одинаковыми именами, а один подпроект helloworld уже есть, поэтому нам придется использовать жутковатое "panelhelloworld".
##CMake. Копируем CMakeLists.txt от плагина часов, и правим его:
cmake_minimum_required(VERSION 2.6)
set(PLUGIN "panelhelloworld")
set(HEADERS
razorhelloworld.h
)
set(SOURCES
razorhelloworld.cpp
)
set(MOCS
razorhelloworld.h
)
set(UIS
)
#*******************************************
include ("../BuildPlugin.cmake")
BUILD_RAZOR_PLUGIN(${PLUGIN})
И добавим наш плагин в общую систему сборки. Для этого добавим несколько строк в razorqt-panel/CMakeLists.txt
...
# *******************************************************************
# What plugins will be built, by default.
# You can enable/disable building of the plugin using cmake options.
# cmake -DCLOCK_PLUGIN=Yes .. # Enable clock plugin
# cmake -DCLOCK_PLUGIN=No .. # Disable clock plugin
...
setByDefault(HELLOWORLD_PLUGIN Yes)
# *******************************************************************
...
if (HELLOWORLD_PLUGIN)
set(ENABLED_PLUGINS ${ENABLED_PLUGINS} "HelloWorld")
add_subdirectory(plugin-helloworld)
endif (HELLOWORLD_PLUGIN)
##Desktop файл. Чтоб отобразить список доступных плагинов, панели нужно знать какие вообще плагины установлены и как они называются. Для этого каждый плагин предоставляет .desktop-файл со своим описанием. Опять за основу возьмем файл от часов. Создаем поддиректорию razorqt-panel/plugin-helloworld/resources и копируем в нее desktop-файл под именем panelhelloworld.desktop, и приводим его к виду:
[Desktop Entry]
Type=Service
ServiceTypes=RazorPanel/Plugin
Name=Hell World
Comment=A "hello world" super plugin.
Name[ru]=Привет мир
Comment[ru]=Супер плагин "Привет Мир".
##Код. Наконец дошло дело до кода. Плагин - это класс наследник RazorPanelPlugin. Который в свою очередь наследник QWidget-а. Создаем 2 файла - razorhelloworld.h и razorhelloworld.cpp. Они не большие приведу их полностью.
razorqt-panel/plugin-helloworld/razorhelloworld.h
01 /* BEGIN_COMMON_COPYRIGHT_HEADER
02 * (c)LGPL2+
03 *
04 * Razor - a lightweight, Qt based, desktop toolset
05 * http://razor-qt.org
06 *
07 * Copyright: 2012 Razor team
08 * Authors:
09 * Alexander Sokoloff <[email protected]>
10 *
11 * This program or library is free software; you can redistribute it
12 * and/or modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General
22 * Public License along with this library; if not, write to the
23 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 * Boston, MA 02110-1301 USA
25 *
26 * END_COMMON_COPYRIGHT_HEADER */
27
28 #ifndef RAZORHELLOWORLD_H
29 #define RAZORHELLOWORLD_H
30
31 #include "../panel/razorpanelplugin.h"
32 #include <QtGui/QPushButton>
33
34 class RazorHelloWorld : public RazorPanelPlugin
35 {
36 Q_OBJECT
37 public:
38 RazorHelloWorld(const RazorPanelPluginStartInfo* startInfo, QWidget* parent = 0);
39 ~RazorHelloWorld();
40
41 virtual RazorPanelPlugin::Flags flags() const { return PreferRightAlignment; }
42
43 private slots:
44 void showMessage();
45
46 private:
47 QPushButton mButton;
48 };
49
50 EXPORT_RAZOR_PANEL_PLUGIN_H
51
52 #endif // RAZORHELLOWORLD_H
razorqt-panel/plugin-helloworld/razorhelloworld.cpp
01 /* BEGIN_COMMON_COPYRIGHT_HEADER
02 * (c)LGPL2+
03 *
04 * Razor - a lightweight, Qt based, desktop toolset
05 * http://razor-qt.org
06 *
07 * Copyright: 2012 Razor team
08 * Authors:
09 * Alexander Sokoloff <[email protected]>
10 *
11 * This program or library is free software; you can redistribute it
12 * and/or modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
15 *
16 * This library is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
20 *
21 * You should have received a copy of the GNU Lesser General
22 * Public License along with this library; if not, write to the
23 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
24 * Boston, MA 02110-1301 USA
25 *
26 * END_COMMON_COPYRIGHT_HEADER */
27
28 #include "razorhelloworld.h"
29 #include <QtGui/QMessageBox>
30
31 EXPORT_RAZOR_PANEL_PLUGIN_CPP(RazorHelloWorld)
32
33 RazorHelloWorld::RazorHelloWorld(const RazorPanelPluginStartInfo* startInfo, QWidget* parent):
34 RazorPanelPlugin(startInfo, parent)
35 {
36 setObjectName("HelloWorld");
37
38 mButton.setText(tr("HW"));
39 addWidget(&mButton);
40 connect(&mButton, SIGNAL(clicked()), this, SLOT(showMessage()));
41 }
42 RazorHelloWorld::~RazorHelloWorld()
43 {
44 }
45 void RazorHelloWorld::showMessage()
46 {
47 QMessageBox::information(0, tr("Panel"), tr("Hello, World!"));
48 }
Первые 26 строк - лицензия, предпочтительно использовать LGPL2+ как наиболее либеральную из GPL.
Строка 31 в H-файле - Подключаем заголовочный файл с RazorPanelPlugin.
Конструктор (стр. 32 в H и 33-34 в CPP) - вам не надо парится о параметрах, RazorPanelPlugin сам обработает параметры.
Обязательно задайте ObjectName для плагина (стр. 36 в CPP), оно используется в файле темы.
Интересна функция Flags (41 в H), она возваращает набор флагов для вашего плагина, сейчас есть всего 2 флага
-
PreferRightAlignment - когда пользователь добавляет плагин на панель, он может добавится или слева или справа. Этот флаг учитывается только при добавлении плагина, в дальнейшем используются настройки пользователя. Скорее всего, Вам надо выставить его.
-
HaveConfigDialog - плагин имеет диалог настроек, у нас его нет.
##Сборка В корне дерева создаем директорию для сборки. Переходим в нее и запускаем cmake.
$ mkdir build
$ cd build
$ cmake -DCMAKE_BUILD_TYPE=Debug ..
Запускаем сборку и установку:
$ make && sudo make install
Проверить можно запустив новую панель и указав отдельный конфиг (панель автоматически создаст его):
$ razor-panel testplugin
Панель будет пустой и тонкой, не проглядите ее. Добавьте новый плагин через меню и наслаждайтесь :)
Полезная статья о том как создавать "Pull request'ы на GitHub"