Опубликован: 10.12.2007 | Доступ: свободный | Студентов: 822 / 20 | Оценка: 5.00 / 5.00 | Длительность: 58:33:00
Лекция 8:

Навигация

8.1. Системы навигации

Платформа Mozilla содержит несколько частей, связывающих вместе существующие XUL-элементы навигации. Каждая из этих частей предоставляет основу для коммуникации между пользователем и платформой. Каждая часть - некая высокоуровневая модель, реализованная поверх инфраструктуры, описанной в "События" , "События".

8.1.1. Визуальная навигация и навигация по памяти

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

Визуальная навигация зависит от искусства графического дизайнера. Хорошо продуманное и спроектированное отображение упрощает поиск того, что нужно пользователю. Классический пример - визуально ориентированное приложение, вроде Adobe Photoshop. Хотя в нем и есть система меню, она вторична по отношению к навигации по палитрам и холсту с помощью указателя мыши. Пользователь Photoshop знает, что если щелкнуть по текущему выделению правой кнопкой мыши с выбранным инструментом Flood Fill, т.е. заливка (который находится здесь), выделенная часть окрасится в текущий фоновый цвет.

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

Навигация по памяти применяется, когда пользователь для завершения задачи задействует привычки или память. Хорошо продуманная последовательность вызываемых с клавиатуры команд помогает пользователю запомнить, как делать те или иные вещи. Очевидный пример такой навигации - командная строка. Если пользователь хорошо помнит команды, командная строка становится очень выразительным и эффективным способом решения задач. В оконных приложениях также возможна навигация по памяти. В Microsoft Windows почти во всех приложениях нажатие последовательности Alt-F-S (File | Save, Файл | Сохранить) приводит к сохранению текущего документа. Использование последовательностей клавиш обеспечивает быструю навигацию - возможно, самую быструю.

Навигация по памяти очень важна, если пользователь выполняет повторяющиеся действия.

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

Развитие Internet привело к тому, что HTML начал использоваться как основа для многих приложений. Поддержка навигации по памяти в HTML очень слабая ввиду больших задержек при реагировании на действия пользователя и проблем с совместимостью между браузерами. Вот почему поддержка визуальных подсказок и графического дизайна очень важна для этих приложений.

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

Таким образом, технологии Mozilla упрощают создание систем с навигацией по памяти. Сложное визуальное размещение остается на долю разработчика приложения и не обеспечивается поддержкой, кроме простейшего CSS 2 (которая, тем не менее, полная) и XUL.

8.1.2. Кольцо фокуса

Кольцо фокуса в Mozilla - система для простых перемещений по документу. В XUL и HTML эти перемещения должны быть между элементами, которые пользователь может изменить, например, между полями формы.

Если пользователю нужно что-то ввести в форму, целесообразно работать в каждый момент времени только с одним элементом формы. Как и HTML, XUL выводит на первый план такие элементы по одному. Про элемент, на данный момент доступный для пользовательского ввода, говорят, что у него есть фокус.

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

Все элементы управления из кольца фокуса Mozilla достижимы. Простейший путь понаблюдать за этим порядком переходов - пройтись по кольцу с помощью клавиши Tab. Попробуйте сделать так в любом окне Mozilla, где открыт XUL- или HTML-документ. Кроме клавиши Tab любой элемент кольца может получить фокус по нажатию левой кнопки мыши. В каждом окне Mozilla есть только одно кольцо фокуса.

Некоторые элементы управления, похожие на элементы формы, не входят в кольцо фокуса. Например, <toolbarbutton> и <menu>. Это так потому, что основная цель кольца фокуса - помощь пользователю при вводе данных. Элементы управления, которые больше относятся к управлению приложением, например, меню, не входят в это кольцо.

Кольцо фокуса в Mozilla довольно сложное. Оно может перейти к XBL-связке и сделать активной определенную часть ее содержимого. Это дает пользователю возможность взаимодействовать с небольшими частями данной связки. Таким образом в связку, которая обычно составляет из разных частей единый целый элемент управления, может проникнуть фокус. Фокус также может проникать во встроенное содержимое. XUL-документ может содержать теги <iframe>, отображающие другие документы внутри основного. Кольцо фокуса попадает в эти документы и оттуда включает все подходящие элементы. Также в кольцо добавляются и сами документы целиком. Чтобы в этом убедиться, следует загрузить HTML-документ, содержащий форму, в любой браузер Mozilla. При нажатии Tab вы будете перемещаться по кольцу фокуса: и по отдельным элементам формы и по всему HTML-документу, и по XUL-частям окна браузера, когда до них дойдет фокус.

