Qt → Widgets → Plugin Builder

O Plugin Builder é um componente para auxílio à criação de novos plugins baseados na TerraLib. Ele gera automaticamente o esqueleto de código necessário ao desenvolvimento do plugin. Os seguintes arquivos são gerados por ele:

  • Arquivos de código fonte:
    • Config.h: com a definição da macro de exportação, configurações de tradução e demais detalhes comuns.
    • Plugin.h e Plugin.cpp: contendo a classe base do plugin, derivada de te::plugin::Plugin, já com os métodos startup() e shutdown() implementados.
  • Arquivos de projeto:
    • CMakeLists.txt: arquivo CMake para criação do projeto de build do plugin. Este arquivo já referencia os arquivos de código fnte do plugin e também contém as diretivas de inclusão e link-edição com os módulos da TerraLib.
    • plugin_info.xml.in: arquivo de descrição do plugin, necessário para geração o arquivo XML utilizado para a carga do plugin no TerraView.

Projeto

Para auxiliar na criação dos arquivos do plugin foram criadas duas novas classes no modulo te::qt::widgets na pasta plugin/builder:

  • PluginSourceWriter: responsável pela criação dos arquivos de código fonte.
  • PluginCMakeWriter: responsável pela criação dos arquivos de configuração e projeto.

O componente para criação de plugins é um assistente (wizard) cuja implementação enconra-se na classe PluginBuilderWizard. Este assistente permite ao usuário informar passo a passo os parâmetros necessários para a criação do plugin. As figuras a seguir apresentam os formulários deste assistente.

Passo 1: Definição dos parâmetros gerais do plugin (todos os campos são obrigatórios).


Passo 2: Escolha e definição dos parâmetros específicos a cada linguagem (atualmente suporte apenas para a linguagem C++).


Passo 3: Definição da licença e informações sobre o autor do plugin.


Passo 4: Utilizado para informar se o plugin a ser criado possui dependência com outro plugin já existente.


Passo 5: Caso o plugin tenha dependência com uma categoria de plugins a definição é feita nesta tela.


Passo 6: Utilizado para informar quais os módulos da terralib o plugin terá dependência (te.plugin e te.common já são pré-selecionados).


Passo 7: Informe caso o plugin necessite de algum recurso extra para sua carga (informação de biblioteca compartilhada também já vem pré definida).


Passo 8: Informações referentes a alguma configuração padrão do plugin a ser definida no momento de sua carga.


Passo 9: Para que os arquivos de codigo fonte e configuração possam ser criados corretamente é necessario informar a localização da TerraLib e o local de saida dos arquivos gerados pelo plugin builder.


Exemplo de Uso

Utilização das classes para gerar um plugin automaticamente.

#include "PluginCMakeWriter.h"
#include "PluginSourceWriter.h"
 
...
 
te::plugin::PluginInfo pi;
te::plugin::Provider p;
...
 
std::string teIncludeDir =...;
std::string teCmakeDir = ...;
std::string pluginSrcDir = ...;
std::string pluginBuildDir = ...;
std::string nameSpace = ""; 
std::string macroExport = ""; 
 
...
//create cmake files
te::qt::widgets::PluginCMakeWriter cmakeWriter;
cmakeWriter.createCmakeFile(pluginBuildDir, pluginSrcDir, pi.m_name, macroExport, teCmakeDir, pi);
 
cmakeWriter.createPluginInfoFile(pluginBuildDir, pi, p);
 
//create source files
te::qt::widgets::PluginSourceWriter sourceWriter;
sourceWriter.createHeaderFile(pluginSrcDir, nameSpace);
 
sourceWriter.createCppFile(pluginSrcDir, nameSpace, pi.m_name);
 
sourceWriter.createConfigFile(pluginSrcDir, nameSpace, macroExport, pi.m_name);

Outro modo é utilizar este componente.

#include <terralib/qt/widgets/plugin/builder/PluginBuilderWizard.h>
...
 
te::qt::widgets::PluginBuilderWizard dlg();
 
dlg.exec();

Component Summary



Final Remarks

  • Atualmente o componente esta gerando apenas plugins para a Linguagem C++.
  • CORRIGIR a variavel TERRALIB_SCHEME_LOCATION no arquivo XML.

References

Para maiores infomações sobre o suporte a plugins na TerraLib acesse a página do módulo de plugins.


QR Code
QR Code wiki:designimplementation:qt:widgets:pluginbuilder (generated for current page)