Estou implementando um aplicativo Java que inclui uma pilha de Desfazer / Refazer. Percebi que alguns aplicativos (como o TextEdit no Mac OS X) permitem escolher "Desfazer digitação" no menu Editar depois de digitar algum texto. Gostaria de implementar esse tipo de coisa também no meu aplicativo, mas estou tendo muita dificuldade em encontrar diretrizes sobre como ele deve se comportar.
Com algumas tentativas e erros, meu melhor palpite sobre como se comporta o Undo Typing do TextEdit é:
- Quando o usuário digitar um novo caractere (ou digitar a chave de exclusão), mescle-o no item de Anulação de digitação anterior, se houver um na parte superior da pilha de Anulação, a menos que ocorra uma das seguintes situações
- Sempre crie um novo item de Desfazer digitação depois que o usuário continuar digitando após pelo menos 15 segundos de inatividade
- Sempre crie um novo item de Desfazer digitação depois que o usuário estiver digitando por um longo período de tempo e alguma condição for atendida (não foi possível descobrir se isso foi baseado no tempo ou na contagem de caracteres).
- Sempre crie um novo item de Desfazer digitação quando qualquer texto for selecionado e, em seguida, excluído ou sobrescrito (selecionar texto, não fazer alterações, retornar ao ponto de inserção original e continuar digitando não dispara isso)
Na prática, a estratégia da Apple parece funcionar (pelo menos funciona para mim quando digito), mas, como observado no último ponto, não consegui realmente descobrir as regras. Além disso, parece que outros programas seguem regras diferentes, como o Microsoft Word. O Google não criou uma lista definida de regras para nenhuma implementação de Undo Typing e não encontrei nenhuma prática recomendada sobre como ele deve se comportar. Então, como deve se comportar? Ou depende apenas dos caprichos do programador?
EDIT: Apenas para esclarecer, não estou interessado nos detalhes da implementação no momento. Estou especialmente curioso para saber se existe ou não uma referência autorizada (por exemplo, práticas recomendadas ou documento de interface do usuário) descrevendo isso ou uma descrição de como ela é implementada em vários produtos.
124<delete>3
, desfazer e refazê-lo resulta em 123
. Eu acho que a vantagem disso é que resulta no estado final do texto do usuário, um pouco como a sugestão acima.