Так как кольцо фокуса включает в себя целые встроенные документы, в нем есть и иерархичность. Чтобы понять это, представьте, что домашняя страница Google (http://www.google.com) отображается в браузере и что курсор находится в поле ввода поискового слова этой страницы. Все эти элементы находятся в фокусе: и поле ввода, и HTML-документ, являющийся страницей Google, и окно, отображающее XUL-документ - приложение браузера. В терминах XML элементами, получившими фокус, будут: HTML-тег <INPUT TYPE="text">, XUL-тег <iframe>, HTML-тег <HTML> и самый внешний XUL-тег <window>.

Эта иерархичность кольца фокуса нужна для удобства пользователя, но также применяется и в системе команд Mozilla, описанной в "Команды" , "Команды". Там метод commandDispatcher.getControllerForCommand() в поисках подходящего контроллера просматривает кольцо фокуса иерархически.

У большинства XUL-тегов, которые могут получать фокус, есть методы focus() и/или blur(), которые могут использоваться в скриптах. До недавнего времени в реализации кольца фокуса встречались небольшие ошибки, которые иногда влияли на состояние XUL-окон. С версии 1.4 кольцо фокуса стало вполне надежным.

8.1.2.1. Гиперссылки

Когда Mozilla отображает HTML-страницы, все гиперссылки в ней включаются в кольцо фокуса. В XUL нет гиперссылок. Если XUL и HTML делят между собой один документ (с помощью атрибута xmlns), XUL-теги и HTML-гиперссылки могут сосуществовать в одном кольце фокуса.

8.1.3. Система меню

Отдельная от кольца фокуса система навигации - система меню Mozilla. Переход в нее осуществляется по нажатию клавиши Alt (или Control или Meta в более ранних UNIX-системах), по наведению указателя мыши на элемент строки меню или по нажатию на этот элемент.

Система навигации через меню - не просто последовательность тегов <key>. Это фундаментальная часть поддержки XUL платформой. Чтобы можно было использовать систему меню, в отображаемом XUL-документе должен содержаться тег <menubar> (строка меню). Перемещаться по меню можно только из такой строки меню.

Доступ к отдельным элементам системы меню может быть и прямым, независимым от системы меню. Для этого нужно добавить элементам меню клавиши доступа. Этот процесс описан в "События" , "События". Поддержка конкретных тегов описывается ниже.

8.1.4. Специальные возможности

Специальные возможности - особенность программного обеспечения, спроектированного с тем расчетом, чтобы сделать его доступным для пользователей с ограниченными физическими возможностями. В Mozilla предусмотрена поддержка специальных возможностей в Microsoft Windows и Macintosh, а у ее UNIX/Linux-версии будет такая поддержка, когда завершится разработка GTK2-библиотек.

Элементам управления XUL, состоящим в кольце фокуса или системе меню, также можно обеспечить дополнительную доступность. Поддержка специальных возможностей может быть реализована разными способами. Простейший способ программирования не требует. Существуют различные устройства и программные инструменты, которые могут увеличивать визуальное отображение, пока оно не станет читаемым; другие устройства представляют собой более легкую в обращении замену традиционным клавиатуре и мыши.

На другом полюсе находится сложное решение, предоставляющее программный интерфейс и дающее программистам возможность связывать их ПО и устройства со специальными возможностями с этим решением. Mozilla предоставляет такой программный интерфейс в виде множества XPCOM-интерфейсов, чьи имена начинаются с префикса nsIAccessible. Использование таких интерфейсов - почти (но не совсем) встраивание платформы Mozilla. Эти интерфейсы не рекомендуется применять в случае обычных пользователей.

Между этими полюсами находится решение, использующее простые техники XML-разметки. Это решение состоит из объявлений стилей @media, XHTML- и XUL-атрибута accesskey и XUL-тега <label>. @media и accesskey подробно описаны в соответствующих стандартах: accesskey в XUL работает точно так же, как и в HTML.

На уровне реализации эти функции должны использовать специальные возможности системной библиотеки графических элементов. Если это так, то проблема доступности содержимого пользователю - проблема конкретной системной библиотеки, а не приложения. Именно так работает Mozilla. Интерфейсы nsIAccessible предоставляют информацию из XML-документа системной библиотеке.

Во всех рассуждениях до текущего момента XUL-тег <label> был идентичным тегу <description>, только он мог быть сведен к атрибуту label. Отличия тега <label> от <description> прежде всего видны в области специальных возможностей. Тег <label> предоставляет альтернативное содержимое, необходимое системе специальных возможностей.

Если у элемента формы есть атрибут label, Mozilla предоставит его содержимое и на экран, и системной библиотеке как вспомогательную информацию о том, что должно быть объявлено пользователю. "Объявить пользователю" означает, что вспомогательная информация будет проговорена компьютером.

Если у элемента формы нет такого атрибута, Mozilla будет искать тег <label> среди его потомков и использует его. Если и такого тега не найдется, она будет искать тег <label>, чей атрибут id соответствует идентификатору, заявленному в атрибуте control элемента формы. Если и он не найден, значит, дополнительная информация отсутствует.

В Mozilla поддержка специальных возможностей есть для всех простых XUL-элементов форм. У тегов <menuitem>, <menulist> и <tab> также есть эта поддержка. Специальные возможности для таких тегов реализуются в их XBL-связках.