Чтение онлайн

ЖАНРЫ

Linux: Полное руководство

Аллен Питер В.

Шрифт:

#include <stdio.h>

gchar *domain, *dns1, *dns2;

/* Массив из трех полей ввода. Первое предназначено для

 ввода имени домена, два вторых - [1] и [2] - для ввода

 IP-адресов серверов DNS */

GtkWidget *edit[3];

/* Наш файл */

FILE *resolv;

/* Функция
записи в файл */

void writetofile(GtkWidget *widget, gpointer data) {

 /* С помощью функции gtk_entry_get_text мы получаем

введенный пользователем текст из полей ввода */

 domain = gtk_entry_get_text(GTK_ENTRY(edit[0]));

 dns1 = gtk_entry_get_text(GTK_ENTRY(edit[1]));

 dns2 = gtk_entry_get_text(GTK_ENTRY(edit[2]));

 /* Выводим прочитанный текст на консоль */

 g_print("Domain %s\n", domain);

 g_print("DNS1 %s\n", dns1);

 g_print("DNS2 %s\n", dns2);

 /* Перезаписываем файл resolv.conf в текущем каталоге */

 if ((resolv = fopen("resolv.conf","w")) == NULL) {

/* Наверное, нет места на диске или прав маловато... */

g_print("ERR: Cannot open resolve.conf file\n");

gtk_main_quit;

 }

 /* Запись в файл */

 fprintf(resolv,"domain %s\n",domain);

 fprintf(resolv,"nameserver %s\n",dns1);

 fprintf(resolv,"nameserver %s\n",dns2);

 fclose(resolv);

}

/* Эта функция будет запущена, когда пользователь нажмет

кнопку закрытия окна или кнопку Quit */

gint delete_event(GtkWidget *widget, GdkEvent *event,

 gpointer data) {

 /* Функция gtk_main_quit используется для завершения

работы GTK-программы. Не нужно для этого использовать

 exit */

 gtk_main_quit;

 return(FALSE);

}

/* Когда пользователь введет текст и нажмет Enter,

 введенный им текст будет выведен на консоль */

void enter_callback(GtkWidget *widget,

 GtkWidget *entry) {

 domain = gtk_entry_get_text(GTK_ENTRY(entry));

 printf("Domain: %s\n", domain);

}

int main(int argc, char *argv[]) {

 GtkWidget *window; /* Окно */

 GtkWidget *button; /* Кнопка */

 GtkWidget *table; /* Таблица для размещения виджитов */

 GtkWidget *label; /*
Надпись */

 /* Как видите, все виджиты одного типа — GtkWidget,

поэтому мы могли бы обойтись даже тремя виджитами — для

окна, таблицы и для всех остальных элементов GUI*/

 int i;

 /* Инициализация любой GTK-программы */

 gtk_init (&argc, &argv);

 /* Создаем новое окно */

 window = gtk_window_new(GTK_WINDOW_TOPLEVEL);

 /* Устанавливаем заголовок окна */

 gtk_window_set_title (GTK_WINDOW(window), "Resolver");

 /* Устанавливаем реакцию на кнопку закрытия окна.

Сигнал - delete_event. Вызываем функцию delete_event,

которая описана выше */

 gtk_signal_connect (GTK_OBJECT (window), "delete_event",

GTK_SIGNAL_FUNC(delete_event), NULL);

 /* Устанавливаем рамку окна */

 gtk_container_set_border_width(GTK_CONTAINER (window), 20);

 /* Создаем таблицу 3x3 */

 table = gtk_table_new (3, 3, TRUE);

 /* Помещаем таблицу в контейнер. Обязательно! */

 gtk_container_add(GTK_CONTAINER (window), table);

 /* Рисуем надписи, помещаем их в таблицу и отображаем.

Обратите внимание, что в этом случае нам не нужно объявлять

отдельную переменную для каждой надписи */

 label = gtk_label_new("Domain: ");

 /* О координатах ячеек поговорим после этого листинга */

 gtk_table_attach_defaults(GTK_TABLE(table),

label, 0, 1, 0, 1);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #1: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

label, 0, 1, 1, 2);

 gtk_widget_show(label);

 label = gtk_label_new("DNS #2: ");

 gtk_table_attach_defaults(GTK_TABLE(table),

label, 0, 1, 2, 3);

 gtk_widget_show (label);

 /* Заполняем наш массив полей ввода. По аналогии с Delphi,

я назвал массив edit[]*/

 for (i=0; i<3; i++) {

/* Новое поле */

edit[i] = gtk_entry_new;

/* Если забыть этот оператор, пользователь ничего не

Поделиться с друзьями: