Sunteți pe pagina 1din 15

Desenvolvendo Plugins para o SPRING

Verso Windows e Linux

SPRING Plugins

Fevereiro de 2010
INPE

Sumrio
SPRING Plugins............................................................................................3
Estrutura de Plugins do SPRING...................................................................4
Camada de Informao.........................................4
Camada de Interface..........................................4
Camada de Parmetros.........................................5
Camada de Gerenciamento......................................5

Desenvolvimento de Plugins........................................................................6
Cabealho e bibliotecas......................................6
Disponibilizao do cabealho e bibliotecas..................6
Compiladores.................................................6
Qt...........................................................7
Banco de Dados...............................................8

Exemplos de Plugins.................................................................................10
Hello SPRING................................................10
Assistente de Criao de Banco de Dados.....................11

Compilando e Executando um Plugin........................................................14


Integrao do Plugin com o SPRING Cdigo Livre.......................................15

spring@dpi.inpe.br

SPRING Plugins

SPRING Plugins
Este documento apresenta a tecnologia de plugins para o SPRING e atravs dessa
tecnologia os usurios podero incorporar suas implementaes ao software SPRING. A tecnologia
de plugins utilizada para adicionar funes a softwares, provendo alguma funcionalidade
especial ou muito especfica. Geralmente pequeno e leve, e utilizado somente sob demanda.
O SPRING possui o suporte a tecnologia de plugins para permitir que desenvolvedores
externos

aumentem

as

funcionalidades

do

SPRING

implementaes, evoluindo cada vez mais o software SPRING.

disponibilizem

seus

estudos

A estrutura de plugins do SPRING, possui quatro camadas: Informao, Interface,

Parmetros e Gerenciamento, apenas as trs primeiras so necessrias para que os usurios


externos incorporem suas implementaes ao SPRING.

spring@dpi.inpe.br

Estrutura de Plugins do SPRING

Estrutura de Plugins do SPRING


Neste captulo apresentamos as camadas presentes na estrutura de plugins do SPRING.
O SPRING se utiliza dessas quatro camadas para incorporar e executar os plugins desenvolvidos.
Abaixo um detalhamento de cada camada da tecnologia de plugins.

Camada de Informao
A camada de informao responsvel por definir informaes bsicas do plugin.
Essas informaes so:

O nome do plugin (plugin_name_)

A identificao do plugin (plugin_type_)

Verso da camada de interface (plugin_interface_version_) * Valor no pode ser


modificado

O numero de build do plugin (plugin_build_number_)

A verso do plugin (plugin_major_version_, plugin_minor_version_)

A descrio do plugin (plugin_description_)

Quem desenvolveu o plugin (plugin_vendor_)

E-mail do desenvolvedor do plugin (plugin_vendor_email_)

Url de divulgao do plugin (plugin_url_)

Camada de Interface
A camada de interface contm a camada de informao e contm o mtodo de

execuo do plugin. Os plugins so sempre filhos dessa camada, ou seja, os plugins do SPRING
sempre herdaro dessa camada. Ao herdar a camada de interface, obrigatrio implementar o
mtodo ExecuteSpringPlugin, pois esse ser o mtodo chamado ao executar um plugin.

Alm disso, essa camada contm a declarao de plugin necessria pelo Qt, framework

que controla o carregamento do plugin.

E a camada de Interface tambm responsvel por validar um plugin e apenas os

plugins vlidos sero carregados. Um plugin vlido quando o mesmo for gerado(compilado) na
mesma verso que o SPRING e o Qt. Essa informao pode ser obtida no sobre do software
SPRING.

spring@dpi.inpe.br

Estrutura de Plugins do SPRING

Camada de Parmetros
A camada de parmetros responsvel por disponibilizar mtodos que executam
alguma operao no SPRING ou retornam variveis de controle do SPRING. Dentre as operaes e
variveis disponveis so:

getCurrentDatabasePtr: Retorna o ponteiro do banco de dados ativo

getCurrentInfolayerPtr: Retorna o ponteiro do plano de informao ativo

getCurrentCategoryPtr: Retorna o ponteiro da categoria ativa

getCurrentProjectPtr: Retorna o ponteiro do projeto ativo

getSelectedBox: Retorna o box da seleo do cursor de rea

getBoxDrawArea: Retorna o box da rea de desenho

updateControlPanel: Atualiza o painel de controle

getQFileDialogPtr: Retorna o ponteiro para o dilogo de arquivo

