Первая функция добавляет новый элемент в начало списка, а вторая — в его конец. Если вам необходимо вставить элемент в определенную позицию, вам нужно использовать функцию:
void gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]);
Она позволяет вставить новый элемент в строку row. Нумерация строк списка начинается с 0.
Для удаления элементов списка можно использовать одну из функций:
void gtk_clist_remove(GtkCList *clist, gint row);
void gtk_clist_clear(GtkCList *clist);
Первая удаляет строку row, а вторая очищает весь список.
Рассмотрим листинг 23.8, в котором демонстрируется работа со списком CList. Программа снабжена подробными комментариями, поэтому рекомендую внимательно читать исходный код.
Листинг 23.8. Применение виджита CList
#include
/* Нужен для функции setlocale() */
#include
/* Добавляет список - обработчик кнопки Добавить */
void button_add_clicked(gpointer data) {
int indx;
/* Простой список */
gchar *dist[4][2] = { { "1", "Red Hat Linux" },
{ "2", "Mandrake Linux" },
{ "3", "ALT Linux" },
{ "4", "ASP Linux" } };
for(indx=0; indx < 4; indx++)
gtk_clist_append((GtkCList *) data, dist[indx]);
return;
}
/* Обработчик нажатия кнопки Очистить */
void button_clear_clicked(gpointer data) {
/* Очищаем список */
gtk_clist_clear((GtkCList *)data);
return;
}
/* Функция прячет/отображает заголовки */
void button_hide_show_clicked(gpointer data) {
/* 0 = сейчас видим заголовки */
static short int flag = 0;
if (flag == 0) {
/* прячем заголовки */
gtk_clist_column_titles_hide((GtkCList *)data);
flag++;
} else {
/* Отображаем заголовки */
gtk_clist_column_titles_show((GtkCList *)data);
}
return;
}
/* Данная функция будет вызвана, если пользователь выберет
элемент */
void selection_made(GtkWidget *clist, gint row,
gint column, GdkEventButton *event, gpointer data) {
gchar *text;
/* Получаем выбранный текст (элемент списка) */
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
/* Просто выводим информацию на консоль */
g_print(
"Вы выбрали ряд %d. Колонка %d, текст в ячейке %s\n\n",
row, column, text);
return;
}
int main(int argc, gchar *argv[]) {
GtkWidget *window;
GtkWidget *vbox, *hbox;
GtkWidget *scrolled_window, *clist;
GtkWidget *button_add, *button_clear, *button_hide_show;
gchar *titles[2] = { "Номер", "Дистрибутив" };
setlocale(LC_ALL, "ru_RU.KOI8-R");
// Нужно вызвать ДО gtk_init()
gtk_init(&argc, &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
gtk_window_set_title(GTK_WINDOW(window), "Список");
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
vbox=gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Создаем окно с полосками прокрутки и упаковываем в
него список */
Вильям Л Саймон , Вильям Саймон , Наталья Владимировна Макеева , Нора Робертс , Юрий Викторович Щербатых
Зарубежная компьютерная, околокомпьютерная литература / ОС и Сети, интернет / Короткие любовные романы / Психология / Прочая справочная литература / Образование и наука / Книги по IT / Словари и Энциклопедии