Реализация обнаружения несохраненных изменений - PullRequest
1 голос
/ 06 октября 2011

Кажется, что три способа приблизиться к обнаружению несохраненных изменений в текстовом / графическом файле / файле данных:

  1. Обновлять логический флаг каждый раз, когда пользователь вносит изменения или сохраняет, что приведет к большому количеству ненужных обновлений.

  2. Сохраняйте кэшированную копию исходного файла и различайте их каждый раз при проверке операции сохранения.

  3. Сохраните стек всех прошлых операций и операций push / pop по мере необходимости, что приводит к значительному использованию дополнительной памяти.

В целом, как работают коммерческие приложенияопределить, существуют ли несохраненные изменения и каковы преимущества / недостатки каждого подхода?Я столкнулся с этой проблемой при написании пользовательского приложения, которое имеет специальное поведение при сохранении и хотел бы узнать, существует ли известная рекомендация.

Ответы [ 2 ]

2 голосов
/ 06 октября 2011

Пока вам нужна система отмены / возврата, вам нужен этот стек прошлых операций. Чтобы определить, в каком состоянии находится документ, элемент стека устанавливается в «сохраненное состояние». Текущий узел стека не тот элемент, документ изменен.

Вы можете увидеть пример этого в Qt QUndoStack (http://doc.qt.nokia.com/stable/qundostack.html) и его isClean() и setClean()

Для предложения 1 обновление логического значения не является чем-то проблематичным и занимает немного времени.

0 голосов
/ 06 октября 2011

Полагаю, это зависит от того, какие функции вам нужны, а также от размера / формата файлов.

Первый вариант самый простой, и он дает вам именно то, что вы хотите с минимальными накладными расходами.

Второй вариант имеет то преимущество, что вы можете обнаружить, когда изменения были отменены вручную, так что никаких реальных изменений в конце концов нет (хотя, вероятно, это происходит не слишком часто).С другой стороны, сделать различие намного дороже, просто чтобы проверить, было ли что-то изменено.Вы, вероятно, не хотите делать это каждый раз, когда пользователь нажимает клавишу.

Третий вариант дает возможность предоставить историю отмен.Вы можете ограничить количество элементов в этой истории, сгруппировав изменения, которые были сделаны последовательно (без перемещения курсора между ними), или что-то в этом роде.

...