Gerenciamento de Desfazer

Ao trabalhar com um diagrama, é possível desfazer e refazer ações. Estas operações estão disponíveis no DiagramEditor. Elas não suportam apenas todas as mudanças padrão que podem ser aplicadas através dos recursos de edição, também suportam qualquer mudança de propriedade básica aplicada programaticamente com o registro de objeto de desfazer correspondente. Mudanças mais complexas também podem ser suportadas por meio de operações customizadas.

UndoManager

Este objeto está disponível por meio do método getUndoManager e gerencia as pilhas de ações que podem ser desfeitas e refeitas. Este componente não apenas fornece uma lista básica de métodos para gerenciar estas pilhas, mas também mantém um dicionário completo de GraphElements por seus IDs e suas substituições quando necessário (durante remoções em desfazer e refazer consecutivo). O undo manager possui estes métodos:
  • getDiagram: obtém o diagrama.
  • addAction: inclui uma ação na pilha de ações desfazer (limpando a pilha refazer).
  • undoAction: desempilha uma ação da pilha desfazer, aplicando a operação desfazer e incluindo-a na pilha refazer.
  • redoAction: desempilha uma ação da pilha refazer e aplica a operação refazer.
  • getUndoStack: obtém uma cópia da pilha de ações desfazer.
  • getRedoStack: obtém uma cópia da pilha de ações refazer.
  • setMaximumStackSize: configura o tamanho máximo de pilha. Se nulo, o tamanho será ilimitado.
  • getMaximumStackSize: obtém o tamanho máximo da pilha.
  • getRegisteredGfx: obtém o GFX registrado correspondente ao ID especificado. Procura a substituição, se necessário.
  • registerGfxReplacement: registra quando um ID GFX é substituído por outro (quando um GFX é removido e é criada uma substituição, com um novo ID)
  • getRegisteredGfxReplacement: obtém a substituição registrada para o ID GFX especificado. Procura recursivamente para localizar a última substituição. Se nenhuma substituição for registrada, o ID GFX especificado será retornado.
  • getRegisteredParent: retorna o pai do gráfico para o ID especificado. Se o ID corresponder a um subgráfico, o gráfico interno será retornado.

Ação Desfazer

A classe Action é a classe básica que contém a operação desfazer. Ela fornece a interface básica para qualquer ação desfazer e possui os seguintes métodos:
  • undo: aplica a função desfazer.
  • redo: aplica a função refazer.
  • getLabel: obtém o rótulo da ação para impressão da interface com o usuário.
  • getUndoManager: obtém o undoManager que é automaticamente ativado quando incluído na pilha de desfazer.
  • isUndoing: retorna true se o método desfazer estiver em execução.
  • isRedoing: retorna true se o método refazer estiver em execução.
As seguintes classes do subconjunto herdam do Action e são úteis para customizações ou criação de novas ações.

SimpleAction

A classe SimpleAction serve para ações desfazer simples. Ela é usada para propriedades básicas desfazer e refazer, que podem ser alteradas designando variáveis ou chamando um método com um argumento simples. Use a classe SimpleAction para desfazer ações de edição customizadas. A ação desfazer movimentação usa esta classe para as ações desfazer e refazer movimentação por meio dos seguintes métodos:
  • setOldValue: configura o valor antigo.
  • setNewValue: configura o valor novo.
  • getOldValue: obtém o valor antigo, clonando o valor configurado, se a função de clonagem tiver sido configurada anteriormente.
  • getNewValue: obtém o valor novo, clonando o valor configurado, se a função de clonagem tiver sido configurada anteriormente.
  • setModifiedElementId: configura o objeto modificado.
  • getModifiedElementId: obtém o link modificado.
  • getModifiedElement: obtém o elemento GFX modificado, ou suas substituições, se necessário.
  • setMethodOrProperty: configura o nome da propriedade ou do método a ser modificado.
  • setCloneFunction: configura a função de clonagem para clonar o valor antes da ação de mudança.

MultipleAction

A classe MultipleAction agrupa uma lista de UndoActions. Ela agrupa um conjunto de Actions em um único conjunto complexo e executa cada ação incluída em ordem sequencial durante as operações refazer e desfazer.

ReparentingAction

A classe ReparentingAction permite desfazer e refazer qualquer ação de nova designação de pai. Use-a juntamente com MultipleAction para criar qualquer ação desfazer ou refazer que envolva uma nova designação de pai.

UserCustomizedAction

A classe UserCustomizedAction é a classe base para todas as ações que não acompanham o DiagramEditor. No entanto, ela precisa ser customizada para obter seu comportamento esperado completo. É possível estendê-la usando DropAction, ConnectAction e ReConnectAction.