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

Тут можно читать онлайн Нейл Мэтью - Основы программирования в Linux - бесплатно полную версию книги (целиком) без сокращений. Жанр: comp-osnet, издательство «БХВ-Петербург», год 2009. Здесь Вы можете читать полную версию (весь текст) онлайн без регистрации и SMS на сайте лучшей интернет библиотеки ЛибКинг или прочесть краткое содержание (суть), предисловие и аннотацию. Так же сможете купить и скачать торрент в электронном формате fb2, найти и слушать аудиокнигу на русском языке или узнать сколько частей в серии и всего страниц в публикации. Читателям доступно смотреть обложку, картинки, описание и отзывы (комментарии) о произведении.
  • Название:
    Основы программирования в Linux
  • Автор:
  • Жанр:
  • Издательство:
    «БХВ-Петербург»
  • Год:
    2009
  • Город:
    Санкт-Петербург
  • ISBN:
    978-5-9775-0289-4
  • Рейтинг:
    4/5. Голосов: 91
  • Избранное:
    Добавить в избранное
  • Отзывы:
  • Ваша оценка:
    • 80
    • 1
    • 2
    • 3
    • 4
    • 5

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

Основы программирования в Linux - описание и краткое содержание, автор Нейл Мэтью, читайте бесплатно онлайн на сайте электронной библиотеки LibKing.Ru

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

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

Основы программирования в Linux - читать онлайн бесплатно полную версию (весь текст целиком)

Основы программирования в Linux - читать книгу онлайн бесплатно, автор Нейл Мэтью
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

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));

return dialog;

}

Упражнение 16.13. callbacks.c

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

1. Сначала необходимо включить заголовочный файл и ссылки на некоторые определенные в файле interface.c глобальные переменные для чтения и изменения конкретных свойств виджетов:

#include "app_gnome.h"

extern GtkWidget *treeview;

extern GtkWidget *app;

extern GtkWidget *appbar;

extern GtkWidget *artist_entry;

extern GtkWidget *title_entry;

extern GtkWidget *catalogue_entry;

static GtkWidget *addcd_dialog;

2. В функции quit_appвы вызываете функцию database_endдля чистки и закрытия базы данных перед выходом:

void quit_app(GtkWidget* window, gpointer data) {

database_end();

gtk_main_quit();

}

3. Следующая функция выводит простое диалоговое окно для подтверждения вашего желания завершить приложение, возвращая отклик в виде значения gboolean:

gboolean confirm_exit() {

gint result;

GtkWidget* dialog = gtk_message_dialog_new(NULL,

GTK_DIALOG_MODAL, GTK_MESSAGE_QUESTION,

GTK_BUTTONS_YES_NO, "Are you sure you want to quit?");

result = gtk_dialog_run(GTK_DIALOG(dialog));

gtk_widget_destroy(dialog);

return (result == GTK_RESPONSE_YES);

}

4. delete_event_handler— функция обратного вызова, которую вы связываете с событием главного окна Gdk delete event. Событие генерируется, когда вы пытаетесь закрыть окно до того (что существенно), как послан сигнал GTK+ уничтожения окна:

gboolean delete_event_handler(GtkWidget* window, GdkEvent *event,

gpointer data) {

return !confirm_exit();

}

5. Следующая функция вызывается, когда мышью щелкается кнопка в диалоговом окне вставки компакт-диска. Если вы щелкнули мышью кнопку OK, программа копирует строки в массив типа char и передает его данные в интерфейсную функцию MySQL add_cd:

void addcd_dialog_button_clicked(GtkDialog * dialog, gint response,

gpointer userdata) {

const gchar *artist_const;

const gchar* title_const;

const gchar *catalogue_const;

gchar artist[200];

gchar title[200];

gchar catalogue[200];

gint *cd_id;

if (response == GTK_RESPONSE_ACCEPT) {

artist_const = gtk_entry_get_text(GTK_ENTRY(artist_entry));

title_const = gtk_entry_get_text(GTK_ENTRY(title_entry));

catalogue_const = gtk_entry_get_text(GTK_ENTRY(catalogue_entry));

strcpy(artist, artist_const);

strcpy(title, title_const);

strcpy(catalogue, catalogue_const);

add_cd(artist, title, catalogue, cd_id);

}

addcd_dialog = NULL;

gtk_widget_destroy(GTK_WIDGET(dialog));

}

6. Далее идет самая важная часть приложения: извлечение результатов поиска и заполнение объекта GtkTreeView:

void on_search_button_clicked(GtkButton* button, gpointer userdata) {

struct cd_search_st cd_res;

struct current_cd_st cd;

struct current_tracks_st ct;

gint res1, res2, res3;

gchar track_title[110];

const gchar *search_string_const;

gchar search string[200];

gchar search_text[200];

gint i = 0, j = 0;

GtkTreeStore *tree_store;

GtkTreeIter parent_iter, child_iter;

memset(&track_title, 0, sizeof(track_title));

7. Здесь вы получаете строку поиска из виджета ввода, копируете ее в переменную и выбираете соответствующие ID компакт-дисков:

search_string_const = gtk_entry_get_text(GTK_ENTRY(userdata));

strcpy(search_string, search_string_const);

resl = find_cds(search_string, &cd_res);

8. Затем вы обновляете appbarдля вывода сообщения, информирующего пользователя о результатах поиска:

sprintf(search_text, "Displaying %d result(s) for search string ' %s'",

MIN(res1, MAX_CD_RESULT), search_string);

gnome_appbar_push(GNOME_APPBAR(appbar), search_text);

9. Теперь у вас есть результаты поиска, и можно заполнять ими модель GtkTreeStore. Для каждого ID компакт-диска необходимо извлечь соответствующую структуру типа current_cd_st, которая содержит название и исполнителя CD, и затем извлечь список дорожек диска. В заголовочном файле app_mysql.h задано ограничение количества элементов, MAX_CD_RESULT, для того, чтобы не было переполнения модели GtkTreeStore:

tree_store = gtk_tree_store_new(N_COLUMNS,

G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING);

while (i < res1 && i < MAX_CD_RESULT) {

res2 = get_cd(cd_res.cd_id[i], &cd);

/* В модель вставляется новая строка */

gtk_tree_store_append(tree_store, &parent_iter, NULL);

gtk_tree_store_set(tree_store, &parent_iter, COLUMN_TITLE,

cd.title, COLUMN_ARTIST, cd.artist_name, COLUMN_CATALOGUE,

cd.catalogue, -1);

res3 = get_cd_tracks(cd_res.cd_id[i++], &ct);

j = 0;

/* Заполнение дерева дорожками текущего компакт-диска */

while (j < res3) {

sprintf(track_title, " Track %d. ", j+1);

strcat(track_title, ct.track[j++]);

gtk_tree_store_append(tree_store, &child_iter, &parent_iter);

gtk_tree_store_set(tree_store, &child_iter,

COLUMN_TITLE, track_title, -1);

}

}

gtk_tree_view_set_model(GTK_TREE_VIEW(treeview),

GTK_TREE_MODEL(tree_store));

}

10. Диалоговое окно addcdнемодальное. Следовательно, перед его созданием и отображением вы проверяете, не активно ли оно уже:

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать


Нейл Мэтью читать все книги автора по порядку

Нейл Мэтью - все книги автора в одном месте читать по порядку полные версии на сайте онлайн библиотеки LibKing.




Основы программирования в Linux отзывы


Отзывы читателей о книге Основы программирования в Linux, автор: Нейл Мэтью. Читайте комментарии и мнения людей о произведении.


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

Напишите свой комментарий
x