//-----------------------------------------------------------
void ListaOperacoesWidget::atualizarModeloObjetos(void)
{
 //Atualiza a lista de operações
 atualizarListaOperacoes();

 //Atualiza a visão geral do modelo
 modelo_wgt->visaogeral_wgt->atualizarVisaoGeral();

 /* Emite um sinal indicando que o modelo foi atualizado devido a
    operação na lista de objetos */
 emit s_operacaoExecutada();
}
示例#2
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__);
 }
}
示例#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__);
 }
}