Jemný úvod do Undo

Title Jemný úvod do Undo
Author Richard Michalský
Date 23.11.1998
Reference kralik@mail.kolej.mff.cuni.cz
File docs/undo-uvod.html
Project KTTV

Tento dokument se pokouší rozebrat problematiku fce undo na úrovni dosažitelné v současném stavu věci. Současně také navrhuje, aby podrobnější rozpracování bylo rozděleno na dvě (ev. tři) části pro text, slidy a příp. celý dokument (dá se přibrat k textové části).

Po fci undo (resp. undo/redo) požadujeme možnost vícenásobného odvolávání provedených změn a jejich případného opakování (znovuprovedení?!). Změny se budou ukládat pouze v rámci jedné "session" (jak je to česky, dammit?) pro každou otevřenou prezentaci zvlášť (nemusím si pamatovat, co mám ještě otevřené, při zavření jedné prezentace její zásobník zruším). Jak jsem právě uvedl, záznamy prováděných operací (resp. operací k nim inverzních) se budou ukládat do zásobníku, z nějž budou při volání undo postupně vybírány. Záznam bude obsahovat operaci a pozici, resp. výběr (seznam) objektů, kterých se týká, u operací při nichž se ztrácí nějaká informace (mazání, změna formátu) se bude ještě tato informace (odstraňené objekty, údaje o původním formátu) ukládat do k tomu určeného seznamu (emacs mu říká "kill ring", a já se budu tohoto označení držet, přestože se v našem případě nejedná o žádný "ring" - eventuálně jsem ochten vyjednávat o "kill listu"). Při provádění undo se současně budou inverzní operace ukládat do zásobníku a kill ringu pro redo, ale pouze krátkodobě - pokud po undo nepřijde ihned žádost o redo, jeho zásobník i kill ring se zruší. Prováděné (a k nim inverzní) operace mohou být:

Zdá se, že na podrobnější úrovni rozpracování se implementace pro slidy a text rozchází a doporučuji je řešit odděleně s tím, že někdy v průběhu (nebo na konci) řešení se unifikují některé datové struktury, aby mohl být pro obě jeden zásobník a jeden kill ring (jeden ovčinec a jeden pastýř). Asi nejzásadnější problém se v této fázi jeví ukazatele na objekty. Je třeba se rozhodnout u slidů mezi identifikátory objektů a standartními céčkovskými ukazateli, u textu podobně mezi ukazateli pozičními a standartními. U textu navíc ještě není zdaleka jasno v datových strukturách editoru.