GTK+ 2.0 Tutorial |
||
---|---|---|
Packing Widgets |
Следующий рассматриваемый способ упаковки - Таблицы. Они могут быть чрезвычайно полезными в определенных ситуациях.
Используя таблицы, мы создаем сетку, в которую можем поместить виджеты. Виджеты могут занимать так много места, сколько мы определим.
Первое, что мы рассмотрим будет функция 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 используются для специфических опций упаковки.
Аргументы 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 );
|
Заметьте, что последний ряд и последний столбец не получают никакого интервала.
Packing Demonstration Program |
Table Packing Example |