drawImage: Desenha uma imagem na tela selecionada, se a imagem tiver apenas um


canal, o mesmo ser desenhado, caso tenha trs canais, gerado uma composio dos
trs canais

getAuxiliarCanvasPtr: retorna o ponteiro do canvas da janela Auxiliar

getSErrorPtr: Retorna o ponteiro do controle de erro e barra de progresso

getSPRINGDBPtr: Retorna o caminho do banco de dados

activatedDatabase: Ativa um banco de dados, dado um diretrio e o nome do banco de


dados

Camada de Gerenciamento
A camada de gerenciamento utilizada apenas pelo software SPRING, que procura no
diretrio sprplugins por arquivos .dll(Windows) ou .so(Linux), e para cada plugin encontrado,
verifica sua validade e carrega o plugin.

Alm disso, a camada de gerenciamento cria o menu Plugins na interface principal do

SPRING que possui um item de instalao de plugins e adiciona um item para cada plugin
carregado. Atravs desses itens que os plugins sero executados.

spring@dpi.inpe.br

Desenvolvimento de Plugins

Desenvolvimento de Plugins
Para desenvolver plugins para o SPRING so necessrios alguns pr-requisitos. Os prrequisitos so detalhados abaixo, nesse captulo.

Cabealho e bibliotecas
Os arquivos de cabealho das funcionalidades do SPRING e as bibliotecas so

necessrios no processo de compilao do plugin. Os arquivos que formam o cabealho esto na


linguagem C++, devido o SPRING ser desenvolvido nesta linguagem de programao.
Os arquivos de cabealhos contm as declaraes das classes, rotinas, variveis e
identificadores. Atravs da incluso desses arquivos no cdigo do plugin, ser possvel utilizar as
classes, os mtodos e variveis presentes no SPRING.

As bibliotecas (arquivos .lib ou .so) so necessrias para a fase de lincagem ou ligao

do plugin. Quando o plugin usufruir de alguma classe ou mtodo do SPRING ser necessrio ligar
ou lincar a biblioteca que contm a classe ou mtodo utilizado. Nos exemplos do prximo captulo
explicaremos como realizar essa etapa.

Alm dos arquivos necessrios para a criao do plugins, disponibilizada a

documentao de classes do SPRING, esta documentao fundamenta as implementaes


existentes no SPRING. Atravs desta, possvel manipular e trabalhar todas as caractersticas

presentes. Como exemplos podemos citar: manipulao de imagens e dados vetoriais,


manipulao do plano de informao, acessar mtodos de processamento digital de imagem e
diversas outras implementaes.

Disponibilizao do cabealho e bibliotecas


Os arquivos necessrios para a criao de um plugin do SPRING so os cabealhos e

bibliotecas, descritos no captulo anterior. Existem duas formas de obter esses arquivos, atravs

do download de um instalador com os cabealhos e bibliotecas disponveis no sitio de internet do


SPRING (www.dpi.inpe.br/spring) ou pelo SPRING Cdigo Aberto (www.spring-gis.org).

Compiladores
Os compiladores testados para compilar o conjunto de aplicativos SPRING so:

spring@dpi.inpe.br

Desenvolvimento de Plugins

Ambiente Windows:

Visual Studio 2008

A verso Express, a mais simples, pode ser obtido gratuitamente no sitio


http://www.microsoft.com/exPress/

Ambiente Linux

GCC / G++

Normalmente esse compilador j vem instalado nas distribuies Linux

Qt
Para os ambientes Windows e Linux necessrio a instalao do Framework Qt
responsvel principalmente pelo gerenciamento das janelas. O Qt disponibilizado pela Nokia e
possui uma licena livre e pode ser obtido no sitio de internet http://qt.nokia.com/.

Uma necessidade da biblioteca Qt a compilao da mesma de forma dinmica e com

suporte OpenGL. Abaixo uma demostrao da compilao da biblioteca Qt. Esse passo bem
demorado.

Descompacte o arquivo baixado (qt-win-opensource-src-<verso>.zip)

Abra um Prompt de Comando(Windows) ou Terminal(Linux) que contenha as


informaes do compilador (Ex: Visual Studio 2008 Command Prompt)

Entre no diretrio, em que o Qt foi extrado

cd c:\Qt\qt-win-opensource-src-4.5.3

Windows

Execute o comando configure e siga os passos para configurar a biblioteca do


Qt

configure

Aps configurado, compile e instale a biblioteca com o seguinte comando

