//----------------------------------------------------------- void Tipo::adicionarAtributo(Parametro atrib) { //O atributo não pode ter o nome vazio nem tipo nulo if(atrib.obterNome()=="" || atrib.obterTipo()==TipoPgSQL::nulo) throw Excecao(ERR_PGMODELER_INSATRIBTIPOINV,__PRETTY_FUNCTION__,__FILE__,__LINE__); else if(TipoPgSQL::obterIndiceTipoUsuario(this->obterNome(true), this) == !atrib.obterTipo()) throw Excecao(Excecao::obterMensagemErro(ERR_PGMODELER_TIPOUSRAUTOREF).arg(this->obterNome(true)), ERR_PGMODELER_TIPOUSRAUTOREF,__PRETTY_FUNCTION__,__FILE__,__LINE__); //Verifica se o atributo com mesmo nome já não foi inserido no tipo else if(atributoExiste(atrib.obterNome())) throw Excecao(ERR_PGMODELER_INSATRIBTIPODUPLIC,__PRETTY_FUNCTION__,__FILE__,__LINE__); atributos.push_back(atrib); }
//---------------------------------------------------------- void TipoWidget::manipularAtributo(int res) { int lin; Parametro param; //Obtém a linha selecionada da tabela. lin=tab_atributos->obterLinhaSelecionada(); //Caso o usuário clique no botão 'aplicar' da janela de conf. de parâmetro if(res==QDialog::Accepted) { //Obtém o parâmetro configurado param=parametro_wgt->obterParametro(); //Insere-o na tabela de atributos tab_atributos->definirTextoCelula(QString::fromUtf8(param.obterNome()), lin, 0); tab_atributos->definirTextoCelula(QString::fromUtf8(*param.obterTipo()), lin, 1); tab_atributos->definirDadoLinha(QVariant::fromValue<Parametro>(param), lin); } //Caso o usuário clique no botão 'cancelar' da janela de conf. de parâmetro else if(res==QDialog::Rejected) { //Remove a última linha da tabela quando se tratar de adição de novo parâmetro if(tab_atributos->obterTextoCelula(lin,0).isEmpty()) tab_atributos->removerLinha(lin); } }
//---------------------------------------------------------- void FuncaoWidget::exibirDadosParametro(Parametro param, TabelaObjetosWidget *tab, unsigned idx_lin) { if(tab) { QString str_aux; /* Para as duas tabelas (tab_parametros ou tab_retorno) as duas primeiras colunas são destinadas, respectivamente, ao nome e tipo do parâmetro */ tab->definirTextoCelula(QString::fromUtf8(param.obterNome()),idx_lin,0); tab->definirTextoCelula(QString::fromUtf8(*param.obterTipo()),idx_lin,1); /* Armazena na linha da tabela uma cópia do tipo do parâmetro. Isso é usado pelo método obterParametro() quando o usuário solicita obter um parâmetro a partir de um a linha da tabela */ tab->definirDadoLinha(QVariant::fromValue<TipoPgSQL>(param.obterTipo()), idx_lin); /* Caso a tabela passada seja a de parâmetro configura as demais colunas com os demais atributos do parâmetro */ if(tab==tab_parametros) { //Exibe se o parâmetro é de entrada/saída if(param.parametroEntrada()) str_aux="IN"; if(param.parametroSaida()) str_aux+="OUT"; tab->definirTextoCelula(str_aux,idx_lin,2); //Exibe o valor padrão do parâmetro tab->definirTextoCelula(QString::fromUtf8(param.obterValorPadrao()),idx_lin,3); } } }
//----------------------------------------------------------- void Tipo::definirAtributoElementos(unsigned tipo_def) { Parametro param; QString str_elem; unsigned i, qtd; qtd=Tipo::atributos.size(); for(i=0; i < qtd; i++) { param=Tipo::atributos[i]; if(tipo_def==ParserEsquema::DEFINICAO_SQL) { str_elem+=param.obterNome() + " " + (*param.obterTipo()); if(i < (qtd-1)) str_elem+=","; } else { str_elem+=param.obterDefinicaoObjeto(tipo_def); } } ObjetoBase::atributos[AtributosParsers::ELEMENTOS]=str_elem; }
//---------------------------------------------------------- void TipoWidget::definirAtributos(ModeloBD *modelo, ListaOperacoes *lista_op, Tipo *tipo) { TipoPgSQL tp_copia, tp_elem; unsigned conf_tipo, i, qtd; Parametro param; //Conecta o método de manipulação de atributos ao formulário de parâmetros connect(parametro_wgt, SIGNAL(finished(int)), this, SLOT(manipularAtributo(int))); //Define os atributos do formulários e da janela pai ObjetoBaseWidget::definirAtributos(modelo, lista_op, tipo); //Define o modelo de dados de referência dos seletores de função for(i=Tipo::FUNCAO_INPUT; i <= Tipo::FUNCAO_ANALYZE; i++) sel_funcoes[i]->definirModelo(modelo); //Caso o tipo esteja especificado if(tipo) { //Obtém a configuração do mesmo conf_tipo=tipo->obterConfiguracao(); //Caso o tipo seja composto if(conf_tipo==Tipo::TIPO_COMPOSTO) { //Marca o radiobox no formulário que indica o tipo composto composto_rb->setChecked(true); /* Desabilita os sinais da tabela de atributos para inserção de todos os atributos do tipo sem disparar sinais e executar slots */ tab_atributos->blockSignals(true); //Obtém a quantidade de atributos do tipo qtd=tipo->obterNumAtributos(); /* Preenche a tabela de atributos, obtendo cada um e exibindo os dados na tabela */ for(i=0; i < qtd; i++) { //Adiciona uma linha na tabela tab_atributos->adicionarLinha(); //Obtém um atributo do tipo param=tipo->obterAtributo(i); //Exibe os dados do atributo na tabela tab_atributos->definirTextoCelula(QString::fromUtf8(param.obterNome()), i, 0); tab_atributos->definirTextoCelula(QString::fromUtf8(*param.obterTipo()), i, 1); //Armazena o próprio atributo na linha da tabela tab_atributos->definirDadoLinha(QVariant::fromValue<Parametro>(param), i); } //Desbloqueia os sinais da tabela de atributos tab_atributos->blockSignals(false); //Limpa a seleção da tabela tab_atributos->limparSelecao(); } //Caso o tipo seja enumeração else if(conf_tipo==Tipo::TIPO_ENUMERACAO) { //Marca o campo respectivo no formulário enumeracao_rb->setChecked(true); /* Desabilita os sinais da tabela de enumerações para inserção de todos as enumerações do tipo sem disparar sinais e executar slots */ tab_enumeracoes->blockSignals(true); qtd=tipo->obterNumEnumeracoes(); //Insere todos as enumerações do tipo na tabela for(i=0; i < qtd; i++) { tab_enumeracoes->adicionarLinha(); tab_enumeracoes->definirTextoCelula(tipo->obterEnumeracao(i), i, 0); } //Desbloqueia os sinais da tabela de enumerações tab_enumeracoes->blockSignals(false); tab_enumeracoes->limparSelecao(); } //Caso o tipo seja base else { //Marca o radiobox no formulário que indica o tipo base tipo_base_rb->setChecked(true); //Obtém o tipo cópia do tipo tp_copia=tipo->obterTipoCopia(); //Obtém o tipo de elemento do tipo tp_elem=tipo->obterElemento(); /* Configura os campos do formulário relacionados ao tipo base com os valores definidos na instância de tipo passada */ comp_int_sb->setValue(tipo->obterCompInterno()); por_valor_chk->setChecked(tipo->passadoPorValor()); preferido_chk->setChecked(tipo->tipoPreferido()); delimitador_edt->setText(QString(tipo->obterDelimitador())); valor_padrao_edt->setText(QString::fromUtf8(tipo->obterValorPadrao())); categoria_cmb->setCurrentIndex(categoria_cmb->findText(~tipo->obterCategoria())); armazenamento_cmb->setCurrentIndex(armazenamento_cmb->findText(~tipo->obterArmazenamento())); alinhamento_cmb->setCurrentIndex(alinhamento_cmb->findText(~tipo->obterAlinhamento())); //Atribui aos seletores de funções todas as funções configuradas na instância for(i=Tipo::FUNCAO_INPUT; i <= Tipo::FUNCAO_ANALYZE; i++) sel_funcoes[i]->definirObjeto(tipo->obterFuncao(i)); } } //Configura o widget de tipo de cópia com o tipo obtido da instância de tipo tipo_copia->definirAtributos(tp_copia, modelo); //Configura o widget de tipo de elemento com o tipo obtido da instância de tipo tipo_elemento->definirAtributos(tp_elem, modelo); }