Отменить изменения текста на полях в Scintilla

Я пишу текстовый редактор со Scintilla (на самом деле ScintillaNET, но информация о vanilla Scintilla также может быть полезна). В этом редакторе мы хотим отображать информацию об изменениях на полях (например, если я изменяю строку текста, в этой строке будет отображаться мое имя на полях). Мне удалось изменить маржу при изменении строки, но я не могу найти хороший способ отменить изменение маржи, если кто-то отменит свое изменение.

Я пытался вызвать BeginUndoAction в событии BeforeTextInsert и EndUndoAction в конце события TextInserted, но это, похоже, не рассматривает изменения полей как невыполнимые. Есть ли достойный способ отменить изменения полей? Я думаю, что мне, возможно, придется реализовать свой собственный стек отмены с небольшим полем (или изменить стек отмены Scintilla) и просто обрабатывать его таким образом, но если есть что-то встроенное, я бы предпочел это.


person ctoneal    schedule 08.11.2010    source источник


Ответы (1)


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

Кажется, работает нормально, хотя это немного уродливее, чем хотелось бы. Я беспокоюсь о том, что стек каким-то образом не синхронизируется со стеком отмены Scintilla, но на самом деле я не хочу изменять исходный код Scintilla.

person ctoneal    schedule 11.11.2010