упаковка с
использованием таблиц
следующий
рассматриваемый способ упаковки -
таблицы. они могут быть чрезвычайно
полезными в определенных ситуациях.
используя таблицы,
мы создаем сетку, в которую можем
поместить виджеты. виджеты могут занимать
так много места, сколько мы определим.
первое, что мы
рассмотрим будет функция gtk_table_new():
gtkwidget *gtk_table_new( guint rows,
guint columns,
gboolean homogeneous );
|
первый аргумент
задаёт кол-во строк в таблице, а второй
соответственно кол-во столбцов.
аргумент homogeneous
выполняет тоже, что и в контейнерах -
задаёт размер. если homogeneous равно true,
ячейки таблицы расширяются до значения
самого большого виджета. если homogeneous
равно false, размер ячейки продиктован
самой большой по высоте в этом ряду и
самой широкой в этом столбце.
столбцы и строки
располагаются от 0 до n, где n определено
в вызове gtk_table_new. если вы определили
rows = 2 и columns = 2, то таблица будет выглядеть
примерно так:
0 1 2
0+----------+----------+
| | |
1+----------+----------+
| | |
2+----------+----------+
|
заметьте, система
координат начинается в верхнем левом
углу.
для размещения
виджета в ячейке используйте следующую
функцию:
void gtk_table_attach( gtktable *table,
gtkwidget *child,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach,
gtkattachoptions xoptions,
gtkattachoptions yoptions,
guint xpadding,
guint ypadding );
|
первый аргумент
таблица ("table") которую вы создали,
а второй виджет ("child") который вы
хотите разместить в таблице.
остальные
аргументы определяют место расположения
виджета в ячейке и то, сколько ячеек
использовать. если вы хотите разместить
кнопку в правом нижнем углу в выше
указанной таблице 2х2 и чтобы она занимала
все пространство, то left_attach
would be = 1, right_attach = 2, top_attach = 1, bottom_attach = 2.
если понадобится
расположить кнопку в верхней строчки
на обе ячейки, то нужно использовать
следующие аргументы left_attach = 0, right_attach =
2, top_attach = 0, bottom_attach = 1.
аргументы xoptions
и yoptions используются для специфических
опций упаковки.
вот эти опции:
-
gtk_fill
-
если ячейка таблицы
больше виджета и определён gtk_fill,
то виджет увеличится до размера ячейки.
-
gtk_shrink
-
если таблица
меньше пространства отведенного для
виджетов (когда пользователь изменяет
размер окна), то виджеты обычно будут
просто исчезать из окна. если определить
gtk_shrink, то виджеты будут
сжиматься вместе с таблицей.
-
gtk_expand
-
данная опция
заставит таблицу заполнить всё свободное
пространство в окне.
аргументы xpadding и
ypadding используются для выделения
свободного пространства вокруг виджетов
в пикселях (pixels).
gtk_table_attach() имеет
много вариантов. например сокращенный:
void gtk_table_attach_defaults( gtktable *table,
gtkwidget *widget,
guint left_attach,
guint right_attach,
guint top_attach,
guint bottom_attach );
|
опции x и y в данном
случае установлены по умолчанию в
gtk_fill | gtk_expand, а xpadding и
ypadding равны 0. остальная часть аргументов
идентична предыдущей функции.
также есть функции
gtk_table_set_row_spacing() и gtk_table_set_col_spacing(),
устанавливающие интервал между рядами
или столбцами.
void gtk_table_set_row_spacing( gtktable *table,
guint row,
guint spacing );
|
и
void gtk_table_set_col_spacing ( gtktable *table,
guint column,
guint spacing );
|
обратите внимание
на то, что промежуток устанавливается
справа для столбцов и снизу для рядов.
вы можете также
установить последовательный интервал
всех рядов и/или колонок:
void gtk_table_set_row_spacings( gtktable *table,
guint spacing );
|
и
void gtk_table_set_col_spacings( gtktable *table,
guint spacing );
|
заметьте, что
последний ряд и последний столбец не
получают никакого интервала.
|