logo
Литература_1 / photon_old

Концепции виджетов

При создании нового пользовательского интерфейса (UI), проще собрать интерфейс из набора стандартных компонентов, таких как ползунки, списки, меню и кнопки, нежели реализовывать каждый из элементов UI с нуля. Каждый стандартный компонент, включённый в UI, является объектом, называемым виджетом.

Виджеты Photon'а обеспечивают набор компонентов UI, в большей или меньшей степени согласующихся с другими оконными системами, которые Вы могли видеть.

Набор виджетов создан на объектно-ориентированной основе, нестрого говоря, базирующейся на библиотеке встроенного инструментария X-windows (X Toolkit Intrinsic library, Xt). Если вы уже знакомы с Xt, Вы увидите, что здесь применены во многом те же концепции.

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

Виджет инкапсулирует в себе знание о том, как:

Кроме того, имеется несколько виджетов, называемых контейнерами, содержащие другие виджеты и управляющие их компоновкой.

Виджет также скрывает подробности того, как он выполняет свои обязанности перед внешним миром. Этот принцип, известный как сокрытие информации (information hiding), отделяет внутреннюю реализацию виджета от его общедоступного интерфейса.

Общедоступный интерфейс состоит из всех атрибутов, видимых другими объектами, а также действий, которые другие объекты могут совершать над этим виджетом. Атрибуты в общедоступном интерфейсе виджета называются ресурсами.

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

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

Несколько классов виджетов могут иметь общие атрибуты и действия. В этих случаях эти классы виджетов могут быть выделены в категорию субкласса одного суперкласса, или родительского класса. Атрибуты и действия инкапсулированы в суперклассе; субклассы наследуют их от родительского класса. Считается, что сами субклассы наследуются из родительского класса. Библиотека Photon'а позволяет “виджетному” классу наследоваться только от одного “виджетного” класса. Такая взаимосвязь известна, как одиночное наследование. Взаимосвязи между классами виджетов могут быть изображены как дерево, известное как иерархия классов.

С помощью браузера (если это – документ HTML) Вы можете выбрать виджет на диаграмме (см. рис. 2).

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

Библиотека виджетов Photon'ов функционирует как фабрика виджетов. Она предоставляет набор функций, которые позволяют программисту создать новый виджет определённого “виджетного” класса и затем управлять этим виджетом. Однажды созданный, виджет имеет все характеристики “виджетного” класса. Будучи унаследованным, он также имеет все характеристики суперкласса своего “виджетного” класса.

Новый виджет является экземпляром “виджетного” класса. Создание нового виджета определённого класса называется также инициализацией (instantiating) виджета. Этот термин не вполне точен, потому что Вы на самом деле инициализируете “виджетный” класс. Это отражает базовую тенденцию данного руководства – ссылаться и на виджеты и на “виджетные” классы, просто как на виджеты.

PtCalendar

PtBkgd

PtClock

PtClient

PtWebClient

PtColorPanel

PtColorSel

PtColorPath

PtColorSelGroup

PtColorWell

PtContainer

PtComboBox

PtCompound

PtFileSel

PtDivider

PtGenTree

PtRawTree

PtGenList

PtList

PtTree

PtMenuButton

PtRawList

PtMultiText

PtBasic

PtNumeric

PtNumericFloat

PtNumericInteger

PtMenu

PtDisjoint

PtRegion

PtServer

PtFlash

PtWindow

PtWidget

PtFontSel

PtGroup

PtOSContainer

PtPane

PtPanelGroup

PtPrintSel

PtScrollArea

PtScrollContainer

PtTerminal

PtTty

PtToolbar

PtMenuBar

PtToolbarGroup

PtTimer

PtMeter

PtGauge

PtProgress

PtScrollBar

PtSlider

PtArc

PtBezier

PtEllipse

PtGrid

PtLine

PtPixel

PtGraphic

PtPolygon

PtRect

PtOnOffButton

PtButton

PtLabel

PtMenuLabel

PtToggleButton

PtTab

PtRaw

PtText

PtSeparator

PtTrend

Рис. 2. Иерархия виджетов Photon'а

Ресурсы виджетов используются для конфигурирования того, как они выглядят на экране, и их поведения. Вы можете редактировать ресурсы в PhAB, и после создания виджета Вы можете изменить многие из них вызовами функций PtSetResource( ) или PtSetResources( ). Ресурсы широко используются для управления данными, отображаемыми виджетом и задания того, как их отображать.

Например:

ресурс Pt_ARG_TEXT_STRING виджета PtLabel является строкой, выводимой на экран;

ресурсы виджета PtButton определяют, отображает ли кнопка строку и/или картинку (image), её текст, картинку, цвет, и что происходит, когда пользователь выбирает кнопку.

Важным типом ресурса, предоставляемого виджетами, является список ответных реакций (callback list), являющийся списком функций, запускаемых виджетом в ответ на определённые значимые пользовательские события. Например, виджет текстовой области вызывает соответствующие функции из своего списка ответных реакций всякий раз, когда пользователь вводит новое значение и нажимает Enter. При разработке приложения Вы можете добавить реакции в список ответных реакций виджета, задавая соответствующие действия в ответ на пользовательские события.

Yandex.RTB R-A-252273-3
Yandex.RTB R-A-252273-4