Рейтинг@Mail.ru
[Войти] [Зарегистрироваться]

Наши друзья и партнеры

UnixForum
Беспроводные выключатели nooLite купить дешевый 
компьютер родом из Dhgate.com

Lines Club

Ищем достойных соперников.

Библиотека сайта или "Мой Linux Documentation Project"

Электронные таблицы SocialCalc

Глава 19 из книги "Архитектура приложений с открытым исходным кодом", том 1.

Оригинал: SocialCalc, глава из книги "The Architecture of Open Source Applications" том 1.
Автор: Audrey Tang, перевод: Н.Ромоданов

19.4. Редактор таблиц

Теперь давайте посмотрим на слой TableEditor. Он с помощью своего метода RenderContext рассчитывает экранные координаты и с помощью двух экземпляров метода TableControl управляет горизонтальной/вертикальной прокруткой.

Управление прокруткой с помощью экземпляров метода TableControl

Слой отображения, обрабатываемый классом RenderContext, также отличается от конструкции WikiCalc. Вместо отображения каждой ячейки в элемент <td>, мы теперь просто создаем элемент <table> фиксированного размер, который соответствует видимой области браузера и заранее заполняем ее элементами <td>.

Когда пользователь выполняет прокрутку с помощью наших полос прокрутки, мы динамически обновляем innerHTML предварительного нарисованными элементами <td>. Это означает, что нам не нужно в большинство случаев создавать или уничтожать какие-либо элементы <tr> и <td>, что существенно ускоряет время отклика.

Поскольку RenderContext отрисовывает только видимую область, размер объекта Sheet (Лист) может быть сколь угодно большой, что не влияет на производительность.

В TableEditor также есть объект CellHandles, в котором реализовано круговое меню fill/move/slide (заполнение/перемещение/сдвиг), прикрепленное к правому нижнему углу ячейки, редактируемой в текущий момент, которая известна как Ecell и которая показана на рис.19.9.

Рис.19.9: Ячейка, редактируемая в текущий момент и называющаяся Ecell

Управление полем ввода осуществляется двумя классами: InputBox и InputEcho. Первый из них управляет строкой редактирования, расположенной над сеткой, а второй, который показан как слой просмотра, обновляемый по мере того, как вы вводите текст, выполняет наложение содержимого ECell (рис.19.10).

Рис.19.10: Поле ввода, управляемое двумя классами

Обычно движок SocialCalc нужен только для связи с сервером в случае, когда электронная таблица открывается для редактирования и когда отправляет сохраняемые данные на сервер. Для этой цели используется метод Sheet.ParseSheetSave, который анализирует формат save, используемый для сохранения данных, и преобразует данные в объект Sheet, и метод Sheet.CreateSheetSave, сериализующий объект Sheet обратно в формат save.

В формулах можно с помощью адресов URL делать ссылки на значения в любой таблице, расположенной удаленно. Команда recalc пересчитывает электронные таблицы, в которых есть внешние ссылки, затем анализирует их с помощью метода Sheet.ParseSheetSave и сохраняет их в кэше, так что пользователь может делать ссылки на другие ячейки в той же самой таблице, расположенной удаленно, без повторного извлечения ее содержимого.


Далее: Формат сохранения save


Эта статья еще не оценивалась
Вы сможете оценить статью и оставить комментарий, если войдете или зарегистрируетесь.
Только зарегистрированные пользователи могут оценивать и комментировать статьи.

Комментарии отсутствуют