Виджет контейнера используется для упаковки дочерних виджетов в горизонтальной или вертикальной плоскости.
Для создания виджета контейнера может использоваться следующий конструктор:
GtkBox *box = gtk_box_new(orientation, spacing);
Параметр spacing позволяет указать необходимое количество пикселей свободного пространства между дочерними виджетами. Параметр orientation позволяет указать, в какой плоскости будут размещаться дочерние виджеты:
Дочерние виджеты могут добавляться в контейнер сверху или слева (в зависимости от плоскости размещения дочерних виджетов) и снизу или справа с помощью следующих методов соответственно:
gtk_box_pack_start(GTK_BOX(box), child, expand, fill, padding);
gtk_box_pack_end(GTK_BOX(box), child, expand, fill, padding);
Параметр child позволяет передать ссылку на объект дочернего виджета, который должен быть добавлен в контейнер. При использовании значения TRUE параметра expand дочерний виджет займет все доступное пространство контейнера, причем это пространство будет делиться пропорционально в случае добавления новых виджетов с значением TRUE этого параметра. Параметр fill учитывается лишь тогда, когда в качестве значения параметра expand используется логическое значение TRUE и позволяет виджету занять все доступное пространство. Наконец, параметр padding позволяет задать количество пикселей между добавляемым и уже добавленными соседними дочерними виджетами в дополнение к значению, заданному при создании контейнера с помощью параметра spacing.
Дочерний виджет может быть удален из контейнера с помощью следующего метода:
gtk_box_remove(GTK_BOX(box), child);
Также при необходимости дочерний виджет может быть передвинут в контейнере с помощью следующего метода:
gtk_box_reorder_child(GTK_BOX(box), child, position);
Параметр child позволяет передать указатель на объект дочернего виджета, который нужно передвинуть или удалить. Параметр position позволяет указать числовое значение, соответствующее новой позиции дочернего виджета в контейнере, причем значение 0 указывает на начальную (верхнюю или левую) позицию в контейнере.
По умолчанию дочерние виджеты размещаются в контейнере в горизонтальной плоскости. Плоскость размещения дочерних виджетов может быть изменена с помощью следующего метода:
gtk_box_set_orientation(GTK_BOX(box), orientation);
Параметр orientation может иметь значения GTK_ORIENTATION_HORIZONTAL и GTK_ORIENTATION_VERTICAL.
Добавленные в контейнер дочерние виджеты могут быть принудительно приведены к одинаковому размеру с помощью следующего метода:
gtk_box_set_homogeneous(GTK_BOX(box), homogeneous);
Здесь для приведения дочерних виджетов к одинаковому размеру в качестве значения параметра homogeneous должно использоваться значение TRUE, в противном случае — значение FALSE.
Количество пикселей свободного пространства между дочерними виджетами может быть задано после создания контейнера с помощью следующего метода:
gtk_box_set_spacing(GTK_BOX(box), spacing);
Для задания количества пикселей служит параметр spacing.
Информация о параметрах упаковки каждого из дочерних виджетов может использоваться следующий метод:
gtk_box_query_child_packing(GTK_BOX(box), child, expand, fill, padding, pack_type);
При этом параметры упаковки каждого из дочерних виджетов контейнера могут быть в любой момент изменены с помощью следующего метода:
gtk_box_set_child_packing(GTK_BOX(box), child, expand, fill, padding, pack_type);
Параметры expand, fill и padding по назначению аналогичны параметрам методов gtk_box_pack_start() и gtk_box_pack_end(). Параметр pack_type может принимать следующие значения:
Привязка дочерних виджетов к родительским может устанавливаться с помощью следующего метода:
gtk_box_set_baseline_position(GTK_BOX(box), position);
Параметр position может принимать следующие значения:
Для установки центрального дочернего виджета контейнера может использоваться следующий метод:
gtk_box_set_center_widget(GTK_BOX(box), widget);
Это код простого приложения, создающего контейнер:
Загрузить исходный код примера
Он может быть скомпилирован с помощью компилятора GCC путем исполнения следующей команды:
$ gcc box.c `pkg-config --libs --cflags gtk+-3.0` -o box
Также вы можете использовать компилятор CLang:
$ clang box.c `pkg-config --libs --cflags gtk+-3.0` -o box