¸®´ª½º ±âŸ ÀÚ·á

HomePage Backward Forward Post Reply List
Delete Modify
  Á¦¸ñ   gtk °­Á #6 1998/07/10 (17:32)
À̸§ ±èÈ¿¿ø
¹øÈ£ 90
Á¶È¸ 270
º»¹®
********************
*** 9. ¸®½ºÆ® 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´Â À̰͵é Áß Çϳª°¡ µÉ °ÍÀÌ´Ù.

 o GTK_SELECTION_SINGLE - ¼±ÅÃÀº 'NULL'À̰ųª ÇϳªÀÇ ¼±ÅÃµÈ ¾ÆÀÌÅÛÀ» ÇâÇÑ
 GList* Çü Æ÷ÀÎÅÍ´Ù.

 o GTK_SELECTION_BROWSE - ¸®½ºÆ®°¡ widgetÀ» °¡Áö°í ÀÖÁö ¾Ê°Å³ª ¶Ç´Â ¹«°üÇÑ
 °Í¸¸À» °¡Áö°í ÀÖÀ» ¶§ ¼±ÅÃÀº 'NULL'ÀÌ´Ù.  ¾Æ´Ï¸é ±×°ÍÀº ÇϳªÀÇ GList
 ±¸Á¶Ã¼¸¦ ÇâÇÑ GList* Æ÷ÀÎÅ͸¦ Æ÷ÇÔÇÏ°í, µû¶ó¼­ Á¤È®È÷ ÇϳªÀÇ ¸®½ºÆ® ¾ÆÀÌÅÛ
 À» Æ÷ÇÔÇÏ°Ô µÈ´Ù.

 o GTK_SELECTION_MULTIPLE - ¾Æ¹«·± ¾ÆÀÌÅÛÀÌ ¼±ÅõÇÁö ¾Ê¾Ò´Ù¸é 'NULL'ÀÌ°í,
 ¶Ç´Â ù¹ø° ¼±ÅÃµÈ ¾ÆÀÌÅÛÀ» ÇâÇÑ GList* Æ÷ÀÎÅÍ°¡ µÈ´Ù.  ÀÌ°ÍÀº µÎ¹ø°
 ¼±ÅÃµÈ ¾ÆÀÌÅÛÀÇ ±¸Á¶Ã¼¸¦ °¡¸®Å°°Ô µÇ°í, ±×·¸°Ô µ¹¾Æ°£´Ù.

 o GTK_SELECTION_EXTENDED - ¼±ÅÃÀº ¾ðÁ¦³ª 'NULL'ÀÌ´Ù.

 µðÆúÆ®´Â GTK_SELECTION_MULTIPLEÀÌ´Ù.

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

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

***
*** 9-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");
 }

***
*** 9-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 µîÀ» ´õÇØÁÙ ¼öµµ ÀÖ´Ù.

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

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

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

***
*** 9-8. ÆÄÀÏ ¼±ÅÃ
***

HomePage Backward Forward Post Reply List
1998 by swindler