Отменить изменения текста полей в Scintilla - PullRequest
0 голосов
/ 08 ноября 2010

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

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

1 Ответ

0 голосов
/ 11 ноября 2010

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

...