Sto implementando un'app Java che include uno stack Annulla / Ripristina. Ho notato che alcune app (come TextEdit su Mac OS X) ti permettono di scegliere "Annulla digitazione" dal menu Modifica dopo aver digitato del testo. Mi piacerebbe implementare questo genere di cose anche nella mia app, ma sto facendo davvero fatica a trovare le linee guida su come dovrebbe comportarsi.
Con alcune prove ed errori, la mia ipotesi migliore su come si comportano le operazioni di annullamento della scrittura di TextEdit è:
- Quando l'utente digita un nuovo carattere (o digita il tasto cancella), uniscilo nel precedente elemento Annullamento digitazione se uno è nella parte superiore dello stack Annulla, a meno che non si verifichi una delle seguenti situazioni
- Crea sempre un nuovo elemento Annulla digitazione dopo che l'utente continua a digitare dopo almeno 15 secondi di inattività
- Crea sempre un nuovo elemento di annullamento della digitazione dopo che l'utente sta digitando per un lungo periodo di tempo e alcune condizioni sono soddisfatte (non è stato possibile capire se questo era basato sul tempo o basato sui caratteri).
- Crea sempre una nuova voce Annulla digitazione quando un testo è selezionato e poi cancellato o sovrascritto (selezionando il testo, non apportando una modifica, quindi tornando al punto di inserimento originale e continuando a digitare non lo attiva)
In pratica, la strategia di Apple sembra funzionare (almeno funziona per me quando scrivo), ma come notato nell'ultimo punto, non sono stato in grado di capire le regole. Inoltre, sembra che altri programmi seguano regole diverse, come Microsoft Word. Google non ha presentato un elenco definito di regole per qualsiasi implementazione di Annulla digitazione e non ho trovato alcuna procedura ottimale su come dovrebbe comportarsi. Quindi come dovrebbe comportarsi? O è solo per i capricci del programmatore?
EDIT: giusto per chiarire, non sono interessato ai dettagli di implementazione in questo momento. Sono particolarmente curioso di sapere se esista o meno un riferimento autorevole (ad esempio, best practice o documento dell'interfaccia utente) che descrive questa o una descrizione di come è implementato su più prodotti.