Если просто запустить нужно приложение, то его окно сразу попадет в менеджер окон, в конец списка, в новую строчку. Так как, именно там будет искать его пользователь.
Но на окно можно навешивать заранее ярлыки. В настройках менеджера окон указать комбинации клавиш на запуск окна (Например, <CTRL+SHIFT+KEY> и левая клавиша мыши).
Также, популярное приложение можно выбрать из выпадающего списка по щелчку мыши.
И окно появиться.
Тащить большое окно через весь Бесконечный лист не удобно. Поэтому предусмотрена операция Быстрой вставки, она похожа на классическую операцию – вырезать/вставить. Для этого мы навешиваем временный ярлык на окно комбинацией клавиш (Например, вырезать -СTRL+SHIFT+T) и вставляем в нужное место. Аналогично работе с окнами-ярлыками.
Применительно к WEB, данная модель может быть использована, как менеджер работы с портлетами.
Что такое портлеты? Порталы? Портальный сервер?
Сайт WebSphere Portal Server предоставляет рабочее определение IBM для портала: "Порталы обеспечивают безопасную, единую точку входа для взаимодействия с разнообразной информацией, бизнес-процессами и людьми, персонифицированную к потребностям пользователя и его обязанностям". Есть хорошая аналогия между тем, что порталы добавляют к Web-приложениям, а оконный интерфейс (типа Microsoft Windows) добавляет к операционным системам (типа DOS). И то и другое обеспечивает совместимый и единообразный способ взаимодействия с приложениями.
Портлеты, согласно сайту WebSphere Portal, являются "видимыми активными компонентами, которые пользователи видят на страницах портала... В простейших терминах, портлет - это Java-сервлет, который работает внутри портала". См. рис 1 с примером страницы портала с двумя видимыми компонентами. Каждый видимый компонент называется портлетом. В этом примере, один портлет позволяет пользователю отправиться по указанному URL; другой предоставляет пользователю текст с напоминанием.
Портальный сервер предоставляет основные сервисы, такие как использование связности, интеграции, администрирования, и представления, которые могли бы потребоваться во всех конфигурациях портала. Функционально, портальный сервер обрабатывает портлеты и представляет результаты пользователю.
Один из типов настройки портлетов - пользовательские настройки. При ограничениях, которые устанавливает администратор портала, пользователи могут решать, который портлеты должны находиться в их портале, какие страницы портлета включить, и изменять любые другие настройки, которые предусмотрели разработчики.
Рис 3 Пример страницы портала с двумя портлетами
Собственно самое большее, что может делать с портлетами пользователь – это перетаскивать их по заранее заданной сетке (обычно с 1 степенью свободы и 2-мя колонками). Далее, мы будем относиться к портлету, как к обычному “окну”. Это можно сделать, так как портлеты помогают разделить сложные приложения на задачи: в целом, одна группа тесно связанных задач равняется одному портлету.
Поэтому, тут применима полностью модель, кроме некоторых дополнений.
Основную роль играет перемещение объекта. Поэтому подробнее рассмотрим алгоритм для реализации именно этого свойство.
Объект А – этот тот объект который у нас является окном – портлетом. У него мы можем получить его parent – объект Б. У объекта Б соответственно, мы можем получить объект С. Объект С – это по сути панель, на которой живут портлеты (Рис 4 Архитектура панели).
Рис 4 Архитектура панели
Перемещать объекты мы может по горизонтали и по вертикале. Сначала рассмотрим, как объекты переносятся по горизонтали.
По сути, перенос по горизонтали – это реорганизация последовательности объектов Б в панели С.
Предположим, что в данный момент, курсор мышки у нас находиться над текущим объектом А. Если он в правой половине, это означает, что мы хотим добавить объект после текущего, если в левой, соответственно, до. У текущего объекта А, получаем его parent – объект Б. Таким образом мы можем определить текущую панель С. Теперь нам просто нужно добавить новый объект до или после текущего объекта А(Рис 5 Перемещение по горизонтали).
Таким образом, нам не нужно знать в какой панели мы хотим размесить объект (в той же или в другой), нужно лишь получить объект панели (Рис 6 Перемещение по горизонтали).
Рис 5 Перемещение по горизонтали
Рис 6 Перемещение по горизонтали
Перемещение по вертикали отличается от перемещения по горизонтали тем, что мы:
1) должны добавить не просто объект, а создать панель с нашим объектом и разместить её в нужном месте;
2) parent у панели брать бессмысленно – у всех панелей он одинаковый.
Перемещение по вертикали по сути означает, что мы добавляем новую панель (новый ряд) с одним объектом. То есть, задача сводиться к тому, чтобы правильно определить место для вставки панели. Перемещение любой панели увеличивает или уменьшает контрольную сумму на 1 (Рис 7 Подсчет контр суммы).
Рис 7 Подсчет контр суммы
Подсчет контрольной суммы начинается с объекта, который хотим переместить(Рис 8 Добавление новой панели).
Рис 8 Добавление новой панели
На рисунке, красная линия – это перемещение курсора пользователя. Когда клавиша мыши будет отпущена, значение контрольной суммы станет равным n-1. Теперь нам надо получившийся порядок отобразить на текущий, чтобы знать после какого объекта добавлять новую панель. На рисунке (Рис 9 Определение уровня панели) показано, как пересчитывается порядок, d – номер панели в текущем порядке.
Рис 9 Определение уровня панели
Отличия реализации от базовой модели.
Так как мы работает в браузере, это накладывает некие ограничения в реализации модели, например при работе с активным окном и добавлением нового.
Когда пользователь работает с конкретным портлетом в режиме active (активное окно), текущий портлет раздвигается и становиться всплывающим окном.
Добавление новых “окон” осуществляется за счет добавления портретов на страницу.
Метафора разделения на несколько рабочих показала свою практичность и удобность. Поэтому, можно дополнить модель виртуальным менеджером Бесконечных Листов.
“Оставлю это здесь, чтобы не забыть заняться этим позже”.
Проспективная память – психологический феномен, который не получил внимания в дизайне интерфейсов.
Мы применяем проспективную память, когда планируем сделать что-то в будущем и организуем некий способ напомнить себе о необходимости сделать это. Например, если вам нужно принести на следующий день на работу книгу, то вы можете накануне вечером положить её на столик у входной двери. Если Вам надо ответить на электронное сообщение позже, вы можете оставить его открытым на экране, в качестве физического напоминания.
Фактически каждый из нас применяет проспективную память и в жизни и при работе с компьютером: виртуальные липкие листочки; открытые окна на экране; примечания на документах: “Допиши меня”; закладки в браузере; документы на рабочем столе, а не в архиве; электронные сообщения, помеченные флагами и тд.
Почему бы не зарезервировать в менеджере окон специальную область – полку, на которую можно будет “складывать” приложения с которыми необходимо будет еще работать и тд.
В рамках модели, это будет не зависимая область, в которую можно просто переносить “копии” приложений. Сами приложения будут жить на панели прокрутки, в том порядке в котором их добавил пользователь.
Рассмотрим простую абстрактную модель приложения основанную на SOA – архитектуре (Рис 10 Простая абстрактная архитектура приложения). В такой системе, менеджер окон может выступать как прослойка между работой с сервисами (обрисовка окон) и работай пользователя (работа и компоновка окон). Таким образом мы можем рассматривать новый подход к созданию WEB-приложений и WEB-интерфейсов, похожий на стандартный подход в реализации корпоративных приложений.
Рис 10 Простая абстрактная архитектура приложения
Необходимо точно понимать, для каких задач можно использовать данную модель. При работе с 1-2 окнами, данная абстракция будет излишней, но при работе с большим количеством окон, мы решаем 2 основные проблемы: поиск и наблюдение.
Интересной, с точки зрения разработки интерфейсов, получилась реализация модели для WEB-приложения. Интерфейс WEB-приложения может, в общем, полностью перенесен на перемещаемые панели.
Практическая реализация показала, что будет полезным реагировать на изменения размеров окна. Скажем, если мы отображаем табличку, при увеличении размера окна мы можем показывать новые колонки.
1) Дженифер Тидвелл, “Разработка пользовательских интерфейсов”, 2008
2) Статья “Куда Ведут Окна?”, Андрей Письменный, 2007
3) Development of Quantitative Metrics to Support UI Designer Decision-Making in the Design Process