» » » Нейл Мэтью - Основы программирования в Linux


Авторские права

Нейл Мэтью - Основы программирования в Linux

Здесь можно скачать бесплатно "Нейл Мэтью - Основы программирования в Linux" в формате fb2, epub, txt, doc, pdf. Жанр: Программное обеспечение, издательство «БХВ-Петербург», год 2009. Так же Вы можете читать книгу онлайн без регистрации и SMS на сайте LibFox.Ru (ЛибФокс) или прочесть описание и ознакомиться с отзывами.
Нейл Мэтью - Основы программирования в Linux
Рейтинг:
Название:
Основы программирования в Linux
Автор:
Издательство:
«БХВ-Петербург»
Год:
2009
ISBN:
978-5-9775-0289-4
Скачать:

99Пожалуйста дождитесь своей очереди, идёт подготовка вашей ссылки для скачивания...

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.

Вы автор?
Жалоба
Все книги на сайте размещаются его пользователями. Приносим свои глубочайшие извинения, если Ваша книга была опубликована без Вашего на то согласия.
Напишите нам, и мы в срочном порядке примем меры.

Как получить книгу?
Оплатили, но не знаете что делать дальше? Инструкция.

Описание книги "Основы программирования в Linux"

Описание и краткое содержание "Основы программирования в Linux" читать бесплатно онлайн.



В четвертом издании популярного руководства даны основы программирования в операционной системе Linux. Рассмотрены: использование библиотек C/C++ и стан­дартных средств разработки, организация системных вызовов, файловый ввод/вывод, взаимодействие процессов, программирование средствами командной оболочки, создание графических пользовательских интерфейсов с помощью инструментальных средств GTK+ или Qt, применение сокетов и др. Описана компиляция программ, их компоновка c библиотеками и работа с терминальным вводом/выводом. Даны приемы написания приложений в средах GNOME® и KDE®, хранения данных с использованием СУБД MySQL® и отладки программ. Книга хорошо структурирована, что делает обучение легким и быстрым.

Для начинающих Linux-программистов






Будет написан программный код для следующих ключевых действий:

□ регистрация в базе данных из GUI;

□ поиск компакт-диска;

□ отображение сведений о компакт-диске и его дорожках;

□ вставка компакт-диска в базу данных;

□ создание окна About (О программе);

□ формирование подтверждения при завершении работы пользователя.

Разделим код на три файла, совместно использующие заголовочный файл cdapp_gnome.h. В исходных файлах функции создания окон и диалоговых окон — функции формирования интерфейса — отделены от функций обратного вызова (упражнения 16.11-16.14).

Упражнение 16.11. Файл cdapp_gnome.h

Сначала рассмотрим файл cdapp_gnome.h и функции, которые вы должны реализовать.

1. Включите в исходный текст программы заголовочные файлы среды GNOME и заголовочный файл для функций интерфейса, разработанного вами в главе 8. В данном примере программы используются файлы app_mysql.h и app_mysql.c из главы 8 и созданная там же база данных.

#include <gnome.h>

#include "app_mysql.h"

2. В типе enum обозначены столбцы виджета GtkTreeView, который вы будете применять для отображения сведений о компакт-дисках и их дорожках. 

enum {

 COLUMN_TITLE,

 COLUMN_ARTIST,

 COLUMN_CATALOGUE,

 N_COLUMNS

};

3. У вас есть три функции создания окна в файле interface.c.

GtkWidget *create_main_window();

GtkWidget *create_login_dialog();

GtkWidget *create_addcd_dialog();

4. Функции обратного вызова для пунктов меню, панели инструментов, кнопок диалогового окна и кнопки поиска находятся в файле callbacks.с.

/* Обратный вызов для выхода из приложения */

void quit_app(GtkWidget* window, gpointer data);

/* Обратный вызов для подтверждения завершения перед выходом */

gboolean delete_event_handler(GtkWidget* window, GdkEvent *event,

 gpointer data);

/* Обратный вызов, связанный с сигналом отклика диалогового окна addcd */

void addcd_dialog_button_clicked(GtkDialog * dialog, gint response,

 gpointer userdata);

/* Обратный вызов для кнопки Add CD меню и панели инструментов */

void on_addcd_activate(GtkWidget *widget, gpointer user_data);

/* Обратный вызов для кнопки меню About */

void on_about_activate(GtkWidget* widget, gpointer user_data);

/* Обратный вызов для кнопки поиска */

void on_search_button_clicked(GtkWidget *widget, gpointer userdata);

Упражнение 16.12. Файл interface.c

Первым рассмотрим файл interface.c, в котором определяются окна и диалоговые окна, применяемые в приложении.

