GLADE¸¦ »ç¿ëÇÑ ¸®´ª½º µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀÌ¼Ç °³¹ß <author> ¼±Á¤ÇÊ <htmlurl url="mailto:simje@maninet.com" name="simje@maninet.com"> <date>March 29th, 2000, ÃÖÁ¾ °»½Å : May 15th, 2000. <abstract> <bf>GLADE</bf>¶õ GNU General Public License(GPL)À» µû¸£´Â <bf>GTK+ User Interface Builder</bf>ÀÌ´Ù. ½±°Ô ¾ê±âÇϸé <bf>GTK+</bf>¶ó´Â ¶óÀ̺귯¸®¸¦ ÀÌ¿ëÇÏ¿© GUI »ç¿ëÀÚ ÀÎÅÍÆäÀ̽º¸¦ ¸¸µå´Â RAD(Rapid Application Development) ÅøÀÌ´Ù. ÀÌ°ÍÀÌ ¹«¾ùÀÎÁö ±×¸®°í À̸¦ ¾î¶»°Ô ±¸ÀÔ/¼³Ä¡ÇÏ´ÂÁö ±×¸®°í Á¶±×¸¸ ¾îÇÃÄÉÀÌ¼Ç »ùÇÃÀÎ ÅؽºÆ® ¿¡µðÅ͸¦ °³¹ßÇÏ´Â ±¸Ã¼ÀûÀÎ ´Ü°èµéÀÌ ¾î¶»°Ô µÇ´ÂÁö ¸®´ª½º ȯ°æÇÏ¿¡¼­, ¼Ò°³ ÇÏ°íÀÚ ÇÏ´Â °ÍÀÌ ÀÌ ¹®¼­ÀÇ ¸ñÀûÀÌ´Ù. ±×¸®°í <bf>GLADE</bf>°¡ ºÎÁ·ÇÑ ºÎºÐµé¿¡ ´ëÇÑ ³»¿ëÀ» ´ã°í ÀÖ´Ù. ÀÌ ¹®¼­¿¡ ´ëÇÑ Á¶¾ð/ºñÆÇ/¹®ÀÇ°¡ ÀÖÀ¸½Å ºÐÀº À̸ÞÀÏ·Î ¿¬¶ôÀ» Áֽñ⠹ٶõ´Ù. ´ÙÀ½ ¹öÀüÀº Á» ´õ ±í¼÷ÇÑ ³»¿ëÀ» ´Ù·ç¾îº¸µµ·Ï ÇÏ°Ú´Ù. </abstract> <toc> <p> <!-- *************************************************************** --> <sect>GLADE¿Í ±¸ÀÔ ¹× ¼³Ä¡ <!-- *************************************************************** --> <p> <sect1>GLADE¶õ ¹«¾ùÀΰ¡? <p> <htmlurl url="http://glade.pn.org" name="GLADE"> ´Â ´Ù¸¥ À©µµ¿ìÁî(Windows NT/9x¸¦ ¾ÕÀ¸·Î ÀÌ·¸°Ô ºÎ¸£°Ú´Ù)Visual Studio¿Í ¸¹Àº ºÎºÐÀÌ À¯»çÇϸç Widget Template Palette(À©µµ¿ìÁî ¿ë¾î·Î ÇÑ´Ù¸é ControlÂë¿¡ ÇØ´çÇÏ°Ú´Ù) ÅÛÇø®Æ® ÆÈ·¹Æ®¿¡ ÀÖ´Â À§Á¬µéÀ» µå·¡±× ¾Ø µå·ÓÀ¸·Î GUI Æû°ú ±× À§ÀÇ GUI °´Ã¼µéÀ» »ý¼ºÇÏ°í À̵éÀÇ ÇÁ·ÎÆÛƼµéÀ» Á¶Á¤ÇÏ°í ½Ã±×³Î Çڵ鷯(À©µµ¿ìÁî·Î ÇÑ´Ù¸é ¸Þ½ÃÁö ¸Ê ÇÔ¼ö) µî·Ï/»èÁ¦/º¯°æÇÏ¿© C, C++ ¼Ò½º(C++ÀÇ °æ¿ì addonÀÎ <bf>glade--</bf>°¡ ÇÊ¿ä)¸¦ »ý¼ºÇÒ ¼ö ÀÖ´Â ÅëÇÕ °³¹ß ȯ°æÀÌ´Ù. ¾ÕÀ¸·Î C ¼Ò½º¸¦ »ý¼ºÇÏ´Â °Í¿¡¸¸ ÃÐÁ¡À» ¸ÂÃç¼­ ¾ê±âÇÏ°Ú´Ù. <sect1>GLADE¸¦ ¾îµð¼­ ±¸ÇÒ °ÍÀΰ¡? <p> <sect2>Source¿Í Binary <p> <bf>GLADE</bf>Àº ÇöÀç 0.5.7¹öÀü±îÁö releaseµÇ¾úÀ¸¸ç °ø½Ä web site´Â <htmlurl url="http://glade.pn.org" name="http://glade.pn.org">ÀÌ´Ù. ´ÙÀ½ ±×¸²<ref id="fig_1" name="GLADE °ø½Ä Ȩ »çÀÌÆ®">Àº <bf>GLADE</bf>°ø½Ä Ȩ »çÀÌÆ® ¸ð½ÀÀÌ´Ù. <!-- ±×¸² 1 : glade_home_page --> <figure> <eps file="images/gladehomepage.eps" height="388pt"><!-- original 777 --> <img src="images/glade_home_page.gif"> <caption><label id="fig_1">GLADE °ø½Ä Ȩ »çÀÌÆ®</caption> </figure> ÀÌ°÷¿¡¼­ °¡Àå ÃÖ±Ù ¹öÀüÀÇ ¼Ò½º¸¦ ´Ù¿î·ÎµåÇÒ ¼ö ÀÖÀ¸¸ç ÀÌ°÷¿¡´Â ¹Ì¸® ¸¸µé¾îÁø binary¸¦ ÆÑŰ¡ÇÑ RedHat RPM, Debian, Slackware, NetBsd packageµéµµ ¸¶·ÃµÇ¾î ÀÖ´Ù. ±ÞÇϽŠºÐÀº ÀÌ·± binaryÀÇ ÆÑŰ¡À» ¼±ÅÃÇÒ ¼öµµ ÀÖ°Ú´Ù. <sect2>¹®¼­ <p> ¾ÆÁ÷ °ø½Ä ¹èÆ÷µÇ´Â ¹®¼­´Â ¾ø´Ù. ±×·¯³ª ´ÙÀ½°ú °°Àº ³»¿ëµéÀ» ÂüÁ¶ÇÒ ¼ö ÀÖ°Ú´Ù: <itemize> <item><bf>GLADE</bf> ¼Ò½º ÀÚü <item><bf>GLADE</bf> ¼Ò½ºÀÇ doc µð·ºÅ丮¿¡ ÀÖ´Â ÆÄÀϵé <item><bf>GLADE</bf> ¼Ò½ºÀÇ examples µð·ºÅ丮¿¡ ÀÖ´Â ³»¿ë <item>Designing a GTK+ interface graphically with Glade and libglade (<htmlurl url="http://www-4.ibm.com/software/developer/library/gnome-glade/" name="http://www-4.ibm.com/software/developer/library/gnome-glade/">) <item>Glade turbo-start (<htmlurl url="http://glade.pn.org/tutorial.txt" name="http://glade.pn.org/tutorial.txt">) </itemize> <sect1>GLADE ¼³Ä¡ <p> <sect2> ¼³Ä¡¸¦ À§Çؼ­ ÇÊ¿äÇÑ °Íµé(requirements) <p> <bf>GLADE</bf>¸¦ ¼³Ä¡ÇÏ·Á¸é ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÇÊ¿äÇÏ´Ù. <itemize> <item>binary¿¡µµ ÇÊ¿äÇÑ ¶óÀ̺귯¸®µé <descrip> <tag><bf>GTK+ 1.2.0 ÀÌ»ó</bf></tag> -- <url url="http://www.gtk.org"> <tag><bf>gnome-libs 1.0.16 ÀÌ»ó</bf></tag> -- Gnome Áö¿øÀÌ ÇÊ¿äÇÑ °æ¿ì¿¡ ÇÊ¿ä <tag><bf>Gettext 0.10.35</bf></tag> -- <url url="ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz"> ÀÌ°ÍÀº gettext¸¦ Áö¿øÇÏ´Â ¾îÇø®ÄÉÀ̼ÇÀ» ÀÛ¼ºÇÏ°íÀÚ ÇÒ ¶§ ÇÊ¿ä. </descrip> <item>¼Ò½º·Î ¼³Ä¡Çϱâ À§Çؼ­ ÇÊ¿äÇÑ º¸Á¶ µµ±¸µé <descrip> <tag><bf>Automake 1.4</bf></tag> -- <url url="ftp://ftp.gnu.org/pub/gnu/automake">, <url url="http://www.gnu.org/software/automake">, <url url="ftp://rawhide.redhat.com/i386/RedHat/RPMS">. <tag><bf>Autoconf 2.13</bf></tag> -- <url url="ftp://ftp.gnu.org/pub/gnu/autoconf">, <url url="http://www.gnu.org/software/autoconf">, <url url="ftp://rawhide.redhat.com/i386/RedHat/RPMS"> </descrip> </itemize> <sect2> binary package ¼³Ä¡ <p> RPM µî°ú °°Àº binaryÇüÅÂÀÇ ÆÑÅ°Áö´Â ±× ¼³Ä¡°¡ ¿ëÀÌÇÏ´Ù. ¿¹¸¦ µé¾î¼­ RPMÀº ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù: <verb> rpm -Uvh glade-0.5.7-2.i386.rpm </verb> <sect2>¼Ò½º·Î ¼³Ä¡ <p> ¼Ò½º·Î ¼³Ä¡Çϱâ À§Çؼ­´Â automake 1.4¿Í autoconf 2.13ÀÌ ÇÊ¿äÇÏ´Ù. À̵éÀº ´ëºÎºÐÀÇ linux¿¡ ¼³Ä¡µÇ¾î ÀÖÀ» °ÍÀÌ´Ù. ¾ø´Ù¸é ã¾Æ¼­ ¼³Ä¡ÇØÁÖÀÚ. ±×¸®°í ¼Ò½º·Î ¼³Ä¡ÇÏ´Â °ÍÀº ´ÙÀ½°ú °°ÀÌ, ¸®´ª½º ¼Ò½º ¼³Ä¡ÀÇ ÀüÇüÀûÀÎ ¹æ¹ýÀ» µû¸£¸ç, ±×·¸°Ô ¾î·Á¿î °ÍÀÌ ¾Æ´Ï´Ù: <enum> <item> ¸Ç¸ÕÀú ÇØ¾ß ÇÒ ÀÏÀº ´Ù¿î ·Îµå ¹ÞÀº ÆÄÀÏÀÇ ¾ÐÃàÀ» Ǫ´Â °ÍÀÌ´Ù. <verb> [simje@rurulala /usr/src/local/gtk]$ tar xvzf glade-0.5.5.tar.gz </verb> <item> ´ÙÀ½Àº »õ·Î »ý¼ºµÈ µð·ºÅ丮·Î À̵¿Çؼ­ <em>configure</em>¸¦ ½ÇÇà½ÃŲ´Ù. <verb> [simje@rurulala /usr/src/local/gtk]$ cd glade-0.5.5 [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure </verb> ¿©±â¼­ ƯÁ¤ µð·ºÅ丮¿¡ ¼³Ä¡µÉ °ÍÀ» °Ü³ÉÇÑ´Ù¸é ¾Æ½Ã´Â ¹Ù¿Í °°ÀÌ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇØ¾ß ÇÑ´Ù. ±×·¸Áö ¾Ê´Â °æ¿ì µðÆúÆ®·Î <tt>/usr/local</tt>¸¦ <em>prefix</em>·Î ¼³Á¤ÇÏ°Ô µÈ´Ù. <verb> [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure --prefix=/usr </verb> <item> ´ÙÀ½Àº <em>make</em>À» ½ÇÇà½ÃÄÑ ÄÄÆÄÀÏÇÏ´Â °ÍÀÌ´Ù. <verb> [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ make </verb> <item> ÄÄÆÄÀÏÀÌ ³¡³ª¸é ´ÙÀ½°ú °°ÀÌ ¼³Ä¡ÇÑ´Ù. <verb> [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ su -c "make install" </verb> </enum> <!-- *************************************************************** --> <sect>GLADE¸¦ ÀÌ¿ëÇÑ ÅؽºÆ® ¿¡µðÅÍ °³¹ß - »çÀü ´Ü°è <!-- *************************************************************** --> <p> ¼³Ä¡°¡ Á¦´ë·Î µÇ¾ú´Â°¡? ±×·¸´Ù¸é ½ÇÇàÀ» Çغ¸ÀÚ. ÀÌ»ó¾øÀÌ ½ÇÇàµÇ¾ú´Ù¸é ÀÌÁ¦ ´Ü¼øÇÑ ¿¹Á¦ °³¹ßÀ» ÅëÇؼ­ <bf>GLADE</bf>¸¦ ÀÍÇô º¸µµ·Ï ÇÏÀÚ: <sect1>»çÀü Áö½Ä(preliminaries) <p> ±×³É µå·¡±× ¾Ø µå¶øÀ¸·Î °³¹ßÇÒ ¼öµµ ÀÖÁö¸¸ ¿ÜÇüÀ» ¸¸µå´Â °Íº¸´Ù Á» ´õ ±í¼÷È÷ µé¾î°¥·Á¸é ´ÙÀ½°ú °°Àº »çÀü Áö½ÄÀÌ ÇÊ¿äÇÏ´Ù: <sect2>¶óÀ̺귯¸® <p> GLADE°¡ GUI¸¦ ¸¸µé±â À§Çؼ­ ¸¹ÀÌ »ç¿ëÇÏ´Â ¶óÀ̺귯µé·Î½á ´ÙÀ½°ú °°Àº °ÍµéÀÌ ÀÖ´Ù: <descrip> <tag>GTK+</tag> ÀÌ°ÍÀº °¡Àå ±âÃÊÀûÀÎ ±â¹Ý Áö½ÄÀ¸·Î½á ´ÙÀ½°ú °°Àº ¹®¼­¸¦ ÅëÇؼ­ ½±°Ô ÀÚ°¡ ÇнÀ ÇÒ ¼ö ÀÖ´Ù <url url="http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html">. ±×·¯³ª Á» ´õ ÀÚ¼¼È÷ µé¿©´Ù º¸°Å³ª library APIµéÀ» º¸·Á¸é ´ÙÀ½ »çÀÌÆ®¸¦ ã¾Æ¾ß ÇÒ °ÍÀÌ´Ù. <url url="http://www.gtk.org">. ÀÌ°÷¿¡´Â ¸¹Àº ¹®¼­µé°ú ·¹ÆÛ·±½ºµéÀÌ ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â <tt>gtk_</tt><em>xxx</em>, ¸Þ¸ð¸® °´Ã¼´Â <tt>Gtk</tt><em>Xxx</em>, ¸ÅÅ©·Î´Â <tt>GTK_</tt><em>XXX</em> °ú °°Àº ÇüŸ¦ °¡Áø´Ù. <tag>GDK</tag> XlibÀÇ ²À´ë±â¿¡ ÀÖ´Â wrapper library·Î °í¾ÈµÈ ¶óÀ̺귯¸®ÀÌ´Ù. ÀÌ°ÍÀº GTK+°¡ ÇȽº¸ÊÀ̳ª ÆùÆ® Ä÷¯µîÀ» ´Ù·ê ¶§ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ¹®¼­µµ <url url="http://www.gtk.org">¿¡ °¡¸é ãÀ» ¼ö ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â <tt>gdk_</tt><em>xxx</em>, ¸Þ¸ð¸® °´Ã¼´Â <tt>Gdk</tt><em>Xxx</em>, ¸ÅÅ©·Î´Â <tt>GDK_</tt><em>XXX</em> °ú °°Àº ÇüŸ¦ °¡Áø´Ù. <tag>Glib</tag>ÀÌ°ÍÀº ¸Þ¸ð¸® ±¸Á¶(¸µÅ©µå ¸®½ºÆ®, ¸®½ºÆ®, Çؽ¬, ij½¬, Æ®¸®)³ª ŸÀ̸Ó, ÅؽºÆ® Ãâ·Â°ú °°Àº °ÍÀ» ´Ù·ê ¶§ »ç¿ëµÇ´Â °ÍÀÌ´Ù. ÀÌ¿¡ ´ëÇÑ ¹®¼­µµ <url url="http://www.gtk.org">¿¡ °¡¸é ãÀ» ¼ö ÀÖ´Ù. ÀÌ ¶óÀ̺귯¸® °´Ã¼µéÀº ´ë°³ ÇÔ¼ö´Â <tt>g_</tt><em>xxx</em>, ¸Þ¸ð¸® °´Ã¼´Â <tt>g</tt><em>xxx</em>, ¸ÅÅ©·Î´Â <tt>G</tt><em>XXX</em> °ú °°Àº ÇüŸ¦ °¡Áø´Ù. </descrip> À̸¦ ±¸Á¶È­Çؼ­ ±×¸²À¸·Î ³ªÅ¸³½´Ù¸é ´ÙÀ½°ú °°´Ù(<ref id="fig_2" name="gnome ¾ÆÅ°ÅØÃÄ">). <!-- ±×¸² 2 : gnome-arch --> <figure> <eps file="images/gnome-arch.eps" height="228pt"> <!-- 456 --> <img src="images/gnome-arch.gif"> <caption><label id="fig_2">gnome ¾ÆÅ°ÅØÃÄ</caption> </figure> <sect2>GTK+ Æ©Å͸®¾ó »ìÆ캸±â<label id="GTK_tutorial"> <p> <descrip> <tag>½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯</tag> À§ÀÇ <bf>GTK+</bf> Æ©Å͸®¾ó ÆäÀÌÁö(<url url="http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html">)¸¦ º¸¸é ¸¹Àº ±âÃÊÀûÀÎ ³»¿ëµé¿¡ ´ëÇÑ ¼³¸íÀÌ ÀÖ´Ù. À̵é Áß¿¡¼­ °¡Àå Áß¿äÇÏ´Ù ½ÍÀº °ÍÀº ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯(À©µµ¿ìÁîÀÇ ¸Þ½ÃÁö ¸Ê, ¸Þ½ÃÁö Çڵ鷯 µî°ú À¯»çÇÑ °³³ä)À̶ó ÇÒ ¼ö ÀÖ°Ú´Ù. ÀÌ´Â ´ë°³ ÇÊ¿äÇÑ Ã¢À» <em>main</em> ÇÔ¼ö(À©µµ¿ìÁîÀÇ <em>WinMain()</em>ÇÔ¼ö)¾È¿¡¼­ »ý¼ºÇÏ°í µð½ºÇ÷¹ÀÌÇÑ ÈÄ, ¸Þ½ÃÁö ÆßÇÁ¿¡ ÇØ´çÇÏ´Â <em>gtk_main()</em> ÇÔ¼ö·Î ÁøÀÔÇÏ´Â µ¥, ÀÌ ¾È¿¡¼­ »ç¿ëÀÚ ¾×¼Ç¿¡ ´ëÇÑ ½Ã±×³ÎµéÀÌ »ý¼ºµÇ¾î¼­ ¾îÇø®ÄÉÀ̼ǿ¡°Ô Àü´ÞµÈ´Ù. À̸¦ À§Çؼ­´Â »çÀü¿¡ ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¸ÊÇνÃÄÑÁÖ´Â Áغñ Á¶ÀÛÀ» ÇØÁÖ¾î¾ß ÇÏ´Â µ¥ ±× ¿ªÇÒÀ» ÇÏ´Â °ÍÀÌ <em>gtk_signal_connect()</em>¶ó´Â ÇÔ¼ö¸¦ ÅëÇؼ­ÀÌ´Ù. <bf>GLADE</bf>°¡ ¸¸µå´Â ¼Ò½º ÄÚµå´Â »ç¿ëÀÚ°¡ <bf>GLADE</bf>¸¦ ÅëÇؼ­ µî·ÏÇÏ´Â ½Ã±×³Îµé°ú ½Ã±×³Î Çڵ鷯°£ÀÇ ¸ÊÇÎÀ» ¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀΠâÀ» »ý¼ºÇÏ´Â ÇÔ¼ö<em>create_window1</em>(ÀÌ À̸§Àº Àý´ëÀûÀÌÁö ¾ÊÀ» ¼ö ÀÖ´Ù) ¾È¿¡¼­ ÇÏ°í ÀÖÀ½À» ¾ÕÀ¸·Î È®ÀÎÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¶ÇÇÑ ÀÌ ÇÔ¼ö ³»¿¡¼­´Â ¾îÇø®ÄÉÀ̼ÇÀÇ ¸ÞÀΠâÀ§¿¡ ºÙ¿© ³õÀº ¸¹Àº À§Á¬µéÀ» »ý¼ºÇÏ°í ¼Ó¼º ¼³Á¤ÇÏ´Â µîÀÇ ÀÏÀ» °âÇÑ´Ù. <tag>ÆÑÅ· ¹× ¼öÆò/¼öÁ÷/Å×ÀÌºí ¹Ú½º</tag> ´ÙÀ½À¸·Î ÆÑÅ·À̶ó´Â °³³äÀÎ µ¥ ÀÌ°ÍÀº À©µµ¿ìÁî¿¡´Â ¾ø´Â °³³äÀÌ´Ù(Ȥ½Ã MFC³»ºÎÀûÀ¸·Î ±¸ÇöµÇ¾î 󸮵ǴÂÁö´Â ¸ð¸£Áö¸¸ ¸»ÀÌ´Ù). ±×·¸°Ô ¾î·Á¿î °³³äÀº ¾Æ´Ï°í ¿©·¯°¡Áö À§Á¬À» »öÁ¾ÀÌ À߶ó ºÙÀ̱âó·³ ºÙ¿© ³ª°¥ ¶§ ¹Ø¿¡ ÀÖ´Â °Í°ú ±× À§¿¡ ÀÖ´Â °ÍÀÇ ¹ÙÅÁÀ¸·Î »ý°¢ÇÏ´Â °³³äÀ̸ç ÁÖ·Î ·¹À̾ƿô¿¡ ´ëÇÑ ±â´É Áö¿øÀ» ÇÑ´Ù. ÀÌ°ÍÀº À©µµ¿ìÁî º¸´Ù´Â ÀÚ¹Ù¿¡ ÀÖ´Â ÄÁÅ×ÀÌ³Ê ¹× ·¹À̾ƿô °³³ä°ú À¯»çÇÏ´Ù°í ÇÒ ¼ö ÀÖ°Ú´Ù. GTK+¸¦ °ðÀÌ °ð´ë·Î ÇÁ·Î±×·¡¹ÖÇÑ´Ù¸é Á¶±Ý ²¨²ô·¯¿ï ¼ö ÀÖ°ÚÁö¸¸, <bf>GLADE</bf>¿¡¼­´Â ÀÌ°ÍÀ» ½Ã°¢ÀûÀ¸·Î ó¸®ÇØ ÁØ´Ù. ¼öÆò ¹Ú½º(ÀÚ¹Ù ¿ë¾î·Î ÇÑ´Ù¸é ÄÁÅ×À̳Ê) ¹× ¼öÁ÷ ¹Ú½º ±×¸®°í Å×ÀÌºí ¹Ú½º¸¦ Á¦°øÇÏ¸ç ¿©±â¿¡´Ù ¿©·¯°¡Áö °´Ã¼µé, Áï À§Á¬µéÀ» ¼Õ½±°Ô ºÙ¿´´Ù ¶¼¾ú´Ù ÇÒ ¼ö ÀÖ´Ù. </descrip> À§¿Í °°Àº °³³äÀ» °¡Áö°í ¸¸µé¾îÁø ¾îÇø®ÄÉÀ̼ÇÀº ´ÙÀ½ ±×¸²<ref id="fig_3" name="GTK·Î ¸¸µç ¾îÇø®ÄÉÀÌ¼Ç ³»ºÎ °èÃþ ±¸Á¶">°ú °°Àº ³»ºÎ °èÃþ ±¸Á¶¸¦ °®´Â´Ù. <!-- ±×¸² 3 : gtkhierarchy --> <figure> <eps file="images/gtkhierarchy.eps" height="210pt"> <img src="images/gtkhierarchy.gif"> <caption><label id="fig_3">GTK·Î ¸¸µç ¾îÇø®ÄÉÀÌ¼Ç ³»ºÎ °èÃþ ±¸Á¶</caption> </figure> <sect1>GLADE »ìÇDZâ <p> <sect2>¼¼ °³ÀÇ µðÆúÆ® À©µµ¿ì <p> <bf>GLADE</bf>¸¦ ½ÇÇàÇÏ¸é ´ÙÀ½°ú °°Àº ¼¼°³ÀÇ Ã¢ÀÌ µðÆúÆ®·Î ¶á´Ù: <descrip> <tag>ÁÖ À©µµ¿ì(main glade window)</tag> <!-- ±×¸² 4 : main_init --> <figure> <eps file="images/maininit.eps" height="246pt"> <img src="images/main_init.gif"> <caption><label id="fig_4">GLADE ¸ÞÀÎ À©µµ¿ì</caption> </figure> ÀÌ°ÍÀº ÇÁ·ÎÁ§Æ®¸¦ ±¸¼ºÇÏ´Â ¸ðµç âµé°ú ´ëÈ­»óÀÚµéÀ» ´ã°í ÀÖ´Ù. À̵é ÁßÀÇ Çϳª¸¦ ´õºí Ŭ¸¯Çϸé ÀÌ¿¡ ´ëÀÀÇϴ âÀ̳ª ´ëÈ­»óÀÚ ÅÛÇø®Æ®°¡ ¶á´Ù. ±×¸®°í ÀÌ¿¡ ´ëÀÀÇϴ âÀ̳ª ´ëÈ­»óÀÚÀÇ ÇÁ·ÎÆÛƼ¸¦ ¼³Á¤ÇÒ ¼ö ÀÖµµ·Ï ÇÁ·ÎÆÛƼ ¿¡µðÅÍ °´Ã¼°¡ ÀÌ°ÍÀ¸·Î º¯°æµÈ´Ù. <tag>À§Á¬ ÆÈ·¹Æ® À©µµ¿ì(widget palette window)</tag> <!-- ±×¸² 5 : widget_palette_init --> <figure> <eps file="images/widgetpaletteinit.eps" height="411pt" angle="90"> <img src="images/widget_palette_init.gif"> <caption><label id="fig_5">GLADE À§Á¬ ÆÈ·¹Æ® À©µµ¿ì</caption> </figure> ÀÌ°ÍÀº °¡´ÉÇÑ ¸ðµç À§Á¬µéÀÇ µé¾î ÀÖ´Â ÆÈ·¹Æ®ÀÌ´Ù. »õ·Î¿î âÀ̳ª ´ëÈ­ »óÀÚ¸¦ ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡ÇÏ·Á¸é ÆÈ·¹Æ®¿¡ Àִ âÀ̳ª ´ëÈ­»óÀÚ¸¦ Ŭ¸¯Çϱ⸸ ÇϸéµÈ´Ù. ÀÌ·¸°Ô »ý¼ºµÈ âÀ̳ª ´ëÈ­»óÀÚ¿¡ À§Á¬À» ºÙÀÌ·Á¸é À§Á¬À» Ŭ¸¯Çؼ­ ¼±ÅÃÇÑ ´ÙÀ½ ´õÇÏ°íÀÚ ÇÏ´Â À§Ä¡¿¡ Ŭ¸¯ÇÏ¸é µÈ´Ù. <tag>¼Ó¼º ÆíÁý±â À©µµ¿ì(property editor window)</tag> <!-- ±×¸² 6 : main_window_properties --> <figure> <eps file="images/mainwindowproperties.eps" height="398pt"> <img src="images/main_window_properties.gif"> <caption><label id="fig+6">GLADE ¼Ó¼º ÆíÁý±â À©µµ¿ì</caption> </figure> ÀÌ°ÍÀº âÀ̳ª ´ëÈ­»óÀÚ, ±×¸®°í À̵é À§¿¡ ÀÖ´Â À§Á¬µéÀÇ Å©±â ¶Ç´Â ÅؽºÆ® µî°ú °°Àº ¼Ó¼ºµéÀ» º¯°æÇÒ ¶§ »ç¿ëÇÑ´Ù. ÁÖ À©µµ¿ì¿¡ Àִ âÀ̳ª ´ëÈ­»óÀÚ¸¦ Ŭ¸¯ÇÏ¿©, ¶Ç´Â âÀ̳ª ´ëÈ­»óÀÚ À§¿¡ ÀÖ´Â À§Á¬À» Ŭ¸¯Çؼ­, ÇÁ·ÎÆÛƼ¸¦ ¼³Á¤ÇÒ ´ë»ó °´Ã¼¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. </descrip> <sect2>±âŸ º¸Á¶ âµé <p> <bf>GLADE</bf>´Â ´ÙÀ½°ú °°Àº º¸Á¶ âµéÀ» °¡Áö°í ÀÖÀ¸¸ç ÁÖ·Î ¸Þ´º¸¦ ÅëÇؼ­ Á¢±ÙµÉ ¼ö ÀÖ´Ù: <label id="win_menu_editor"> <descrip> <tag>¸Þ´º ÀÛ¼º À©µµ¿ì</tag> <!-- ±×¸² 7 : menu_editor_dlg --> <figure> <eps file="images/menueditordlg.eps" height="474pt"> <img src="images/menu_editor_dlg.gif"> <caption><label id="fig_7"> GLADE ¸Þ´º ÀÛ¼º À©µµ¿ì</caption> </figure> ÀÌ°ÍÀº ÇÁ·ÎÁ§Æ® â¿¡ ¸Þ´º¸¦ Ãß°¡ÇÑ °æ¿ì ÀÌ ¸Þ´º¸¦ Ŭ¸¯ÇÑÈÄ ¼Ó¼º ÆíÁý±â À©µµ¿ì¿¡ ³ªÅ¸³ª´Â <em>edit menu</em> ¹öÆ°À» ´©¸£¸é ³ªÅ¸³­´Ù. ÀÌ°ÍÀ» ÅëÇؼ­ ¿©·¯ºÐÀº ÇÁ·ÎÁ§Æ®ÀÇ ¸Þ´º¸¦ ÆíÁýÇÒ ¼ö ÀÖ´Ù. ÀÌ°÷¿¡¼­ »ý¼ºµÈ ¸Þ´º´Â ¼Ò½º¿¡ ÀÚµ¿À¸·Î µé¾î°¡°Ô µÈ´Ù. <em>add</em>¸¦ ´©¸¥ ÈÄ¿¡ <em>Stock Item</em> ÄÞº¸¹Ú½º¸¦ ´­·¯¼­ ¹Ì¸® Á¤ÀǵÈ, ±×¸®°í ³Î¸® ¾²ÀÌ´Â ¸Þ´º¸¦ ¼±ÅÃÇÒ ¼ö ÀÖ´Ù. ÀÌ ¶§ <em>Handler</em>°¡ ÀÌ¿¡ ¸ÂÃç Á¤ÇüÈ­µÈ ²Ã·Î ³ªÅ¸³ª°Ô µÇ¾î ÀÖ´Â µ¥, ÇѱÛÈ­µÈ ¹öÀüÀÇ °æ¿ì Çѱ۷ΠµÈ ÇÔ¼ö°¡ <em>Handler</em>°¡ µÇ¾î¼­ ¼Ò½º¿¡ ±úÁö°Å³ª ÇÑ±Û ºÎºÐÀÌ ¾ð´õ¶óÀÎÀ¸·Î ä¿öÁø ÇÔ¼ö°¡ ³ªÅ¸³ª°Ô µÈ´Ù. °í·Î <em>Handler</em> ºÎºÐÀº µÇµµ·ÏÀÌ¸é ¿µ¹®À¸·Î ¹Ù²ã ÁÖ´Â °ÍÀÌ ÁÁ°Ú´Ù. <tag>À§Á¬ Æ®¸®(widget tree)</tag> <!-- ±×¸² 8 : widget_tree --> <figure> <eps file="images/widgettree.eps" height="548"> <!-- 784 --> <img src="images/widget_tree.gif"> <caption><label id="fig_8"> GLADE À§Á¬ Æ®¸®</caption> </figure> ÀÌ°ÍÀº ÇÁ·ÎÁ§Æ®¿¡ »ç¿ëµÈ ¸ðµç À§Á¬µéÀÇ Æ®¸® ±¸Á¶¸¦ º¸¿©ÁÖ´Â À©µµ¿ìÀÌ´Ù. ÀÌ°ÍÀº ÁÖ À©µµ¿ìÀÇ <em>View/Show WidgetTree</em>À» ¼±ÅÃÇؼ­ º¼ ¼ö ÀÖ´Ù. </descrip> <sect1>ºÐ¼®/¼³°è - ÅؽºÆ® ¿¡µðÅÍ ±â´É <p> ¿ì¸®°¡ ¸¸µé°íÀÚ ÇÏ´Â ÅؽºÆ® ¿¡µðÅÍ´Â ´Ü¼øÇÑ µ¥½ºÅ©Å¾ ¾îÇø®ÄÉÀ̼ÇÀ¸·Î½á ¿ì¼± À©µµ¿ìÁîÀÇ notepad¸¦ ´à¾Ò´Ù°í »ý°¢ÇÏ½Ã¸é µÈ´Ù. ±×·¸´Ù¸é ÀÌ ¿¡µðÅÍ°¡ Áö¿øÇØ¾ß ÇÏ´Â ±×·¡¼­ ±¸ÇöÇØ¾ß ÇÏ´Â ±â´Éµé ¸®½ºÆ®¸¦ »ìÆ캸ÀÚ: <itemize> <item> ÆíÁýâ¿¡ ¹®ÀÚ ÀÔ·Â, ¼±ÅÃ, º¹»ç, »èÁ¦, ºÙÀ̱⠱â´É <item> ÆíÁýµÈ ³»¿ëÀ» ÀúÀåÇÏ´Â ±â´É <item> ÆÄÀÏÀ» Àоî¿Í ÆíÁýâ¿¡ µð½ºÇ÷¹ÀÌ ÇÏ´Â ±â´É <item> Á¾·á ±â´É <item> about ´ëÈ­ »óÀÚ ±â´É </itemize> <!-- *************************************************************** --> <sect>GLADE¸¦ ÀÌ¿ëÇÑ ÅؽºÆ® ¿¡µðÅÍ °³¹ß - ´Ü°èÀû Á¢±Ù <!-- *************************************************************** --> <p> <bf>GLADE</bf>¸¦ ½ÇÇà½ÃÅ°¸é À§¿¡¼­ ¼³¸íÇÑ ¹Ù¿Í °°ÀÌ ¼¼°³ÀÇ Ã¢ÀÌ ¶á´Ù. ¿©±â¿¡¼­´Â ÀÌ·± »óȲ¿¡¼­ ´ÙÀ½°ú °°Àº ´Ü°èº° Á¢±ÙÀ¸·Î À§¿¡¼­ Á¤ÀÇµÈ ±â´ÉÀ» °¡Áø ÅؽºÆ® ¿¡µðÅ͸¦ °³¹ßÇÏ´Â ¸ð½ÀÀ» »ìÇǵµ·Ï ÇÑ´Ù: <sect1>°³¹ß ù¹ø° ´Ü°è - ¹ÙÅÁ À©µµ¿ì <p> <descrip> <tag>¹ÙÅÁ À©µµ¿ì - »ý¼º</tag> <p> ¿ì¼± ÅؽºÆ® ¿¡µðÅÍÀÇ ¹ÙÅÁÀÌ µÇ´Â âÀ» ¸¸µé¾î¾ß ÇÑ´Ù. ±×·²·Á¸é À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡¼­ ´ÙÀ½ ±×¸²ÀÇ ¿ÞÂÊ »ó´ÜÀÇ À§Á¬À» Ŭ¸¯Çؼ­ ¸¸µé ¼ö ÀÖ´Ù. <!-- ±×¸² 9 : window_ctl --> <figure> <eps file="images/windowctl.eps" height="91pt"> <img src="images/window_ctl.gif"> <caption><label id="fig_9">À©µµ¿ì À§Á¬</caption> </figure> ±×·¯¸é ´ÙÀ½ ±×¸²°ú °°Àº ¹ÙÅÁ âÀ» ¾ò´Â´Ù. ÀÌ ±×¸²À» ÀÚ¼¼È÷ º¸¸é »ç¼± °ÝÀÚµéÀÌ ÃÎÃÎÈ÷ ȸ»öÀ¸·Î ±×·ÁÁ® ÀÖ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ·± Ç¥½Ã´Â ¾ÕÀ¸·Îµµ ³ª¿À°ÚÁö¸¸ ¹«¾ð°¡¸¦ ºÙÀÏ ¼ö ÀÖ´Â °÷À̶ó´Â ¾ê±âÀÌ´Ù. ¸¶Ä¡ Á¢Âø½Ä ¾Ù¹üÀÇ ºñ´ÒÀ» µé¾î ¿Ã¸®¸é ³ªÅ¸³ª´Â Á¢ÂøÁ¦ »ç¼±°ú °°Àº °ÍÀ̶ó°í »ý°¢ÇÒ ¼ö ÀÖ°Ú´Ù. <!-- ±×¸² 10 : bottom_window1 --> <figure> <eps file="images/bottomwindow1.eps" height="328pt"> <img src="images/bottom_window1.gif"> <caption><label id="fig_10">¹ÙÅÁ À©µµ¿ì</caption> </figure> ÀÌÁ¦´Â ¿©±â¿¡´Ù ÇÊ¿äÇÑ À§Á¬µéÀ» ºÙ¿©¾ß µÇ°Ú´Ù. ¸ÕÀú ÇÊ¿äÇÑ °ÍµéÀ» »ý°¢Çغ¸¸é ¸Þ´º, Åø¹Ù, ÅؽºÆ® ¹Ú½º, ±×¸®°í »óÅ ¹Ù°¡ ÀÖ°Ú´Ù. ÀÌ°ÍÀ» ±×³É Çϳª¾¿ Çϳª¾¿ ºÙÀÏ ¼ö ÀÖÀ»±î. ¹Ù·Î À§ÀÇ ±×¸²À» ÀÚ¼¼È÷ º¸¸é ºÙÀÏ ¼ö ÀÖ´Â Á¢ÂøÁ¦ ºÎºÐÀº Ä¿´Ù¶þÁö¸¸ ±¸È¹ÀÌ ³ª´©¾îÁ® ÀÖÁö ¾Ê´Ù. Áï ÇϳªÀÇ °´Ã¼¸¸À» ºÙÀÏ ¼ö ÀÖ´Ù´Â ¾ê±â°¡ µÈ´Ù. ±×·¯¹Ç·Î ¾î¶»°Ô ÇØ¾ß ÇÒ ±î? <tag>¹ÙÅÁ À©µµ¿ì - ¸Þ´º¹Ù À§Á¬ ºÙÀ̱â</tag> <p> ´äÀº À§¿¡¼­ ¾ð±ÞÇÑ ¹Ù ÀÖ´Â, ´ÙÀ½ ±×¸²°ú °°Àº <em>¼öÁ÷ ¹Ú½º</em>¶ó´Â À§Á¬À» »ç¿ëÇÏ¸é µÈ´Ù. ÀÌ°ÍÀ» ºÙÀÌ¸é ±× ±× À§¿¡ ¿©·¯°³ÀÇ Á¢Âø °¡´ÉÇÑ ±¸È¹ÀÌ »ý±â°Ô µÇ¾î ¿©·¯°¡Áö À§Á¬µéÀ» ºÙÀÏ ¼ö ÀÖ°Ô µÈ´Ù. <!-- ±×¸² 11 : vbox_ctl --> <figure> <eps file="images/vboxctl.eps" height="66pt"> <img src="images/vbox_ctl.gif"> <caption><label id="fig_11">¼öÁ÷ ¹Ú½º À§Á¬</caption> </figure> ÀÌ°ÍÀ» Ŭ¸¯ÇÏ¸é ¸¶¿ì½º°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î ¹Ù²ï´Ù. ÀÌ ¶§ ÀÌ ¸¶¿ì½º Ä¿¼­¸¦ ¹ÙÅÁ À©µµ¿ì¿¡ ´ë°í Ŭ¸¯ÇÏ¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ ¸î °³ÀÇ ¼öÁ÷ ¹Ú½º¸¦ ¸¸µé °ÍÀΰ¡¸¦ ¹¯´Â ´ëÈ­»óÀÚ°¡ ³ªÅ¸³­´Ù. <!-- ±×¸² 12 : new_vertical_box_dlg --> <figure> <eps file="images/newverticalboxdlg.eps" height="155pt"> <img src="images/new_vertical_box_dlg.gif"> <caption><label id="fig_12">¼öÁ÷ ¹Ú½º À§Á¬ °³¼ö¸¦ ¹¯´Â ´ëÈ­»óÀÚ</caption> </figure> ¿©±â¼­ ¿ì¸®´Â 4¸¦ ÀÔ·ÂÇÏÀÚ. ¿Ö³Ä¸é ¹ÙÅÁ â¿¡ ºÙÀÌ°íÀÚ ÇÏ´Â °´Ã¼°¡ 4°³À̱⠶§¹®ÀÌ´Ù. OK¸¦ ´©¸£¸é ´ÙÀ½°ú °°ÀÌ ¹ÙÅÁ âÀÌ Æòµî ºÐÇÒµÇ¾î ³ªÅ¸³¯ °ÍÀÌ´Ù. <!-- ±×¸² 13 : after_vbox --> <figure> <eps file="images/aftervbox.eps" height="328pt"> <img src="images/after_vbox.gif"> <caption><label id="fig_13">¼öÁ÷ ¹Ú½º¸¦ ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì ¸ð½À</caption> </figure> ÀÚ ÀÌÁ¦´Â ÀÌ ³×°³ÀÇ ±¸È¹ °¢°¢¿¡´Ù ¸Þ´º¹Ù, Åø¹Ù, ÅؽºÆ® ¹Ú½º, ±×¸®°í »óÅ ¹Ù¸¦ ºÙ¿© º¸µµ·Ï ÇÏÀÚ. ¸ÕÀú ¸Þ´º¹Ù¸¦ ºÙÀÌ·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ »ý±ä ¸Þ´º¹Ù widgetÀ» À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡¼­ Ŭ¸¯ÇÏ¿© ¼±ÅÃÇÑ´Ù. <!-- ±×¸² 14 : menu_ctl --> <figure> <eps file="images/menuctl.eps" height="57pt"> <img src="images/menu_ctl.gif"> <caption><label id="fig_14">¸Þ´º À§Á¬</caption> </figure> ±×¸®°í ¹ÙÅÁ â ³× ±¸È¹ Áß °¡Àå À§¿¡ ÀÖ´Â ±¸È¹À» Ŭ¸¯ÇÑ´Ù. ±×·¯¸é ¹ÙÅÁ È­¸éÀº ´ÙÀ½°ú °°ÀÌ º¯ÇÑ´Ù. <!-- ±×¸² 15 : after_menu_ctl --> <figure> <eps file="images/aftermenuctl.eps" height="328pt"> <img src="images/after_menu_ctl.gif"> <caption><label id="fig_15">¸Þ´º À§Á¬À» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> ÀÌ°ÍÀ» ÀÚ¼¼È÷ º¸¸é Á¢ÂøÁ¦°¡ ¹ß¶óÁ® ÀÖ´Â ºÎºÐÀº 3°³·Î ÁÙ¾îµç °ÍÀ» ¾Ë ¼ö ÀÖ´Ù. Á¶±Ý Àü¿¡ ÃÖ»ó´Ü¿¡ ºÙÀÎ ¸Þ´º ºÎºÐÀº Á¢ÂøÁ¦°¡ ¾Æ´Ñ °ÍÀ» ¶ÇÇÑ ¾Ë ¼ö ÀÖ´Ù. ±×·¯³ª À̺κÐÀº º°·Î ¸Þ´º °°¾Æ º¸ÀÌÁö ¾Ê´Ù. ¿Ö³Ä¸é ½ÇÁ¦·Î ¸Þ´º¸¦ ÀÔ·ÂÇÏÁö ¾Ê¾Ò±â ¶§¹®ÀÌ´Ù. ±×·¸´Ù¸é ¸Þ´º¸¦ ÀÌÁ¦ ³Ö¾î º¸ÀÚ. ¹ÙÅÁ À©µµ¿ìÀÇ Á¶±Ý Àü¿¡ ºÙÀÎ ¸Þ´º¸¦ Ŭ¸¯Çϸé ÇÁ·ÎÆÛƼ À©µµ¿ì°¡ ´ÙÀ½ ±×¸²Ã³·³ ³ªÅ¸³­´Ù. ÀÌ°÷À» ÀÚ¼¼È÷ º¸¸é ´Ù¸¥ À§Á¬À» Ŭ¸¯Çؼ­ ¼±ÅÃÇÒ ¶§¿Í´Â ´Ù¸£°Ô ¸Þ´º ÆíÁý(<em>Edit Menus...</em>)À̶ó´Â ¹öÆ°ÀÌ Çϳª ´õ ÀÖ´Ù. ÀÌ°ÍÀ» Ŭ¸¯ÇÏÀÚ. <!-- ±×¸² 16 : edit_menu_button --> <figure> <eps file="images/editmenubutton.eps" height="398pt"> <img src="images/edit_menu_button.gif"> <caption><label id="fig_16">¸Þ´º ÆíÁý ¹öÆ°</caption> </figure> ±×·¯¸é À§¿¡¼­ º» <em>±×¸² 5</em>¿Í °°Àº È­¸éÀÌ ¶á´Ù. ¿©±â¿¡ ´ÙÀ½ ±×¸²Ã³·³ ÆíÁýÇؼ­ ³Öµµ·Ï ÇÏÀÚ. ´Ü ¸ðµÎ ±âº»ÀûÀ¸·Î Á¦°øµÇ´Â <em>Stock Item</em>À» »ç¿ëÇؼ­ ¸¸µç °ÍÀÌ´Ù. ¸ÕÀú <em>Add</em> ¹öÆ°À» ´­·¯¼­ ÇϳªÀÇ ¾ÆÀÌÅÛÀ» ¸¸µç µÚ¿¡ <em>Stock Item</em> ÄÞº¸ ¹Ú½º¸¦ Ŭ¸¯Çؼ­ ¹Ì¸® ¸¶·ÃµÈ ¾ÆÀÌÅÛÀ» ¼±ÅÃÇϸé Á¶±Ý Àü¿¡ ¸¸µé¾îÁø °ÍÀÌ ¿øÇÏ´Â °ÍÀ¸·Î ¹Ù²ï´Ù. ±×¸®°í <em>Name</em>ÀÌ Çѱ۷Π³ª¿Ã °æ¿ì, ÀÌ°ÍÀº ³ªÁß¿¡ ¾Ë°Ô µÇ°ÚÁö¸¸ ¼Ò½º »ý¼º ÈÄ ¼Ò½º ³»ºÎ¿¡¼­ ¸ðµÎ ±úÁö°Å³ª ¹ØÁٷΠǥ±âµÇ¾î ¹¹°¡ ¹ºÁö ¸ð¸£°Ô µÈ´Ù. ÀÌ ¶§´Â <em>Name</em>À» ÀûÀýÇÑ °ÍÀ¸·Î ¹Ù²ÙÀÚ. Áï <em>»õ·Î¿î</em>À̶ó¸é <em>New</em>À¸·Î ¹Ù²ÙÀÚ. ±×·¯¸é ÀÚµ¿À¸·Î ±× ¾Æ·¡¿¡ ÀÖ´Â <em>Handler</em>°¡ ¹Ù²ï´Ù. Á¤¸» ÁÁ´Ù. ±×¸®°í ¿ÞÂÊ ¸®½ºÆ® â¿¡ ÀÖ´Â <em>Label</em>¿¡ ÇØ´çÇÏ´Â °ÍµéÀº ±× ¾Æ·¡¿¡ ÀÖ´Â ¹æÇ⼺ ÀÖ´Â È­»ìÇ¥ µîÀ¸·Î Á¦¾îµÇ´Â °ÍÀ¸·Î½á ¸Þ´ºÀÇ ±íÀÌ ¹× °èÃþ ±¸Á¶¸¦ ²Ù¹Ð ¶§ »ç¿ëµÈ´Ù. <!-- ±×¸² 17 : menu_editor_sample --> <figure> <eps file="images/menueditorsample.eps" height="474pt"> <img src="images/menu_editor_sample.gif"> <caption><label id="fig_17">¸Þ´º ÆíÁý ¿¹Á¦</caption> </figure> <tag>¹ÙÅÁ À©µµ¿ì - Åø¹Ù À§Á¬ ºÙÀ̱â</tag> ÀÚ ÀÌÁ¦´Â ¹ÙÅÁ À©µµ¿ì¿¡ ´ÙÀ½ ±×¸²°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ®¿¡ ÀÖ´Â Åø¹Ù À§Á¬À» ºÙ¿© º¸µµ·Ï ÇÏÀÚ. <!-- ±×¸² 18 : toolbar_widget --> <figure> <eps file="images/toolbarwidget.eps" height="65pt"> <img src="images/toolbar_widget.gif"> <caption><label id="fig_18">Åø¹Ù À§Á¬</caption> </figure> ÀÌ°ÍÀ» Ŭ¸¯ÇÏ¸é ¸¶¿ì½º Ä¿¼­°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î º¯ÇÑ´Ù. ÀÌ°ÍÀ» ¿ì¸®°¡ ¿øÇÏ´Â À§Ä¡ÀÎ À§¿¡¼­ µÎ¹ø° Ä­¿¡ ³õ°í Ŭ¸¯ÇÑ´Ù. ±×·¯¸é ´ÙÀ½°ú °°ÀÌ ¸î°³ÀÇ Åø¹Ù¸¦ ¿øÇϴ°¡ÇÏ´Â ´ëÈ­ »óÀÚ°¡ ¶á´Ù. <!-- ±×¸² 19 : new_tool_bar_dlg --> <figure> <eps file="images/newtoolbardlg.eps" height="155pt"> <img src="images/new_tool_bar_dlg.gif"> <caption><label id="fig_19">Åø¹ÙÀÇ ¹öÆ° ¼ö¸¦ ¹¯´Â ´ëÈ­»óÀÚ</caption> </figure> ¿©±â¿¡ ¿øÇÏ´Â °³¼ö(ÀÌ °æ¿ì´Â 4°³)¸¦ ÀÔ·ÂÇÏ°í OK¸¦ Ŭ¸¯ÇÏ¸é ´ÙÀ½ ±×¸² ó·³ µÎ¹ø° ÇàÀÌ 4°³ÀÇ »õ·Î¿î Á¢ÂøÆÇÀ» °¡Áø °ÍÀ¸·Î º¯°æµÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. <!-- ±×¸² 20 : after_toolbar --> <figure> <eps file="images/aftertoolbar.eps" height="328pt"> <img src="images/after_toolbar.gif"> <caption><label id="fig_20">Åø¹Ù¸¦ ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> ÀÚ ÀÌÁ¦´Â ÀÌ »õ·Î »ý±ä Á¶±×¸¸ 4°³ÀÇ Á¢ÂøÆÇ¿¡´Ù Åø¹Ù¹öÆ°µéÀ» Áý¾î ³Ö¾î¾ß ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ®¿¡¼­ ¹öÆ° À§Á¬À» ¼±ÅÃÇØ¾ß ÇÑ´Ù. <!-- ±×¸² 21 : button_widget --> <figure> <eps file="images/buttonwidget.eps" height="60"> <img src="images/button_widget.gif"> <caption><label id="fig_21">¹öÆ° À§Á¬</caption> </figure> ÀÌ°ÍÀ» ¼±ÅÃÇÑ ÈÄ ¸¶¿ì½º¸¦ ¹ÙÅÁ À©µµ¿ì µÎ¹ø° Çà ù¹ø° Á¢ÂøÆÇÀ¸·Î °¡Á® °¡¸é Ä¿¼­°¡ ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î º¯ÇÑ´Ù. ÀÌ°ÍÀ» Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¹ÙÅÁ È­¸éÀÌ º¯ÇÑ´Ù. <!-- ±×¸² 22 : after_attach_one_button --> <figure> <eps file="images/afterattachonebutton.eps" height="328pt"> <img src="images/after_attach_one_button.gif"> <caption><label id="fig_22">ÇÑ°³ÀÇ ¹öÆ°À» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> ÀÌ ¶§ º¯°æµÈ ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ ÀÚ¼¼È÷ º¸¸é <em>Icon</em> ¿·¿¡ ¾Æ·¡¸¦ °¡¸£Å°´Â ÄÞº¸¹Ú½º ¹öÆ°ÀÌ ÀÖ´Ù. ÀÌ°ÍÀ» ´©¸£¸é ´ÙÀ½°ú °°Àº ¹Ì¸® Á¤ÀÇµÈ <em>Stock Icon</em>µéÀÌ ³ª¿Â´Ù. <!-- ±×¸² 23 : button_stock --> <figure> <eps file="images/buttonstock.eps" height="692pt" angle="90"> <img src="images/button_stock.gif"> <caption><label id="fig_23">¹Ì¸® ÁغñµÈ ¹öÆ°µé</caption> </figure> ¿©±â¿¡ º¸ÀÌ´Â °Í ¸»°íµµ ¾Æ·¡·Î ½ºÅ©·Ñ Çϸé Á¤¸» ¸¹°í ¿¹»Û ¾ÆÀÌÄܵéÀÌ ÁغñµÇ¾î ÀÖÀ½¿¡ ³î¶ö °ÍÀÌ´Ù. ÀÌ Áß¿¡ Çϳª¸¦ ¼±ÅÃÇÏÀÚ. ±×¸®°í ÇÁ·ÎÆÛƼ¿¡¼­ <em>Label</em> ºÎºÐÀ» ¾ÆÀÌÄÜ¿¡ ¸ÂÃß¾î ¹Ù²Ùµµ·Ï ÇÏÀÚ.. ±×¸®°í¼­ ³ª¸ÓÁö ¼¼°³ÀÇ Á¢ÂøÆǵ鿡 ¿øÇÏ´Â °ÍÀ» ³ÖÀ¸¸é µÇ°Ú´Ù. ±×·¯¸é ´ÙÀ½ ±×¸²°ú °°Àº °ÍÀ» ¾ò´Â´Ù. <!-- ±×¸² 24 : after_attach_all_buttons --> <figure> <eps file="images/afterattachallbuttons.eps" height="328pt"> <img src="images/after_attach_all_buttons.gif"> <caption><label id="fig_24">Åø¹Ù¿¡ ¸ðµç ¹öÆ°µéÀ» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> <tag>¹ÙÅÁ À©µµ¿ì - ÅؽºÆ® ¹Ú½º À§Á¬ ºÙÀ̱â</tag> ´ÙÀ½Àº ¼¼¹ø° Çà¿¡´Ù ´ÙÀ½°ú °°ÀÌ À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡ ÀÖ´Â ÅؽºÆ® ¹Ú½º À§Á¬À» ¼±ÅÃÇÏ¿© ºÙ¿© º¸µµ·Ï ÇÏÀÚ. <!-- ±×¸² 25 : text_box_widget --> <figure> <eps file="images/textboxwidget.eps" height="54pt"> <img src="images/text_box_widget.gif"> <caption><label id="fig_25">ÅؽºÆ® ¹Ú½º À§Á¬</caption> </figure> ÀÌ°ÍÀ» Ŭ¸¯ÇÑ ÈÄ ¸¶¿ì½º¸¦ ¿¹ÀÇ ¹ÙÅÁ À©µµ¿ì ¼¼¹ø° ÇàÀ¸·Î ¿Å±â¸é Ä¿¼­°¡ ½ÊÀÚ°¡·Î ¹Ù²ï´Ù. Ŭ¸¯ÇÏÀÚ ±×·¯¸é ´ÙÀ½ ±×¸²Ã³·³ ¹ÙÅÁ À©µµ¿ì°¡ º¯ÇÑ´Ù. <!-- ±×¸² 26 : after_attach_text_box --> <figure> <eps file="images/afterattachtextbox.eps" height="328pt"> <img src="images/after_attach_text_box.gif"> <caption><label id="fig_26">ÅؽºÆ® ¹Ú½º À§Á¬À» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> ±×·±µ¥ ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ º¸¸é <em>Editable</em>ÀÌ µðÆúÆ®·Î <em>No</em>À¸·Î µÇ¾î ÀÖ´Ù. ÀÌ°ÍÀº <em>Yes</em>·Î º¯°æÇؾ߸¸ ³ªÁß¿¡ ÅؽºÆ®¸¦ ÀÔ·ÂÇÒ ¼ö ÀÖ´Ù. ±×·±µ¥ ÀüüÀûÀÎ Å©±â°¡ ¸¶À½¿¡ µéÁö ¾ÊÀ» ¼ö ÀÖ´Ù. ±×·±µ¥ ³»ºÎÀÇ À§Á¬ Å©±â¸¦ º¯°æÇÏ´Â °Íº¸´Ù ¹Ù±ù ¹ÙÅÁ À©µµ¿ìÀÇ Å©±â¸¦ Á¶Á¤ÇÏ´Â °ÍÀÌ ÁÁ´Ù. ´ÙÀ½ ±×¸² ó·³ ¹ÙÅÁ À©µµ¿ìÀÇ Å©±â ¼Ó¼ºÀ» º¯°æÇϵµ·Ï ÇÏÀÚ. ±×·¯¸é ³ªÁß¿¡ ½ÇÇà °á°ú°¡ ÀÌ¿¡ ¸ÂÃçÁú °ÍÀÌ¸ç ³ª¸ÓÁö ÀÌ ¹ÙÅÁ À©µµ¿ì°¡ Ç°°í ÀÖ´Â °´Ã¼µéÀÇ Å©±â´Â ÀûÀýÇÏ°Ô ¹èºÐµÉ °ÍÀÌ´Ù. <!-- ±×¸² 27 : trim_main_window --> <figure> <eps file="images/trimmainwindow.eps" height="398pt"> <img src="images/trim_main_window.gif"> <caption><label id="fig_27">¹ÙÅÁ À©µµ¿ìÀÇ Å©±â Á¶Á¤</caption> </figure> <tag>¹ÙÅÁ À©µµ¿ì - »óŹ٠À§Á¬ ºÙÀ̱â</tag> ÀÚ ÀÌÁ¦´Â ¸¶Áö¸·À¸·Î ¹ÙÅÁ À©µµ¿ì¿¡ ´ÙÀ½ ±×¸²°ú °°Àº À§Á¬ ÆÈ·¹Æ® À©µµ¿ì¿¡ ÀÖ´Â »óŹ٠À§Á¬À» ¼±ÅÃÇؼ­ »óŹ٠À§Á¬À» ºÙ¿© º¸µµ·Ï ÇÏÀÚ. <!-- ±×¸² 28 : status_bar_widget --> <figure> <eps file="images/statusbarwidget.eps" height="66pt"> <img src="images/status_bar_widget.gif"> <caption><label id="fig_28">»óŹ٠À§Á¬</caption> </figure> ÀÌ°ÍÀ» ¼±ÅÃÇÑ ÈÄ ¸¶Áö¸· ³²Àº Á¢ÂøÆÇ À§¿¡ ¸¶¿ì½º¸¦ °¡Á®°¡¸é ¸¶Âù°¡Áö·Î ½ÊÀÚ°¡ ¸ð¾çÀ¸·Î Ä¿¼­°¡ º¯°æµÈ´Ù. Ŭ¸¯ÇÏ¸é ´ÙÀ½°ú °°ÀÌ ¹ÙÅÁ À©µµ¿ì°¡ º¯ÇÑ´Ù. <!-- ±×¸² 29 : after_all_attach_widget --> <figure> <eps file="images/afterallattachwidget.eps" height="328pt"> <img src="images/after_all_attach_widget.gif"> <caption><label id="fig_29">¸ðµç À§Á¬µéÀ» ºÙÀÎ ÈÄÀÇ ¹ÙÅÁ À©µµ¿ì</caption> </figure> <tag>¹ÙÅÁ À©µµ¿ì - ¸¸µç °ÍÀ» ÀúÀåÇÏ°í ¼Ò½º »ý¼º ±×¸®°í ½ÇÇà</tag> ÀÌ·Î½á ¿ì¸®´Â ¹ÙÅÁ À©µµ¿ì¸¦ ¸¸µé°í ÀÌ À§¿¡ ¸î°¡Áö GUI °´Ã¼µéÀ» ºÙÀÌ°í ¾à°£ÀÇ Á¶Á¤À» Çغ¸¾Ò´Ù. ¾î¶²°¡? ±×·²µíÇÏÁö ¾Ê´Â°¡. ÀÌÁ¦´Â ´ÙÀ½ ±×¸² ó·³ <bf>GLADE</bf>ÀÇ <em>File</em>¸Þ´º¿¡ ÀÖ´Â <em>Save</em>¸¦ ¼±ÅÃÇغ¸ÀÚ. <!-- ±×¸² 30 : glade_file_menu --> <figure> <eps file="images/gladefilemenu.eps" height="150pt"> <img src="images/glade_file_menu.gif"> <caption><label id="fig_30">GLADEÀÇ ÆÄÀÏ ¸Þ´º</caption> </figure> ±×·¯¸é ´ÙÀ½ ±×¸²°ú °°Àº <em>Project Options</em>¶ó´Â ´ëÈ­»óÀÚ°¡ ¶á´Ù. ¿©±â¿¡ ÀûÀýÇÑ °ªÀ» ÀÔ·ÂÇÏ°í OK¸¦ ´©¸£¸é ÇÁ·ÎÁ§Æ®°¡ ÀúÀåµÈ´Ù. ´Ü, »ý¼ºµÉ ¾ð¾î·Î´Â C¸¦ ¼±ÅÃÇϵµ·Ï ÇÏÀÚ. <!-- ±×¸² 31 : project_options_dlg --> <figure> <eps file="images/projectoptionsdlg.eps" height="383pt"> <img src="images/project_options_dlg.gif"> <caption><label id="fig_31">GLADEÀÇ ÇÁ·ÎÁ§Æ® ¿É¼Ç ´ëÈ­»óÀÚ</caption> </figure> ±×¸®°í À§¿¡¼­ º» <em>File</em> ¸Þ´ºÀÇ <em>Build Source Code</em>À» ¼±ÅÃÇÏ¸é ´«¿¡ º¸ÀÌÁö ¾ÊÁö¸¸ ¼Ò½º°¡ »ý¼ºµÈ´Ù. À§ÀÇ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÏ´Â °÷¿¡¼­ ÁöÁ¤ÇÑ µð·ºÅ丮¿¡ °¡º¸¸é <tt>src</tt>¶ó´Â µð·ºÅ丮°¡ ÀÖ´Â µ¥ ¿©±â¿¡ ¸ðµç ¼Ò½º°¡ »ý¼ºµÈ´Ù. ¾Æ½±°Ôµµ ¹Ù·Î ¹º°¡¸¦ Ŭ¸®Çؼ­ »ý¼ºµÈ ¼Ò½º¸¦ °¡Áö°í ½ÇÇà ÆÄÀÏÀ» ¸¸µå´Â ¹æ¹ýÀº ¾ÆÁ÷ ¾ø´Ù. ±×·¡¼­ ¾î¿¼ö ¾øÀÌ ½©À» ÅëÇؼ­ ½ÇÇà ÆÄÀÏÀ» ¸¸µé¼ö¹Û¿¡ ¾ø´Ù. ÇÁ·ÎÁ§Æ®ÀÇ ·çÆ® µð·ºÅ丮¸¦ <em>ls</em>·Î Ãâ·ÂÇغ¸°í ¿©±â¿¡ ¸¶·ÃµÈ <tt>autogen.sh</tt>¸¦ ½ÇÇàÇϸé ȯ°æ ¼³Á¤ÀÌ ÀÌ·ç¾îÁø´Ù. <!-- ±×¸² 32 : ls_and_begin --> <figure> <eps file="images/lsandbegin.eps" height="384pt"> <img src="images/ls_and_begin.gif"> <caption><label id="fig_32"><tt>ls</tt>¸í·É°ú <tt>autogen.sh</tt>½ÇÇà È­¸é</caption> </figure> ±×¸®°í ³ª¼­ <tt>make</tt>À» ½ÇÇàÇÏ¸é ¿øÇÏ´Â ½ÇÇà ÆÄÀÏÀ» ¾òÀ» ¼ö ÀÖ´Ù. <tt>make</tt>ÀÇ °á°ú´Â <tt>src</tt>¿¡ ÇÁ·ÎÁ§Æ® À̸§À» °¡Áø ½ÇÇà ÆÄÀÏÀÌ »ý±â´Â °ÍÀÌ´Ù. ÀÌ°ÍÀ» ½ÇÇàÇÑ °á°ú´Â ´ÙÀ½°ú °°´Ù. <!-- ±×¸² 33 : first_exec --> <figure> <eps file="images/firstexec.eps" height="180pt"> <img src="images/first_exec.gif"> <caption><label id="fig_33">ù¹ø° ½ÇÇà °á°ú</caption> </figure> <tag>¹ÙÅÁ À©µµ¿ì - ½ÇÇà ÈÄ Á×À̱â</tag> ÀÌÁ¦ Á¾·áÇغ¸ÀÚ. º¸Åë ÇϵíÀÌ ¿À¸¥ÂÊ À§¿¡ ÀÖ´Â ´Ý±â ¹öÆ°À» ´­·¯µµ ¿ì¸®°¡ ¸¸µç ¾îÇø®ÄÉÀ̼ÇÀº Á×Áö ¾Ê´Â´Ù. ¾Æ»Ô»ç. ¿ì¸®´Â ºÒ»ç½ÅÀ» ¸¸µé¾î³½ °ÍÀÌ´Ù. ÀÌÁ¦ ÀÌ ºÒ»ç½ÅÀ» Á׿©º¸µµ·Ï ÇÏÀÚ. ±×·²·¯¸é ÀÌÀü¿¡ ¾ê±âÇÑ <ref id="GTK_tutorial" name="GTK Æ©Å͸®¾ó"> ¼½¼Ç¿¡ ÀÖ´Â ½Ã±×³ÎÀ» ¾Ë¾Æ¾ß ÇÏ°í °¡Àå ±âº»ÀûÀÎ <bf>delete_event</bf>¶ó´Â ½Ã±×³ÎÀ» ¾Ë¾Æ¾ß ÇÑ´Ù. ÀÌ°ÍÀº ´Ù¸¥ °ÍÀÌ ¾Æ´Ï°í ½ÇÇà ÆÄÀÏÀÇ <em>close</em> ¸Þ´º<footnote>ÀÌ°ÍÀº â°ü¸®ÀÚ°¡ ºÙÀÎ ¸Þ´º¸¦ ¸»ÇÑ´Ù. ÀÌ°ÍÀº ¿ì¸®°¡ ¸¸µç ¾îÇø®ÄÉÀ̼ÇÀÇ ¸Þ´º¿Í ´Ù¸£´Ù</footnote>¸¦ ¼±ÅÃÇϰųª <em>title bar</em>¿¡¼­ ´Ý±â¸¦ ¼±ÅÃÇϸé X À©µµ¿ì °ü¸®ÀÚ°¡ ½ÇÇà ÆÄÀÏ¿¡°Ô ÀüÇÏ´Â À̺¥Æ®ÀÌ´Ù. ÀÌ°ÍÀ» ¹Þ¾Æ¼­ ó¸®ÇÏ·Á¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ ¹ÙÅÁ À©µµ¿ìÀÇ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ ¿©·¯ Åǵé Áß¿¡¼­ ½Ã±×³Î ÅÇ¿¡¼­ ½Ã±×³Î Çڵ鷯 À̸§°ú ÇÔ²² µî·ÏÇØÁÖ¾î¾ß ÇÑ´Ù. <!-- ±×¸² 34 : main_delete_event --> <figure> <eps file="images/maindeleteevent.eps" height="411pt"> <img src="images/main_delete_event.gif"> <caption><label id="fig_34">¹ÙÅÁ À©µµ¿ì <tt>window1</tt>ÀÇ <tt>delete_event</tt></caption> </figure> ±×·¯¸é ´ÙÀ½ ±×¸²°ú °°ÀÌ µî·ÏµÉ °ÍÀÌ´Ù. <!-- ±×¸² 35 : after_main_delete_event --> <figure> <eps file="images/aftermaindeleteevent.eps" height="398pt"> <img src="images/after_main_delete_event.gif"> <caption><label id="fig_35">µî·Ï ÈÄÀÇ ¸ð½À</caption> </figure> ¿©±â¼­ ¿ì¸®´Â ÀÚµ¿À¸·Î ½Ã±×³Î Çڵ鷯 À̸§ÀÌ <tt>on_window1_delete_event</tt>°¡ µÇ´Â °ÍÀ» º¼ ¼ö ÀÖ´Ù. ÀÌ°ÍÀ» ±×´ë·Î ¾²ÀÚ. À̰ͱîÁö ±×¸®°í »ý¼ºµÉ ³»ºÎ ¼Ò½º¿¡ ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¿¬°á½ÃÄÑÁÖ´Â °Í±îÁö´Â <bf>GLADE</bf>°¡ ÇØÁÖ´Â °ÍÀÌ´Ù. ÀÚ ÀÌÁ¦ À§ÀÇ ½ºÅÜó·³ ¼Ò½º¸¦ »ý¼ºÇغ¸ÀÚ. ±×¸®°í ÀÌ ½Ã±×³Î Çڵ鷯 ¾È¿¡¼­ ¿ì¸®´Â ÇØ¾ß ÇÒ ÀÏÀ» Çغ¸µµ·Ï ÇÏÀÚ. ´Ù¸¥ °ÍÀº ¾Æ´Ï°í ´ÙÀ½°ú °°ÀÌ <tt>src/callbacks.c</tt>¾È¿¡ ÀÖ´Â À§ÀÇ <tt>on_window1_delete_event</tt> ÇÔ¼ö ³»ºÎ¿¡ ´ÙÀ½°ú °°ÀÌ ÀÔ·ÂÇÏ¸é µÈ´Ù. <verb> gboolean on_window1_delete_event (GtkWidget *widget, GdkEvent *event, gpointer user_data) { gtk_exit( 0 ); return FALSE; } </verb> ±×¸®°í¼­ <tt>make</tt>ÇÏ°í(´Ù½Ã <tt>autoget.sh</tt>¸¦ ½ÇÇàÇÒ ÇÊ¿ä´Â ¾ø´Ù. ±×·¯³ª Çѹø ¼Ò½º¸¦ Àç»ý¼ºÇÒ ¶§¸¶´Ù <tt>make</tt>½Ã ¸ðµç Äڵ尡 ÀçÄÄÆÄÀ쵃 °ÍÀÌ´Ù) ½ÇÇàÇغ¸µµ·Ï ÇÏÀÚ. ÀÌÁ¦ Á¾·áÇϸé Á¦´ë·Î Á¾·áµÉ °ÍÀÌ´Ù. </descrip> ¾ÕÀ¸·Î ¿ì¸®´Â GLADE ÀÇ ÀÛ¾÷ ´ë»óÀÌ µÇ´Â °´Ã¼¸¦ Æû, ¶Ç´Â ÅÛÇø´À̶ó°í ºÎ¸£ÀÚ. ±×¸®°í ½ÇÁ¦ ½ÇÇàµÈ ÈÄÀÇ °á°ú´Â ±× °á°úÀÇ ¼Ó¼º´ë·Î ºÎ¸£±â·Î ÇÏÀÚ. ¿¹¸¦ µé¾î¼­ <em>¹ÙÅÁ À©µµ¿ì Æû</em> ¿¡¼­ ¹«¾ù ¹«¾ùÀ» ÀÛ¾÷Çϸé <em>¹ÙÅÁ À©µµ¿ì</em>¿¡ ¾î¶² ¾î¶² È¿°ú°¡ ³ªÅ¸³¯ °ÍÀÌ´Ù¶ó´Â ½ÄÀ¸·Î Ç¥ÇöÇϱâ·Î ÇÏÀÚ. <sect1>°³¹ß µÎ¹ø° ´Ü°è - about ´ëÈ­»óÀÚ <p> ¸¹Àº <bf>gnome</bf> ÇÁ·Î±×·¥µéÀº Ç¥ÁØÈ­µÈ ·è¾ØÇÊÀ» °®´Â´Ù. ÀÌ Áß¿¡¼­µµ ¸Þ´º, Åø¹Ù, »óŹÙ, ±×¸®°í about ´ëÈ­ »óÀÚ°¡ µÎµå·¯Áø´Ù. ¹°·Ð ´Ù¸¥ °Íµµ ÀÖ´Ù. ¿¹¸¦ µé¸é »ö»óÇ¥ ´ëÈ­ »óÀÚ, ÆÄÀÏ ¼±Åñâ(À©µµ¿ìÁîÀÇ File Open, Save, Save As¿Í À¯»ç) µîÀÌ ±×°ÍÀÌ´Ù. ¿ì¸®´Â ¿©±â¼­ about ´ëÈ­ »óÀÚ¸¦ ¸¸µé°í ÀÌ°ÍÀ» ³Ö¾î º¸µµ·Ï ÇÏÀÚ. <descrip> <tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¸¸µé±â</tag> ´ëÈ­ »óÀÚ¸¦ ¸¸µé ¶§ <bf>GTK+</bf>°¡ Á¦°øÇÏ´Â ´ëÈ­»óÀÚ À§Á¬À» ±×´ë·Î »ç¿ëÇؼ­ ±× À§¿¡ ´Ù¸¥ ¿©·¯ À§Á¬µéÀ» ºÙ¿©¼­ ¸¸µé¾îµµ µÇ°í, <bf>gnome</bf>ÀÌ Á¦°øÇÏ´Â ´ÙÀ½°ú °°Àº À§Á¬À» »ç¿ëÇÏ¿© ´õ ½±°Ô ¸¸µé ¼öµµ ÀÖ´Ù. ¿ì¸®´Â ÀÌ°ÍÀ» ÅÃÇغ¸µµ·Ï ÇÏÀÚ. <!-- ±×¸²36 : gnome_about_dlg_widget --> <figure> <eps file="images/gnomeaboutdlgwidget.eps" height="92pt"> <img src="images/gnome_about_dlg_widget.gif"> <caption><label id="fig_36">GNOMEÀÇ About ´ëÈ­»óÀÚ À§Á¬</caption> </figure> ÀÌ°ÍÀ» ¼±ÅÃÇÏ¸é ´ÙÀ½°í °°Àº ´ëÈ­»óÀÚ°¡ ³ªÅ¸³­´Ù. <!-- ±×¸² 37 : 1st_step_about_dlg --> <figure> <eps file="images/1ststepaboutdlg.eps" height="201pt"> <img src="images/1st_step_about_dlg.gif"> <caption><label id="fig_37">GNOMEÀÇ About ´ëÈ­»óÀÚ Ãʱ⠸ð½À</caption> </figure> ¿ì¸®´Â ÀÌ ¶§, °°ÀÌ º¯ÇÑ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ <em>Copyright</em>, <em>Author</em>, <em>Comments</em>, ±×¸®°í <em>Logo</em>¸¦ ¹Ù²Ù¾î¼­ ÀÌ about ´ëÈ­»óÀÚ¸¦ ´ÜÀå½ÃÄÑ º¸µµ·Ï ÇÏÀÚ. ¸ÕÀú <em>Copyright</em>¿Í <em>Author</em>, <em>Comments</em>´Â ´ÙÀ½ ±×¸²Ã³·³ º¯°æÇÑ´Ù. <!-- ±×¸² 38 : copy_author_comment --> <figure> <eps file="images/copyauthorcomment.eps" height="409pt"> <img src="images/copy_author_comment.gif"> <caption><label id="fig_38">GNOMEÀÇ About ´ëÈ­»óÀÚ ¼ÕÁúÈÄÀÇ ¸ð½À</caption> </figure> ½ÇÁ¦ ¶È°°ÀÌ Çغ¸½Ã¸é ¾Ë°ÚÁö¸¸ ÀÌµé ³»¿ëÀÌ ¸¹¾ÆÁö¸é ´ëÈ­»óÀÚÀÇ Àüü Å©±â µîÀÌ ÀÚµ¿À¸·Î ´Ã¾îµé¾ú´Ù ÁÙ¾îµé¾ú´Ù ÇÑ´Ù. ±×¸®°í ¸¶Áö¸·À¸·Î <em>Logo</em>¸¦ ÁöÁ¤Çغ¸µµ·Ï ÇÏÀÚ. ÀÌ·¸°Ô ÇÏ·Á¸é <em>Logo</em> ¿·ÀÇ ÆíÁý¹Ú½º¿¡ Á÷Á¢ Æнº¸¦ ÀÔ·ÂÇصµ µÇ°í ±× ¿·¿¡ ÀÖ´Â »ý·«ÇüÀ» Ŭ¸¯Çؼ­ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¸¦ ºÒ·¯ ÀÌ°ÍÀ» ÅëÇؼ­ ¼±ÅÃÇصµ µÈ´Ù. <!-- ±×¸²39 : after_logo --> <figure> <eps file="images/afterlogo.eps" height="583pt"> <img src="images/after_logo.gif"> <caption><label id="fig_39">GNOMEÀÇ About ´ëÈ­»óÀÚ¿¡ ·Î°í¸¦ ³ÖÀº ¸ð½À</caption> </figure> ÀÚ ÀÌÁ¦ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÑ´Ù. <tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¶ç¿ì±â</tag> ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÑ µÚ ¼Ò½º¸¦ ¸¸µé¾î ´Ù½Ã <tt>make</tt>¸¦ Çصµ ¿ì¸®´Â ÀÌ»óÇÑ °á°ú¸¦ ¸¸³­´Ù. Áï ¹ÙÅÁ À©µµ¿ì¿Í Á¶±Ý Àü¿¡ ¸¸µç about ´ëÈ­»óÀÚ°¡ µ¿½Ã¿¡ Æ¢¾î ³ª¿Â´Ù´Â °ÍÀÌ´Ù. ¾î¶»°Ô ÇÏ¸é µÇ°Ú´Â°¡? ¾îµð¿£°¡¿¡¼­ ¿ì¸®°¡ ¿øÄ¡ ¾Ê´Â ÀÌ·± ¾×¼ÇÀ» ¼öÇàÇÏ´Â Äڵ尡 ÀÖÀ» °ÍÀÌ´Ù. ´Ù¸§ ¾Æ´Ñ <tt>main.c</tt>ÀÇ <tt>main()</tt> ÇÔ¼ö ³»ÀÌ´Ù. ±×·¸´Ù¸é ÀÌ°÷À» º¸°í ´ÙÀ½ ¼¼ ¶óÀÎÀ» ¾ø¾Ö º¸ÀÚ(Áö¿öµµ µÇ°í C commentó·³ ¸·¾Æµµ µÈ´Ù.) <verb> GtkWidget *about1; ....... about1 = create_about1 (); gtk_widget_show (about1); </verb> ¿øÇÏ´Â ´ë·Î about ´ëÈ­»óÀÚ°¡ ½ÇÇà ÆÄÀÏÀ» ½ÇÇàÇÏÀÚ ¸¶ÀÚ ¶ß´Â ÀÏÀº ¾ø¾îÁ³´Ù. ±×·¡µµ ¹®Á¦´Â ³²´Â´Ù. ¾î¶»°Ô ¿øÇÒ °æ¿ì Áï, »ç¿ëÀÚ°¡ ¸Þ´º³ª Åø¹Ù¸¦ ÅëÇؼ­ about¸¦ ¼±ÅÃÇÒ °æ¿ì ¿ì¸®ÀÇ about ´ëÈ­»óÀÚ¸¦ ¶ç¿ì´Â ¹æ¹ýÀº ¹«¾ùÀΰ¡? ´ÙÀ½°ú °°Àº Äڵ带 ºñ¾î ÀÖ´Â ¸Þ´º <em>About</em>¿¡ ´ëÇÑ Çڵ鷯 <tt>on_About_activate</tt>(<tt>callbacks.c</tt>¿¡ Á¸Àç) ¾È¿¡ ³Ö¾î ÁÖ¸é µÈ´Ù. <verb> GtkWidget *about1; about1 = create_about1_dialog (); gtk_widget_show (about1); </verb> À§¿¡¼­ Áö¿ü´ø ÄÚµåÀÌ´Ù. ÀÌ°ÍÀ» ¿øÇÏ´Â °÷¿¡ ¿Å±ä°Å³ª ´Ù¸§¾ø´Ù. ÀÚ ÇÁ·ÎÁ§Æ®¸¦ ÀúÀåÇÏ°í <tt>make</tt>ÇÑ ÈÄ ½ÇÇà ÆÄÀÏÀ» ¸¸µé¾î È®ÀÎÇغ¸ÀÚ. About ¹öÆ°À» ´­·¶À» °æ¿ì¿¡µµ ÀÌ¿Í µ¿ÀÏÇÑ È¿°ú¸¦ ¾òÀ¸·Á¸é ¹ÙÅÁ À©µµ¿ìÀÇ Åø¹Ù¿¡¼­ About ¹öÆ°À» ¼±ÅÃÇÑ µÚ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ ½Ã±×³Î ÅÇ¿¡¼­ À§¿Í °°ÀÌ ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶). ±×¸®°í ³ª¼­ ÀÌ Çڵ鷯 ¾È¿¡ ¸Þ´º¿Í µ¿ÀÏÇÑ Äڵ带 ³Ö¾î ÁÖ¸é µÈ´Ù(¾Æ´Ï¸é °øÅë ÇÔ¼ö¸¦ ¸¸µé¾î À̸¦ È£ÃâÇصµ µÇ°í). <!-- ±×¸² 40 : about_button_signal --> <figure> <eps file="images/aboutbuttonsignal.eps" height="398pt"> <img src="images/about_button_signal.gif"> <caption><label id="fig_40">About ¹öÆ°ÀÇ ½Ã±×³Î</caption> </figure> ±×·±µ¥ ÀÌ °ÍÀÌ Á¦´ë·Î ½ÇÇàµÈ´Ù ÇÏ´õ¶óµµ ÀÌ»óÇÑ Á¡ÀÌ ÀÖ´Ù. Áï ¿ì¸®°¡ ³Ö¾ú´ø ·Î°í°¡ Á¦´ë·Î Ãâ·ÂµÇÁö ¾Ê´Â´Ù´Â °ÍÀÌ´Ù. ¿Ö ±×·²±î? <bf>GLADE</bf>´Â ¸¸µé¾îÁö´Â ¾îÇø®ÄÉÀ̼ÇÀÇ pixmap µð·ºÅ丮ÀÇ µðÆúÆ®¸¦ "/usr/share/pixmaps" ¾Æ·¡ ¾îÇø®ÄÉÀÌ¼Ç À̸§À¸·Î ¼³Á¤ÇÑ´Ù. Á¤È®ÇÏ°Ô ¸»Çϸé <tt>gnome-config --datadir</tt>ÀÇ °á°ú°ªÀ» ¾ò¾î¼­<footnote>ÀÌ°ÍÀº ´ë°³ "/usr/share" ÀÌ´Ù</footnote> ¿©±â¿¡ "pixmaps" ¿Í ¾îÇø®ÄÉÀÌ¼Ç À̸§À» µ¡ºÙÀÎ °ÍÀÌ ·Î°í µî ±×¸² ÆÄÀÏÀÌ ÀúÀåµÇ´Â À§Ä¡°¡ µÈ´Ù. ±×·¯¹Ç·Î »ç¿ëÀÚ°¡ º¹»ç¸¦ ÇϵçÁö ¾Æ´Ï¸é ·çÆ® ±ÇÇÑÀ¸·Î¼­ <tt>make install</tt> ÇÏ¸é ·Î°í µî ±×¸² ÆÄÀϵéÀÌ À§ÀÇ µð·¹Å丮·Î º¹»çÇÑ´Ù. ±×·¯¸é ¿©±â¿¡ ÀÖ´Â ÆÄÀÏÀÌ »ç¿ëµÇ¾î About ´ëÈ­»óÀÚÀÇ ±×¸²ÀÌ º¸ÀÌ°Ô µÉ °ÍÀÌ´Ù. <tag>about ´ëÈ­»óÀÚ - ´ëÈ­»óÀÚ ¾ø¾Ö±â</tag> ÀÌ·¸°Ô Çؼ­ ¸¸µé¾îÁø about ´ëÈ­»óÀÚ´Â »ç¿ëÀÚ°¡ ¸Þ´º³ª Åø¹Ù¸¦ ÅëÇؼ­ ¶ç¿ï ¼ö ÀÖ´Ù. ±×¸®°í ÀÌ ´ëÈ­»óÀÚÀÇ È®ÀÎ ¹öÆ°À» ´©¸£¸é ¾ðÁ¦µçÁö ´ÝÀ» ¼ö ÀÖ´Ù. </descrip> <sect1>°³¹ß ¼¼¹ø° ´Ü°è - file open ´ëÈ­»óÀÚ <p> ¸ÕÀú ´ÙÀ½ <ref id="fig_41" name="ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ À§Á¬">À» "À§Á¬ À©µµ¿ì"-"GTK+ Basic ÆгÎ" ¿¡¼­ Ŭ¸¯Çϸé ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡µÈ´Ù. <!-- ±×¸² 41 : fileselectiondlgwidget --> <figure> <eps file="images/fileselectiondlgwidget.eps" height="47pt"> <img src="images/fileselectiondlgwidget.gif"> <caption><label id="fig_41">ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ ÄÁƲ·Ñ</caption> </figure> ÀÌ·¸°Ô Çϸé ÀÚµ¿À¸·Î "src/interface.c"¿¡ <tt>create_fileselection1</tt> ¶ó´Â ÇÔ¼ö°¡ »ý±â°í ¿©±â¿¡ <tt>ok_button1</tt>¿Í <tt>cancel_button1</tt> ¹öÆ°µéÀÌ ¸¸µé¾îÁ® ºÙ¿©Áø´Ù. ÀÌ ´ëÈ­»óÀÚ°¡ ÀûÀýÇÑ »ç¿ëÀÚ ¿ä±¸¿¡ ´ëÇؼ­ È­¸é¿¡ µð½ºÇ÷¹À̵ǵµ·Ï ¼³Á¤ÇÏ·Á¸é ´ÙÀ½°ú °°ÀÌ ÇÏÀÚ. <descrip> <tag>¸Þ´º¿Í ¿¬°áÇϱâ</tag> ¹ÙÅÁ À©µµ¿ì Æû¿¡¼­ ¸Þ´º¸¦ ¼±ÅÃÇÏÀÚ. ±×·¯¸é ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ <em>Widget</em> ÅÇ¿¡ <em>Edit Menus...</em> ¶ó´Â ¹öÆ°ÀÌ º¸ÀÏ °ÍÀÌ´Ù. ÀÌ°ÍÀ» Ŭ¸¯ÇÏ¿© <em>Menu Editor</em> À©µµ¿ì¸¦ ºÎ¸¥ µÚ File ¸Þ´ºÀÇ Open ¼­ºê ¸Þ´º¿¡ ´ëÇÑ Çڵ鷯 À̸§À» È®ÀÎÇÑ´Ù. ´ë°³ <em>on_Open_activate</em> ÀÏ °ÍÀÌ´Ù. ¿ì¸®´Â ÀÌ Çڵ鷯<footnote>callbacks.c ¿¡ ÀÖ´Ù</footnote> ¾È¿¡ file open ´ëÈ­ »óÀÚ¸¦ ºÎ¸£´Â Äڵ带 ³Ö¾î¾ß ÇÑ´Ù. ´ÙÀ½°ú °°ÀÌ ÇÏÀÚ. <code> void on_Open_activate ( GtkMenuItem *menuitem, gpointer user_data) { /* Ãß°¡ ½ÃÀÛ */ GtkWidget *open_file; open_file = create_fileselection1(); gtk_widget_show (open_file); /* Ãß°¡ ³¡ */ } </code> <tag>Åø¹Ù ¹öÆ°°ú ¿¬°áÇϱâ</tag> ¸ÞÀÎ À©µµ¿ìÀÇ Open ¹öÆ°À» Ŭ¸¯ÇÏ¿© ¼±ÅÃÇÑ ÈÄ ¼Ó¼º À©µµ¿ìÀÇ Signals ÅÇ¿¡¼­ clicked Çڵ鷯¸¦ µî·ÏÇÑ´Ù. ±×¸®°í Build ¹öÆ°À» ´©¸¥´Ù. ±×·¯¸é callbacks.c ¿¡ ÇØ´ç Çڵ鷯 ÇÔ¼öÀÇ ¹Ùµð¸¸ Ãß°¡µÉ °ÍÀÌ´Ù. ´ë°³ Open ¹öÆ°Àº Åø¹Ù¿¡¼­ µÎ¹ø°À̹ǷΠon_button2_clicked()<footnote>À̰͵µ callbacks.c ¿¡ ÀÖ´Ù</footnote> ÀÌ µÉ °ÍÀÌ´Ù. ¿©±â¿¡µµ À§ÀÇ Ç׸ñ°ú °°Àº ¼¼ ¶óÀÎÀ» Ãß°¡ÇÏÀÚ. </descrip> ±×·¯¸é Open ¹öÆ°À» Ŭ¸¯ÇÒ ¶§¸¶´Ù ´ÙÀ½°ú °°Àº ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ°¡ ³ª¿Ã °ÍÀÌ´Ù. <!-- ±×¸² 42 : fileselectiondialog --> <figure> <eps file="images/fileselectiondialog.eps" height="434pt"> <img src="images/fileselectiondialog.gif"> <caption><label id="fig_42">½ÇÇàÈÄ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ</caption> </figure> ÀÚ ÀÌÁ¦´Â ÀÌ ´ëÈ­ »óÀÚ¿Í ÀÎÅÍÆäÀ̽º¸¦ ÇØ¾ß ÇÑ´Ù. »ç¿ëÀÚ°¡ È®ÀÎ ¹öÆ°À» ´©¸£¸é ÀÔ·ÂµÈ ÆÄÀÏÀ» °¡Á®¿À°í ´ëÈ­»óÀÚ¸¦ Á¾·áÇϸç, Ãë¼Ò ¹öÆ°À» ´©¸£¸é ±×³É ´ëÈ­»óÀÚ¸¦ Á¾·áÇÏÀÚ. ÀÚ ÀÌÁ¦ °¢ ¹öÆ° ½Ã±×³Î Çڵ鷯µéÀ» µî·ÏÇغ¸ÀÚ. <descrip> <tag>¹®Á¦ ¹× »çÀü Áö½Ä</tag> <enum> <item> ¹ÙÅÁ À©µµ¿ì¿¡¼­ »õ·Î¿î ´ëÈ­»óÀÚ¸¦ À§ÀÇ ÄÚµåó·³ »ý¼ºÇÏ¿´´Â µ¥, ±× °á°ú À§Á¬¿¡ ´ëÇÑ Á¤º¸, Áï À§Á¬ Æ÷ÀÎÅ͸¦ µû·Î ÀúÀåÇÏÁö ¾Ê¾Ò´Ù. ÀÌ °ÍÀ» ¾Ë¾Æ¾ß ¹ÙÅÁ À©µµ¿ì³ª Çڵ鷯¿¡¼­ ´ëÈ­»óÀÚ¸¦ ´Ý°Å³ª ¼±ÅÃµÈ ÆÄÀÏ¿¡ ´ëÇÑ Á¤º¸¸¦ ¾ò¾î ¿Ã ¼ö ÀÖ´Ù. °á°úÀûÀ¸·Î ´ëÈ­»óÀÚ¿¡ ´ëÇÑ Á¶ÀÛÀ» ó¸®ÇÒ ¶§, Àü¿ªº¯¼ö ´Ù¸¥ ¹æ¹ýÀ» ÅëÇؼ­ ´ëÈ­»óÀÚ Æ÷ÀÎÅ͸¦ ¾Ë¾Æ³»¾ß ÇÑ´Ù. <item>¼±ÅÃµÈ ÆÄÀÏÀº <tt>gtk_file_selection_get_filename (GTK_FILE_SELECTION(</tt><em>widget_pointer</em><tt>)))</tt> ÀÇ ¸®ÅÏ°ªÀÎ ¹®ÀÚ¿­ÀÌ´Ù. <item>gtk_signal_connect() ÇÔ¼ö·Î ½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¿¬°áÇÒ ¶§ ¸¶Áö¸· ÆĶó¹ÌÅÍ·Î <tt>void *</tt>¸¦ ¸»ÇÏ´Â gpointer Çü °ªÀ» ÁÙ ¼ö ÀÖ°í ¹Þ´Â ÂÊ, Áï ½Ã±×³Î Çڵ鷯 ÂÊ¿¡¼­µµ gpointer ÇüÀÇ °ªÀ» ¹Þ´Â´Ù. <item>½Ã±×³Î°ú ½Ã±×³Î Çڵ鷯¸¦ ¿¬°áÇÒ ¶§ <tt>gtk_signal_connect_object</tt> ¸¦ ¾µ ¼öµµ ÀÖ´Ù. ÀÌ ÇÔ¼ö´Â ´Ù¸¥ °´Ã¼ÀÇ Äݹé ÇÔ¼ö¸¦ ½Ã±×³Î Çڵ鷯·Î ¿¬°áÇÒ ¶§ »ç¿ëµÈ´Ù. ±×¸®°í ÀÌ ÇÔ¼ö´Â Ç¥ÁØ ÇÔ¼ö(¿¹: gtk_widget_show µî)¸¦ ½Ã±×³Î Çڵ鷯·Î ¿¬°áÇÒ ¶§ À¯¿ëÇÏ´Ù. ÀÌ ÇÔ¼öÀÇ ³×¹ø° ÆĶó¹ÌÅÍ´Â ¿¬°áµÇ´Â ½Ã±×³Î Çڵ鷯ÀÇ Ã¹¹ø° ÆĶó¹ÌÅÍ·Î Àü´ÞµÈ´Ù. <item>GLADE ´Â ´ëÈ­»óÀÚÀÇ ¹öÆ°¿¡ ´ëÇÑ Çڵ鷯¸¦ °³¹ßÀÚ°¡ Ãß°¡ÇÒ ¶§ Data ¶Ç´Â Object ¸¦ ¾²Áö ¾ÊÀ¸¸é gtk_signal_connect() ¶ó´Â ÇÔ¼ö¸¸À» ½á¼­, ¸¶Áö¸· ÆĶó¹ÌÅͷδ ¹«Á¶°Ç NULL À» ÁÖ°í¼­ µî·ÏÇÑ´Ù. ±×·¯³ª Data ¸¦ »ç¿ëÇÏ¸é ¸¶Áö¸· ÆĶó¹ÌÅͷνá ÁöÁ¤µÈ °ªÀ» »ç¿ëÇÏ¿© »ý¼ºÇϸç Object ¸¦ »ç¿ëÇϸé gtk_signal_connect_object() ÇÔ¼ö¸¦ ¾²¸ç ¸¶Áö¸· ÆĶó¹ÌÅÍ·Î Object ¿¡¼­ ÁöÁ¤ÇÑ °ÍÀ» ¾´´Ù. ±×¸®°í After ¹öÆ°À» Ŭ¸¯Çϸé gtk_signal_connect_after() ¸¦ »ç¿ëÇÏ¿© ½Ã±×³ÎÀ» µî·ÏÇÑ´Ù. <item>GLADE ´Â Ãë¼Ò ¹öÆ°À» µðÆúÆ®·Î ¸¸µç´Ù. </enum> <tag>È®ÀÎ ¹öÆ° ½Ã±×³Î Çڵ鷯</tag> ¸ÕÀú ´ëÈ­»óÀÚ(¿©±â¼­´Â fileselection1) ÅÛÇø´ÀÌ È­¸é¿¡ ¶°ÀÖÁö ¾ÊÀ¸¸é GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ ÇØ´ç ´ëÈ­»óÀÚ¸¦ ´õºíŬ¸¯ÇÏ¿© È­¸é¿¡ ¶ç¿î´Ù. ±×¸®°í ÇÁ·ÎÆÛƼ À©µµ¿ì¸¦ ¶ç¿îµÚ, ´ëÈ­»óÀÚÀÇ È®ÀÎ ¹öÆ°À» ´©¸£¸é ÀÌ ¹öÆ°¿¡ ´ëÇÑ ÇÁ·ÎÆÛƼ¸¦ º¸¿©ÁÙ °ÍÀÌ´Ù. ÀÌ ÇÁ·ÎÆÛƼ À©µµ¿ìÀÇ ½Ã±×³Î ÅÇ¿¡¼­ ´ÙÀ½ ±×¸²Ã³·³ Çڵ鷯¸¦ Ãß°¡ÇÏÀÚ. ±×¸®°í Data ºÎºÐ¿¡ fileselection1 À» ³Öµµ·Ï ÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶). ±×·¯¸é gtk_signal_connect() ÇÔ¼ö ³×¹ø° ÆĶó¹ÌÅÍ¿¡ ÀÌ °ªÀ» GLADE °¡ ³ÖÀ» °Í<footnote>¹°·Ð GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ Build ¸¦ Ŭ¸¯ÇØ¾ß ÇÑ´Ù</footnote>ÀÌ´Ù. <!-- ±×¸² 43 : oksignal --> <figure> <eps file="images/oksignal.eps" height="398pt"> <img src="images/oksignal.gif"> <caption><label id="fig_43">È®ÀÎ ¹öÆ° ½Ã±×³Î Çڵ鷯 µî·Ï</caption> </figure> ÀÌÈÄ interface.c ¿¡ ´ÙÀ½°ú °°Àº ¶óÀÎÀÌ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. <code> gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked", GTK_SIGNAL_FUNC(on_ok_button1_clicked), fileselection1); </code> <tag>Ãë¼Ò ¹öÆ° ½Ã±×³Î Çڵ鷯</tag> Ãë¼Ò ¹öÆ° ½Ã±×³Î Çڵ鷯´Â È®ÀÎ ¹öÆ° ½Ã±×³Î Çڵ鷯¿Í ºñ½ÁÇÏ°Ô µî·ÏÇ쵂 ÇÁ·ÎÆÛƼ À©µµ¿ì/½Ã±×³Î ÅÇÀÇ ½Ã±×³Î Çڵ鷯 µî·Ï ÄÞº¸(´ÙÀ½ ±×¸² ÂüÁ¶)¸¦ Ŭ¸¯ÇÏ¿© gtk_widget_destroy() ¶ó´Â ½ºÅå(Ç¥ÁØ, ³»Àå) Çڵ鷯¸¦ ¼±ÅÃÇÏ¿© µî·ÏÇÏÀÚ. ±×¸®°í Object ºÎºÐ¿¡´Â fileselection1 À» ³Öµµ·Ï ÇÏÀÚ(´ÙÀ½ ±×¸² ÂüÁ¶). ÀÌ·¸°Ô Çϸé gtk_signal_connect() ÇÔ¼ö ´ë½Å¿¡ gtk_signal_connect_object() ¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇϸç ÀÌ ÇÔ¼öÀÇ ³×¹ø° ÆĶó¹ÌÅÍ¿¡ NULL ¾Æ´Ñ Á¶±Ý Àü¿¡ ³Ö¾îÁØ °ªÀ» GLADE °¡<footnote>¹°·Ð GLADE ¸ÞÀÎ À©µµ¿ì¿¡¼­ Build ¸¦ Ŭ¸¯ÇØ¾ß ÇÑ´Ù</footnote> ³Ö´Â´Ù. <!-- ±×¸² 44 : cancelsignal --> <figure> <eps file="images/cancelsignal.eps" height="398pt"> <img src="images/cancelsignal.gif"> <caption><label id="fig_44">Ãë¼Ò ¹öÆ°¿¡ ´ëÇÑ Çڵ鷯 µî·Ï</caption> </figure> À§ÀÇ ±×¸²Àº ³»¿ëÀÌ ´Ù º¸À̶ó°í µðÆúÆ®·Î ³ª¿À´Â °ÍÀ» Á¶±Ý ´Ã¸° °ÍÀÌ´Ù. ±×·¯¸é interface.c ¿¡ ´ÙÀ½°ú °°Àº ¶óÀÎÀÌ Ãß°¡µÊÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù. <code> gtk_signal_connect_object (GTK_OBJECT (cancel_button1), "clicked", GTK_SIGNAL_FUNC (gtk_widget_destroy), fileselection1); </code> </descrip> Ãë¼Ò ¹öÆ°ÀÇ °æ¿ì´Â ±×´ë·Î ³öµÎ¾îµµ ¹«¹æÇÏÁö¸¸ È®ÀÎ ¹öÆ°ÀÇ °æ¿ì ½Ã±×³Î Çڵ鷯¿¡ Á¶±Ý Äڵ带 Ãß°¡ÇÏ¿©¾ß »ç¿ëÀÚ°¡ ¹«¾ùÀ» ¼±ÅÃÇß´ÂÁö¸¦ ÆľÇÇÒ ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ Ãß°¡ÇÏ¸é µÈ´Ù: <code> void on_ok_button1_clicked (GtkButton *button, gpointer user_data ) { /* Ãß°¡ ½ÃÀÛ */ GtkWidget *open_file = (GtkWidget *)user_data; g_print ("%s\n", gtk_file_selection_get_filename (GTK_FILE_SELECTION (open_file))); gtk_widget_destroy( (GtkWidget *)open_file ); /* Ãß°¡ ³¡ */ } </code> ¿ì¼±Àº ¼±ÅÃµÈ ÆÄÀÏÀ» ÅؽºÆ®·Î Å͹̳ο¡ Ãâ·ÂÇÏ´Â °ÍÀ¸·Î ÀÌ ¼½¼ÇÀÇ ¾ê±â¸¦ ³¡³»µµ·Ï ÇÏÀÚ. ³ªÁß¿¡ ÀÌ °ªÀ» È°¿ëÇϱâ·Î ÇÏ°í. <sect1>°³¹ß ³×¹ø° ´Ü°è - font selection ´ëÈ­»óÀÚ <p> ¸ÕÀú ´ÙÀ½ <ref id="fig_45" name="ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ À§Á¬">À» "À§Á¬ À©µµ¿ì"-"GTK+ Basic ÆгÎ" ¿¡¼­ Ŭ¸¯Çϸé ÇÁ·ÎÁ§Æ®¿¡ Ãß°¡µÈ´Ù. <!-- ±×¸² 45 : fontselectiondlgwidget --> <figure> <eps file="images/fontselectiondlgwidget.eps" height="51pt"> <img src="images/fontselectiondlgwidget.gif"> <caption><label id="fig_45">ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ ÄÁƲ·Ñ</caption> </figure> À§¿¡¼­ º» ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¿Í °ÅÀÇ ¸ðµç ¸é¿¡¼­ µ¿ÀÏÇϱ⠶§¹®¿¡ ¸¹Àº ºÎºÐÀ» »ý·«ÇÑ´Ù. ±×·¯³ª »ç¿ëÀÚ°¡ È®ÀÎÀ̳ª Àû¿ëÀ» ´­·¶À» °æ¿ì »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ³»¿ëÀ» ¾ò¾î¿À´Â ºÎºÐÀº ¿©±â¼­ ´Ù·ç±â·Î ÇÑ´Ù. ÀÌ·± ¿ªÇÒÀ» ÇÏ´Â ÇÔ¼ö´Â ÆÄÀϼ±Åðú´Â ´Þ¸® 1°³°¡ ¾Æ´Ï¶ó 3°³Á¤µµ ÀÖ´Ù. <enum> <item>gtk_font_selection_dialog_get_font() <item>gtk_font_selection_dialog_get_font_name() <item>gtk_font_selection_dialog_get_preview_text() </enum> ¼¼¹ø°´Â Ư¼öÇÑ °æ¿ì¿¡(¿¹¸¦ µé¸é »ç¿ëÀÚ°¡ ±×¸²¿¡ ³ÖÀ» ÅؽºÆ®¸¦ ¼±ÅÃÇÏ´Â °æ¿ì µî) ¾²ÀÏ °ÍÀ¸·Î º¸ÀδÙ. ù¹ø°¿Í µÎ¹ø°´Â ÇÔ¼ö À̸§µéÀÌ °¡¸£ÄÑÁÖ´Â ¹Ù¿Í °°´Ù. ´Ù¸¸ ù¹ø°´Â GdkFont Æ÷ÀÎÅ͸¦ ¸®ÅÏÇÏ°í µÎ¹ø°´Â À̸§¸¸ ¸®ÅÏÇÑ´Ù. È®ÀÎ ¹öÆ°¿¡ ´ëÇؼ­ À§ÀÇ ¼½¼Ç¿¡¼­ ÇÑ °Í°ú ºñ½ÁÇÏ°Ô Ç쵂 ´ÙÀ½°ú °°ÀÌ ¼±Åà ´ë»ó Á¤º¸¸¦ ¾ò´Â ºÎºÐÀ» Ãß°¡ÇÏÀÚ. <code> void on_ok_button2_clicked (GtkButton *button, gpointer user_data) { /* Ãß°¡ ½ÃÀÛ */ GtkWidget *font_select = (GtkWidget *)user_data; GdkFont *gdk_font = NULL; gdk_font = gtk_font_selection_dialog_get_font( GTK_FONT_SELECTION_DIALOG(font_select)); g_print ("type : %s\n", gdk_font->type == GDK_FONT_FONT ? "font" : ( gdk_font->type == GDK_FONT_FONTSET ? "fontset" : "unkonwn") ); g_print ("ascent : %d\n", gdk_font->ascent ); g_print ("descent : %d\n", gdk_font->descent); g_print ( "name = %s\n", gtk_font_selection_dialog_get_font_name( GTK_FONT_SELECTION_DIALOG(font_select)) ); gtk_widget_destroy( (GtkWidget *)font_select ); /* Ãß°¡ ³¡ */ } </code> ÀÌ ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ¸¦ ¶ç¿ì´Â ¸Þ´º¸¦ Çϳª Ãß°¡ÇÏ¿© ÀÌ ´ëÈ­»óÀÚ¸¦ ±¸µ¿½ÃÄѺ¸ÀÚ(<ref id="win_menu_editor" name="¸Þ´º ¿¡µðÅÍ">¸¦ È°¿ëÇÏÀÚ). ½ÇÇàÈÄ °á°ú´Â ´ÙÀ½°ú °°´Ù(¿À¸¥ÂÊ Å͹̳ο¡ ÂïÈù ³»¿ëÀ» ÁÖ¸ñÇÏÀÚ). <!-- ±×¸² 46 : afterselectfont --> <figure> <eps file="images/afterselectfont.eps" height="670pt"> <img src="images/afterselectfont.gif"> <caption><label id="fig_46">ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ ½ÇÇà È­¸é</caption> </figure> <sect1>°³¹ß ´Ù¼¸¹ø° ´Ü°è - text area Á¦¾î <p> ÀÚ ÀÌÁ¦ ÅؽºÆ® ¿µ¿ªÀ» Á¦¾îÇغ¸ÀÚ. ±âº»ÀûÀ¸·Î ÅؽºÆ® ¿µ¿ª À§Á¬ ÀÚü°¡ ÅؽºÆ® ÀÔ·Â ±â´É, ÀÔ·ÂµÈ ÅؽºÆ®ÀÇ ¼±Åà ±â´É, ¹æÇâÅ° ¹× ¹é½ºÆäÀ̽º Å° ±â´É µîÀ» Áö¿øÇÑ´Ù. ±×¸®°í Del Å°´Â Ä¿¼­ µÚ ¹®ÀÚ Çϳª¸¦ Áö¿ì¸ç ¸¶¿ì½º ¼±Åà ÈÄ Del Å°´Â ¼±ÅÃµÈ ¿µ¿ªÀ» ¸ðµÎ Áö¿î´Ù. ÀÌ°ÍÀº GtkText ¶ó´Â À§Á¬À¸·Î Áö¿øµÈ´Ù. ±×¸®°í ÀÌ À§Á¬Àº GtkEditable À§Á¬À¸·ÎºÎÅÍ ½Â°èµÈ °ÍÀÌ´Ù. ±×·¯¸é ¿©±â¿¡ º¹»ç/ÀÚ¸£±â/ºÙÀ̱⠱â´ÉÀ» ³Ö¾îº¸µµ·Ï ÇÏÀÚ. <descrip> <tag>º¹»ç</tag> ¿ì¸®´Â <tt>void gtk_editable_copy_clipboard(GtkEditable *editable);</tt> ÇÔ¼ö¸¦ »ç¿ëÇÏ¿© ¼±ÅÃµÈ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î º¹»çÇÒ ¼ö ÀÖ´Ù. ±×·¡¼­ ÆíÁý/º¹»ç ¸Þ´º¸¦ ¼±ÅÃÇßÀ» ¶§ ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_Copy_activate() ¾È¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ. <code> gtk_editable_copy_clipboard( (GtkEditable *)gTextArea ); </code> ±×·¯³ª ¸ÕÀú GtkText Æ÷ÀÎÅÍÇü Àü¿ª º¯¼ö gTextArea °¡ ¼±¾ðµÇ°í ¿ì¸®ÀÇ ¹ÙÅÁ À©µµ¿ì¿¡ ÀÖ´Â ÅؽºÆ® ¿µ¿ªÀ» °¡¸®Å°µµ·Ï Á¤ÀǵǾî ÀÖ¾î¾ß ÇÑ´Ù. ±×·¯¹Ç·Î callbacks.c ¿¡ <tt>GtkText *gTextArea</tt> ¶ó°í Àü¿ª º¯¼ö ¼±¾ðÀ» ÇÑ´Ù. ±×¸®°í callbacks.c ¿¡ focus_in_event ½Ã±×³Î¿¡ ´ëÇÑ Çڵ鷯¸¦ ¸¸µé°í ÀÌ ¾È¿¡ ´ÙÀ½°ú °°Àº Äڵ带 Ãß°¡ÇÏÀÚ<footnote>interface.c ¿¡ À§ÀÇ Àü¿ªº¯¼ö¸¦ ¼±¾ðÇϰųª ÀÌ Àü¿ªº¯¼ö ÃʱâÈ­¸¦ ³Ö´Â´Ù¸é ¹®Á¦°¡ ³¯ ¼ö ÀÖ´Ù. ¿Ö³Ä¸é GLADE ´Â interface.c ´Â ´ë°³ ÇÔ¼ö ¸öü Äڵ尡 µé¾î ÀÖ´Â <tt>create_</tt><em>xxx</em> °ú °°Àº ÇÔ¼öµéÀ» ³Ö°í ÀÌ´Â °³¹ßÀÚ°¡ GLADE ¸ÞÀÎ À©µµ¿ìÀÇ Build ¸¦ ´©¸¦ ¶§¸¶ »õ·ÎÀÌ °»½ÅµÇ¾î °³¹ßÀÚ Ä¿½ºÅ͸¶ÀÌÁî Äڵ尡 À¯½ÇµÇ±â ¶§¹®ÀÌ´Ù. ´ë½Å callbacks.c ¿¡ ÀÖ´Â ³»¿ëµéÀº ÁÖ·Î ½Ã±×³Î Çڵ鷯µéÀ̸ç interface.c ¿¡ ºñÇؼ­ À¯½ÇµÇ´Â °ÍÀÌ °ÅÀÇ ¾ø´Ù. ±×·¡¼­ ÃßÈÄ GLADE ÀÇ Build ¿¡ ÀÇÇؼ­ ¼Ò½º°¡ »õ·Î °»½ÅµÉ ¶§, ¿µÇâÀ» ¹ÞÁö ¾Ê´Â °ÍÀ» ÇÊ¿ä·Î ÇÑ´Ù¸é callbacks.c ¿¡ ³Ö´Â °ÍÀÌ ÁÁ°Ú´Ù. ±×·¯³ª ½±°Ô ÇÏ´Â ¹æ¹ýÀÎ Àü¿ª º¯¼ö¸¦ ½á¾ß ÇÑ´Ù¸é Build ÇÏÁö ¾Ê´Â ¹æÇâÀ¸·Î Çصµ ÁÁ´Ù.</footnote>: <code> gboolean on_text1_focus_in_event(GtkWidget *widget, GdkEventFocus *event, gpointer user_data) { /* Ãß°¡ ½ÃÀÛ */ g_print( "on_text1_focus_in_event() start\n" ); if ( gTextArea == NULL ) gTextArea = (GtkText *)user_data; /* Ãß°¡ ³¡ */ return FALSE; } </code> GTK ³»ºÎÀûÀ¸·Î ÅؽºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª º¹»ç¿¡ ´ëÇؼ­ Ctrl-C ¸¦ ´ÜÃàÅ°·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. <tag>ÀÚ¸£±â</tag> ¿ì¸®´Â <tt>void gtk_editable_cut_clipboard(GtkEditable *editable);</tt> ÇÔ¼ö¸¦ »ç¿ëÇؼ­ ¼±ÅÃµÈ ¿µ¿ªÀ» Ŭ¸³º¸µå·Î À߶ó ³ÖÀ» ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ÆíÁý/ÀÚ¸£±â ¸Þ´º¸¦ ¼±ÅÃÇßÀ» ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_Cut_activate() ¾È¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ. <code> gtk_editable_cut_clipboard( (GtkEditable *)gTextArea ); </code> GTK ³»ºÎÀûÀ¸·Î ÅؽºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª ÀÚ¸£±â¿¡ ´ëÇؼ­ Ctrl-X ¸¦ ´ÜÃàÅ°·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. <tag>ºÙÀ̱â</tag> ¿ì¸®´Â <tt>void gtk_editable_paste_clipboard(GtkEditable *editable);</tt> ÇÔ¼ö¸¦ »ç¿ëÇؼ­ Ŭ¸³º¸µå¿¡ ÀÖ´Â ³»¿ëÀ» ÇöÀç Ä¿¼­ À§Ä¡·Î ³ÖÀ» ¼ö ÀÖ´Ù. ´ÙÀ½°ú °°ÀÌ ÆíÁý/ºÙÀ̱⠸޴º¸¦ ¼±ÅÃÇßÀ» ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_Paste_activate() ¾È¿¡ ´ÙÀ½°ú °°Àº ³»¿ëÀ» ³Ö¾îº¸ÀÚ. <code> gtk_editable_paste_clipboard( (GtkEditable *)gTextArea ); </code> GTK ³»ºÎÀûÀ¸·Î ÅؽºÆ® ¿µ¿ªÀÇ ¼±Åà ¿µ¿ª ºÙÀ̱⿡ ´ëÇؼ­ Ctrl-P ¸¦ ´ÜÃàÅ°·Î ÇÒ´çÇØ ³õ°í ÀÖ´Ù. </descrip> ÀÌÁ¦´Â ÆÄÀÏÀ» Àо ÅؽºÆ® ¿µ¿ªÀ¸·Î ÀоîµéÀÌ°í, ÆÄÀÏ¿¡ ÀúÀåÇغ¸µµ·Ï ÇÏÀÚ. <descrip> <tag>ÆÄÀÏ Àбâ</tag> À§ÀÇ ÆÄÀÏ ¼±Åà ´ëÈ­ »óÀÚ ¼½¼Ç¿¡¼­ ¼±ÅÃµÈ ÆÄÀÏÀ» Àо ¿ì¸®ÀÇ ¾îÇø®ÄÉÀÌ¼Ç ÅؽºÆ® ¿µ¿ª¿¡´Ù µð½ºÇ÷¹ÀÌÇغ¸ÀÚ. ´ÙÀ½°ú °°ÀÌ ÆÄÀÏ Open ´ëÈ­»óÀÚ¸¦ ±¸µ¿ÇÑ ÈÄ »ç¿ëÀÚ°¡ È®ÀÎ ¹öÆ°À» ´­·¶À» ¶§ ÀÛµ¿µÇ´Â ½Ã±×³Î Çڵ鷯 on_ok_button1_clicked() ¿¡´Ù ÆÄÀÏÀ» Àо ÅؽºÆ® ¿µ¿ª¿¡ ³Ö´Â Äڵ带 Ãß°¡Çغ¸ÀÚ. <code> void on_ok_button1_clicked (GtkButton *button, gpointer user_data ) { /* Ãß°¡ ½ÃÀÛ */ GtkWidget *open_file = (GtkWidget *)user_data; gchar *file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION(open_file)); FILE *infile = NULL; g_print ("%s\n", file_name ); /* ÅؽºÆ® ¿µ¿ª ¶ôÅ· */ gtk_text_freeze (GTK_TEXT (text)); infile = fopen(file_name, "r"); if (infile) { char buffer[1024]; int nchars; while (1) { nchars = fread(buffer, 1, 1024, infile); gtk_text_insert (GTK_TEXT (gTextArea), NULL, NULL, NULL, buffer, nchars); if (nchars < 1024) break; } fclose (infile); } /* ÅؽºÆ® ¿µ¿ª ¶ôÅ· ÇØÁ¦ */ gtk_text_thaw (GTK_TEXT (text)); gtk_widget_destroy( (GtkWidget *)open_file ); /* Ãß°¡ ³¡ */ } </code> ÀÌ ÄÚµå´Â ÇöÀç »ðÀÔ Æ÷ÀÎÆ®(current insert point) µÚ¿¡´Ù ÅؽºÆ®¸¦ Ãß°¡ÇÏ´Â °ÍÀ̹ǷΠÆÄÀÏ ³»¿ëÀ» ³Ö±âÀü¿¡ ÅؽºÆ® ¿µ¿ª¿¡ ¾î¶² ³»¿ëÀÌ ÀÖ¾ú´Ù¸é ±× ÀÌÈÄ¿¡ ÆÄÀÏ ³»¿ëÀÌ µé¾î°¥ °ÍÀÌ´Ù. À§¿¡¼­ »õ·Î »ç¿ëµÈ GTK ÇÔ¼ö´Â ´ÙÀ½°ú °°´Ù. <enum> <item>gtk_text_insert() - ÅؽºÆ® ¿µ¿ªÀÇ ÇöÀç Ä¿¼­ ÀÌÈÄ¿¡ ÁÖ¾îÁø ¹öÆÛÀÇ ³»¿ëÀ» ä¿î´Ù. <item>gtk_text_freeze(), gtk_text_thaw() - ÅؽºÆ® ¿µ¿ªÀ» ¶ôÅ·ÇÏ°í ¾ð¶ôÅ·ÇÑ´Ù. </enum> <tag>ÆÄÀÏ ÀúÀå</tag> ÀÌÁ¦´Â ÇöÀç ÅؽºÆ® ¿µ¿ªÀÇ ³»¿ëÀ» ÆÄÀÏ·Î ½áº¸ÀÚ. ±×·²·Á¸é ÅؽºÆ® ¿µ¿ª Àüü¸¦ ÃßÃâÇØ¾ß ÇÑ´Ù. ÅؽºÆ® ¿µ¿ª ÀϺθ¦ ÃßÃâÇÏ´Â ÇÔ¼ö´Â <tt>gtk_editable_get_chars( GtkText *editable, gint start_pos, gint end_pos);</tt> ÀÌ´Ù. ¿©±â¼­ start_pos, end_pos ´Â 0ºÎÅÍ ½ÃÀÛÇÏ´Â À§Ä¡ Á¤º¸ÀÌ´Ù. ±×¸®°í º¸Á¶ ÇÔ¼ö·Î½á ÅؽºÆ® ¿µ¿ªÀÇ Àüü ±æÀ̸¦ ±¸ÇÏ´Â ÇÔ¼ö <tt>gtk_text_get_length( GtkText *gtktext );</tt> °¡ ÀÖ´Ù. À̵éÀ» ÀÌ¿ëÇؼ­ ÆÄÀÏ¿¡ ÀúÀåÇغ¸±â·Î ÇÏÀÚ. ¸ÕÀú Save ´ëÈ­ »óÀÚ¸¦ À§ÀÇ ÆÄÀÏ ¼±Åà ´ëÈ­»óÀÚ¿¡¼­ Çß´ø °Íó·³ Ãß°¡ÇÏÀÚ. ±×¸®°í »ç¿ëÀÚ°¡ È®ÀÎ ¹öÆ°À» ´©¸£¸é ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯ÀÎ on_ok_button3_clicked() ÇÔ¼ö ¾È¿¡ ´ÙÀ½°ú °°Àº Äڵ带 ³Ö¾î º¸ÀÚ: <code> GtkWidget *save_file = (GtkWidget *)user_data; gchar *file_name = gtk_file_selection_get_filename (GTK_FILE_SELECTION(save_file)); FILE *outfile = NULL; int ntotal = gtk_text_get_length( gTextArea ); int nchars; gchar *buffer = NULL; gint nEnd = ntotal > 1024 ? 1024 : ntotal; gint nStart = 0; g_print ("save file name : %s\n", file_name ); g_print ("ntotal = %d\n", ntotal ); /* ÅؽºÆ® ¿µ¿ª ¶ôÅ· */ gtk_text_freeze (GTK_TEXT (gTextArea)); outfile = fopen(file_name, "w+"); if (outfile) { buffer = gtk_editable_get_chars( (GtkEditable *)gTextArea, 0, nEnd ); nchars = fwrite(buffer, 1, nEnd, outfile); g_free( buffer ); while (nEnd < ntotal) { nStart = nEnd; nEnd = (nEnd + 1024) < ntotal ? nEnd + 1024 : ntotal; buffer = gtk_editable_get_chars( (GtkEditable *)gTextArea, nStart, nEnd ); g_print( "when iter : nStart=%d:nEnd=%d:buffer=%s\n", nStart, nEnd, buffer ); nchars = fwrite(buffer, 1, nEnd-nStart, outfile); g_free( buffer ); } fclose (outfile); } /* ÅؽºÆ® ¿µ¿ª ¶ôÅ· ÇØÁ¦ */ gtk_text_thaw (GTK_TEXT (gTextArea)); gtk_widget_destroy( (GtkWidget *)save_file ); </code> ¿©±â¼­ ÇÑ°¡Áö ÁÖÀÇÇÒ °ÍÀº GTK °è¿­ÀÇ ÇÔ¼öµéÀÌ ÇѱÛÀ» ¸ðµÎ 2-byte ¹®ÀÚ°¡ ¾Æ´Ñ 1-byte ¹®ÀڷΠó¸®ÇÑ´Ù´Â °ÍÀÌ´Ù. ¹Ý¸é¿¡ fwrite ´Â 2-byte ¹®ÀÚ¸¦ 2-byte ±×´ë·Î ó¸®ÇÑ´Ù. ±×·¡¼­ ÀÌ·± ¿ÀÂ÷·Î ÇѱÛÀ» ÆÄÀÏ·Î ÀúÀåÇϸé À¯½ÇÀÌ ¹ß»ýÇÑ´Ù. ±×¸®°í g_free ÇÔ¼ö´Â gtk_editable_get_chars() ÇÔ¼ö¸¦ È£ÃâÇÏ¿© ¾òÀº gchar Æ÷ÀÎÅÍ¿¡ ´ëÇؼ­ È£ÃâÇÏ¿© ¸®¼Ò½º¸¦ ¹ÝȯÇÏ´Â ÇÔ¼ö·Î½á ¹Ýµå½Ã ÀÌ·¸°Ô ¸®¼Ò½º¸¦ ¹ÝȯÇÏ¿©¾ß ÇÑ´Ù°í ÇÑ´Ù(GTK ¸Å´º¾ó ÂüÁ¶). </descrip> ¸¶Áö¸·À¸·Î ÆùÆ®¸¦ ¹Ù²Ù¾î µð½ºÇ÷¹ÀÌ Çغ¸ÀÚ. <descrip> <tag>ÆùÆ® º¯°æ ÈÄ µð½ºÇ÷¹ÀÌ</tag> ÆùÆ®¸¦ º¯°æÇؼ­ µð½ºÇ÷¹ÀÌÇÒ·Á¸é ¸ÕÀú ÆùÆ® ¼±Åà ´ëÈ­»óÀÚ¿¡¼­ È®ÀÎÀ» ´­·¶À» °æ¿ì ÀÌ¿¡ ´ëÇÏ¿© ±¸µ¿µÇ´Â ½Ã±×³Î Çڵ鷯¿¡¼­ ½ÃÀÛÇØ¾ß ÇÑ´Ù. ´ë·«ÀûÀ¸·Î ¼³¸íÇϸé ÀÌ Çڵ鷯¿¡¼­ ÇØ¾ß ÇÒ ÀÏÀº, Àüü ÅؽºÆ®¸¦ ¾ò°í ÅؽºÆ® ¿µ¿ªÀ» ¸ðµÎ Áö¿î ´ÙÀ½ »ç¿ëÀÚ°¡ ¼±ÅÃÇÑ ÆùÆ®¸¦ ÀÌ¿ëÇؼ­ gtk_text_insert() ÇÔ¼ö¸¦ È£ÃâÇÏ´Â °ÍÀÌ´Ù. ÀÌ ÇÔ¼öÀÇ ÆùÆ® ÆĶó¹ÌÅÍ¿¡´Ù NULLÀ» ÁÖ¸é µðÆúÆ® ÆùÆ®¸¦ »ç¿ëÇÑ´Ù. ´ÙÀ½ ¼Ò½º¸¦ ½Ã±×³Î Çڵ鷯(¿¹: on_ok_button2_clicked())ÀÇ ¿¹ÀÇ ¼Ò½º(À§ÀÇ ¼½¼Ç ÂüÁ¶)¸¶Áö¸·¿¡ Ãß°¡Çϵµ·Ï ÇÏÀÚ: <code> ntotal = gtk_text_get_length( (GtkText *)gTextArea ); /* ÅؽºÆ® ȹµæ */ text_value = gtk_editable_get_chars( (GtkEditable *)gTextArea, 0, ntotal ); /* ÅؽºÆ® ¸ðµÎ Áö¿ì±â */ gtk_editable_delete_text( (GtkEditable *)gTextArea, 0, ntotal ); gtk_text_insert( (GtkText *)gTextArea, gdk_font, NULL, NULL, text_value, ntotal ); g_free( text_value ); </code> ÆùÆ® º¯°æÈÄÀÇ ½ÇÇàÈ­¸éÀº ´ÙÀ½°ú °°´Ù. <!-- ±×¸² 47 : afterfontchange --> <figure> <eps file="images/afterfontchange.eps" height="328pt"> <img src="images/afterfontchange.gif"> <caption><label id="fig_47">ÆùÆ® º¯°æ ÈÄÀÇ ½ÇÇàÈ­¸é</caption> </figure> ÀÌÈÄ¿¡ ÀԷµǴ ¸ðµç ÅؽºÆ®°¡ ÁöÁ¤µÈ ÆùÆ®·Î µð½ºÇ÷¹À̵ȴÙ. ´Ü ÇÑ°¡Áö ¹®Á¦´Â Á¤È®ÇÑ threshold °ªÀº ¸ð¸£°ÚÁö¸¸ Ä¿´Ù¶õ ÆùÆ®(¿¹: 72pt)·Î µð½ºÇ÷¹ÀÌ°¡ ¾ÈµÈ´Ù. </descrip> <sect1>°³¹ß ¿©¼¸¹ø° ´Ü°è - »óŹ٠Á¦¾î <p> »óŹٴ GLADE ·Î ºÙÀ̸é GtkStatusbar ¶ó´Â À§Á¬ÀÌ »ç¿ëµÈ´Ù. ¿©±â¿¡ ¸Þ½ÃÁö¸¦ Ãâ·ÂÇÏ·Á¸é <tt>guint gtk_statusbar_push(GtkStatusbar *statusbar, guint context_id, const gchar *text);</tt> ¶ó´Â ÇÔ¼ö¸¦ »ç¿ëÇÏ¸é µÈ´Ù. ¿¹¸¦ µé¾î¼­ ¸¶¿ì½º°¡ Åø¹Ù ¹öÆ° Áß Open ¹öÆ° À§¿¡ ÀÖÀ» ¶§ »óŹٿ¡ "ÆÄÀÏ Àбâ" ¶ó´Â ¸Þ½ÃÁö¸¦ Ãâ·ÂÇغ¸ÀÚ. ±×¸®°í ¸¶¿ì½º°¡ ÀÌ ¹öÆ°À» ¶°³¯ ¶§ »óŹٿ¡¼­ ¸Þ½ÃÁö¸¦ Áö¿ìµµ·Ï ÇÏÀÚ. ¿ì¼± ÇØ¾ß ÇÒÀÏÀÌ ¸î°¡Áö ÀÖ´Ù. ù¹øÀç À§ÀÇ push ÇÔ¼öÀÇ Ã¹¹ø° ÆĶó¹ÌÅ͸¦ Àü¿ªº¯¼ö·Î °ü¸®ÇØ¾ß ÇÑ´Ù. ±×·²·Á¸é ´ÙÀ½°ú °°ÀÌ interface.c ¿¡´Ù Àü¿ªº¯¼ö¸¦ ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÏ°í, <code> GtkStatusBar *gStatusBar = NULL; </code> create_window1() ÇÔ¼ö³»¿¡¼­ »óŹ٠»ý¼º ÈÄ »ý¼ºµÈ °Í¿¡´Ù ÀÌ Àü¿ªº¯¼ö¸¦ Á¤ÀÇÇÏÀÚ<footnote>¼ÖÁ÷È÷ ¾ê±âÇϸé Àü¿ªº¯¼ö¸¦ ¾È¾²°í »óŹÙÀÇ Æ÷ÀÎÅ͸¦ ȹµåÇÏ´Â ¹æ¹ýÀ» ã¾Æ¾ß ÇßÀ¸³ª °ÔÀ»·¯¼­ ³ªÁßÀ¸·Î ¹Ì·é´Ù. ´Ù¸¥ GNOME ±â¹Ý ¼Ò½ºµéÀ» º¸¸é ´ë°³ GLADE¸¦ ÀÌ¿ëÇÏÁö ¾ÊÀº µí º¸ÀÌ°í À̵éÀº Àü¿ªº¯¼ö°¡ ¾Æ´Ï¸é gnome »óŹٸ¦ ±×³É ¾²´Â °æ¿ì°¡ ¸¹¾Ò´Ù</footnote>. <code> gStatusBar = statusbar1; </code> µÎ¹ø°·Î ÇØ¾ß ÇÒ ÀÏÀº ¸¶¿ì½º À̵¿À» ÁÖ½ÃÇؼ­ Open ¹öÆ° À§·Î ¿ÔÀ» ¶§ ¹ß»ýµÇ´Â enter ½Ã±×³ÎÀ» Àâ¾Æ ó¸®ÇÏ´Â ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇØ¾ß ÇÑ´Ù. ÀÌ°ÍÀº À§¿¡¼­ ¸¹ÀÌ ÇØ º¸¾ÒÀ¸¹Ç·Î »ý·«ÇÑ´Ù. ±×¸®°í ¸¶¿ì½º°¡ ÀÌ ¹öÆ°À» ¶°³¯ ¶§µµ ½Ã±×³ÎÀ» Àâ¾Æ ½Ã±×³Î Çڵ鷯¸¦ µî·ÏÇØ¾ß ÇÑ´Ù. À̰͵µ ¿ª½Ã »ý·«ÇÑ´Ù. µÎ°¡Áö ÀÏÀÌ ³¡³µ´Ù¸é ¸ÕÀú callbacks.c ¿¡ À§ÀÇ Àü¿ªº¯¼ö¸¦ extern À¸·Î ´ÙÀ½°ú °°ÀÌ ¼±¾ðÇÏÀÚ. <code> extern GtkStatusbar gStatusBar; </code> ±×¸®°í ¸¶¿ì½º enter ½Ã±×³Î Çڵ鷯¿¡´Ù ´ÙÀ½°ú °°Àº Äڵ带 ³ÖÀÚ. <code> gtk_statusbar_push( gStatusbar, 1, "ÆÄÀÏ ¿ÀÇÂ" ); </code> ±×¸®°í leave ½Ã±×³Î Çڵ鷯¿¡´Ù ´ÙÀ½°ú °°Àº Äڵ带 ³ÖÀÚ. <code> gtk_statusbar_pop( gStatusbar, 1 ); </code> ½ÇÇà ÈÄ »óŹٿ¡ ¸Þ½ÃÁö°¡ ¶ß´Â ¸ð½ÀÀº ´ÙÀ½°ú °°´Ù: <!-- ±×¸² 48 : statusbar --> <figure> <eps file="images/statusbar.eps" height="328pt"> <img src="images/statusbar.gif"> <caption><label id="fig_48">½ÇÇàÈÄ »óŹ٠¸ð½À</caption> </figure> <!-- *************************************************************** --> <sect>¸¶¹«¸® <!-- *************************************************************** --> <p> ºñ·Ï ´Ü¼øÇϳª¸¶ ¿ì¸®´Â <bf>GLADE</bf>¸¦ °¡Áö°í¼­ ÅؽºÆ® ¿¡µðÅ͸¦ ¸¸µé¾î º¸¾Ò´Ù. ¾î¶²°¡? À©µµ¿ìÁîÀÇ ºñÁÖ¾ó ½ºÆ©µð¿À¸¸Å­ ½±°Ô ¸¸µé ¼ö ÀÖ´Ù. ±×·¯³ª ´Ù¼Ò ¹ÌÁøÇÑ ºÎºÐµéÀÌ À־ ¿©±â¿¡ ±×°ÍÀ» Á¤¸®ÇÏ°íÀÚ ÇÑ´Ù. <sect1><bf>GLADE</bf>¿¡ ¾î¶² ±â´ÉÀÌ Ãß°¡µÇ¾î¾ß ÇÒ °ÍÀΰ¡? <p> <bf>GLADE</bf>´Â À¯±âÀûÀÎ »ý¸íüó·³ ÁøÈ­ÇÏ°í ÀÖ´Â °³Ã¼ÀÌ´Ù. »ý¸íüÀ̹ǷΠ°è¼ÓµÇ´Â ½ÅÁø´ë»ç°¡ ÀÖ¾î¾ß ÇÏ´Â °Í ¾Æ´Ï°Ú´Â°¡? ³ª´Â ±×·± Àǹ̿¡¼­ ´ÙÀ½°ú °°ÀÌ <bf>GLADE</bf>°¡ °¡Á³À¸¸é ÇÏ´Â ±â´ÉµéÀ» »Ì¾Æ º¸¾Ò´Ù. ÀÌ ¹®¼­¸¦ º¸½Ã´Â ºÐµé Áß¿¡ <bf>GLADE</bf>¿¡ ÀÌ·± ±â´Éµé ÁßÀÇ ÀϺθ¦ Á¦°øÇÒ ¼ö ÀÖ´Â ±âȸ°¡ µÇ½Ã´Â ºÐµéÀÌ ¸¹¾ÒÀ¸¸é ÇÑ´Ù. <descrip> <tag>µ¥ÀÌÅÍ º£À̽º ¿¬µ¿ ±â´É</tag> ÀÌ°ÍÀº ¸®´ª½º°¡ »ó¾÷ÀûÀ¸·Î È°¿ëµÇ±â À§Çؼ­ °¡Àå ÇÊ¿äÇÑ ±â´ÉÀÌ´Ù. ´Ù¸¥ <em>RAD</em> Åø¿¡¼­ Á¦°øÇÏ´Â °Íó·³ <em>ODBC</em>, <em>JDBC</em> µî°ú °°Àº ¿¬µ¿ ä³ÎÀÌ °ø±ÞµÇ¾î¾ß Çϸç, À̸¦ ¹ÙÅÁÀ¸·Î ÇÑ ´Ù¾çÇÑ µ¥ÀÌÅÍ º£À̽º Çڵ鸵 À§Á¬µéÀÌ °ø±ÞµÇ¾î¾ß ÇÒ °ÍÀÌ´Ù. <tag>±×·¡ÇÈ ±â´É</tag> µ¿¿µ»óÀ̳ª Á¤Áö ¿µ»óÀ» ó¸® ¹× º¸¿©ÁÖ´Â À§Á¬ÀÌ Ãß°¡µÇ¾úÀ¸¸é ÇÑ´Ù. <tag>Åë½Å ¹× ÀÎÅÍ³Ý ±â´É</tag> ½Ã¸®¾ó<footnote>¹°·Ð socket Àº Áö¿øÇÑ´Ù</footnote> ±×¸®°í ´õ ³ª¾Æ°¡ ÀÎÅͳݱîÁö À̵éÀ» ó¸®ÇÏ°í º¸¿©ÁÖ´Â À§Á¬À» Ãß°¡µÇ¾úÀ¸¸é ÇÑ´Ù. </descrip> ³í¿ÜÀÇ ¾ê±âÁö¸¸ GTK ÀÇ ¾Æų·¹½º°ÇÀº ¾ÆÁ÷ ÇѱÛÈ­¶ó°í º»´Ù. ¸ðµç GTK ¶óÀ̺귯¸® ÇÔ¼öµé¾È¿¡¼­ ÇѱÛÈ­°¡ Á¶¼ÓÈ÷ ÀÌ·ç¾îÁö±â¸¦ ¹Ù¶ó°í ³ªµµ °Å±â¿¡ µ¿ÂüÇÒ ¼ö ÀÖ´Â ±âȸ°¡ ÁÖ¾îÁø´Ù¸é Âü ÁÁ°Ú´Ù. </article>