Visual Studio 2008

nmake install

Linux

A compilao do Qt no ambiente Linux um pouco mais complicada,

necessrio instalar uma srie de bibliotecas antes de configurar a gerao do


Qt. As bibliotecas so:

spring@dpi.inpe.br

OpenGl (mesa-libglu-devel)

LibXext (libXext-devel)
7

Desenvolvimento de Plugins

LibXinerama (libXinerama-devel)

LibXcursor (libXcursor-devel)

LibXfixes (libXfixes-devel)

LibXrandr (libXrandr-devel)

LibXrender (libXrender-devel)

LibXi (libXi-devel)

FontConfig (fontconfig-devel)

LibJpeg (libjpeg-devel)

alm das bibliotecas as suas dependncias tambm precisam ser instaladas. Os


nomes das bibliotecas podem variar de acordo com a distribuio Linux.
Utilize o aplicativo Instalar e Remover Programas da distribuio Linux para
instalar as bibliotecas requisitadas pelo Qt.

Execute o comando configure e siga os passos para configurar a biblioteca do


Qt

configure

Durante a configurao do Qt apresentado uma lista de bibliotecas que


o Qt utilizar. Verifique se as bibliotecas citadas acima esto com
valores diferente de no.

Aps configurado, compile e instale a biblioteca com o seguinte comando

GCC / G++

sudo make install

Pronto Qt, compilado e instalado

Banco de Dados
Para o ambiente Windows no necessrio instalar as bibliotecas dos bancos de

dados, as mesmas j se encontram no cdigo fonte do SPRING, mas no ambiente Linux


necessrio instalar o pacote de desenvolvimento do MySQL e PostgreSQL.

As bibliotecas de banco de dados necessrias no ambiente Linux so mysql-devel e


postgresql-devel. Cada ambiente Linux possui uma maneira para instalar essas bibliotecas, utilize

a que melhor se adque a sua distribuio Linux. Abaixo uma demostrao de instalao no
ambiente Ubuntu e OpenSuse.

Instalando as bibliotecas no Ubuntu 9.04

spring@dpi.inpe.br

apt-get install libmysqlclient16-dev

Desenvolvimento de Plugins

spring@dpi.inpe.br

apt-get install libpq-dev

Instalando as bibliotecas no OpenSuse 11

yast2 --install libmysqlclient-devel

yast2 --install postgresql-devel

Exemplos de Plugins

Exemplos de Plugins
Neste captulo mostraremos exemplos de como utilizar as camadas de Informao,
Interface e Parmetros da metodologia de plugins para o software SPRING. Apresentaremos os

exemplos de Hello SPRING, bem mais simples e a criao de banco de dados. Esses exemplos
sero distribudos junto ao SPRING.

Hello SPRING
O exemplo Hello SPRING apesar de bem simples, contm todos os passos necessrios

para o desenvolvimento de um plugin e utiliza grande quantidade das funcionalidades oferecidas


pela camada de parmetros.

Analisando o plugin de Hello SPRING


O arquivo hellospringplugin.pro no diretrio projetos/hellospringplugin um

arquivo de projetos, que atravs deste so gerados os arquivos .vcproj ou Makefile. O contedo

desse arquivo composto pela definio de plugin do SPRING e quais arquivos faro parte desse
plugin.

A varivel LIB_NAME obrigatria, essa varivel define o nome do arquivo

do plugin (.dll ou .so). Exemplo LIB_NAME = hellospringplugin.

A linha include(../plugindefines.pri) obrigatria, esse include determina

que esse projeto ser um Plugin.


As

linhas

include(../libfreetype/libfreetypepath.pri)

include(../libcodebase/libcodebasepath.pri) e include(../libspring/libspringpath.pri) adicionam


ao INCLUDEPATH (caminho de incluso) os diretrios dos cabealhos.
A

linha

include($${LIB_NAME}.inc),

adiciona

arquivo

obrigatria,

pois agrega

hellospringplugin.inc, que ser explicado a seguir.


A linha include(../basespringplugin.inc)
arquivos necessrios para a criao do Plugin.
A linha LIBS += $${SPRDESTLIBS}/$${LIBPREFIX}libglobal.$${LIBSUFFIX} \
$${SPRDESTLIBS}/$${LIBPREFIX}libspring.$${LIBSUFFIX} define quais as bibliotecas do SPRING sero
lincadas ao plugins, essas linhas so necessrias quando o plugin utiliza a camada de parmetros
ou qualquer outra classe do SPRING.

