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;
/* Если забыть этот оператор, пользователь ничего не
Поделиться с друзьями: