Exemplo n.º 1
0
BancoDadosWidget::BancoDadosWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_BANCO_DADOS)
{
 map<QString, vector<QWidget *> > mapa_campos;
 QFrame *frame=NULL;
 QLocale loc;
 QStringList lista_loc, codificacoes;
 unsigned i,i1;

 Ui_BancoDadosWidget::setupUi(this);

 connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
 configurarLayouFormulario(bancodados_grid, OBJETO_BANCO_DADOS);

 //Define os campos exclusivos para cada versão
 mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_83)].push_back(limconexao_lbl);
 mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(lccollate_lbl);
 mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(lcctype_lbl);

 //Gera o frame de alerta
 frame=gerarFrameAlertaVersao(mapa_campos);
 bancodados_grid->addWidget(frame, bancodados_grid->count()+1, 0, 1, 0);
 frame->setParent(this);

 //Define as alturas mínimas e máxima do formulário
 janela_pai->setMinimumWidth(530);
 janela_pai->setMinimumHeight(420);
 janela_pai->setMaximumHeight(420);

 //Obtém os nomes das codificações e as insere no combo de codificação
 TipoCodificacao::obterTipos(codificacoes);
 codificacao_cmb->addItems(codificacoes);

 //Obtém todas as localizações padrão e as armazena em uma lista de QString
 for(i=QLocale::C; i <= QLocale::Chewa; i++)
 {
  for(i1=QLocale::Afghanistan; i1 <= QLocale::Zimbabwe; i1++)
  {
   loc=QLocale(static_cast<QLocale::Language>(i),static_cast<QLocale::Country>(i1));
   lista_loc.append(loc.name());
  }
 }

 //Remove as localizações duplicadas
 lista_loc.removeDuplicates();
 //Ordena as localizações
 lista_loc.sort();

 //Insere as localizações nos combos
 lccollate_cmb->addItem(trUtf8("Default"));
 lcctype_cmb->addItem(trUtf8("Default"));
 lccollate_cmb->addItems(lista_loc);
 lcctype_cmb->addItems(lista_loc);
}
Exemplo n.º 2
0
//***********************************************************
LinguagemWidget::LinguagemWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_LINGUAGEM)
{
 try
 {
  map<QString, vector<QWidget *> > mapa_campos;
  QFrame *frame=NULL;
  QString chave_ver;

  Ui_LinguagemWidget::setupUi(this);

  sel_func_handler=NULL;
  sel_func_validator=NULL;
  sel_func_inline=NULL;

  sel_func_handler=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);
  sel_func_validator=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);
  sel_func_inline=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);

  linguagem_grid->addWidget(sel_func_handler,1,1,1,2);
  linguagem_grid->addWidget(sel_func_validator,2,1,1,2);
  linguagem_grid->addWidget(sel_func_inline,3,1,1,2);

  configurarLayouFormulario(linguagem_grid, OBJETO_LINGUAGEM);

  //Gera o frame de informação
  frame=gerarFrameInformacao(trUtf8("The functions to be assigned to the language should have, respectively, the following signatures:<br/><br/>  <strong>Handler Function:</strong> <em>language_handler function()</em><br/>  <strong>Validator Function:</strong> <em>void function(oid)</em><br/>  <strong>Inline Function:</strong> <em>void function(internal)</em>"));
  linguagem_grid->addWidget(frame, linguagem_grid->count()+1, 0, 1, 0);
  frame->setParent(this);

  //Define os campos exclusivos para cada versão
  chave_ver=gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84);
  mapa_campos[chave_ver].push_back(func_inline_lbl);
  //Gera o frame de alerta
  frame=gerarFrameAlertaVersao(mapa_campos);
  linguagem_grid->addWidget(frame, linguagem_grid->count()+1, 0, 1, 0);
  frame->setParent(this);

  connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));

  janela_pai->setMinimumSize(550, 510);
  janela_pai->setMaximumSize(16777215, 510);
 }
 catch(Excecao &e)
 {
  //Redireciona o erro
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}
Exemplo n.º 3
0
//***********************************************************
SequenciaWidget::SequenciaWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_SEQUENCIA)
{
 try
 {
  map<QString, vector<QWidget *> > mapa_campos;
  QFrame *frame=NULL;

  Ui_SequenciaWidget::setupUi(this);
  sel_coluna=NULL;
  sel_coluna=new SeletorObjetoWidget(OBJETO_COLUNA, true, this);

  //Adicionando os objetos recém alocados no layout do formulário
  sequencia_grid->addWidget(sel_coluna,3,1,1,3);

  //Define os campos exclusivos para cada versão
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_83)].push_back(possuidora_lbl);

  //Gera o frame de alerta
  frame=gerarFrameAlertaVersao(mapa_campos);
  sequencia_grid->addWidget(frame, sequencia_grid->count()+1, 0, 1, 0);
  frame->setParent(this);

  configurarLayouFormulario(sequencia_grid, OBJETO_SEQUENCIA);

  connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));

  janela_pai->resize(540, 410);
  janela_pai->setMinimumWidth(540);
  janela_pai->setMinimumHeight(430);
  janela_pai->setMaximumHeight(430);
 }
 catch(Excecao &e)
 {
  //Redireciona o erro
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}
Exemplo n.º 4
0
//***********************************************************
GatilhoWidget::GatilhoWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_GATILHO)
{
 try
 {
  QStringList lista;
  map<QString, vector<QWidget *> > mapa_campos;
  map<QWidget *, vector<QString> > mapa_valores;
  QFrame *frame=NULL;

  Ui_GatilhoWidget::setupUi(this);

  //Cria um destacador de sintaxe no campo de expressão de checagem
  dest_exp_condicional=new DestaqueSintaxe(exp_condicional_txt, false);
  dest_exp_condicional->carregarConfiguracao(AtributosGlobais::DIR_CONFIGURACOES +
                                     AtributosGlobais::SEP_DIRETORIO +
                                     AtributosGlobais::CONF_DESTAQUE_SQL +
                                     AtributosGlobais::EXT_CONFIGURACAO);

  //Aloca as tabelas que recebem as colunas usadas na restrição
  tab_colunas=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES ^
                                    (TabelaObjetosWidget::BTN_EDITAR_ITEM |
                                     TabelaObjetosWidget::BTN_ATUALIZAR_ITEM), true, this);

  tab_argumentos=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES, true, this);

  //Alocando seletor de tabela referenciada
  sel_tabela_ref=new SeletorObjetoWidget(OBJETO_TABELA, true, this);
  sel_funcao=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);
  gatilho_grid->addWidget(sel_funcao, 5, 1, 1, 2);
  gatilho_grid->addWidget(sel_tabela_ref, 6, 1, 1, 2);

  //Configurando as tabelas com 2 colunas (nome da coluna e tipo)
  tab_colunas->definirNumColunas(2);
  tab_colunas->definirRotuloCabecalho(trUtf8("Coluna"), 0);
  tab_colunas->definirIconeCabecalho(QPixmap(":/icones/icones/column.png"),0);
  tab_colunas->definirRotuloCabecalho(trUtf8("Tipo"), 1);
  tab_colunas->definirIconeCabecalho(QPixmap(":/icones/icones/usertype.png"),1);

  dynamic_cast<QGridLayout *>(arg_cols_tbw->widget(0)->layout())->addWidget(tab_colunas, 1,0,1,3);
  dynamic_cast<QGridLayout *>(arg_cols_tbw->widget(1)->layout())->addWidget(tab_argumentos, 1,0,1,3);

  //Configurando o combo de tipo de postergação com os tipos disponíveis
  TipoPostergacao::obterTipos(lista);
  tipo_postergacao_cmb->addItems(lista);

  //Configurando o combo de tipo disparo  com os tipos disponíveis
  TipoDisparo::obterTipos(lista);
  tipo_disparo_cmb->addItems(lista);

  //Define os campos exclusivos para cada versão
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(truncate_chk);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_90)].push_back(exp_condicional_lbl);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_90)].push_back(coluna_lbl);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_91)].push_back(tipo_disparo_lbl);
  mapa_valores[tipo_disparo_lbl].push_back(tipo_disparo_cmb->itemText(tipo_disparo_cmb->count()-1));

  //Gera o frame de alerta
  frame=gerarFrameAlertaVersao(mapa_campos, &mapa_valores);
  gatilho_grid->addWidget(frame, gatilho_grid->count()+1, 0, 1, 0);
  frame->setParent(this);

  configurarLayouFormulario(gatilho_grid, OBJETO_GATILHO);
  janela_pai->setMinimumSize(600, 640);

  connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
  connect(postergavel_chk, SIGNAL(toggled(bool)), tipo_postergacao_cmb, SLOT(setEnabled(bool)));
  connect(postergavel_chk, SIGNAL(toggled(bool)), tipo_postergacao_lbl, SLOT(setEnabled(bool)));
  connect(tab_colunas, SIGNAL(s_linhaAdicionada(int)), this, SLOT(adicionarColuna(int)));
  connect(tab_colunas, SIGNAL(s_linhaRemovida(int)), this, SLOT(atualizarComboColunas(void)));
  connect(tab_colunas, SIGNAL(s_linhasRemovidas(void)), this, SLOT(atualizarComboColunas(void)));
  connect(tab_argumentos, SIGNAL(s_linhaAdicionada(int)), this, SLOT(manipularArgumento(int)));
  connect(tab_argumentos, SIGNAL(s_linhaAtualizada(int)), this, SLOT(manipularArgumento(int)));
  connect(tab_argumentos, SIGNAL(s_linhaEditada(int)), this, SLOT(editarArgumento(int)));
  connect(gat_rest_chk, SIGNAL(toggled(bool)), this, SLOT(definirGratilhoRestricao(bool)));
 }
 catch(Excecao &e)
 {
  //Redireciona o erro
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}
Exemplo n.º 5
0
//***********************************************************
TipoWidget::TipoWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_TIPO)
{
 try
 {
  QGridLayout *grid=NULL;
  QFrame *frame=NULL;
  QSpacerItem *spacer=NULL;
  map<QString, vector<QWidget *> > mapa_campos;
  QStringList lista;
  unsigned i;

  Ui_TipoWidget::setupUi(this);
  configurarLayouFormulario(tipo_grid, OBJETO_TIPO);

  //Aloca os widgets de configuração de tipos
  tipo_copia=NULL;
  tipo_copia=new TipoPgSQLWidget(this, trUtf8("Copy Type"));
  tipo_elemento=NULL;
  tipo_elemento=new TipoPgSQLWidget(this, trUtf8("Element Type"));

  //Cria um layout e insere os widgets de tipo
  grid=dynamic_cast<QGridLayout *>(atrib_base_twg->widget(0)->layout());
  spacer=new QSpacerItem(20, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
  grid->addWidget(tipo_copia,6,0,1,0);
  grid->addWidget(tipo_elemento,7,0,1,0);
  grid->addItem(spacer,8,0);

  //Aloca os seletores de funções e os insere do layout da aba de funções
  grid=dynamic_cast<QGridLayout *>(atrib_base_twg->widget(1)->layout());
  for(i=Tipo::FUNCAO_INPUT; i <= Tipo::FUNCAO_ANALYZE; i++)
  {
   sel_funcoes[i]=NULL;
   sel_funcoes[i]=new SeletorObjetoWidget(OBJETO_FUNCAO, true, this);
   grid->addWidget(sel_funcoes[i],i,1,1,1);
  }

  //Aloca a tabela de enumerações e a insere no layout do grupo de atributos de enumerações
  tab_enumeracoes=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES ^
                                         TabelaObjetosWidget::BTN_EDITAR_ITEM, false, this);
  grid=dynamic_cast<QGridLayout *>(enumeracoes_gb->layout());
  grid->addWidget(tab_enumeracoes,1,0,1,2);
  enumeracoes_gb->setVisible(false);

  //Aloca a tabela de atributos e a insere no layout do grupo de atributos de tipo composto
  tab_atributos=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES ^
                                       TabelaObjetosWidget::BTN_ATUALIZAR_ITEM, false, this);
  tab_atributos->definirNumColunas(2);
  tab_atributos->definirRotuloCabecalho(trUtf8("Name"),0);
  tab_atributos->definirIconeCabecalho(QPixmap(":/icones/icones/uid.png"),0);
  tab_atributos->definirRotuloCabecalho(trUtf8("Type"),1);
  tab_atributos->definirIconeCabecalho(QPixmap(":/icones/icones/usertype.png"),1);

  grid=new QGridLayout;
  grid->setContentsMargins(2,2,2,2);
  grid->addWidget(tab_atributos,0,0);
  atributos_gb->setLayout(grid);
  atributos_gb->setVisible(false);

  //Configura um alerta de versão com os campos específicos das versões
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_83)].push_back(enumeracao_rb);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(categoria_lbl);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(preferido_lbl);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(tipo_copia);
  frame=gerarFrameAlertaVersao(mapa_campos);
  tipo_grid->addWidget(frame, tipo_grid->count()+1, 0, 1, 0);
  frame->setParent(this);

  //Gera o frame de informação
  grid=dynamic_cast<QGridLayout *>(atrib_base_twg->widget(1)->layout());
  frame=gerarFrameInformacao(trUtf8("The functions to be assigned to a type should be written in C language and possess, respectively, the following signatures:<br/>  <table>   <tr>    <td><strong>INPUT:</strong> <em>any function(cstring, oid, integer)</em></td>    <td><strong>OUTPUT:</strong> <em>cstring function(any)</em></td>   </tr>   <tr>    <td><strong>SEND:</strong> <em>byta function(any)</em></td>    <td><strong>RECV:</strong> <em>any function(internal, oid, integer)</em></td>   </tr>   <tr>    <td><strong>TPMOD_IN:</strong> <em>integer function(cstring[])</em></td>    <td><strong>TPMOD_OUT:</strong> <em>cstring function(integer)</em></td>   </tr>   <tr>    <td><strong>ANALYZE:</strong> <em>boolean function(internal)</em></td>    <tr>  </table>"));
  grid->addWidget(frame, grid->count()+1, 0, 1, 0);
  frame->setParent(atrib_base_twg->widget(1));

  connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));
  connect(tipo_base_rb, SIGNAL(toggled(bool)), this, SLOT(selecionarConfiguracaoTipo(void)));
  connect(composto_rb, SIGNAL(toggled(bool)), this, SLOT(selecionarConfiguracaoTipo(void)));
  connect(enumeracao_rb, SIGNAL(toggled(bool)), this, SLOT(selecionarConfiguracaoTipo(void)));

  connect(tab_enumeracoes, SIGNAL(s_linhaAdicionada(int)), this, SLOT(manipularEnumeracao(int)));
  connect(tab_enumeracoes, SIGNAL(s_linhaAtualizada(int)), this, SLOT(manipularEnumeracao(int)));

  connect(tab_atributos, SIGNAL(s_linhaAdicionada(int)), this, SLOT(exibirFormAtributo(void)));
  connect(tab_atributos, SIGNAL(s_linhaEditada(int)), this, SLOT(exibirFormAtributo(void)));

  janela_pai->setMinimumSize(625, 765);

  //Preenche o combo box com os tipos de armazenamento disponíveis
  TipoArmazenamento::obterTipos(lista);
  armazenamento_cmb->addItems(lista);

  //Preenche o combo box com os tipos de categoria disponíveis
  TipoCategoria::obterTipos(lista);
  categoria_cmb->addItems(lista);
 }
 catch(Excecao &e)
 {
  //Redireciona o erro
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}
Exemplo n.º 6
0
//***********************************************************
FuncaoWidget::FuncaoWidget(QWidget *parent): ObjetoBaseWidget(parent, OBJETO_FUNCAO)
{
 try
 {
  QStringList tipos;
  QGridLayout *grid=NULL, *grid1=NULL;
  map<QString, vector<QWidget *> > mapa_campos;
  QFrame *frame=NULL;

  Ui_FuncaoWidget::setupUi(this);
  configurarLayouFormulario(funcao_grid, OBJETO_FUNCAO);

  connect(janela_pai->aplicar_ok_btn,SIGNAL(clicked(bool)), this, SLOT(aplicarConfiguracao(void)));

  //Aloca um destacador de código fonte para o campo de definição da função
  destaque_codigo=new DestaqueSintaxe(codigofonte_txt, true);

  //Aloca o widget de configuração de tipo de retorno simples
  tipo_ret=new TipoPgSQLWidget(this);

  /* Aloca a tabela que armazena as colunas da tabela de retorno.
     Esta tabela possui 2 colunas que são o Nome da coluna e o tipo de dado */
  tab_retorno=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES ^
                                     TabelaObjetosWidget::BTN_ATUALIZAR_ITEM, true, this);
  tab_retorno->definirNumColunas(2);
  tab_retorno->definirRotuloCabecalho(trUtf8("Coluna"), 0);
  tab_retorno->definirIconeCabecalho(QPixmap(":/icones/icones/column.png"),0);
  tab_retorno->definirRotuloCabecalho(trUtf8("Tipo"), 1);
  tab_retorno->definirIconeCabecalho(QPixmap(":/icones/icones/usertype.png"),1);

   /* Aloca a tabela que armazena os parâmetros da função.
     Esta tabela possui 4 colunas que são:
     Nome do parâmetro, tipo do parâmetro, comportamento do parâmetro (IN/OUT),
     valor padrâo do parâmetro */
  tab_parametros=new TabelaObjetosWidget(TabelaObjetosWidget::TODOS_BOTOES ^
                                        TabelaObjetosWidget::BTN_ATUALIZAR_ITEM, true, this);
  tab_parametros->definirNumColunas(4);
  tab_parametros->definirRotuloCabecalho(trUtf8("Nome"),0);
  tab_parametros->definirIconeCabecalho(QPixmap(":/icones/icones/parameter.png"),0);
  tab_parametros->definirRotuloCabecalho(trUtf8("Tipo"),1);
  tab_parametros->definirIconeCabecalho(QPixmap(":/icones/icones/usertype.png"),1);
  tab_parametros->definirRotuloCabecalho(trUtf8("IN/OUT"),2);
  tab_parametros->definirRotuloCabecalho(trUtf8("Valor Padrão"),3);

  grid=new QGridLayout;
  grid->addWidget(tab_parametros,0,0,1,1);
  grid->setContentsMargins(2,2,2,2);
  funcaowidget_twg->widget(1)->setLayout(grid);

  grid=dynamic_cast<QGridLayout *>(funcaowidget_twg->widget(0)->layout());
  grid->addWidget(tipo_ret, grid->count(), 0, 1, 4);
  grid->addWidget(tabela_ret_gb, grid->count()-1, 0, 1, 4);

  grid1=new QGridLayout;
  grid1->addWidget(tab_retorno, 0, 0, 1, 1);
  grid1->setContentsMargins(2,2,2,2);
  tabela_ret_gb->setLayout(grid1);
  tabela_ret_gb->setVisible(false);

  //Define os campos exclusivos para cada versão
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(tabela_rb);
  mapa_campos[gerarIntervaloVersoes(APOS_VERSAO, ParserEsquema::VERSAO_PGSQL_84)].push_back(func_janela_lbl);

  //Gera o frame de alerta
  frame=gerarFrameAlertaVersao(mapa_campos);
  grid->addWidget(frame, grid->count()+1, 0, 1, 0);
  frame->setParent(funcaowidget_twg->widget(0));

  janela_pai->setMinimumSize(645, 715);

  //Configura o combo de tipos de segurança da função
  TipoSeguranca::obterTipos(tipos);
  seguranca_cmb->addItems(tipos);

  //Configura o combo de tipo da função
  TipoFuncao::obterTipos(tipos);
  tipo_func_cmb->addItems(tipos);

  //Configura o combo de tipo de comportamento da função
  TipoComportamento::obterTipos(tipos);
  comportamento_cmb->addItems(tipos);

  connect(simples_rb, SIGNAL(clicked(bool)), this, SLOT(alternarTiposRetorno(void)));
  connect(conjunto_rb, SIGNAL(clicked(bool)), this, SLOT(alternarTiposRetorno(void)));
  connect(tabela_rb, SIGNAL(clicked(bool)), this, SLOT(alternarTiposRetorno(void)));
  connect(linguagem_cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(selecionarLinguagem(void)));

  connect(tab_parametros, SIGNAL(s_linhaAdicionada(int)), this, SLOT(exibirFormParametro()));
  connect(tab_parametros, SIGNAL(s_linhaEditada(int)), this, SLOT(exibirFormParametro()));
  connect(tab_retorno, SIGNAL(s_linhaAdicionada(int)), this, SLOT(exibirFormParametro()));
  connect(tab_retorno, SIGNAL(s_linhaEditada(int)), this, SLOT(exibirFormParametro()));
 }
 catch(Excecao &e)
 {
  //Redireciona o erro
  throw Excecao(e.obterMensagemErro(),e.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__, &e);
 }
}