Beispiel #1
0
//-----------------------------------------------------------
void ListaOperacoes::refazerOperacao(void)
{
 if(refazerHabilitado())
 {
  Operacao *operacao=NULL;
  bool enc_ativo=false;
  Excecao erro;
  unsigned tam_enc=0, pos=0;

  //Calcula o tamanho do encademanto de operações atual
  if(!this->signalsBlocked())
   tam_enc=obterTamanhoEncadeamento();

  do
  {
   //Obtém elemento atual da lista de operações
   operacao=operacoes[idx_atual];

   /* Caso seja detectada que a operação é encadeada com outras
      e o flag de encadeamento ativo esteja desmarcado, marca o
      flag para dar início a executação de várias operações de uma
      só vez */
   if(!anular_enc && !enc_ativo &&
      operacao->tipo_enc!=Operacao::SEM_ENCADEAMENTO)
    enc_ativo=true;

   /* Caso o encadeamento esteja ativo e a operação atual não faça parte do
      encadeamento, aborta a execução da operação */
   else if(enc_ativo &&
           (operacao->tipo_enc==Operacao::ENC_INICIO ||
            operacao->tipo_enc==Operacao::SEM_ENCADEAMENTO))
    break;

   try
   {
    if(tam_enc > 0)
    {
     //Dispara um sinal com o progresso da operação encadeada
     pos++;
     emit s_operacaoExecutada((pos/static_cast<float>(tam_enc))*100,
                               trUtf8("Redoing operation on object:: %1 (%2)")
                                      .arg(operacao->obj_pool->obterNome())
                                      .arg(operacao->obj_pool->obterNomeTipoObjeto()),
                                       operacao->obj_pool->obterTipoObjeto());
    }

    //Executa a operação de refazer (segundo parametro = true)
    executarOperacao(operacao, true);
   }
   catch(Excecao &e)
   {
    erro=e;
   }
   idx_atual++;
  }
  /* Executa a operação enquanto a operação faça parte de encadeamento
     ou a opção de refazer esteja habilidata */
  while(!anular_enc && refazerHabilitado()  && operacao->tipo_enc!=Operacao::SEM_ENCADEAMENTO);

  if(erro.obterTipoErro()!=ERR_NULO)
   throw Excecao(erro.obterMensagemErro(), erro.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__);
 }
}
Beispiel #2
0
void CaixaMensagem::show(Excecao e, const QString &msg, unsigned tipo_ico)
{
 deque<Excecao> lista;
 deque<Excecao>::reverse_iterator itr,itr_end;
 QTreeWidgetItem *item=NULL,*item1=NULL,*item2=NULL;
 QLabel *label=NULL;
 int idx=0;
 Excecao *ex=NULL;
 QString str_aux, titulo;
 QFont fonte=this->font();

 exibir_exec_txt_tb->blockSignals(true);
 exibir_exec_txt_tb->setChecked(false);
 exibir_exec_txt_tb->blockSignals(false);

 //Armazena a exceção também em formato texto
 excecoes_txt->setPlainText(e.obterTextoExcecoes());

 //Obtém a lista de erros contida na exceção passada
 e.obterListaExcecoes(lista);

 /* Varre a lista de erros obtidas em ordem reversa mostrando
    de onde partiu cada em sua ordem correta */
 itr=lista.rbegin();
 itr_end=lista.rend();
 fonte.setPointSize(8);

 while(itr!=itr_end)
 {
  ex=&(*itr);

  /* Configura o item da lista responsável pela exibiação da função ou
     método onde foi gerado o erro */
  item=new QTreeWidgetItem;
  str_aux=QString("[%1] - %2")
          .arg(idx)
          .arg(ex->obterLocal());
  item->setIcon(0,QPixmap(QString(":/icones/icones/funcao.png")));
  excecoes_trw->insertTopLevelItem(0,item);
  label=new QLabel;
  label->setFont(fonte);
  label->setWordWrap(true);
  label->setText(str_aux);
  excecoes_trw->setItemWidget(item, 0, label);

  /* Configura o item da lista responsável pela exibição do nome de arquivo
     onde foi gerado o erro */
  item1=new QTreeWidgetItem(item);
  item1->setIcon(0,QPixmap(QString(":/icones/icones/codigofonte.png")));
  item1->setText(0,ex->obterArquivo() + " (" + ex->obterLinha() + ")");

  //Configura o item o qual denota o código interno do erro
  item2=new QTreeWidgetItem(item);
  item2->setIcon(0,QPixmap(QString(":/icones/icones/msgbox_alerta.png")));
  item2->setText(0,Excecao::obterNomeErro(ex->obterTipoErro()) +
                   " (" + QString("%1").arg(ex->obterTipoErro()) + ")");

  //Configura o item da lista o qual exibe a mensagem de erro da exceção
  item1=new QTreeWidgetItem(item);
  item1->setIcon(0,QPixmap(":/icones/icones/msgbox_erro.png"));
  label=new QLabel;
  label->setWordWrap(true);
  label->setFont(fonte);
  label->setStyleSheet("color: #ff0000;");
  excecoes_trw->setItemWidget(item1, 0, label);
  label->setText(ex->obterMensagemErro());

  if(!ex->obterInfoAdicional().isEmpty())
  {
   //Configura o item da lista o qual exibe a mensagem de erro da exceção
   item1=new QTreeWidgetItem(item);
   item1->setIcon(0,QPixmap(QString(":/icones/icones/msgbox_info.png")));
   label=new QLabel;
   label->setWordWrap(true);
   label->setFont(fonte);
   label->setStyleSheet("color: #000080;");
   excecoes_trw->setItemWidget(item1, 0, label);
   label->setText(ex->obterInfoAdicional());
  }

  itr++;
  idx++;
 }

 switch(tipo_ico)
 {
  case ICONE_ERRO:
   titulo=trUtf8("Error");
  break;

  case ICONE_ALERTA:
   titulo=trUtf8("Alert");
  break;

  case ICONE_INFO:
   titulo=trUtf8("Information");
  break;

  default:
   titulo="";
  break;
 }

 /* Configura a caixa de mensagem com apenas o botão OK e com o ícone
    de erro crítico */
 if(msg.isEmpty())
  str_aux=e.obterMensagemErro();
 else
  str_aux=msg;

 this->show(titulo,str_aux,tipo_ico,BOTAO_OK);
}
Beispiel #3
0
//-----------------------------------------------------------
void ListaOperacoes::desfazerOperacao(void)
{
 if(desfazerHabilitado())
 {
  Operacao *operacao=NULL;
  bool enc_ativo=false;
  Excecao erro;
  unsigned tam_enc=0, pos=0;

  if(!this->signalsBlocked())
   tam_enc=obterTamanhoEncadeamento();

  do
  {
   /* Na operação de desfazer, é necessário obter o objeto
      no índice atual decrementado em 1 pois o índice atual sempre
      aponta para o elemento posterior ao último elemento */
   operacao=operacoes[idx_atual-1];

   /* Caso seja detectada que a operação é encadeada com outras
      e o flag de encadeamento ativo esteja desmarcado, marca o
      flag para dar início a executação de várias operações de uma
      só vez */
   if(!anular_enc && !enc_ativo &&
       operacao->tipo_enc!=Operacao::SEM_ENCADEAMENTO)
     enc_ativo=true;

   /* Caso o encadeamento esteja ativo e a operação atual não faça parte do
      encadeamento, aborta a execução da operação */
   else if(enc_ativo &&
           (operacao->tipo_enc==Operacao::ENC_FINAL ||
            operacao->tipo_enc==Operacao::SEM_ENCADEAMENTO))
    break;

   try
   {
    if(!this->signalsBlocked() && tam_enc > 0)
    {
     //Dispara um sinal com o progresso da operação encadeada
     pos++;
     emit s_operacaoExecutada((pos/static_cast<float>(tam_enc))*100,
                               trUtf8("Undoing operation on object: %1 (%2)")
                                      .arg(operacao->obj_pool->obterNome())
                                      .arg(operacao->obj_pool->obterNomeTipoObjeto()),
                                       operacao->obj_pool->obterTipoObjeto());
    }

    //Executa a operação de desfazer
    executarOperacao(operacao, false);
   }
   catch(Excecao &e)
   {
    erro=e;
   }

   idx_atual--;
  }
  /* Executa a operação enquanto a operação faça parte de encadeamento
     ou a opção de desfazer esteja habilidata */
  while(!anular_enc && desfazerHabilitado() && operacao->tipo_enc!=Operacao::SEM_ENCADEAMENTO);

  if(erro.obterTipoErro()!=ERR_NULO)
   throw Excecao(erro.obterMensagemErro(), erro.obterTipoErro(),__PRETTY_FUNCTION__,__FILE__,__LINE__);
 }
}