Пример TextView

Пример testtext.py (производный от testtext.c включённой в дистрибутив GTK+ 2.0.x) показывает использование виджета TextView и связанных с ним объектов TextBufferTextIterTextMarkTextTagTextTagTable

Рисунок 13.2, “Пример TextView” показывает окно программы:

Риснок 13.2. Пример TextView

TextView Example

Программа testtext.py определяет несколько классов в дополнение к классу TestText:

  • Buffer, строки 99-496, он наследуется от gtk.TextBuffer. Он предоставляет возможности для редактирования, используемые объектами View.
  • View, строки 498-1126, наследуется от gtk.Window и содержит gtk.TextView, который использует Buffer вместо gtk.TextBuffer. Он предоставляет окно и визуальное отображение содержимого Buffer также, как и строку меню.
  • FileSel, строки 73-97, он наследуется от gtk.FileSelection для выбора файла как содержимого Buffer.
  • Stack класс для предоставления кучи объектов.

Отображение цветов реализуется с помощью TextTag, применяемых на отрывки текста. Строки 109-115 (в методе __init__()) создают эти TextTag и строки 763-784 (метод do_apply_colors()) применяют цветовые TextTag.

Строки 202-239 предоставляют методы (color_cycle_timeout(), set_colors() и cycle_colors()), которые включают цветовой цикл. Цветовой цикл включается настройкой (строка 220) свойства foreground_gdk для отдельных color_tags (которые также изменяют свойство foreground_set). Цветовой цикл отключается настройкой свойства foreground_set в FALSE (строка 222). Цвета периодически меняются с помощью перемещения start_hue (строка 237).

Новый Buffer заполняется содержимым примера тогда, когда выбирается пункт меню Test->Example (метод fill_example_buffer() в строках 302-372). Пример содержит текст различных цветов, стилей, языков и изображений. Метод init_tags() (строки 260-300) настраивают модификации TextTag, для использования их с текстом примера. Событийный сигнал этих TextTag прикреплён к методу tag_event_handler() (строки 241-156) для пояснения кнопки и события захвата движения.

В TextView выбран режим переноса WRAP_WORD (строка 580). Окна, граничащие с TextView показаны выбором их размеров в строках 587-588 и 596-597. Левое и правое окно используется для отображения номеров строк, а верхнее и нижнее окно отображают пользовательские вкладки тогда, когда они установлены. Эти окна обновляются по сигналу “expose-event” (строки 590 и 599). Метод line_numbers_expose() (строки 1079-1116) определяет левое или правое окно получает событие “expose” и рассчитывает размер области.

В начале каждой линии высчитывается её номер с помощью метода get_lines() (строки 1057-1077). Номера строк отображаются в граничащем окне (преобразуются в строке 1109)

Пользовательские вкладки, отображаемые в верхнем и нижнем окне похожи (строки 1013-1055). Они отображаются только когда курсор перемещается в область текста, для которого выбран атрибут custom tab. Это определяется обработкой сигнала “mark-set” в методе cursor_set_handler() (строки 999-1011) и отключает верхнее и нежнее окно тогда, когда выбрана метка insert.

Передвигаемые виджеты добавляются на View методом do_add_children() (строки 892-899), который вызывает последующий метод add_movable_children() (строки 874-890). Это gtk.Label, которые можно перетащить внутрь различных окон, являющихся частью виджета TextView.

Похожим образом, виджеты добавляются на окна TextView с использованием метода do_add_focus_children() (строки 901-949).


Предыдущая страница На уровень выше  Следующая страница
13.6. Признаки текста и таблиц Оглавление   Глава 14. Фреймворк представления структурированных данных (gtk.TreeView)

Оставить комментарий

Ваш email не будет опубликован. Обязательные поля отмечены *

Вы можете использовать это HTMLтеги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>