Панели окна программы (см. рис.1.)
1 - заголовок окна
Содержит название загруженного приложения.
2 - меню программы-контейнера
Универсальный контейнер применяется для загрузки и выполнения приложений, а также для администрирования доступных приложениям ресурсов в репозитарии (документов, форм, процедур и т.д.). Все прикладные приложения выполняются внутри контейнера. Компоненты помещенные в репозитарий доступны к использованию для всех приложений, но каждое приложения загружает из репозитария только необходимый ему набор компонентов. Применение контейнера обусловлено необходимостью организации управляемого обновления репозитария компонентов и самих приложений при переходе от старых версий программ к новым.
3 - меню выбора вида дерева приложения
Меню может содержать минимум два вида: "Структура" и "Помощь". По каждому выбранному виду строится дерево компонентов приложения в панели 5. Щелчок на пункте в дереве приводит к открытию документа для выбранного компонента в панели 14. Вид "Структура" строит дерево приложения сформированное по принципу - "показывать что с чем связанно". Вид "Помощь" строит дерево on-line документации по приложению.
Кроме этих видов возможно целесообразным будет использование видов:
a. "Функции" - организация дерева по принципу - "показывать кто - что выполняет".
b. "Алфавит (Index)" - показать все компоненты программы в алфавитном порядке.
c. "Поиск" - поиск по текстовому содержимому компонентов (в основном окон) программы.
d. "Пользовательский" - дерево формируемое пользователем по наиболее часто используемым компонентам.
4 - заголовок содержащий название текущего вида дерева
Может отсутствовать т.к. в принципе текущее дерево определено выбранной кнопкой в панели 3.
5 - собственно панель в которой показано текущее дерево
6 - название текущего активного документа
Может отсутствовать т.к. введено для удобства и дублирует название в панели 13.
7- меню выбора "деревянного" представления текущего активного документа
Может отсутствовать т.к. не всегда это нужно.
Деревянное представление документа основано на его объектной модели. Пункты данного меню предполагаются такими:
a. "Структура" (этот пункт обязателен, остальные опционально)
b. "Функции"
c. "Алфавит"
d. "Поиск"
e. Что-нибудь еще.
Пользовательский вид в данном случае возможен в виде набора "закладок" со ссылками на наиболее часто используемые поля документа с целью быстрой навигации по большому документу.
Действие перечисленных пунктов по смыслу аналогично действию пунктов для дерева приложения, но в данном случае применяется к текущему (открытому в панели 14) документу. Меню "деревянного" представления документа введено для ускорения работы с большими документами, содержащими множество полей. Кроме того это представление ненавязчиво знакомит пользователя с объектно-иерархической (на основе XML) моделью документов. Это должно помочь пользователю в дальнейшем грамотно создавать собственные документы путем наследования от текущих или создания оригинальных из компонентов репозитария.
8 - собственно панель в которой показывается дерево документа
Может отсутствовать.
9 - заголовок документа загруженного в свободную пользовательскую панель 10
Может отсутствовать.
10 - свободная пользовательская панель
Может отсутствовать. В данную панель пользователь может загрузить любой документ приложения, причем видимое содержание этого документа должно изменятся в соответствии с его изменением в приложении другими пользователями или встроенными в само приложение механизмами обработки данного документа. (здесь и далее в качестве синонима слова "приложение" будет использоваться слово "система") Другими словами в данном окне представлена всегда актуальная информация документа, но только для чтения. Из этого правила есть только одно исключение. Редактирование в панели 10 возможно тогда и только тогда, когда данный документ принадлежит исключительно данному пользователю и, таким образом, его редактирование не может создать неоднозначную ситуацию в системе.
В панели могут быть последовательно представлены несколько документов. Переход между ними осуществляется по стрелкам в панели заголовка 9. Может оказаться удобным вместо стрелок в панели 9 использовать закладки с именами документов. Вообще работа этой панели аналогична работе броузеров IE или NN т.е. каждый последующий документ вытесняет предыдущий. На рисунке 1 не показано, но можно предусмотреть и аналог строки адреса, который строился бы по структурному дереву приложения. Например с помощью строки - "Приложение/Cчета/Склад" в панель 10 загружался бы документ содержащий счета склада. История строки адреса может быть также использована для навигации, если перемещение по стрелкам окажется недостаточно информативным. Альтернативный (по умолчанию) способ загрузки документов в панель 10 - из выпадающего меню показываемого при щелчке правой кнопкой мыши на пункте дерева приложения в панели 5.
11 - строка состояния
В строке состояния показывается текущая реакция системы на действия пользователя. Например, если пользователь загружает документ в панель 14 то в строке состояния должно быть указано - "Загрузка документа такого-то. Выполнено 14% ".
12 - панель навигации по загруженным пользователем в панель 14 документам
В этой панели находятся закладки с сокращенными названиями документов, загруженных пользователем в панель 14. Щелчок по закладке открывает соответствующий документ. Вот и все. Достаточно просто, не правда - ли?
13 - название документа загруженного в панель
Здесь же находится кнопка - "Х" закрытия документа, а также кнопка - ">" сворачивания панели.
Примечание. Механизм работы кнопок "<" и ">" будет подробно описан ниже в главе "Управление видимым рабочим пространством приложения"
14 - главное окно работы с документами
В это окно документы загружаются на редактирование. Соответственно загруженный документ блокируется от изменений другими пользователями или какими-либо встроенными механизмами системы. Документ в эту панель загружается щелчком левой кнопки мыши на пункте в дереве приложения (панель 5). Если загружено несколько документов то закладки с их названиями появляются в панели 12.
Для документов в панели 14 можно предусмотреть два режима работы: - "без блокировки" и "с блокировкой".
В режиме "без блокировки", как было указано выше, блокируется только текущий открытый в панели 14 документ. При переходе к другому документу (в панели 12) содержание этого другого документа сначала синхронизируется с системой и только потом показывается пользователю. Соответственно документ с которого "ушли" при повторном его открытии может иметь уже другие данные, отличные от введенных пользователем.
В режиме "с блокировкой" документ с которого "ушли" защищен от изменений.
Режим по умолчанию в котором открывается документ предопределен разработчиком при разработке приложения в соответствии с пониманием логики использования данного документа. Разработчик, если посчитает целесообразным может предусмотреть наличие кнопки переключения режима блокировки для документа в панели 13. Тем не менее в любом случае текущий открытый документ всегда заблокирован. Описанные режимы касаются только загруженных но временно скрытых документов. Думаю имеет смысл предусмотреть цветовую индикацию закладок в панели 12 в зависимости от режима установленного для скрытых под ними документов, чтобы сразу было видно какой документ в каком режиме находится.
Взаимодействие с документом в панели 10.
Основной вид работы с документом в панели 10 это копирование из него актуальных данных в поля документа в панели 14. Вставка может осуществляться методами "Copy-Paste", "Drag and Drop", а также "Синхронизировать одноименные". В последнем случае поля в панели 14 заполняются данными из одноименных полей в панели 10. Мне показалось весьма удобным визуальная организация метода "Drag-and-Drop" в программе UltraDev фирмы Macromedia. В этой реализации за курсором из исходного поля тянется пунктирная линия которая визуально намного упрощает наведение на целевое поле.
Если в панели 14 открывается документ уже открытый в панели 10, то последний либо делается неактивным (disable), либо, что мне кажется более правильным, на его месте появляется сообщение вида - "Редактируется в главной панели" или что-то вроде этого. Этот транспарант остается до тех пор пока мы не переходим в панели 14 к другому документу.
Здесь есть еще один тонкий момент. В описании к панели 10 я говорил, что для расширения функциональности документ в панели 10 может редактироваться, если это редактирование не влияет на данные используемые приватно другими пользователями. Теперь, на примере интернет-магазина вин представим следующую ситуацию. В панели 10 у меня открыта корзина заказа, чтобы я всегда мог видеть, что у меня там. Я выбираю в корзину вина и наконец решаю оформить заказ. Предположим я решаю сделать это в панели 14 и открываю в неё корзину заказа т.к. кнопка "оформить заказ" находится в этом документе. Соответственно корзина в панели 10 заменяется сообщением - "Редактируется в главной панели". Я просмотрел корзину, убедился, что все хорошо и жму на "Оформить". У меня на экране появляется новый документ - "Оформление заказа". В нем мне предлагается ввести свои координаты для доставки и оформления заказа, а также перечислены позиции моего заказа, естественно уже без возможности редактирования. Но поскольку я в панели 14 перешел к другому документу в панели 10 корзина вновь открыта для редактирования. В результате появляется неоднозначность: в одном документе данные зафиксированы, а в другом те же самые данные можно редактировать. Выход из этой ситуации я вижу в следующем, - "Никогда не позволять редактировать в панели 10 документы открытые в панели 14; текущие или скрытые под закладками, причем в любых режимах блокирования"
Работа с редактируемыми документами в панели 10 удобна когда определена однозначная линейка шагов поведения типа: редактируем корзину - вводим свои координаты - вводим оплату - нажимаем "отправить" - получаем "ОК" и поэтому не хочется плодить закладки в панели 12, чтобы потом их все вручную закрывать.
15 - панель видов документа
Один и тот же по содержанию документ может быть визуально представлен по разному. Для выбора режимов представления документа - "видов" и предусмотрена эта панель. Иногда один большой документ может быть удобно разбить на части, тогда панель видов может быть использована для переключения между частями документа. Например, пусть есть документ "Поиск" содержащий большое количество полей ввода. Тогда результаты, в целях экономии места, можно разместить на странице с названием "Результаты поиска", которая автоматически загружается в панель 14 при старте поиска. В этом случае в панели 15 будем иметь 2 закладки: "Параметры поиска" и "Результаты поиска". По закладке "Параметры поиска" мы сможем переместится обратно на страницу с полями ввода.
Приведенный пример указывает некоторое дополнительное применение панели 15 т.к. нельзя сказать, что из-за деления документа на две части изменился вид документа. Эту задачу можно было бы решить и на одной странице путем введения внутри документа управляемых областей, которые могут быть скрыты или открыты в зависимости от необходимости видеть ту или иную часть документа. Важно, что в этом случае управление видимостью таких областей не выходит за рамки панели 14 приложения и остается только в самом документе. Здесь я заканчиваю описание панелей и перехожу к описанию принципов управления видимым рабочим пространством приложения внутри окна-контейнера.
Управление видимым рабочим пространством приложения (см. рис.2.)
Для управление видимостью панелей служат кнопки со стрелками см. рис. 1, 2. Эти кнопки позволяют сворачивать панели и/или группы панелей приложения. На рис.2. показан режим в котором панель 14 имеет максимальный размер. Внутри документа указанны рабочие области 14_1 - 14_7, которые представляют собой панели документа (в отличие от панелей приложения, рассмотренных выше). Например, можно представить в качестве документа в панели 14 на рис. 2. редактор форм Сергея Артюшенкова. Тогда, панель 14_4 это основное окно редактора, а остальные панели это наборы инструментов.
Механизм управления видимостью панелей
Правило для панелей 3, 4+5, 6+7+8, 9+10, 12+13+14+15.
Панель сворачивается по щелчку на стрелке, при этом освободившееся место занимает другая панель.
При повторном щелчке на стрелке панелей 4, 6 панели 4+5, 6+7+8 показываются поверх всего текущего содержимого приложения и закрываются сразу как только теряют фокус или по завершению операции "Drag-and-Drop" реализованной в духе UltaDev. (см. рис. 2) Для того чтобы эти панели "не дёргались" целесообразно предусмотреть некоторую задержку сворачивания по истечении, скажем, 0,3-0,5 секунды.
При повторном щелчке на стрелке панелей 3, 9, 13 восстанавливается деление рабочего пространства существовавшее до сворачивания. Само собой, границы между группами панелей 3+4+5, 6+7+8, 9+10, 12+13+14+15 подвижные. (см. рис. 1)
Правило для плавающих окон
Хотя в данном предложении по интерфейсу я всячески старался избежать окон, плавающих по видимой рабочей области, с целью привести к некоторому порядку тот хаос окон, который сейчас наблюдается, но, иногда, это все же необходимо. Например, в процессе редактирования документа оказывается целесообразным оформить ввод каких то параметров через всплывающее окно (окна). Это может быть шестнадцатеричный код зеленого цвета или параметр таблицы стилей и т.д. Правило здесь таково: одновременно может быть открыто только одно всплывающее окно либо одна последовательная цепочка таких окон. При этом каждое новое окно делает неактивным предыдущее (disable), соответственно первое окно делает неактивным все приложение. Для того чтобы вернуться обратно к работе с приложением надо закрыть всю цепочку всплывающих окон в обратном порядке. Вместе с тем окно-контейнер, содержащее исполняемое приложение, мне кажется, должно оставаться активным в любом случае т.к. оно не подчиняется логике приложения следствием исполнения которой является вызов плавающих окон.
Happy end
Дописав это дело до конца я понял, что то что я называл панелями приложения на самом деле являются панелями окна-контейнера, который загружает приложение, анализирует его и рассовывает по панелям. В приложении могут быть самодостаточные куски типа редактора форм и т.д., код которых закрыт от окна-контейнера, но которые могут получать доступ к единому репозитарию ресурсов и создавать новые компоненты приложения или их модифицировать используя этот репозитарий.
З.Ы.
Кстати, все это очень похоже на механизмы управления рабочим пространством использованные в JBuilder 5.0.
|