Реакция на щелчки и контекстное меню
Как обработать щелчок по листу, выделение и своё контекстное меню.
За смысл книги отвечает контракт операций, за события указателя — ваш интерфейс. Эти обязанности нужно держать раздельно:
| Событие или задача | Кто отвечает | Что передавать |
|---|---|---|
| Щелчок и двойной щелчок | Ваш интерфейс | Координату, во что попали, текущее выделение |
| Контекстное меню | Ваш интерфейс | Тип объекта и разрешённые для него команды |
| Значение или формула ячейки | Ядро | sheetKey, row, col, inputKind, input |
| Отмена и повтор | Ядро | subsetId и направление |
| Сохранение | Ядро | subsetId и адрес назначения |
Что интерфейс передаёт вместе с щелчком
Заголовок раздела «Что интерфейс передаёт вместе с щелчком»{ "subsetId": "subset-...", "sheetKey": "xl/worksheets/sheet1.xml", "selection": { "top": 0, "left": 0, "rows": 1, "cols": 1 }, "hit": { "kind": "cell", "row": 0, "col": 0 }, "pointer": { "kind": "double-click", "button": 0 }}По такому объекту интерфейс решает, какое меню показать. Команда, меняющая книгу, затем превращается в строго типизированный запрос к ядру. Не отправляйте в ядро узлы разметки или куски HTML: оно работает с адресами ячеек и типами значений, а не с тем, что нарисовано на экране.