コード例 #1
0
ファイル: funcaowidget.cpp プロジェクト: arleincho/pgmodeler
//----------------------------------------------------------
Parametro FuncaoWidget::obterParametro(TabelaObjetosWidget *tab, unsigned idx_lin)
{
 Parametro param;
 QString str_aux;

 if(tab)
 {
  try
  {
   /* Configura o nome do parâmetro com o texto da coluna de nome
      da linha especificada da tabela */
   param.definirNome(tab->obterTextoCelula(idx_lin,0));

   //Configura o tipo do parâmetro com o tipo armazenado na linha atual da tabela
   param.definirTipo(tab->obterDadoLinha(idx_lin).value<TipoPgSQL>());

   //Obtendo informações específicas quando se trata da tabela de parâmetros
   if(tab==tab_parametros)
   {
    //Marcando se o parâmetro é de entrada/saída de acordo com o texto da coluna da tabela
    str_aux=tab->obterTextoCelula(idx_lin, 2);
    param.definirEntrada(str_aux.contains("IN"));
    param.definirSaida(str_aux.contains("OUT"));

    //Configura o valor padrâo do parâmetro
    param.definirValorPadrao(tab->obterTextoCelula(idx_lin,3));
   }
  }
  catch(Excecao &e)
  {
   throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
  }
 }

 return(param);
}
コード例 #2
0
ファイル: funcaowidget.cpp プロジェクト: arleincho/pgmodeler
//----------------------------------------------------------
void FuncaoWidget::aplicarConfiguracao(void)
{
 try
 {
  Funcao *func=NULL;
  unsigned qtd, i;
  Parametro param;
  QString str_aux;

  //Inicia a configuração da função
  iniciarConfiguracao<Funcao>();

  //Faz a conversão do objeto editado (genérico) para o tipo função
  func=dynamic_cast<Funcao *>(this->objeto);

  //Atribui os valores básicos configurados no formulário para a função
  func->definirLinguagem(modelo->obterObjeto(linguagem_cmb->currentText(), OBJETO_LINGUAGEM));
  func->definirTipoFuncao(tipo_func_cmb->currentText());
  func->definirFuncaoJanela(func_janela_chk->isChecked());
  func->definirCustoExecucao(custo_exec_spb->value());
  func->definirQuantidadeLinhas(linhas_ret_sbp->value());
  func->definirTipoComportamento(comportamento_cmb->currentText());
  func->definirTipoSeguranca(seguranca_cmb->currentText());

  /* Remove todos os parâmetros da função para adicionar os que foram
     configurados no formulário */
  func->removerParametros();

  //Obtém a quantidade de parâmetros configurados no formulário
  qtd=tab_parametros->obterNumLinhas();

  for(i=0; i < qtd; i++)
  {
   /* Cria um parâmetro auxiliar e os configura de acordo com os valores
      do parâmetro atual (i) na tabela */
   param.definirNome(tab_parametros->obterTextoCelula(i,0));
   param.definirTipo(tab_parametros->obterDadoLinha(i).value<TipoPgSQL>());

   str_aux=tab_parametros->obterTextoCelula(i,2);
   param.definirEntrada(str_aux.indexOf("IN") >= 0);
   param.definirSaida(str_aux.indexOf("OUT") >= 0);

   param.definirValorPadrao(tab_parametros->obterTextoCelula(i,3));

   //Uma vez configurado esse parâmetro e inserido na função
   func->adicionarParametro(param);
  }


  /* Caso a linguagem selecionada no formulário for a C
     indica que a função está definida em uma biblioteca externa
     para tanto os valores dos campos biblioteca e simbolo
     serão atribuídos à função que está sendo configurada */
  if(linguagem_cmb->currentText()==~TipoLinguagem(TipoLinguagem::c))
  {
   func->definirBiblioteca(biblioteca_edt->text());
   func->definirSimbolo(simbolo_edt->text());
  }
  /* Caso a linguagem seja diferente de C atribui o código fonte
     definido no destacador de código do formulário */
  else
   func->definirCodigoFonte(codigofonte_txt->toPlainText());

  //Caso o tipo de retorno configurado no formulário seja simples ou conjunto
  if(simples_rb->isChecked() || conjunto_rb->isChecked())
  {
   /* Define o tipo de retorno da função obtendo o tipo definido no widget de
      configuração de tipos pgsql */
   func->definirTipoRetorno(tipo_ret->obterTipoPgSQL());

   /* Marca na função se a mesma retorna um conjunto de dados de acordo
      com o estado do radiobox 'conjunto_rb' */
   func->definirRetornaSetOf(conjunto_rb->isChecked());
  }
  //Caso a função retorna uma tabela, a mesma é atribuída à função
  else
  {
   func->removerTiposRetTabela();
   qtd=tab_retorno->obterNumLinhas();

   /* Adiciona uma coluna na tabela de retorno com os dados configurados na tabela
      respectiva do formulário */
   for(i=0; i<qtd; i++)
   {
    func->adicionarTipoRetTabela(tab_retorno->obterTextoCelula(i,0),
                                 tab_retorno->obterDadoLinha(i).value<TipoPgSQL>());
   }
  }

  //Finaliza a configuração da função
  ObjetoBaseWidget::aplicarConfiguracao();

  /* Executa a validação da função em relação aos objetos das classes
     ConversaoCodificacao, ConversaoTipo, ElemClasseOperadores, FuncaoAgregada,
     Gatilho, Linguagem, Operador, Tipo */
  validarFuncaoConfigurada();

  finalizarConfiguracao();
 }
 catch(Excecao &e)
 {
  /* Cancela a configuração o objeto removendo a ultima operação adicionada
     referente ao objeto editado/criado e desaloca o objeto
     caso o mesmo seja novo */
  cancelarConfiguracao();
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}