1. Сначала несколько указателей виджетов, на которые вы ссылаетесь в файлах callbacks.c и main.c:

#include "app_gnome.h"


GtkWidget* treeview;

GtkWidget* appbar;

GtkWidget* artist_entry;

GtkWidget *title_entry;

GtkWidget *catalogue_entry;

GtkWidget *username_entry;

GtkWidget *password_entry;

2. app — глобальная переменная, указатель на главное окно:

static GtkWidget *арр;

3. Определите вспомогательную функцию, которая вставляет в контейнер виджет-метку с заданным текстом:

void add_widget_with_label(GtkContainer *box,

 gchar *caption, GtkWidget *widget) {

 GtkWidget *label = gtk_label_new(caption);

 GtkWidget *hbox = gtk_hbox_new(TRUE, 4);

 gtk_container_add(GTK_CONTAINER(hbox), label);

 gtk_container_add(GTK_CONTAINER(hbox), widget);

 gtk_container_add(box, hbox);

}

4. Определения строки меню, использующие для удобства макросы GNOMEUIINFO:

static GnomeUIInfo filemenu[] = {

 GNOMEUIINFO_MENU_NEW_ITEM("_New CD", NULL, on_addcd_activate, NULL),

 GNOMEUIINFO_SEPARATOR,

 GNOMEUIINFO_MENU_EXIT_ITEM(close_app, NULL),

 GNOMEUIINFO_END

};

static GnomeUIInfo helpmenu[] = {

 GNOMEUIINFO_MENU_ABOUT_ITEM(on_about_activate, NULL),

 GNOMEUIINFO_END

};

static GnomeUIInfo menubar[] = {

 GNOMEUIINFO_MENU_FILE_TREE(filemenu),

 GNOMEUIINFO_MENU_HELP_TREE(helpmenu),

 GNOMEUIINFO_END

};

5. Теперь вы создаете главное окно, вставляете меню и панель инструментов, задаете их размер, центрируете относительно экрана и собираете виджеты, формирующие интерфейс. Учтите, что эта функция не отображает окно на экране, а просто возвращает указатель на окно:

GtkWidget *create_main_window() {

 GtkWidget* toolbar;

 GtkWidget* vbox;

 GtkWidget* hbox;

 GtkWidget* label;

 GtkWidget* entry;

 GtkWidget *search_button;

 GtkWidget* scrolledwindow;

 GtkCellRenderer *renderer;

 app = gnome_app_new("GnomeCD", "CD Database");

 gtk_window_set_position(GTK_WINDOW(app), GTK_WIN_POS_CENTER);

 gtk_window_set_defeult_size(GTK_WINDOW(app ), 540, 480);

 gnome_app_create_menus(GNOME_APP(app), menubar);

6. Создайте панель инструментов с помощью стандартных пиктограмм GTK+ и свяжите с ней функции обратного вызова:

 toolbar = gtk_toolbar_new();

 gnome_app_add_toolbar(GNOME_APP(app), GTK_TOOLBAR(toolbar),

  "toolbar", BONOBO_DOCK_ITEM_BEH_EXCLUSIVE,

  BONOBO_DOCK_TOP, 1, 0, 0);

 gtk_container_set_border_width(GTK_CONTAINER(toolbar), 1);

 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), "gtk-add", "Add new CD",

  NULL, GTK_SIGNAL_FUNC(on_addcd_activate), NULL, -1);

 gtk_toolbar_insert_space(GTK_TOOLBAR(toolbar), 1);

 gtk_toolbar_insert_stock(GTK_TOOLBAR(toolbar), "gtk-quit",

  "Quit the Application", NULL, GTK_SIGNAL_FUNC(on_quit_activate), NULL, -1);

7. Затем вы создаете виджеты, используемые для поиска компакт-диска:

 label = gtk_label_new("Search String:");

 entry = gtk_entry_new();

 search_button = gtk_button_new_with_label("Search");

8. Окно gtk_scrolled_window предоставляет полосы прокрутки, позволяя виджету (в данном случае GtkTreeView) превышать размеры окна:

 scrolledwindow = gtk_scrolled_window_new(NULL, NULL);

 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolledwindow),

  GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);

9. Далее скомпонуйте интерфейс, применяя стандартным способом виджеты-контейнеры:

 vbox = gtk_vbox_new(FALSE, 0);

 hbox = gtk_hbox_new(FALSE, 0);

 gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(hbox), entry, TRUE, TRUE, 6);

 gtk_box_pack_start(GTK_BOX(hbox), search_button, FALSE, FALSE, 5);

 gtk_box_pack_start(GTK_BOX(vbox), scrolledwindow, TRUE, TRUE, 0);

