Obx/Docu/ru/Graphs.odc

Описание системы примерами: ObxGraphs
(C) Перевод на русский язык: Чернышов Л.Н., 2005.

Этот пример - отображение (view), которое реализует простые гистограммы. Реализация состоит из отображения и модели. Отображение содержит модель, а модель содержит линейный список значений. Для каждого из этих значений рисуется прямоугольник, когда отображение рисуется в рамке. Текущий список значений может быть вызван щелчком мышью по отображению: открывается вспомогательное окно, содержащее текстовое представление значений. Этот список чисел может быть отредактирован, выбран, и затем брошен на отображение, чтобы заменить его список значений. Данные модели (список значений) всегда заменяются целиком и никогда не изменяются по отдельности. Поэтому может быть осуществлено не только поверхностное, но и глубокое копирование модели путем копирования ссылки на модель (значение указателя), вместо копирования модели и ее содержания. То же самое свойство неизменности  уже использовалось в примере ObxLines.

Самая интересная часть этой реализации отображения - управление сообщениями перетащить-и-бросить (drag & drop). Чтобы обеспечить Блэкбоксу обратную связь при бросании (то есть, временную рамку, обозначающую графическую картинку, как возможную цель для принятия части текста), должно быть обработано сообщение Controllers.PollDropMsg. Чтобы фактически выполнять операцию принятия (то есть, чтобы позволить отображению потребить принимаемую часть текста), должно быть обработано сообщение Controllers.DropMsg. В нашем примере принимающая картинка не вставлена в адресат принятия, а скорее интерпретируется как спецификация для ее нового содержания.

Также примечательно обработка предпочтения Properties.FocusPref. Устанавливая это предпочтение, отображение может сообщить своему контейнеру, как оно хотело бы быть обработать ситуацию фокусирования. Если это сообщение не установлено, отображение никогда не фокусируется постоянно, кроме случая, если это корневое отображение. Это означает, что при щелчке по отображению, картинка получает маркеры выделения, но не рамку фокуса. Предпочтение фокуса позволяет изменить это поведение.

Отображения гистограммы не предназначены быть адресатами команд меню, то есть нет необходимости обозначать их как фокусируемые. Так как они должны реагировать на щелчки мыши, они также не должны быть выбираемы. Отображение, которое обычно не фокусируется и не выбирается, но все же должно принимать щелчки мыши, называется горячим фокусом (hot focus). Командная кнопка - более типичный пример такого отображения. Отображение может обозначить себя как горячий фокус, установив поле hotFocus = TRUE в предпочтении Properties.FocusPref.
Действительно доступные для редактирования отображения должны устанавливать поле setFocus вместо  поля hotFocus, чтобы не терять фокус, когда пользователь отпустит кнопку мыши.

ObxGraphssources

 "ObxGraphs.Deposit; StdCmds.Open"

Открыв отображение командой, приведенной выше, выделите список чисел:

	10 53 4 14 24 34 60 52 8

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

Теперь щелкните отображение, чтобы получить список ее текущих значений.