Єдина Країна! Единая Страна!

GTK+ — 7. Прапорці та комбіновані списки

Квітень 22nd, 2009

Продовжуємо огляд віджетів основних елементів графічного користувацького інтерфейсу. Цього разу про кнопки-прапорці та комбіновані списки.

GtkCheckButton

GtkCheckButton — віджет, який має два стани: увімкнено і вимкнено. Стан “увімкнено” візуально відтворюється, як встановлений прапорець.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <gtk /gtk.h>
 
 
void toggle_title(GtkWidget *widget, gpointer window)
{
    if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
        gtk_window_set_title(window, "GtkCheckButton");
    } else {
        gtk_window_set_title(window, "");
    }
}
 
int main(int argc, char** argv)
{
    GtkWidget *window;
    GtkWidget *frame;
    GtkWidget *check;
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
    gtk_window_set_title(GTK_WINDOW(window), "GtkCheckButton");
 
 
    frame = gtk_fixed_new();
    gtk_container_add(GTK_CONTAINER(window), frame);
 
    check = gtk_check_button_new_with_label("Show title");
    gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);
    GTK_WIDGET_UNSET_FLAGS(check, GTK_CAN_FOCUS);
    gtk_fixed_put(GTK_FIXED(frame), check, 50, 50);
 
    g_signal_connect_swapped(window, "destroy", G_CALLBACK(gtk_main_quit), NULL);
    g_signal_connect(check, "clicked", G_CALLBACK(toggle_title), (gpointer) window);
 
    gtk_widget_show_all(window);
 
    gtk_main();
 
    return 0;
}
</gtk>

У нашому вищенаведеному прикладі ми створили просту кнопку-прапорець, заголовок до якої буде відображатись, або ж буде відсутнім, залежно від того, буде встановлено прапорець, чи ні.

Створюємо віджет GtkCheckButton, зі станок за замовчуванням “прапорець поставлено”:

1
2
check = gtk_check_button_new_with_label("Show title");
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check), TRUE);

Тут ми прибираємо з нашої кнопки-прапорця фокус:

1
GTK_WIDGET_UNSET_FLAGS(check, GTK_CAN_FOCUS);

А цей код змінюєватиме заголовок кнопки в залежності від стану папорця:

1
2
3
4
5
if (gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(widget))) {
    gtk_window_set_title(window, "GtkCheckButton");
} else {
    gtk_window_set_title(window, "");
}

gtkcheckbutton

GtkComboBox

GtkComboBox — віджет, який дозволяє користувачеві обирати одну опцію з переліку.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
#include <gtk/gtk.h>
 
 
void combo_selected(GtkWidget *widget, gpointer window)
{
    gchar *text =  gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
    gtk_label_set_text(GTK_LABEL(window), text);
 
    g_free(text);
}
 
int main(int argc, char *argv[])
{
    GtkWidget *window;
    GtkWidget *fixed;
    GtkWidget *combo;
    GtkWidget *label;
 
    gtk_init(&argc, &argv);
 
    window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
    gtk_window_set_title(GTK_WINDOW(window), "GtkCombo");
    gtk_window_set_position(GTK_WINDOW(window), GTK_WIN_POS_CENTER);
    gtk_window_set_default_size(GTK_WINDOW(window), 230, 150);
 
    fixed = gtk_fixed_new();
 
    combo = gtk_combo_box_new_text();
    gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Ubuntu");
    gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Debian");
    gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Fedora");
    gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Slackware");
    gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Gentoo");
 
    gtk_fixed_put(GTK_FIXED(fixed), combo, 50, 50);
    gtk_container_add(GTK_CONTAINER(window), fixed);
 
    label = gtk_label_new("-");
    gtk_fixed_put(GTK_FIXED(fixed), label, 50, 110);
 
    g_signal_connect_swapped(G_OBJECT(window), "destroy", G_CALLBACK(gtk_main_quit), G_OBJECT(window));
    g_signal_connect(G_OBJECT(combo), "changed", G_CALLBACK(combo_selected), (gpointer) label);
 
    gtk_widget_show_all(window);
 
    gtk_main();
 
    return 0;
}

У вищенаведеному прикладі ми створили комбінований список і текстову мітку. Комбінований список має п’ять опцій. Це назви дистрибутивів лінукс. Тексова мітка показуватиме нам поточний обраний з переліку дистрибутив:

1
2
3
4
5
6
combo = gtk_combo_box_new_text();
gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Ubuntu");
gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Mandriva");
gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Fedora");
gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Gentoo");
gtk_combo_box_append_text(GTK_COMBO_BOX(combo), "Debian");

Створюємо GtkComboBox з переліком дистрибутиівів лінукс:

1
label = gtk_label_new("-");

Також створюємо текствову мітку, заголовком якої буде поточний обраний дистрибутив у GtkComboBox:

1
2
3
gchar *text =  gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gtk_label_set_text(GTK_LABEL(window), text);
g_free(text);

А цей код мінятиме заголовок текстової мітки у залежності від обраного дистрибутиву:

1
2
3
4
gchar *text =  gtk_combo_box_get_active_text(GTK_COMBO_BOX(widget));
gtk_label_set_text(GTK_LABEL(window), text);
 
g_free(text);

gtkcombobox

Коментарі

коментарі

Powered by Facebook Comments

Leave a Reply