GtkList widget�� GtkListItem���� widget�� ���� ������ �����̳�ó�� �۵��ϵ��� ����Ǿ���.
�ϳ��� GtkList widget�� �̺�Ʈ�� ���� �ڽŸ��� ������, ���� white�� �ڽŸ��� background ���� ������ �ִ�. GtkContainer�κ��� �Ļ��Ǿ�� GTK_CONTAINER(List) ��ũ�θ� �̿��� �ٷ� �� �ִµ�, �̰Ϳ� ���ؼ��� GtkContainer widget�� ���� �κ��� �����ϱ� �ٶ���.
GtkList widget�� ����ü ���ǿ��� �ξ� �� ��̷ο� �ϳ��� �ʵ尡 �ִ�. �ٷ� �̰��̴�.
struct _GtkList
{
...
GList *selection;
guint selection_mode;
...
};
GtkList�� selection �ʵ�� ���� ���õ� ��� �����۵��� ���Ḯ��Ʈ�� ����Ű�� �ְ�, ���� ���õ� �� ���ٸ� 'NULL'�̴�. ���� �츮�� ������ ���õ� ���� �˱����� GTK_LIST()->selection �ʵ带 ����������, �� ������ �ʵ���� gtk_list*() �Լ���ν� �����ǰ� �����Ƿ� �װ��� �����ؼ��� �ȵȴ�. GtkList�� selection_mode�� GtkList �� GTK_LIST()->selection �ʵ��� �͵鿡 ���� ���� �Ӽ��� �����Ѵ�.
selection_mode�� �̰͵� �� �ϳ��� �� ���̴�.
����Ʈ�� GTK_SELECTION_MULTIPLE�̴�.
void GtkList::selection_changed (GtkList *LIST)
�� �ñ׳��� GtkList�� selection �ʵ尡 ��ȭ���� ������ ��û�ȴ�. �̰��� GtkList�� child�� ���õǰų� ������ �����Ǿ��� �� ���Ѵ�.
void GtkList::select_child (GtkList *LIST, GtkWidget *CHILD)
�� �ñ׳��� GtkList�� child�� ���õǷ��� �� �� ���Ѵ�. �̰��� �ַ� gtk_list_select_item()�� gtk_list_select_child()�� ȣ���� ��, ��ư�� ������ �� � ���ϸ�, ������ child���� GtkList�� �������ų� �����Ǿ��� �� �ٸ� ���ε鿡 ���� ���������� ���ϱ �Ѵ�.
void GtkList::unselect_child (GtkList *LIST, GtkWidget *CHILD)
�̰��� GtkList�� child�� ���� ������ �� ��û�ȴ�. �̰��� �ַ� gtk_list_ unselect_item()�̳� gtk_list_unselect_child()�Լ��� �θ� ���� ��ư�� ������ �� ���ϸ�, ���� GtkList�� child���� �������ų� ������ �� �Ǵٸ� ���ο� ���� ���������� ���Ѵ�.
guint gtk_list_get_type (void)
�̰��� GtkList���� �ĺ��ڸ� �����Ѵ�.
GtkWidget* gtk_list_new (void)
�̰��� ���ο� GtkList object�� �����. �� �� widget �� GtkWidget object�� ���� �������� ���·� ���ϵȴ�. �������� ��쿣 'NULL'�� �����Ѵ�.
void gtk_list_insert_items (GtkList *LIST, GList *ITEMS, gint POSITION)
POSITION���� �����ؼ�, ����Ʈ �������� LIST�� �����Ѵ�. ITEMS�� �� ����� ������ �����Ͱ� ���Ӱ� ������� GtkListItem�� ����Ű���� �Ǿ��ִ�, ������ ���Ḯ��Ʈ��. ITEMS�� GList������ LIST�� ���� ��������.
void gtk_list_append_items (GtkList *LIST, GList *ITEMS)
LIST�� �������� gtk_list_insert_items() ó�� ����Ʈ �������� �����Ѵ�. ITEMS�� GList ������ LIST�� ���� ��������.
void gtk_list_prepend_items (GtkList *LIST, GList *ITEMS)
LIST�� �� ù�κп� gtk_list_insert_items() ó�� ����Ʈ �������� �����Ѵ�. ���� ITEMS�� GList ������ LIST�� ���� ��������.
void gtk_list_remove_items (GtkList *LIST, GList *ITEMS)
LIST�κ��� ����Ʈ �������� �����Ѵ�. ITEMS�� �� ����� ����Ÿ �����Ͱ� LIST�� ���� child�� ����Ű���� �Ǿ� �ִ� ���� ���Ḯ��Ʈ��. ����ؼ� g_list_free(ITEMS)�� �θ��� ���� ȣ���ϴ� ����� å���̴�. ���� ȣ���ڴ� ����Ʈ ������ �� ��ü�� �ı��� �־�� �Ѵ�.
void gtk_list_clear_items (GtkList *LIST, gint START, gint END)
LIST�κ��� ����Ʈ �������� �����ϰ� �ı����ش�. LIST������ ���� ��ġ�� START���� END ���̷� ������ ������ �ִ� widget�� ������ ���� ���̴�.
void gtk_list_select_item (GtkList *LIST, gint ITEM)
LIST������ ���� ��ġ�� ���� ������ ����Ʈ �������� ���� GtkList::select_ child �ñ׳��� ��û�Ѵ�.
void gtk_list_unselect_item (GtkList *LIST, gint ITEM)
���� �������� ��쿡 GtkList::unselect_child �ñ׳��� ��û�Ѵ�.
void gtk_list_select_child (GtkList *LIST, GtkWidget *CHILD)
�־��� CHILD�� ���� GtkList::select_child �ñ׳��� ��û�Ѵ�.
void gtk_list_unselect_child (GtkList *LIST, GtkWidget *CHILD)
�־��� CHILD�� ���� GtkList::unselect_child �ñ׳��� ��û�Ѵ�.
gint gtk_list_child_position (GtkList *LIST, GtkWidget *CHILD)
LIST������ CHILD�� ��ġ�� �����Ѵ�. '-1'�� �������� ���� ���ϰ��̴�.
void gtk_list_set_selection_mode (GtkList *LIST, GtkSelectionMode MODE)
���� ��� MODE�� LIST�� �����Ѵ�. ���� GTK_SELECTION_SINGLE, GTK_ SELECTION_BROWSE, GTK_SELECTION_MULTIPLE, GTK_SELECTION_EXTENDED �߿��� �ϳ��� �ȴ�.
GtkList* GTK_LIST (gpointer OBJ)
��κ� ������ GtkList* ������ ij��Ʈ�Ѵ�. �� �ڼ��� �˷��� �Ϲ����� ��ũ�θ� �����϶�.
GtkListClass* GTK_LIST_CLASS (gpointer CLASS)
��κ��� ������ GtkListClass* ������ ij��Ʈ�Ѵ�. �Ϲ����� ��ũ�θ� �����϶�.
gint GTK_IS_LIST (gpointer OBJ)
� ��κ��� �����Ͱ� GtkList object�� �����ϴ��� �����Ѵ�. �ڼ��� �˷��� �Ϲ����� ��ũ�θ� �����϶�.
�̹� ������ GtkList�� ������ ��ȭ��Ű�� ���� ������ ���̴�. ���� ����Ʈ �����۵��� ���콺 ������ ��ư���� ���������ν� ���� ��Ƶ� �� �ְ� �� ���̴�.
/* �� ���α��� �������Ϸ��� �̷��� �Ѵ�.
* $ gcc -I/usr/local/include/ -lgtk -lgdk -lglib -lX11 -lm -Wall main.c
*/
/* GTK+�� ����� include�Ѵ�.
* printf()�Լ� ������ <stdio.h>�� include�Ѵ�.
*/
#include <gtk/gtk.h>
#include <stdio.h>
/* �̰��� ����Ʈ �����ۿ� ������ �����ϱ� ���� ������ �ĺ��ڴ�. */
const gchar *list_item_data_key="list_item_data";
/* �츮�� GtkList widget�� �����ų �ñ׳� �ڵ鷯���� �Լ�����. */
static void sigh_print_selection (GtkWidget *gtklist,
gpointer func_data);
static void sigh_button_event (GtkWidget *gtklist,
GdkEventButton *event,
GtkWidget *frame);
/* ����� �������̽��� �����ϴ� main �Լ� */
gint main (int argc, gchar *argv[])
{
GtkWidget *separator;
GtkWidget *window;
GtkWidget *vbox;
GtkWidget *scrolled_window;
GtkWidget *frame;
GtkWidget *gtklist;
GtkWidget *button;
GtkWidget *list_item;
GList *dlist;
guint i;
gchar buffer[64];
/* gtk+(���� ��������� gdk��)�� �ʱ�ȭ�Ѵ�. */
gtk_init(&argc, &argv);
/* ��� widget�� �־�� ������ �����.
* ���� �Ŵ����� close-window-event�� �ٷ�� ���� gtk_main_quit()
* �Լ��� ������ "destroy" �̺�Ʈ�� �����Ų��. */
window=gtk_window_new(GTK_WINDOW_TOPLEVEL);
gtk_window_set_title(GTK_WINDOW(window), "GtkList Example");
gtk_signal_connect(GTK_OBJECT(window),
"destroy",
GTK_SIGNAL_FUNC(gtk_main_quit),
NULL);
/* ���� ���ο� widget���� �������� ������ �ڽ��� �־�� �Ѵ�. */
vbox=gtk_vbox_new(FALSE, 5);
gtk_container_border_width(GTK_CONTAINER(vbox), 5);
gtk_container_add(GTK_CONTAINER(window), vbox);
gtk_widget_show(vbox);
/* GtkList widget�� �־�ΰ��� �ϴ� ��ũ�ѵ� ������. */
scrolled_window=gtk_scrolled_window_new(NULL, NULL);
gtk_widget_set_usize(scrolled_window, 250, 150);
gtk_container_add(GTK_CONTAINER(vbox), scrolled_window);
gtk_widget_show(scrolled_window);
/* GtkList widget�� �����. selection�� ���� ������ �� ���õ�
* �������� ����Ʈ�� �����ֱ� ���� sigh_print_selection()
* �ñ׳� �ڵ鷯 �Լ��� GtkList�� "selection_changed" �ñ׳ο�
* ������� �д�. */
gtklist=gtk_list_new();
gtk_container_add(GTK_CONTAINER(scrolled_window), gtklist);
gtk_widget_show(gtklist);
gtk_signal_connect(GTK_OBJECT(gtklist),
"selection_changed",
GTK_SIGNAL_FUNC(sigh_print_selection),
NULL);
/* ����Ʈ �������� ���ξ� �� "Prison"�� �����. ;) */
frame=gtk_frame_new("Prison");
gtk_widget_set_usize(frame, 200, 50);
gtk_container_border_width(GTK_CONTAINER(frame), 5);
gtk_frame_set_shadow_type(GTK_FRAME(frame), GTK_SHADOW_OUT);
gtk_container_add(GTK_CONTAINER(vbox), frame);
gtk_widget_show(frame);
/* ����Ʈ �������� "arresting"�� �ٷ� GtkList�� sigh_button_event()
* �ñ׳� �ڵ鷯�� �����Ų��. */
gtk_signal_connect(GTK_OBJECT(gtklist),
"button_release_event",
GTK_SIGNAL_FUNC(sigh_button_event),
frame);
/* Separator�� �����. */
separator=gtk_hseparator_new();
gtk_container_add(GTK_CONTAINER(vbox), separator);
gtk_widget_show(separator);
/* ������ ��ư�� ����� �װ��� "clicked" �ñ׳��� ������ �ı���
* �����Ų��. */
button=gtk_button_new_with_label("Close");
gtk_container_add(GTK_CONTAINER(vbox), button);
gtk_widget_show(button);
gtk_signal_connect_object(GTK_OBJECT(button),
"clicked",
GTK_SIGNAL_FUNC(gtk_widget_destroy),
GTK_OBJECT(window));
/* ���� ���� ���� ������ �ִ� 5���� ����Ʈ �������� �����,
* gtk_container_add()�ν� ���� GtkList�� ÷���Ѵ�.
* ���� ���� �ؽ�Ʈ ���ڿ��� �����ϰ� �װ��� �� ����Ʈ ��������
* list_item_data_key�� ���ս�Ų��. */
for (i=0; i<5; i++) {
GtkWidget *label;
gchar *string;
sprintf(buffer, "ListItemContainer with Label #%d", i);
label=gtk_label_new(buffer);
list_item=gtk_list_item_new();
gtk_container_add(GTK_CONTAINER(list_item), label);
gtk_widget_show(label);
gtk_container_add(GTK_CONTAINER(gtklist), list_item);
gtk_widget_show(list_item);
gtk_label_get(GTK_LABEL(label), &string);
gtk_object_set_data(GTK_OBJECT(list_item),
list_item_data_key,
string);
}
/* ���⼭��, gtk_list_item_new_with_label()�� �̿��ؼ�
* �ٸ� 5���� ���� �����.
* �̹����� �鿡 ���� �����Ͱ� �����Ƿ� ���� �ؽ�Ʈ
* ���ڿ��� ������ �� ����, ���Ƿ� �� ����Ʈ ��������
* list_item_data_key�� �Ȱ��� �ؽ�Ʈ ���ڿ��� �����Ѵ�.
* ����Ʈ �������� �߰��ϱ� ���ؼ� �츮�� ���� ���� ����
* ����Ʈ(GList)�� �о�ְ�, gtk_list_append_items()��
* ȣ�����ش�. �츮�� �����۵��� ���� ���� ����Ʈ�� �о�ֱ�
* ���� g_list_prepend()�� ����ϱ� ������, ���� ������
* �ڷ� �̾�����(descending) ���� �ȴ�. �ݴ�� g_list_append()
* �� �̿��ߴٸ� �տ��� �ٿ�����(ascending)�� �� ���̴�. */
dlist=NULL;
for (; i<10; i++) {
sprintf(buffer, "List Item with Label %d", i);
list_item=gtk_list_item_new_with_label(buffer);
dlist=g_list_prepend(dlist, list_item);
gtk_widget_show(list_item);
gtk_object_set_data(GTK_OBJECT(list_item),
list_item_data_key,
"ListItem with integrated Label");
}
gtk_list_append_items(GTK_LIST(gtklist), dlist);
/* ������ �츮�� ������ ���� �;� �Ѵ�, �ƴѰ�? ;) */
gtk_widget_show(window);
/* GTK�� main �̺�Ʈ ������ �õ��Ѵ�. */
gtk_main();
/* gtk_main_quit()�� ȣ��Ǹ� ����� ����� �´�. */
return 0;
}
/* GtkList�� ��ư press/release �̺�Ʈ��� ����� �ñ׳�
* �ڵ鷯 �Լ����̴�. */
void
sigh_button_event (GtkWidget *gtklist,
GdkEventButton *event,
GtkWidget *frame)
{
/* ����°, �� ���� �����ʿ� �ִ� ���콺 ��ư�� �������� ����
* � ���� �ϵ��� �Ѵ�. */
if (event->type==GDK_BUTTON_RELEASE &&
event->button==3) {
GList *dlist, *free_list;
GtkWidget *new_prisoner;
/* ���� ���õ� �������� �����ͼ� �츮�� ���� prisoner��
* �Ѵ�. */
dlist=GTK_LIST(gtklist)->selection;
if (dlist)
new_prisoner=GTK_WIDGET(dlist->data);
else
new_prisoner=NULL;
/* �̹� ������� ����Ʈ �������� �����ϰ�, ����
* �ٽ� ����Ʈ�� �����ش�.
* gtk_container_children()�� �����ϴ� ���� ���� ����Ʈ��
* �� ����(free)����� ���� ����϶�. */
dlist=gtk_container_children(GTK_CONTAINER(frame));
free_list=dlist;
while (dlist) {
GtkWidget *list_item;
list_item=dlist->data;
gtk_widget_reparent(list_item, gtklist);
dlist=dlist->next;
}
g_list_free(free_list);
/* ���� prisoner�� ������ �Ǹ�, GtkList�κ��� �װ���
* �����ϰ� "Prison" ���������� �о�ִ´�.
* �������� ���� unselect�Ǿ�� �Ѵ�. */
if (new_prisoner) {
GList static_dlist;
static_dlist.data=new_prisoner;
static_dlist.next=NULL;
static_dlist.prev=NULL;
gtk_list_unselect_child(GTK_LIST(gtklist),
new_prisoner);
gtk_widget_reparent(new_prisoner, frame);
}
}
}
/* �̰��� GtkList�� "selection_changed" �ñ׳��� ����Ű��
* ȣ��Ǵ� �ñ׳� �ڵ鷯��. */
void
sigh_print_selection (GtkWidget *gtklist,
gpointer func_data)
{
GList *dlist;
/* GtkList�� ���õ� �������� ���� ���� ����Ʈ�� �����´�.
* �̰��� read-only�� �ٷ�� ���� ���� ����! */
dlist=GTK_LIST(gtklist)->selection;
/* ���õ� �������� ���� ���� �ƹ� �۾��� �� �� ���� �װ�
* ����ڿ��� �˷��ش�. */
if (!dlist) {
g_print("Selection cleared\n");
return;
}
/* ������ �����߰� �װ��� ����Ʈ�Ѵ�. */
g_print("The selection is a ");
/* ���� ���� ����Ʈ���� ����Ʈ �������� ���ϰ�
* list_item_data_key�� ���õ� ������ �����Ѵ�.
* ���� ���� �װ� ����Ʈ�Ѵ�. */
while (dlist) {
GtkObject *list_item;
gchar *item_data_string;
list_item=GTK_OBJECT(dlist->data);
item_data_string=gtk_object_get_data(list_item,
list_item_data_key);
g_print("%s ", item_data_string);
dlist=dlist->next;
}
g_print("\n");
}
GtkListItem widget�� �ϳ��� child�� �־�� �� �ִ� �����̳�ó�� �۵��ϵ��� ����Ǿ�����, GtkList widget�� ���� child���� ���� ���ϵ��� �̰� ���� selection/deselection �Լ����� �����ϰ� �ִ�.
GtkListItem�� �̺�Ʈ�� �ޱ� ���ؼ� �ڽŸ��� ������ ������ �ְ�, ���� ���� white�� �ڽŸ��� background ���� ������ �ִ�.
�̰��� GtkItem���κ��� ���������� �Ļ��Ǿ��� ������ ���� GTK_ITEM( ListItem) ��ũ�η� �ٷ���� �� ������, �ڼ��� ���� GtkItem widget�� �����ϸ� �� ���̴�. �밳 GtkListItem�� �ĺ��DZ� ���� ���� ������ �ִ�, ���� ��� GtkList�� �ִ� filenameó��. ���� convenient �Լ� gtk_list_item_new_with _label()�� �����ȴ�. ���� ȿ���� �ڽŸ��� GtkLabel�� �������ν� ���� �� �ִ�. GtkListItem�� ���̾����� �����̳ʿ� �Բ� xalign=0, yalign=0.5�� �����ϸ� �ȴ�.
GtkListItem�� �� GtkLabel�� ���� �ִ� ���� �ƴϸ�, �츮�� GtkVBox �Ǵ� GtkArrow ���� ������ ���� �ִ�.
GtkListItem�� �ڽŸ��� �ñ׳��� ���� �������� �ʰ�, GtkItem�� �ñ׳��� ��ӹ´�. �ڼ��� ���� GtkItem�� ���ؼ� �����϶�.
guint gtk_list_item_get_type (void)
GtkListItem���� �ĺ��ڸ� �����Ѵ�.
GtkWidget* gtk_list_item_new (void)
���ο� GtkListItem object�� �����. �� ���ο� widget�� GtkWidget object �� ���� �����ͷμ� ���ϵȴ�. 'NULL'�� �������� ����� ���ϰ��̴�.
GtkWidget* gtk_list_item_new_with_label (gchar *LABEL)
�ϳ����� child�� �ϳ��� GtkLabel�� ������ GtkListItem object�� �����. �� ���ο� widget�� GtkWidget object�� ���� �����ͷμ� ���ϵȴ�. 'NULL'�� �������� ���� ���ϰ��̴�.
void gtk_list_item_select (GtkListItem *LIST_ITEM)
�̰��� �ٺ�������, GtkItem::select �ñ׳��� ���� gtk_item_select�� ȣ���ϴ� �� �־�� wrapper��(GTK_ITEM(list_item)). �ڼ��� ���� GtkItem�� �����϶�.
void gtk_list_item_deselect (GtkListItem *LIST_ITEM)
�̰��� GtkItem::deselect �ñ׳��� ���� gtk_item_deselect�� ȣ���ϴ� �� �־�� wrapper��(GTK_ITEM(list_item)). ���� �ڼ��� ���� GtkItem�� ���� �϶�.
GtkListItem* GTK_LIST_ITEM (gpointer OBJ)
��κ��� ������ GtkListItem*���� ij��Ʈ�Ѵ�. �ڼ��� ���� �Ϲ����� ��ũ�θ� �����϶�.
GtkListItemClass* GTK_LIST_ITEM_CLASS (gpointer CLASS)
��κ��� ������ GtkListItemClass*�� ij��Ʈ�Ѵ�. ���� �Ϲ����� ��ũ�ο� ���� �κ��� �����϶�.
gint GTK_IS_LIST_ITEM (gpointer OBJ)
� �����Ͱ� GtkListItem object�� �����ϰ� �ִ����� �����Ѵ�. �ڼ��� ���� �Ϲ����� ��ũ�ο� ���ؼ� �����϶�.
GtkList�� ���� ������ �����϶�. �װ��� GtkListItem�� �̿���� ���ؼ��� �� �ٷ�� �ִ�.