Шаг 8 - Использование таблиц контейнеров

Этот метод является наиболее гибким. Пространство родительского контейнера (чаще всего окна, или формы, как я привык называть этот виджет) заполняется псевдокоординатами, рядами и колонками... Например, вот пример таблицы:

 0    1    2    3    5
0+----+----+----+----+
 |    |    |    |    |
1+----+----+----+----+
 |    |    |    |    |
2+----+----+----+----+

Здесь видно, что, как это принято, координаты начинаются с (0;0) левого верхнего угла таблицы.

Для создания таблицы используется функция:

GtkWidget *gtk_table_new(
	gint rows,
	gint columns,
	gint homogeneous
);

Первый и второй аргументы дожны быть и так понятны :)). Третий аргумент имеет следущий смысл - если он равен TRUE, то ячейки таблицы увеличиваются в соответствии с размером самого большого виджета в таблица. Иначе, для каджого ряда ширина будет равна маскимальной высоте содержащихся в нем виджетов, а для каждого столбца ширина - максимальной шириной виджетов.

Для добавления виджетов в таблицу используется следующая функция:

void gtk_table_attach( 
	GtkTable *table,		//собственно наша таблица
	GtkWidget *child,		//добавляемый виджет
	gint left_attach,		/x-координата левой верхней точки зацепления
	gint right_attach,		//x-координата правой нижней точки зацепления
	gint top_attach,		//y-координата левой верхней точки зацепления
	gint bottom_attach,	//y-координата правой нижней точки зацепления
	gint xoptions,		//опции заполнения по горизонтали
	gint yoptions,		//опции заполнения по вертикали
	gint xpadding,		//отступ по горизонтали
	gint ypadding );		//отступ по вертикали

Чуть подробнее про опции заполнения. Они могут принимать следующие значения:

Опции могут использоваться одновременно с помощью побитового OR, например GTK_FILL | GTK_EXPAND. Надо помнить, что эти опции используются именно в контексте для X или Y. И относятся они только к соотвественным координатам.

В качестве сокращенного варианта используется следующий:

void gtk_table_attach_defaults(
	GtkTable *table,
	GtkWidget *widget,
	gint left_attach,
	gint right_attach,
	gint top_attach,
	gint bottom_attach
);

Все то же самое, что и впредыдущей функции, но опции установлены в GTK_FILL | GTK_EXPAND, и отступ равен 0.

Еще функции позволяют установить расстояние между рядами и столбцами соотвественно. Вот они:

void gtk_table_set_row_spacing( GtkTable *table, gint row, gint spacing );
void gtk_table_set_col_spacing ( GtkTable *table, gint column, gint spacing );
void gtk_table_set_row_spacings( GtkTable *table, gint spacing );
void gtk_table_set_col_spacings( GtkTable *table, gint spacing );

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

Теоретическая подготовка дана... В следующем шаге рассмотрим пример рабочей программы.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Аванесов Самвел - 2.08.2002