ΠΠ΅ΡΠ²Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠΏΠΈΡΠΊΠ°, Π° Π²ΡΠΎΡΠ°Ρ β Π² Π΅Π³ΠΎ ΠΊΠΎΠ½Π΅Ρ. ΠΡΠ»ΠΈ Π²Π°ΠΌ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π²ΡΡΠ°Π²ΠΈΡΡ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, Π²Π°ΠΌ Π½ΡΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
void gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]);
ΠΠ½Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π²ΡΡΠ°Π²ΠΈΡΡ Π½ΠΎΠ²ΡΠΉ ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΡΡΠΎΠΊΡ row. ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ ΡΡΡΠΎΠΊ ΡΠΏΠΈΡΠΊΠ° Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ 0.
ΠΠ»Ρ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ² ΡΠΏΠΈΡΠΊΠ° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΎΠ΄Π½Ρ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ:
void gtk_clist_remove(GtkCList *clist, gint row);
void gtk_clist_clear(GtkCList *clist);
ΠΠ΅ΡΠ²Π°Ρ ΡΠ΄Π°Π»ΡΠ΅Ρ ΡΡΡΠΎΠΊΡ row, Π° Π²ΡΠΎΡΠ°Ρ ΠΎΡΠΈΡΠ°Π΅Ρ Π²Π΅ΡΡ ΡΠΏΠΈΡΠΎΠΊ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ Π»ΠΈΡΡΠΈΠ½Π³ 23.8, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° ΡΠΎ ΡΠΏΠΈΡΠΊΠΎΠΌ CList. ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ½Π°Π±ΠΆΠ΅Π½Π° ΠΏΠΎΠ΄ΡΠΎΠ±Π½ΡΠΌΠΈ ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΠΌΠΈ, ΠΏΠΎΡΡΠΎΠΌΡ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΡ Π²Π½ΠΈΠΌΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΡΠΈΡΠ°ΡΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΠΊΠΎΠ΄.
ΠΠΈΡΡΠΈΠ½Π³ 23.8. ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΈΠ΄ΠΆΠΈΡΠ° CList
#include <gtk/gtk.h>
/* ΠΡΠΆΠ΅Π½ Π΄Π»Ρ ΡΡΠ½ΠΊΡΠΈΠΈ setlocale() */
#include <locale.h>
/* ΠΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΡΠΏΠΈΡΠΎΠΊ - ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΠΎΠ±Π°Π²ΠΈΡΡ */
void button_add_clicked(gpointer data) {
int indx;
/* ΠΡΠΎΡΡΠΎΠΉ ΡΠΏΠΈΡΠΎΠΊ */
gchar *dist[4][2] = { { "1", "Red Hat Linux" },
{ "2", "Mandrake Linux" },
{ "3", "ALT Linux" },
{ "4", "ASP Linux" } };
for(indx=0; indx < 4; indx++)
gtk_clist_append((GtkCList *) data, dist[indx]);
return;
}
/* ΠΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π½Π°ΠΆΠ°ΡΠΈΡ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΡΠΈΡΡΠΈΡΡ */
void button_clear_clicked(gpointer data) {
/* ΠΡΠΈΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ */
gtk_clist_clear((GtkCList *)data);
return;
}
/* Π€ΡΠ½ΠΊΡΠΈΡ ΠΏΡΡΡΠ΅Ρ/ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ */
void button_hide_show_clicked(gpointer data) {
/* 0 = ΡΠ΅ΠΉΡΠ°Ρ Π²ΠΈΠ΄ΠΈΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ */
static short int flag = 0;
if (flag == 0) {
/* ΠΏΡΡΡΠ΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ */
gtk_clist_column_titles_hide((GtkCList *)data);
flag++;
} else {
/* ΠΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅ΠΌ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ */
gtk_clist_column_titles_show((GtkCList *)data);
}
return;
}
/* ΠΠ°Π½Π½Π°Ρ ΡΡΠ½ΠΊΡΠΈΡ Π±ΡΠ΄Π΅Ρ Π²ΡΠ·Π²Π°Π½Π°, Π΅ΡΠ»ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ Π²ΡΠ±Π΅ΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½Ρ */
void selection_made(GtkWidget *clist, gint row,
gint column, GdkEventButton *event, gpointer data) {
gchar *text;
/* ΠΠΎΠ»ΡΡΠ°Π΅ΠΌ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ ΡΠ΅ΠΊΡΡ (ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΡΠΏΠΈΡΠΊΠ°) */
gtk_clist_get_text(GTK_CLIST(clist), row, column, &text);
/* ΠΡΠΎΡΡΠΎ Π²ΡΠ²ΠΎΠ΄ΠΈΠΌ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ */
g_print(
"ΠΡ Π²ΡΠ±ΡΠ°Π»ΠΈ ΡΡΠ΄ %d. ΠΠΎΠ»ΠΎΠ½ΠΊΠ° %d, ΡΠ΅ΠΊΡΡ Π² ΡΡΠ΅ΠΉΠΊΠ΅ %s\n\n",
row, column, text);
return;
}
int main(int argc, gchar *argv[]) {
GtkWidget *window;
GtkWidget *vbox, *hbox;
GtkWidget *scrolled_window, *clist;
GtkWidget *button_add, *button_clear, *button_hide_show;
gchar *titles[2] = { "ΠΠΎΠΌΠ΅Ρ", "ΠΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²" };
setlocale(LC_ALL, "ru_RU.KOI8-R");
// ΠΡΠΆΠ½ΠΎ Π²ΡΠ·Π²Π°ΡΡ ΠΠ gtk_init()
gtk_init(&argc, &argv);
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_widget_set_usize(GTK_WIDGET(window), 300, 150);
gtk_window_set_title(GTK_WINDOW(window), "Π‘ΠΏΠΈΡΠΎΠΊ");
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(gtk_main_quit), NULL);
vbox=gtk_vbox_new(FALSE, 5);
gtk_container_set_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΎΠΊΠ½ΠΎ Ρ ΠΏΠΎΠ»ΠΎΡΠΊΠ°ΠΌΠΈ ΠΏΡΠΎΠΊΡΡΡΠΊΠΈ ΠΈ ΡΠΏΠ°ΠΊΠΎΠ²ΡΠ²Π°Π΅ΠΌ Π²
Π½Π΅Π³ΠΎ ΡΠΏΠΈΡΠΎΠΊ */
scrolled_window = gtk_scrolled_window_new(NULL, NULL);
gtk_scrolled_window_set_policy(
GTK_SCROLLED_WINDOW(scrolled_window), GTK_POLICY_AUTOMATIC,
GTK_POLIΠ‘Y_ALWAYS);
gtk_box_pack_start(GTK_BOX(vbox), scrolled_window,
TRUE, TRUE, 0);
gtk_widget_show(scrolled_window);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Ρ Π΄Π²ΡΠΌΡ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠ°ΠΌΠΈ */
clist = gtk_clist_new_with_titles(2, titles);
/* ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΠ΄Π΅Π»Π΅Π½ΠΈΡ */
gtk_signal_connect(GTK_OBJECT(clist), "select_row",
GTK_SIGNAL_FUNC(selection_made), NULL);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠ΅Π½Ρ Π΄Π»Ρ ΡΠ°ΠΌΠΊΠΈ ΡΠΏΠΈΡΠΊΠ° */
gtk_clist_set_shadow_type(GTK_CLIST(clist),
GTK_SHADOW_OUT);
/* Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΠΌ ΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΊΠΎΠ»ΠΎΠ½ΠΊΠΈ. ΠΠΎΠ»ΠΎΠ½ΠΊΠΈ Π½ΡΠΌΠ΅ΡΡΡΡΡΡ
Ρ 0 */
gtk_clist_set_column_width(GTK_CLIST(clist), 0, 150);
/* ΠΠΎΠΌΠ΅ΡΠ°Π΅ΠΌ ΡΠΏΠΈΡΠΎΠΊ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ */
gtk_container_add(GTK_CONTAINER(scrolled_window), clist);
gtk_widget_show(clist);
/* Π‘ΠΎΠ·Π΄Π°Π΅ΠΌ ΠΈ ΡΠ°Π·ΠΌΠ΅ΡΠ°Π΅ΠΌ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΏΠΈΡΠΎΠΊ,
ΠΡΠΈΡΡΠΈΡΡ, Π‘ΠΏΡΡΡΠ°ΡΡ/ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ */
hbox = gtk_hbox_new(FALSE, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, FALSE, TRUE, 0);
gtk_widget_show(hbox);
button_add = gtk_button_new_with_label("ΠΠΎΠ±Π°Π²ΠΈΡΡ");
button_clear = gtk_button_new_with_label("ΠΡΠΈΡΡΠΈΡΡ");
button_hide_show = gtk_button_new_with_label("Π‘ΠΏΡΡΡΠ°ΡΡ/ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ");
gtk_box_pack_start(GTK_BOX(hbox), button_add,
TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button_clear,
TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), button_hide_show,
TRUE, TRUE, 0);
/* Π‘Π²ΡΠ·ΡΠ²Π°Π΅ΠΌ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ */
gtk_signal_connect_object(GTK_OBJECT(button_add),
"clicked",
GTK_SIGNAL_FUNC(button_add_clicked), (gpointer) clist);
gtk_signal_connect_object(GTK_OBJECT(button_clear),
"clicked",
GTK_SIGNAL_FUNC(button_clear_clicked),(gpointer)clist);
gtk_signal_connect_object(GTK_OBJECT(button_hide_show),
"clicked", GTK_SIGNAL_FUNC(button_hide_show_clicked),
(gpointer)clist);
gtk_widget_show(button_add);
gtk_widget_show(button_clear);
gtk_widget_show(button_hide_show);
gtk_widget_show(window);
gtk_main();
return(0);
}
ΠΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠ°ΠΊ: ΠΏΡΠΈ Π½Π°ΠΆΠ°ΡΠΈΠΈ ΠΊΠ½ΠΎΠΏΠΊΠΈ ΠΠΎΠ±Π°Π²ΠΈΡΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΏΠΈΡΠΎΠΊ, ΡΠΎΡΡΠΎΡΡΠΈΠΉ ΠΈΠ· Π½Π°Π·Π²Π°Π½ΠΈΠΉ ΡΠ΅ΡΡΡΠ΅Ρ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΡ Π΄ΠΈΡΡΡΠΈΠ±ΡΡΠΈΠ²ΠΎΠ² Linux. ΠΠ½ΠΎΠΏΠΊΠ° ΠΡΠΈΡΡΠΈΡΡ ΠΎΡΠΈΡΠ°Π΅Ρ ΡΠΏΠΈΡΠΎΠΊ, Π° Π‘ΠΏΡΡΡΠ°ΡΡ/ΠΎΡΠΎΠ±ΡΠ°Π·ΠΈΡΡ ΠΏΡΡΡΠ΅Ρ ΠΈΠ»ΠΈ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°Π΅Ρ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΈ ΡΠΏΠΈΡΠΊΠ°. ΠΡΠΈ ΡΠ΅Π»ΡΠΊΠ΅ Π½Π° ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΡΡΠ΅ΠΉΠΊΠ΅ ΡΠΏΠΈΡΠΊΠ° Π½Π° ΠΊΠΎΠ½ΡΠΎΠ»Ρ Π²ΡΠ²ΠΎΠ΄ΠΈΡΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ β ΠΊΠΎΠΎΡΠ΄ΠΈΠ½Π°ΡΡ ΡΡΠ΅ΠΉΠΊΠΈ ΠΈ Π΅Π΅ ΡΠ΅ΠΊΡΡ.
Π ΠΈΡ 23.5.
< β¦ ΡΡΡ. 639β640 β¦ >
void destroy(GtkWidget *widget, gpointer data);
static void button_click(GtkWidget *widget, gpointer data);
int main(int argc, char *argv[]) {
GtkWidget *window;
GtkWidget *button;
GtkWidget *label;
w_ctrl ctrl;
gchar *caption;
setlocale(LC_ALL, "ru_RU.KOI8-R");
caption = g_strdup_printf("ΠΠΎΠ±ΡΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΡΠΎΠΊ!");
gtk_init(&argc, &argv);
window = gtk_window_new( GTK_WINDOW_TOPLEVEL);
gtk_signal_connect(GTK_OBJECT(window), "delete_event",
GTK_SIGNAL_FUNC(delete_event), NULL);
gtk_signal_connect(GTK_OBJECT(window), "destroy",
GTK_SIGNAL_FUNC(destroy), &ctrl);
gtk_window_set_title(GTK_WINDOW(window), caption);
gtk_container_set_border_width(GTK_CONTAINER(window), 10);
button = gtk_button_new();
label = gtk_label_new(" -== ΠΠ°ΠΆΠΌΠΈΡΠ΅ ΠΊΠ½ΠΎΠΏΠΊΡ ==- " );
ctrl.app_window = window;
ctrl.label = label;
gtk_container_add(GTK_CONTAINER(button), label);
gtk_container_add(GTK_CONTAINER(window), button);
gtk_signal_connect(GTK_OBJECT(button), "clicked",
GTK_SIGNAL_FUNC(button_click), &ctrl);
gtk_widget_show_all(window);
gtk_main();
return(0);
}
// ****************************************************
void quit_confirm(GtkWidget *widget) {
GtkWidget *quit_form;
GtkWidget *label;
GtkWidget *yes_button, *no_button;
quit_form = gtk_dialog_new();
gtk_window_set_position(GTK_WINDOW(quit_form),
GTK_WIN_POS_CENTER);
gtk_container_set_border_width(GTK_CONTAINER(quit_form),
10);
label =
gtk_label_new("\n ΠΡ Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΎΡΠΈΡΠ΅ Π²ΡΠΉΡΠΈ? \n*);
yes_button = gtk_button_new_with_label("ΠΠ°");
no_button = gtk_button_new_with_label("ΠΠ΅Ρ");
gtk_signal_connect_object(GTK_OBJECT(yes_button),
"clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy), (gpointer)widget);
gtk_container_add(
GTK_CONTAINER(GTK_DIALOG(quit_form)->action_area), yes_button);
gtk_signal_connect_object(GTK_OBJECT(no_button),
"clicked", GTK_SIGNAL_FUNC(gtk_widget_destroy),
(gpointer)quit_form);
gtk_container_add(
GTK_CONTAINER(GTK_DIALOG(quit_form)->action_area), no_button);
gtk_container_add(
GTK_CONTAINER(GTK_DIALOG(quit_form)->vbox), label);
gtk_window_set_modal(GTK_WINDOW(quit_form), TRUE);
gtk_widget_show_all(quit_form);
}
gint delete_event(GtkWidget *widget, GdkEvent *event,
gpointer data) {
quit_confirm(widget);
return(TRUE);
}
void destroy(GtkWidget *widget, gpointer data) {
printf{"GOOD-BYE!");
gtk_main_quit();
}
static void button_click(GtkWidget *widget,
gpointer data ) {
static gint i = 0;
GtkWidget *app_window;
GtkWidget *label;
gchar msg[256];
app_window = GTK_WIDGET(((w_ctrl *)data)->app_window);
label = GTK_WIDGET(((w_ctrl*)data)->label);
i++;
sprintf(msg, "ΠΡ Π½Π°ΠΆΠ°Π»ΠΈ ΠΊΠ½ΠΎΠΏΠΊΡ: %d ΡΠ°Π·(Π°)", i);