spring@dpi.inpe.br

10

Exemplos de Plugins
O arquivo hellospringplugin.inc no diretrio projetos/hellospringplugin define quais

so os arquivos que faro parte do plugin Hello SPRING.

O arquivo helloplugin.h no diretrio src/pluginspr/helloplugin o cabealho que

define o plugin Hello SPRING.

Para a criao de plugins no SPRING, necessrio que a classe do plugin

herde de SpringPluginInterface, que a camada de interface, e herde de QObject, que a


definio

de

objeto

SpringPluginInterface {};

do

Qt.

Incluso

Exemplo:

da

Q_INTERFACES(SpringPluginInterface).

macro

class

HelloSPRINGPlugin

Q_INTERFACES,

requisitada

public

pelo

Qt.

QObject,
Exemplo:

Definio do polimorfismo do mtodo ExecuteSpringPlugin.

O arquivo helloplugin.cpp no diretrio src/pluginspr/helloplugin a implementao

do plugin Hello SPRING.

Determinar as informaes do plugin. Exemplos:


_spring_plugin_info.plugin_name_ = "Hello SPRING";
_spring_plugin_info.plugin_vendor_ = "Raphael Meloni";
Incluso da macro Q_EXPORT_PLUGIN2, requisitada pelo Qt. Exemplo:
Q_EXPORT_PLUGIN2(helloplugin, HelloSPRINGPlugin);
Implementao do polimorfismo do mtodo ExecuteSpringPlugin. A
implementao do mtodo ExecuteSpringPlugin utiliza a camada de parmetros, apresentando as
informaes do plugin (nome, criador e verso), o banco de dados ativo, o projeto ativo, a
projeo do projeto, o plano de informao ativo, as representaes presentes no plano de
informao ativo, o box selecionado pelo cursor de rea e a rea de desenho. Exemplos:
DataBase* pgDb = spp->getCurrentDatabasePtr();
InfoLayer* pgIl = spp->getCurrentInfolayerPtr();

Assistente de Criao de Banco de Dados


O exemplo do Assistente de Criao de Banco de Dados bem mais complexo que o
exemplo anterior e tambm utiliza a metodologia de plugins, usufruindo da camada de
parmetros.

spring@dpi.inpe.br

11

Exemplos de Plugins

Analisando o plugin de Assistente de Criao de Banco de Dados


O arquivo databasewizardplugin.pro no diretrio projetos/databasewizard um

arquivo de projetos, que atravs deste so gerados os arquivos .vcproj ou Makefile. O contedo

desse arquivo composto pela definio de plugin do SPRING e quais arquivos faro parte desse
plugin.

A varivel LIB_NAME obrigatria, essa varivel define o nome do arquivo

do plugin (.dll ou .so). Exemplo LIB_NAME = databasewizardplugin.

A linha include(../plugindefines.pri) obrigatria, esse include determina

que esse projeto ser um Plugin.


As

linhas

include(../libfreetype/libfreetypepath.pri)

include(../libcodebase/libcodebasepath.pri), include(../libspring/libspringpath.pri) adicionam


ao INCLUDEPATH (caminho de incluso) os diretrios dos cabealhos do SPRING.

A linha include($${LIB_NAME}.inc), adiciona as informaes do arquivo


databasewizardplugin.inc.
A linha include(../basespringplugin.inc)

obrigatria,

pois agrega

arquivos necessrios para a criao do Plugin.


A linha LIBS += $${SPRDESTLIBS}/libglobal.$${LIBSUFFIX} \
$${SPRDESTLIBS}/libspring.$${LIBSUFFIX} \
$${SPRDESTLIBS}/libimp.$${LIBSUFFIX} \
$${SPRDESTLIBS}/libtiff.$${LIBSUFFIX} define quais as bibliotecas do SPRING sero lincadas ao
plugins, essas linhas so necessrias quando o plugin utiliza a camada de parmetros ou qualquer
outra classe do SPRING.

O arquivo databasewizardplugin.h no diretrio src/pluginspr/databasewizard o

cabealho que define o plugin Criao de Banco de Dados.

Para a criao de plugins no SPRING, necessrio que a classe do plugin

herde de SpringPluginInterface, que a camada de interface, e herde de QObject, que a


definio

de

objeto

SpringPluginInterface {};

do

Qt.

Incluso

Exemplo:
da

Q_INTERFACES(SpringPluginInterface).

macro

class

