Конференция "Прочее" » Своя реализация Undo/Redo в текстовом редакторе
 
  • aka © (05.01.18 22:08) [0]
    У меня получилось реализовать на двух стеках
     TActionType = (actInsert, actDelete);
     TActionRecord = record
       ActType: TActionType; {вставили или удалили}
       BeginPos: TPoint; {начало блока текста}
       EndPos: TPoint; {конец блока текста}
       Text: String; {сам текст}
     end;

      FUndoStack: array of TActionRecord;
      FRedoStack: array of TActionRecord;



    Если баловаться большими блоками текста, то сильно жрет память, даже если ограничить глубину стека, то все равно блоком может быть весь текст документа и парочка таких блоков это уже много.

    Интересуют другие реализации сего дела. Появилась идея хранить первоначальную полную копию исходного документа а в стеках хранить только позиции блоков.
    Но возможна ли такая реализация, это еще нужно пораскинуть мозгом.

    Вы что думаете?
  • DayGaykin © (05.01.18 22:29) [1]
    Пусть жрет. Забей
  • ухты © (06.01.18 02:43) [2]
    в файле хранить
  • kilkennycat © (06.01.18 02:49) [3]

    > Появилась идея хранить первоначальную полную копию исходного
    > документа

    а потом ее полностью удалили, заменили на новую, и так 200 раз...

    я за [1] и [2]

    а вообще в интернете есть много умных статей по андо-редо. даж читал. после прочтения просто отказался от ентого в своем проекте :)
  • Eraser © (06.01.18 04:43) [4]

    > aka ©   (05.01.18 22:08) 


    > то сильно жрет память

    зипуй, будет жрать раз в 8 меньше памяти.
  • Игорь Шевченко © (06.01.18 10:47) [5]
    В стеке имеет смысл хранить не исходный материал, а действия над ним, и, соответственно, действия, обратные произведенным.
    Например, чтобы отменить команду вставки единственного символа в терабайтный текстовый файл достаточно хранить команду удаления этого символа и позицию.
  • aka © (07.01.18 00:12) [6]
    А пусть пока жрет, работает же.
 
Конференция "Прочее" » Своя реализация Undo/Redo в текстовом редакторе
Есть новые Нет новых   [134430   +2][b:0][p:0.001]