ΠΡΠ΄Π΅Ρ Π½Π°ΠΏΠΈΡΠ°Π½ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΡΠΉ ΠΊΠΎΠ΄ Π΄Π»Ρ ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΊΠ»ΡΡΠ΅Π²ΡΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΠΉ:
β‘ ΡΠ΅Π³ΠΈΡΡΡΠ°ΡΠΈΡ Π² Π±Π°Π·Π΅ Π΄Π°Π½Π½ΡΡ ΠΈΠ· 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));