DatabaseWizardPlugin

Q_INTERFACES,

requisitada

public

pelo

Qt.

QObject,
Exemplo:

Definio do polimorfismo do mtodo ExecuteSpringPlugin.

O arquivo databasewizardplugin.cpp no diretrio src/pluginspr/databasewizard a

implementao do plugin Criao de Banco de Dados.


spring@dpi.inpe.br

12

Exemplos de Plugins
Determinar as informaes do plugin. Exemplos:
_spring_plugin_info.plugin_name_ = tr("Criao de Banco de

Dados");

_spring_plugin_info.plugin_vendor_ = "Raphael Meloni";


Incluso da macro Q_EXPORT_PLUGIN2, requisitada pelo Qt. Exemplo:
Q_EXPORT_PLUGIN2(databasewizardplugin, DatabaseWizardPlugin)
Implementao do polimorfismo do mtodo ExecuteSpringPlugin. A
implementao do mtodo ExecuteSpringPlugin abre uma janela em forma de assistente, para a
criao de bancos de dados. Os arquivos, que compem esse plugins, utilizam a camada de
parmetros e a biblioteca do SPRING com o objetivo de criar o Banco de Dados, criar o Projeto
(opcional) e ativar o banco de dados criado (opcional). Exemplos:
No

src/pluginspr/databasewizard:

arquivo

databasewizardpages.cpp

do

diretrio

QString springdb = springparameters->getSPRINGDBPtr();


QFileDialog*

fileDialog

springparameters-

>getQFileDialogPtr();
No

src/pluginspr/databasewizard:

arquivo

databasewizarddlg.cpp

pluginParameters->activatedDatabase

do
(

diretrio

databaseName

databaseDir );

spring@dpi.inpe.br

13

Compilando e Executando um Plugin

Compilando e Executando um Plugin


Neste mdulo apresentaremos como compilar, instalar e executar um plugin no

software SPRING. Nos passos a seguir, tomaremos como base o exemplo do plugin Hello SPRING.
Para distribuir seu plugin, apenas disponibilize a dll gerada.

Abra um Prompt de Comando(Windows) ou Terminal(Linux) que contenha as


informaes do compilador e do Qt (Ex: Qt <verso> Command Prompt)

Windows

Entre no diretrio do plugin Hello SPRING em que o SPRING Cdigo Aberto foi
instalado

Crie o projeto do Visual Studio

qmake -tp vc hellospringplugin.pro

Abra no Visual Studio o arquivo gerado (hellospringplugin.vcproj)

cd <spring_codigo_aberto>\projetos\hellospringplugin

devenv hellospringplugin.vcproj

Compile a verso Release do Plugin

Arquivo

de

plugin

gerado

<spring_codigo_aberto>\[distribuicao|

distribuicaox64]\sprplugins\hellospringplugin.dll

Linux

Entre no diretrio do plugin Hello SPRING em que o SPRING Cdigo Aberto foi
instalado

Makefile

cd <spring_codigo_aberto>/projetos/hellospringplugin

qmake hellospringplugin.pro

Compile a verso Release do Plugin

make Release

Arquivo

de

plugin

gerado

<spring_codigo_aberto>\[distribuicao|

distribuicaox64]\sprplugins\hellospringplugin.so

Use a ferramenta Instalar Plugins do SPRING, para adicionar o seu plugin ao SPRING,
caso o plugin possua alguma incompatibilidade a mesma ser apresentada

SPRING

Plugins Instalar Plugins...

Execute o Plugin no SPRING

spring@dpi.inpe.br

SPRING

Plugins <Nome do Plugin>


14

Integrao do Plugin com o SPRING Cdigo Livre

Integrao do Plugin com o SPRING Cdigo Livre


Caso queira incluir o seu plugin a sua verso do SPRING adicione a gerao do seu
plugin na gerao do SPRING, para isso necessrio apenas uma

alterao na criao dos

arquivos de projeto (.vcproj e Makefile). Novamente tomaremos como exemplo o plugin Hello
SPRING.
Inclua no arquivo projetos.pro do diretrio projetos a compilao do plugin, para

isso adicione a linha SUBDIRS += hellospringplugin entre as linhas que contm o comentrio
#add plugins here.

Aps isso recrie os arquivos de projeto e compile o SPRING e o plugin. O plugin j ser

criado na pasta de plugins do SPRING, no sendo necessrio instalar o mesmo.

spring@dpi.inpe.br

15

S-ar putea să vă placă și