TreeLookup (постановка задачи)#
TreeLookup - элемент управления, позволяющий выбирать объект из иерархического списка, созданный на основе контрола Lookup.
Функциональные требования#
Выбор объекта из списка#
Доступные для выбора объекты отображаются в иерархической таблице (в виде т.н. "дерева"). Строки объектов, имеющих дочерние объекты, снабжаются элементом управления в форме равнобедренного треугольника, направление вершины которого зависит от состояния списка дочерних объектов: вниз - список свёрнут, вправо - список развёрнут.
Список доступных объектов открывается в случаях:
- Нажата кнопка с направленной вниз стрелкой
- Одно из текстовых полей имеет фокус и нажата курсорная клавиша "вниз"
- Производится ввод текста в поле ввода наименования
Выбор объекта осуществляется двумя способами:
- С помощью мыши. При нажатии левой кнопкой мыши по строке таблицы объект данной строки выбирается в качестве текущего значения контрола
- С помощью клавиатуры. Навигация по таблице выпадающего списка производится курсорными клавишами "вверх" и "вниз". При нажатии кнопки "Enter" ("Ввод") выпадающий список закрывается, а выделенная строка выбирается в качестве текущего значения контрола
Смена состояния списка дочерних объектов осуществляется кликом по по треугольнику в строке объекта, имеющего дочерние объекты и, при навигации по таблице, по нажатию курсорных клавиш "влево"-"вправо" ("влево" - свернуть, "вправо" - развернуть"). Если таблица выпадающего списка не отображается, курсорные клавиши "влево" и "вправо" работают согласно пользовательским требованиям к контролу Lookup.
Отображение выбранного объекта#
- В поле кода лукапа должно отображаться значение свойства valueMember выбранного объекта
- В поле наименования лукапа должно отображаться значение свойства displayMember выбранного объекта
См. также Поля кода и наименования.
Для лукап-колонки контрола Grid необходима настраиваемая возможность отображать в ячейках колонки текст, составленный из наименований всех узлов дерева, расположенных вверх по иерархической цепочке от текущего (например, "Корневой элемент №1 -> Вложенный элемент №7 -> Текущий элемент").
Поиск объекта#
При вводе значения в поле наименования в таблице выпадающего списка должны отобразиться объекты, хотя бы одно свойство которых (поиск ведётся по свойствам, представленным колонками таблицы) удовлетворяет условию с участием введённого значения:
- Текстовые значения - частичное совпадение
- Числа - точное совпадение
См. также Механизм поиска.
Если найденный объект является дочерним по отношению к другому объекту, должна отображаться вся цепочка иерархии.
Если найденный объект обладает дочерними элементами, они также должны отображаться в выпадающем списке.
Нефункциональные требования#
- При открытии выпадающего списка иерархические узлы должны быть свёрнуты. Если, при этом, в лукапе выбран объект, то цепочка его иерархии должна быть развёрнуты
- Окно выпадающего списка должно содержать, помимо таблицы, кнопки для сворачивания всех узлов дерева и для разворачивания всех узлов дерева (?)
- Пользователь должен иметь возможность регулировать высоту (и ширину?) выпадающего списка (сохраняется до закрытия экранной формы)
- Выпадающий список из 500 объектов верхнего уровня (без дочерних объектов) должен открываться не более чем за 1.5 секунд (на компьютере с Intel Core 2.2 GHz, 4 гигабайта ОЗУ, windows 7 (x64), в браузере Google Chrome 41)
- При выполнении долгих операций необходимо сообщать пользователю о недоступности контрола из-за совершаемой системой работы