´ÙÀ½ ÀÌÀü Â÷·Ê

10. ¸®½ºÆ® widget

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ÀÌ´Ù.

10.1 ½Ã±×³Î

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µéÀÌ ´õÇØÁö°Å³ª »èÁ¦µÉ ¶§ ¶Ç´Ù¸¥ ¿øÀο¡ ÀÇÇØ °£Á¢ÀûÀ¸·Î ¹ß»ýÇÑ´Ù.

10.2 ÇÔ¼ö

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¸¦ ÂüÁ¶ÇÏ´ÂÁö °áÁ¤ÇÑ´Ù. ÀÚ¼¼È÷ ¾Ë·Á¸é ÀϹÝÀûÀÎ ¸ÅÅ©·Î¸¦ ÂüÁ¶Ç϶ó.

10.3 ¿¹Á¦

À̹ø ¿¹Á¦´Â 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");
}

10.4 ¸®½ºÆ® ¾ÆÀÌÅÛ widget

GtkListItem widgetÀº ÇϳªÀÇ child¸¦ ³Ö¾îµÑ ¼ö ÀÖ´Â ÄÁÅ×À̳Êó·³ ÀÛµ¿Çϵµ·Ï ¼³°èµÇ¾úÀ¸¸ç, GtkList widgetÀÌ ±×ÀÇ childµéÀ» À§ÇØ ±×·¯ÇϵíÀÌ ÀÌ°Í ¿ª½Ã selection/deselection ÇÔ¼öµéÀ» Á¦°øÇÏ°í ÀÖ´Ù.

GtkListItemÀº À̺¥Æ®¸¦ ¹Þ±â À§Çؼ­ ÀڽŸ¸ÀÇ À©µµ¸¦ °¡Áö°í ÀÖ°í, ¶ÇÇÑ º¸Åë whiteÀÎ ÀڽŸ¸ÀÇ background »ö±òµµ °¡Áö°í ÀÖ´Ù.

ÀÌ°ÍÀÌ GtkItemÀ¸·ÎºÎÅÍ Á÷Á¢ÀûÀ¸·Î ÆÄ»ýµÇ¾ú±â ¶§¹®¿¡ ¿ª½Ã GTK_ITEM( ListItem) ¸ÅÅ©·Î·Î ´Ù·ç¾îÁú ¼ö ÀÖÀ¸¸ç, ÀÚ¼¼ÇÑ °ÍÀº GtkItem widgetÀ» ÂüÁ¶ÇÏ¸é µÉ °ÍÀÌ´Ù. ´ë°³ GtkListItemÀº ½Äº°µÇ±â À§ÇÑ ¶óº§À» °¡Áö°í ÀÖ´Ù, ¿¹¸¦ µé¸é GtkList¿¡ ÀÖ´Â filenameó·³. µû¶ó¼­ convenient ÇÔ¼ö gtk_list_item_new_with _label()ÀÌ Á¦°øµÈ´Ù. °°Àº È¿°ú¸¦ ÀڽŸ¸ÀÇ GtkLabelÀ» ¸¸µêÀ¸·Î½á ¾òÀ» ¼ö ÀÖ´Ù. GtkListItem¿¡ µÚÀ̾îÁö´Â ÄÁÅ×ÀÌ³Ê¿Í ÇÔ²² xalign=0, yalign=0.5·Î ¼¼ÆÃÇÏ¸é µÈ´Ù.

GtkListItem¿¡ ²À GtkLabelÀ» ´õÇØ ÁÖ´Â °ÍÀº ¾Æ´Ï¸ç, ¿ì¸®´Â GtkVBox ¶Ç´Â GtkArrow µîÀ» ´õÇØÁÙ ¼öµµ ÀÖ´Ù.

10.5 ½Ã±×³Î

GtkListItemÀº ÀڽŸ¸ÀÇ ½Ã±×³ÎÀ» »õ·Î ¸¸µéÁö´Â ¾Ê°í, GtkItemÀÇ ½Ã±×³ÎÀ» »ó¼Ó¹Þ´Â´Ù. ÀÚ¼¼ÇÑ °ÍÀº GtkItem¿¡ ´ëÇؼ­ ÂüÁ¶Ç϶ó.

10.6 ÇÔ¼ö

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¸¦ ÂüÁ¶ÇÏ°í ÀÖ´ÂÁö¸¦ °áÁ¤ÇÑ´Ù. ÀÚ¼¼ÇÑ °ÍÀº ÀϹÝÀûÀÎ ¸ÅÅ©·Î¿¡ ´ëÇؼ­ ÂüÁ¶Ç϶ó.

10.7 ¿¹Á¦

GtkList¿¡ ´ëÇÑ ¿¹Á¦¸¦ ÂüÁ¶Ç϶ó. ±×°ÍÀº GtkListItemÀÇ ÀÌ¿ë¹ý¿¡ ´ëÇؼ­µµ Àß ´Ù·ç°í ÀÖ´Ù.


´ÙÀ½ ÀÌÀü Â÷·Ê