10. Затем создайте виджет GtkTreeView, вставьте три столбца и поместите его в окно GtkScrolledWindow:

 treeview = gtk_tree_view_new();

 renderer = gtk_cell_renderer_text_new();

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),

  COLUMN_TITLE, "Title", renderer, "text", COLUMN_TITLE, NULL);

 gtk_tree_view_insert_column_with_attributes(GTK_TREE_VIEW(treeview),

  COLUMN_ARTIST, "Artist", renderer, "text", CQLUMN_ARTIST, NULL);

 gtk_tree_view_insert_column_with_attrihutes(GTK_TREE_VIEW(treeview),

  COLUMN_CATALOGUE, "Catalogue", renderer, "text", COLUMN_CATALOGUE, NULL);

 gtk_tree_view_set_search_column(GTK_TREE_VIEW(treeview),

  COLUMN_TITLE);

 gtk_container_add(GTK_CONTAINER(scrolledwindow), treeview);

11. В заключение задайте содержимое главного окна, вставьте строку состояния GnomeApp и подсоедините нужные обратные вызовы:

 gnome_app_set_contents(GNOMEAPP(app), vbox);

 appbar = gnome_appbar_new(FALSE, TRUE, GNOME_PREFERENCES_NEVER);

 gnome_app_set_statusbar(GNOME_APP(app), appbar);

 gnome_app_install_menu_hints(GNOME_APP(app), menubar);

 g_signal_connect(GTK_OBJECT(search_button), "clicked",

  GTK_SIGNAL_FUNC(on_search_button_clicked), entry);

 g_signal_connect(GTK_OBJECT(app), "delete_event",

  GTK_SIGNAL_FUNC(delete_event_handler), NULL);

 g_signal_connect(GTK_OBJECT(app), "destroy",

  GTK_SIGNAL_FUNC(quit_app), NULL);

 return app;

}

12. Следующая функция создает простое диалоговое окно, позволяющее добавлять новый компакт-диск в базу данных. Оно состоит из полей ввода для исполнителя, названия и полей каталога, а также кнопок OK и Cancel:

GtkWidget *create_addcd_dialog() {

 artist_entry = gtk_entry_new();

 title_entry = gtk_entry_new();

 catalogue_entry = gtk_entry_new();

 GtkWidget* dialog = gtk_dialog_new_with_buttons("Add CD",

  app,

  GTK_DIALOG_DESTROY_WITH_PARENT,

  GTK_STOCK_OK,

  GTK_RESPONSE_ACCEPT,

  GTK_STOCK_CANCEL,

  GTK_RESPONSE_REJECT,

  NULL);

 add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),

  "Artist", artist_entry);

 add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),

  "Title", title_entry);

 add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),

  "Catalogue", catalogue_entry);

 g_signal_connect(GTK_OBJECT(dialog), "response",

  GTK_SIGNAL_FUNC(addcd_dialog_button_clicked), NULL);

 return dialog;

}

13. База данных требует регистрации пользователя перед выполнением запросов к ней, поэтому данная функция создает диалоговое окно для ввода имени пользователя и пароля:

GtkWidget *create_login_dialog() {

 GtkWidget* dialog = gtk_dialog_new_with_buttons("Database Login",

  app, GTK_DIALOG_MODAL, GTK_STOCK_OK, GTK_RESPONSE_ACCEPT,

  GTK_STOCK_CANCEL, GTK_RESPONSE_REJECT, NULL);

 username_entry = gtk_entry_new();

 password_entry = gtk_entry_new();

 gtk_entry_set_visibility(GTK_ENTRY(password_entry), FALSE);

 add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),

  "Username", username_entry);

 add_widget_with_label(GTK_CONTAINER(GTK_DIALOG(dialog)->vbox),

  "Password", password_entry);

 gtk_widget_show_all(GTK_WIDGET(GTK_DIALOG(dialog)->vbox));


На Facebook В Твиттере В Instagram В Одноклассниках Мы Вконтакте
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!

Похожие книги на "Основы программирования в Linux"

Книги похожие на "Основы программирования в Linux" читать онлайн или скачать бесплатно полные версии.


Понравилась книга? Оставьте Ваш комментарий, поделитесь впечатлениями или расскажите друзьям

Все книги автора Нейл Мэтью

Нейл Мэтью - все книги автора в одном месте на сайте онлайн библиотеки LibFox.

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Отзывы о "Нейл Мэтью - Основы программирования в Linux"

Отзывы читателей о книге "Основы программирования в Linux", комментарии и мнения людей о произведении.

А что Вы думаете о книге? Оставьте Ваш отзыв.