  GLADE   ũž ø̼ 

   simje@maninet.com
  March 29th, 2000,   : May 15th, 2000.

  GLADE GNU General Public License(GPL)  GTK+ User Interface
  Builder̴.   ϸ GTK+ ̺귯 ̿Ͽ GUI 
  ̽  RAD(Rapid Application Development) ̴.  ̰
   ׸ ̸  /ġϴ ׸ ׸ ̼
   ؽƮ ͸ ϴ ü ܰ  Ǵ 
  ȯϿ, Ұ ϰ ϴ    ̴. ׸ GLADE
   κе鿡    ִ.    //ǰ
    ̸Ϸ  ֽñ ٶ.     
   ٷ ϰڴ.
  ______________________________________________________________________

  

  1. GLADE   ġ
     1.1 GLADE ΰ?
     1.2 GLADE   ΰ?
        1.2.1 Source Binary
        1.2.2 
     1.3 GLADE ġ
        1.3.1 ġ ؼ ʿ ͵(requirements)
        1.3.2 binary package ġ
        1.3.3 ҽ ġ

  2. GLADE ̿ ؽƮ   -  ܰ
     2.1  (preliminaries)
        2.1.1 ̺귯
        2.1.2 GTK+ Ʃ͸ 캸AID CDATA GTK_tutorial(LABEL)LABEL
     2.2 GLADE Ǳ
        2.2.1   Ʈ 
        2.2.2 Ÿ  â
     2.3 м/ - ؽƮ  

  3. GLADE ̿ ؽƮ   - ܰ 
     3.1  ù° ܰ -  
     3.2  ι° ܰ - about ȭ
     3.3  ° ܰ - file open ȭ
     3.4  ׹° ܰ - font selection ȭ
     3.5  ټ° ܰ - text area 
     3.6  ° ܰ - ¹ 

  4. 
     4.1 (BFGLADE   ߰Ǿ  ΰ?

  ______________________________________________________________________

  1.  GLADE   ġ

  1.1.  GLADE ΰ?

  GLADE  ٸ (Windows NT/9x  ̷ θڴ)Visual
  Studio  κ ϸ Widget Template Palette( 
  Ѵٸ Control뿡 شϰڴ) øƮ ȷƮ ִ  巡
    GUI    GUI ü ϰ ̵ Ƽ
  ϰ ñ׳ ڵ鷯( Ѵٸ ޽  Լ)
  //Ͽ C, C++ ҽ(C++  addon glade-- ʿ)
    ִ   ȯ̴.

   C ҽ ϴ Ϳ  缭 ϰڴ.

  1.2.  GLADE   ΰ?

  1.2.1.  Source Binary

  GLADE  0.5.7 releaseǾ  web site
  http://glade.pn.org̴.

   ׸``GLADE  Ȩ Ʈ'' GLADE Ȩ Ʈ ̴.

                           GLADE  Ȩ Ʈ

  ̰  ֱ  ҽ ٿε   ̰ ̸
   binary Ű¡ RedHat RPM, Debian, Slackware, NetBsd
  package鵵 õǾ ִ. Ͻ  ̷ binary Ű¡ 
   ְڴ.

  1.2.2.  

    Ǵ  . ׷     
  ְڴ:

  o  GLADE ҽ ü

  o  GLADE ҽ doc 丮 ִ ϵ

  o  GLADE ҽ examples 丮 ִ 

  o  Designing a GTK+ interface graphically with Glade and libglade
     (http://www-4.ibm.com/software/developer/library/gnome-glade/)

  o  Glade turbo-start (http://glade.pn.org/tutorial.txt)

  1.3.  GLADE ġ

  1.3.1.  ġ ؼ ʿ ͵(requirements)

  GLADE ġϷ   ͵ ʿϴ.

  o  binary ʿ ̺귯

     GTK+ 1.2.0 ̻
        --  <http://www.gtk.org>

     gnome-libs 1.0.16 ̻
        -- Gnome  ʿ 쿡 ʿ

     Gettext 0.10.35
        --  <ftp://alpha.gnu.org/gnu/gettext-0.10.35.tar.gz> ̰
        gettext ϴ ø̼ ۼϰ   ʿ.

  o  ҽ ġϱ ؼ ʿ  

     Automake 1.4
        --  <ftp://ftp.gnu.org/pub/gnu/automake>,
        <http://www.gnu.org/software/automake>,
        <ftp://rawhide.redhat.com/i386/RedHat/RPMS>.

     Autoconf 2.13
        --  <ftp://ftp.gnu.org/pub/gnu/autoconf>,
        <http://www.gnu.org/software/autoconf>,
        <ftp://rawhide.redhat.com/i386/RedHat/RPMS>

  1.3.2.  binary package ġ

  RPM   binary Ű  ġ ϴ.  
  RPM   ġѴ:

  rpm -Uvh glade-0.5.7-2.i386.rpm

  1.3.3.  ҽ ġ

  ҽ ġϱ ؼ automake 1.4 autoconf 2.13 ʿϴ.
  ̵ κ linux ġǾ  ̴. ٸ ãƼ
  ġ. ׸ ҽ ġϴ   ,  ҽ
  ġ   , ׷   ƴϴ:

  1. Ǹ ؾ   ٿ ε    Ǫ ̴.

     [simje@rurulala /usr/src/local/gtk]$ tar xvzf glade-0.5.5.tar.gz

  2.    丮 ̵ؼ configure Ų.

     [simje@rurulala /usr/src/local/gtk]$ cd glade-0.5.5
     [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure

  ⼭ Ư 丮 ġ  ܳѴٸ ƽô ٿ  
   Էؾ Ѵ. ׷ ʴ  Ʈ /usr/local prefix
  ϰ ȴ.

  [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ ./configure
  --prefix=/usr

  3.  make  ϴ ̴.

     [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ make

  4.     ġѴ.

     [simje@rurulala /usr/src/local/gtk/glade-0.5.5]$ su -c "make install"

  2.  GLADE ̿ ؽƮ   -  ܰ

  ġ  Ǿ°? ׷ٸ  غ. ̻ Ǿٸ
   ܼ   ؼ GLADE   :

  2.1.   (preliminaries)

  ׳ 巡        ͺ  
        ʿϴ:

  2.1.1.  ̺귯

  GLADE GUI  ؼ  ϴ ̺귯ν  
  ͵ ִ:

     GTK+
        ̰    ν    ؼ
         ڰ н   ִ
        <http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html>.
        ׷   ڼ 鿩 ų library API  
        Ʈ ãƾ  ̴.  <http://www.gtk.org>. ̰ 
         ۷ ִ.  ̺귯 ü 밳 Լ
        gtk_xxx, ޸ ü GtkXxx, ũδ GTK_XXX   ¸
        .

     GDK
        Xlib ⿡ ִ wrapper library ȵ ̺귯̴.
        ̰ GTK+ Ƚ̳ Ʈ ÷ ٷ  Ǵ ̴.
        ̿    <http://www.gtk.org>  ã  ִ. 
        ̺귯 ü 밳 Լ gdk_xxx, ޸ ü GdkXxx,
        ũδ GDK_XXX   ¸ .

     Glib
        ̰ ޸ (ũ Ʈ, Ʈ, ؽ, ĳ, Ʈ)
        Ÿ̸, ؽƮ °   ٷ  Ǵ ̴. ̿
           <http://www.gtk.org>  ã  ִ. 
        ̺귯 ü 밳 Լ g_xxx, ޸ ü gxxx,
        ũδ GXXX   ¸ .

  ̸ ȭؼ ׸ Ÿٸ  (``gnome Ű'').

                              gnome Ű

  2.1.2.  GTK+ Ʃ͸ 캸

     ñ׳ΰ ñ׳ ڵ鷯
         GTK+ Ʃ͸ (
        <http://kldp.org/KoreanDoc/html/GtkTutorial/GtkTutorial.html>)
           鿡   ִ. ̵ ߿ 
        ߿ϴ   ñ׳ΰ ñ׳ ڵ鷯( ޽ ,
        ޽ ڵ鷯   )̶   ְڴ. ̴ 밳
        ʿ â main Լ( WinMain()Լ)ȿ ϰ
        ÷ , ޽  شϴ gtk_main() Լ
        ϴ ,  ȿ  ׼ǿ  ñ׳ε Ǿ
        ø̼ǿ ޵ȴ.

        ̸ ؼ  ñ׳ΰ ñ׳ ڵ鷯 νִ غ
         ־ ϴ    ϴ 
        gtk_signal_connect() Լ ؼ̴. GLADE  ҽ
        ڵ ڰ GLADE ؼ ϴ ñ׳ε ñ׳
        ڵ鷯  ø̼  â ϴ
        Լcreate_window1( ̸    ִ) ȿ
        ϰ   Ȯ   ̴.   Լ 
        ø̼  â ٿ    ϰ Ӽ
        ϴ   Ѵ.

     ŷ  //̺ ڽ
         ŷ̶   ̰  
        ̴(Ȥ MFC Ǿ óǴ 
        ̴). ׷   ƴϰ    ߶
        ̱ó ٿ   ؿ ִ Ͱ   ִ 
         ϴ ̸ ַ ̾ƿ   
        Ѵ. ̰  ٴ ڹٿ ִ ̳  ̾ƿ
         ϴٰ   ְڴ.

        GTK+   α׷Ѵٸ    ְ,
        GLADE ̰ ð ó ش.  ڽ(ڹ 
        Ѵٸ ̳)   ڽ ׸ ̺ ڽ ϸ
        ⿡  ü,   ս ٿ   
        ִ.

       ø̼  ׸``GTK 
  ø̼   ''     ´.

                  GTK  ø̼   

  2.2.  GLADE Ǳ

  2.2.1.    Ʈ 

  GLADE ϸ    â Ʈ :

      (main glade window)

                               GLADE  

        ̰ Ʈ ϴ  â ȭڵ  ִ.
        ̵  ϳ  Ŭϸ ̿ ϴ â̳ ȭ
        øƮ .  ׸ ̿ ϴ â̳ ȭ
        Ƽ   ֵ Ƽ  ü ̰
        ȴ.

      ȷƮ (widget palette window)

                            GLADE  ȷƮ 

        ̰     ִ ȷƮ̴. ο â̳
        ȭ ڸ Ʈ ߰Ϸ ȷƮ ִ â̳
        ȭڸ Ŭϱ⸸ ϸȴ. ̷  â̳ ȭڿ
         ̷  Ŭؼ   ϰ ϴ ġ
        Ŭϸ ȴ.

     Ӽ  (property editor window)

                            GLADE Ӽ  

        ̰ â̳ ȭ, ׸ ̵  ִ  ũ Ǵ
        ؽƮ   Ӽ   Ѵ.  쿡 ִ
        â̳ ȭڸ ŬϿ, Ǵ â̳ ȭ  ִ
         Ŭؼ, Ƽ   ü   ִ.

  2.2.2.  Ÿ  â

  GLADE    â   ַ ޴ ؼ
  ٵ  ִ:

     ޴ ۼ 

                             GLADE ޴ ۼ 

        ̰ Ʈ â ޴ ߰   ޴ Ŭ Ӽ
         쿡 Ÿ edit menu ư  Ÿ.
        ̰ ؼ  Ʈ ޴   ִ.

        ̰  ޴ ҽ ڵ  ȴ.

        add  Ŀ Stock Item ޺ڽ  ̸ ǵ, ׸
        θ ̴ ޴   ִ.   Handler ̿ 
        ȭ ÷ Ÿ Ǿ ִ , ѱȭ   ѱ۷
         Լ Handler Ǿ ҽ ų ѱ κ
         ä Լ Ÿ ȴ.  Handler κ
        ǵ̸  ٲ ִ  ڴ.

      Ʈ(widget tree)

                                GLADE  Ʈ
        ̰ Ʈ    Ʈ  ִ
        ̴.  ̰   View/Show WidgetTree ؼ
          ִ.

  2.3.  м/ - ؽƮ  

  츮  ϴ ؽƮ ʹ ܼ ũž
  ø̼ν 켱  notepad Ҵٰ Ͻø ȴ.
  ׷ٸ  Ͱ ؾ ϴ ׷ ؾ ϴ ɵ
  Ʈ 캸:

  o  â  Է, , , , ̱ 

  o    ϴ 

  o   о â ÷ ϴ 

  o   

  o  about ȭ  

  3.  GLADE ̿ ؽƮ   - ܰ 

  GLADE Ű   ٿ   â .
  ⿡ ̷ Ȳ   ܰ躰   ǵ
    ؽƮ ͸ ϴ  ǵ Ѵ:

  3.1.   ù° ܰ -  

       - 
        켱 ؽƮ   Ǵ â  Ѵ. ׷
         ȷƮ 쿡  ׸    Ŭؼ
          ִ.

                                   

        ׷  ׸   â ´.   ׸ ڼ 
        缱 ڵ  ȸ ׷ ִ    ִ. ̷
        ǥô ε  𰡸   ִ ̶
        ̴. ġ  ٹ   ø Ÿ 
        缱  ̶   ְڴ.

                                   

         ⿡ ʿ  ٿ ǰڴ.  ʿ
        ͵ غ ޴, , ؽƮ ڽ, ׸  ٰ
        ְڴ. ̰ ׳ ϳ ϳ   . ٷ 
        ׸ ڼ    ִ  κ Ŀٶ ȹ
          ʴ.  ϳ ü   ִٴ Ⱑ
        ȴ. ׷Ƿ  ؾ  ?

       - ޴  ̱
            ִ,  ׸    ڽ
         ϸ ȴ.  ̰ ̸     
         ȹ  Ǿ     ְ ȴ.

                                  ڽ 

        ̰ Ŭϸ 콺 ڰ  ٲ.    콺
        Ŀ  쿡  Ŭϸ  ׸    
        ڽ  ΰ  ȭڰ Ÿ.

                       ڽ    ȭ

        ⼭ 츮 4 Է. ֳĸ  â ̰ ϴ
        ü 4̱ ̴. OK     â 
        ҵǾ Ÿ ̴.

                      ڽ     

           װ ȹ  ޴, , ؽƮ ڽ,
        ׸  ٸ ٿ  .  ޴ٸ ̷ 
        ׸   ޴ widget  ȷƮ 쿡 ŬϿ
        Ѵ.

                                   ޴ 

        ׸  â  ȹ    ִ ȹ ŬѴ.
        ׷  ȭ   Ѵ.

                       ޴     

        ̰ ڼ   ߶ ִ κ 3 پ 
          ִ.   ֻܿ  ޴ κ  ƴ
            ִ.  ׷ ̺κ  ޴  
        ʴ. ֳĸ  ޴ Է ʾұ ̴. ׷ٸ
        ޴  ־ .

             ޴ Ŭϸ Ƽ 찡
         ׸ó Ÿ. ̰ ڼ  ٸ  Ŭؼ
         ʹ ٸ ޴ (Edit Menus...)̶ ư ϳ
         ִ.  ̰ Ŭ.

                                 ޴  ư

        ׷   ׸ 5  ȭ . ⿡  ׸ó
        ؼ ֵ .   ⺻ Ǵ Stock Item
        ؼ  ̴.  Add ư  ϳ 
         ڿ Stock Item ޺ ڽ Ŭؼ ̸ õ 
        ϸ     ϴ  ٲ. ׸
        Name ѱ۷  , ̰ ߿ ˰ ǰ ҽ 
         ҽ ο  ų ٷ ǥǾ   𸣰
        ȴ.   Name   ٲ.  ο̶
        New ٲ. ׷ ڵ  Ʒ ִ Handler ٲ.
         .  ׸  Ʈ â ִ Label شϴ ͵
         Ʒ ִ ⼺ ִ ȭǥ  Ǵ ν
        ޴     ٹ  ȴ.

                                 ޴  

       -   ̱
           쿡  ׸   ȷƮ ִ
          ٿ  .

                                    

        ̰ Ŭϸ 콺 Ŀ ڰ  Ѵ. ̰
        츮 ϴ ġ  ι° ĭ  ŬѴ. ׷
           ٸ ϴ°ϴ ȭ ڰ .

                          ư   ȭ

        ⿡ ϴ (  4) Էϰ OK Ŭϸ 
        ׸ ó ι°  4 ο    Ǵ
           ִ.

                          ٸ    

             ׸ 4 ǿ ٹư 
        ־ Ѵ. ׷  ׸   ȷƮ ư
         ؾ Ѵ.

                                   ư 

        ̰   콺   ι°  ù°
           Ŀ ڰ  Ѵ. ̰
        Ŭϸ    ȭ Ѵ.

                      Ѱ ư    

           Ƽ 츦 ڼ  Icon  Ʒ
        Ű ޺ڽ ư ִ. ̰    ̸
        ǵ Stock Icon ´.

                               ̸ غ ư

        ⿡ ̴   Ʒ ũ ϸ   
        ܵ غǾ   ̴.  ߿ ϳ .
        ׸ Ƽ Label κ ܿ ߾ ٲٵ ..
        ׸   ǵ鿡 ϴ   ǰڴ.
        ׷  ׸   ´.

                   ٿ  ư    

       - ؽƮ ڽ  ̱
         ° ࿡    ȷƮ 쿡 ִ
        ؽƮ ڽ  Ͽ ٿ  .

                                ؽƮ ڽ 

        ̰ Ŭ  콺    °  ű
        Ŀ ڰ ٲ. Ŭ ׷  ׸ó 
        찡 Ѵ.

                    ؽƮ ڽ     

        ׷ Ƽ 츦  Editable Ʈ No Ǿ
        ִ. ̰ Yes ؾ߸ ߿ ؽƮ Է  ִ.
        ׷ ü ũⰡ     ִ. ׷ 
         ũ⸦ ϴ ͺ ٱ   ũ⸦ ϴ
         .  ׸ ó   ũ Ӽ ϵ
        . ׷ ߿   ̿  ̸  
         찡 ǰ ִ ü ũ ϰ е ̴.

                              ũ 

       - ¹  ̱
            쿡  ׸   ȷƮ
        쿡 ִ ¹  ؼ ¹  ٿ 
        .

                                  ¹ 

        ̰       콺 
         ڰ  Ŀ ȴ. Ŭϸ  
         찡 Ѵ.

                           

       -   ϰ ҽ  ׸ 
        ̷ν 츮  츦     GUI ü
        ̰ ణ  غҴ. ? ׷ ʴ°. 
         ׸ ó GLADE File޴ ִ Save غ.

                               GLADE  ޴

        ׷  ׸  Project Options ȭڰ .
        ⿡   Էϰ OK  Ʈ ȴ. ,
         δ C ϵ .

                         GLADE Ʈ ɼ ȭ

        ׸   File ޴ Build Source Code ϸ 
          ҽ ȴ.  Ʈ ϴ 
         丮  src 丮 ִ  ⿡ 
        ҽ ȴ. ƽԵ ٷ  Ŭؼ  ҽ
              . ׷ ¿ 
         ؼ   ۿ .  Ʈ Ʈ
        丮 ls غ ⿡ õ autogen.sh ϸ
        ȯ  ̷.

                          lsɰ autogen.sh ȭ

        ׸  make ϸ ϴ     ִ.
        make  src Ʈ ̸    
        ̴. ̰    .

                                ù°  

       -   ̱
         غ.  ϵ   ִ ݱ ư 
        츮  ø̼  ʴ´. ƻԻ. 츮 һ
         ̴.   һ ׿ . ׷
          ``GTK Ʃ͸'' ǿ ִ ñ׳ ˾ƾ ϰ
         ⺻ delete_event ñ׳ ˾ƾ Ѵ. ̰ ٸ
         ƴϰ   close ޴ (-- ̰ âڰ 
        ޴ Ѵ. ̰ 츮  ø̼ ޴
        ٸ--)  ϰų title bar ݱ⸦ ϸ X 
        ڰ  Ͽ ϴ ̺Ʈ̴.  ̰ ޾Ƽ
        óϷ  ׸    Ƽ  
        ǵ ߿ ñ׳ ǿ ñ׳ ڵ鷯 ̸ Բ ־
        Ѵ.

                         window1 delete_event

        ׷  ׸  ϵ ̴.

                                   

        ⼭ 츮 ڵ ñ׳ ڵ鷯 ̸
        on_window1_delete_event Ǵ    ִ. ̰ ״
        . ̰ͱ ׸   ҽ ñ׳ΰ ñ׳
        ڵ鷯 ִ ͱ GLADE ִ ̴.  
         ó ҽ غ. ׸  ñ׳ ڵ鷯 ȿ
        츮 ؾ   غ . ٸ  ƴϰ  
        src/callbacks.cȿ ִ  on_window1_delete_event Լ
        ο   Էϸ ȴ.

        gboolean
        on_window1_delete_event (GtkWidget *widget, GdkEvent *event,
                        gpointer user_data)
        {
                gtk_exit( 0 );
                return FALSE;
        }

     ׸ makeϰ(ٽ autoget.sh  ʿ . ׷ ѹ
     ҽ   make  ڵ尡 ϵ ̴)
     غ .  ϸ   ̴.

   츮 GLADE  ۾  Ǵ ü , Ǵ ø̶
  θ. ׸       Ӽ θ
  .         ۾ϸ 
  쿡   ȿ Ÿ ̴ٶ  ǥϱ .

  3.2.   ι° ܰ - about ȭ

   gnome α׷ ǥȭ  ´.  ߿ ޴,
  , ¹, ׸ about ȭ ڰ ε巯.  ٸ ͵
  ִ.   ǥ ȭ ,  ñ( File Open,
  Save, Save As )  װ̴. 츮 ⼭ about ȭ ڸ
   ̰ ־  .

     about ȭ - ȭ 
        ȭ ڸ   GTK+ ϴ ȭ  ״
        ؼ   ٸ   ٿ  ǰ,
        gnome ϴ    Ͽ    
        ִ. 츮 ̰ غ .

                          GNOME About ȭ 

        ̰ ϸ   ȭڰ Ÿ.

                        GNOME About ȭ ʱ 

        츮  ,   Ƽ  Copyright, Author,
        Comments, ׸ Logo ٲپ  about ȭڸ 
         .   Copyright Author, Comments  ׸ó
        Ѵ.

                      GNOME About ȭ  

         Ȱ غø ˰ ̵   ȭ
        ü ũ  ڵ þ پ Ѵ.

        ׸  Logo غ . ̷ Ϸ Logo
         ڽ  н Էص ǰ   ִ 
        Ŭؼ   ȭڸ ҷ ̰ ؼ ص ȴ.

                   GNOME About ȭڿ ΰ  

          Ʈ Ѵ.

     about ȭ - ȭ 
        Ʈ   ҽ  ٽ make ص 츮
        ̻  .       about
        ȭڰ ÿ Ƣ ´ٴ ̴.   ϸ ǰڴ°?
        𿣰 츮 ġ ʴ ̷ ׼ ϴ ڵ尡 
        ̴. ٸ ƴ main.c main() Լ ̴. ׷ٸ ̰
             ( ǰ C commentó Ƶ
        ȴ.)

        GtkWidget *about1;
        .......
        about1 = create_about1 ();
        gtk_widget_show (about1);

     ϴ  about ȭڰ     ߴ 
     . ׷  ´.    , ڰ
     ޴ ٸ ؼ about   츮 about ȭڸ
       ΰ?   ڵ带  ִ ޴ About
      ڵ鷯 on_About_activate(callbacks.c ) ȿ ־ ָ
     ȴ.

     GtkWidget *about1;

     about1 = create_about1_dialog ();
     gtk_widget_show (about1);

       ڵ̴. ̰ ϴ  űų ٸ.  
     Ʈ ϰ make     Ȯغ.  About
     ư  쿡 ̿  ȿ   
     ٿ About ư   Ƽ  ñ׳ ǿ
       ñ׳ ڵ鷯 ( ׸ ). ׸  
     ڵ鷯 ȿ ޴  ڵ带 ־ ָ ȴ(ƴϸ  Լ
      ̸ ȣص ǰ).

                             About ư ñ׳

     ׷    ȴ ϴ ̻  ִ.  츮
     ־ ΰ  µ ʴ´ٴ ̴.  ׷?  GLADE
      ø̼ pixmap 丮 Ʈ
     "/usr/share/pixmaps" Ʒ ø̼ ̸ Ѵ. Ȯϰ
     ϸ gnome-config --datadir   (-- ̰ 밳
     "/usr/share" ̴--) ⿡ "pixmaps"  ø̼ ̸ 
      ΰ  ׸  Ǵ ġ ȴ.

     ׷Ƿ ڰ 縦 ϵ ƴϸ Ʈ μ make install
     ϸ ΰ  ׸ ϵ  丮 Ѵ. ׷ ⿡
     ִ  Ǿ About ȭ ׸ ̰  ̴.

     about ȭ - ȭ ֱ
        ̷ ؼ  about ȭڴ ڰ ޴ ٸ
        ؼ   ִ. ׸  ȭ Ȯ ư 
           ִ.

  3.3.   ° ܰ - file open ȭ

    ``  ȭ '' " "-"GTK+ Basic
  г"  Ŭϸ Ʈ ߰ȴ.

                          ȭ Ʋ

  ̷ ϸ ڵ "src/interface.c" create_fileselection1 
  Լ  ⿡ ok_button1 cancel_button1 ư 
  ٿ.

   ȭڰ   䱸 ؼ ȭ鿡 ÷̵ǵ
  Ϸ   .

     ޴ ϱ
           ޴ . ׷ Ƽ 
        Widget ǿ Edit Menus...  ư  ̴.  ̰
        ŬϿ Menu Editor 츦 θ  File ޴ Open 
        ޴  ڵ鷯 ̸ ȮѴ. 밳 on_Open_activate 
        ̴. 츮  ڵ鷯 (-- callbacks.c  ִ--)

        ȿ file open ȭ ڸ θ ڵ带 ־ Ѵ. 
         .

        ________________________________________________________________
        void
        on_Open_activate  ( GtkMenuItem   *menuitem,
                            gpointer      user_data)
        {
            /* ߰  */
            GtkWidget *open_file;
            open_file = create_fileselection1();
            gtk_widget_show (open_file);
            /* ߰    */
        }
        ________________________________________________________________

      ư ϱ
          Open ư ŬϿ   Ӽ 
        Signals ǿ clicked ڵ鷯 Ѵ. ׸ Build ư
        .  ׷ callbacks.c  ش ڵ鷯 Լ ٵ ߰
        ̴. 밳 Open ư ٿ ι°̹Ƿ
        on_button2_clicked() (-- ̰͵ callbacks.c  ִ--)

          ̴. ⿡  ׸    ߰.
  ׷ Open ư Ŭ      ȭڰ 
  ̴.

                           ȭ

     ȭ ڿ ̽ ؾ Ѵ. ڰ Ȯ ư
   Էµ   ȭڸ ϸ,  ư 
  ׳ ȭڸ .

     ư ñ׳ ڵ鷯 غ.

        

        1.  쿡 ο ȭڸ  ڵó Ͽ
           ,     ,   ͸  
           ʾҴ.   ˾ƾ  쳪 ڵ鷯 ȭڸ
           ݰų õ Ͽ      ִ. 
           ȭڿ   ó ,  ٸ  ؼ
           ȭ ͸ ˾Ƴ Ѵ.

        2. õ  gtk_file_selection_get_filename
           (GTK_FILE_SELECTION(widget_pointer)))  ϰ ڿ̴.

        3. gtk_signal_connect() Լ ñ׳ΰ ñ׳ ڵ鷯 
             Ķͷ void * ϴ gpointer    
           ְ ޴ ,  ñ׳ ڵ鷯 ʿ gpointer  
           ޴´.

        4. ñ׳ΰ ñ׳ ڵ鷯   gtk_signal_connect_object
              ִ.  Լ ٸ ü ݹ Լ ñ׳
           ڵ鷯   ȴ. ׸  Լ ǥ Լ(:
           gtk_widget_show ) ñ׳ ڵ鷯   ϴ.  
           Լ ׹° Ķʹ Ǵ ñ׳ ڵ鷯 ù°
           Ķͷ ޵ȴ.

        5. GLADE  ȭ ư  ڵ鷯 ڰ ߰ 
           Data Ǵ Object    gtk_signal_connect() 
           Լ Ἥ,  Ķͷδ  NULL  ְ
           Ѵ. ׷ Data  ϸ  Ķͷν 
            Ͽ ϸ Object  ϸ
           gtk_signal_connect_object() Լ   Ķͷ
           Object    . ׸ After ư Ŭϸ
           gtk_signal_connect_after()  Ͽ ñ׳ Ѵ.

        6. GLADE   ư Ʈ .

     Ȯ ư ñ׳ ڵ鷯
         ȭ(⼭ fileselection1) ø ȭ鿡 
         GLADE  쿡 ش ȭڸ ŬϿ ȭ鿡
        .  ׸ Ƽ 츦 , ȭ Ȯ ư
          ư  Ƽ  ̴.  Ƽ
         ñ׳ ǿ  ׸ó ڵ鷯 ߰. ׸
        Data κп fileselection1  ֵ ( ׸ ).
        ׷ gtk_signal_connect() Լ ׹° ĶͿ   GLADE
           (--  GLADE  쿡 Build  Ŭؾ
        Ѵ--) ̴.

                          Ȯ ư ñ׳ ڵ鷯 

         interface.c     ߰ Ȯ  ִ.

        ________________________________________________________________
        gtk_signal_connect (GTK_OBJECT (ok_button1), "clicked",
                            GTK_SIGNAL_FUNC(on_ok_button1_clicked),
                            fileselection1);
        ________________________________________________________________

      ư ñ׳ ڵ鷯
         ư ñ׳ ڵ鷯 Ȯ ư ñ׳ ڵ鷯 ϰ
        ϵ Ƽ /ñ׳  ñ׳ ڵ鷯 
        ޺( ׸ ) ŬϿ gtk_widget_destroy() 
        (ǥ, ) ڵ鷯 Ͽ .  ׸ Object
        κп fileselection1  ֵ ( ׸ ).  ̷
        ϸ gtk_signal_connect() Լ ſ
        gtk_signal_connect_object()  Լ ϸ  Լ
        ׹° ĶͿ NULL ƴ   ־  GLADE  (--
         GLADE  쿡 Build  Ŭؾ Ѵ--) ִ´.

                           ư  ڵ鷯 

         ׸   ̶ Ʈ    ø
        ̴.

        ׷ interface.c     ߰ Ȯ 
        ִ.

        ________________________________________________________________
        gtk_signal_connect_object (GTK_OBJECT (cancel_button1), "clicked",
                                   GTK_SIGNAL_FUNC (gtk_widget_destroy),
                                   fileselection1);
        ________________________________________________________________

   ư  ״ ξ  Ȯ ư  ñ׳
  ڵ鷯  ڵ带 ߰Ͽ ڰ  ߴ ľ 
  ִ.   ߰ϸ ȴ:

  ______________________________________________________________________
  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 );
      /* ߰    */
  }
  ______________________________________________________________________

  켱 õ  ؽƮ ͹̳ο ϴ   
  ⸦  . ߿   Ȱϱ ϰ.

  3.4.   ׹° ܰ - font selection ȭ

    ``Ʈ  ȭ '' " "-"GTK+ Basic
  г"  Ŭϸ Ʈ ߰ȴ.

                        Ʈ  ȭ Ʋ

      ȭڿ   鿡 ϱ  
  κ Ѵ. ׷ ڰ Ȯ̳    ڰ
     κ ⼭ ٷ Ѵ. ̷  ϴ
  Լ ϼð ޸ 1 ƴ϶ 3 ִ.

  1. gtk_font_selection_dialog_get_font()

  2. gtk_font_selection_dialog_get_font_name()

  3. gtk_font_selection_dialog_get_preview_text()

  ° Ư 쿡(  ڰ ׸  ؽƮ
  ϴ  )   δ. ù° ι° Լ ̸
  ִ ٿ . ٸ ù° GdkFont ͸ ϰ ι°
  ̸ Ѵ.

  Ȯ ư ؼ  ǿ  Ͱ ϰ ϵ  
      κ ߰.

  ______________________________________________________________________
  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 );
      /* ߰   */
  }
  ______________________________________________________________________

   Ʈ  ȭڸ  ޴ ϳ ߰Ͽ  ȭڸ
  Ѻ(``޴ '' Ȱ).

     ( ͹̳ο   ָ).

                       Ʈ  ȭ  ȭ

  3.5.   ټ° ܰ - text area 

    ؽƮ  غ. ⺻ ؽƮ   ü
  ؽƮ Է , Էµ ؽƮ  , Ű  齺̽ Ű
    Ѵ. ׸ Del Ű Ŀ   ϳ  콺
    Del Ű õ   . ̰ GtkText 
   ȴ. ׸   GtkEditable κ °
  ̴.

  ׷ ⿡ /ڸ/̱  ־ .

     
        츮 void gtk_editable_copy_clipboard(GtkEditable *editable);
        Լ Ͽ õ  Ŭ   ִ. ׷
        / ޴   Ǵ ñ׳ ڵ鷯
        on_Copy_activate() ȿ    ־.

        ________________________________________________________________
        gtk_editable_copy_clipboard( (GtkEditable *)gTextArea );
        ________________________________________________________________

     ׷  GtkText    gTextArea  ǰ 츮
      쿡 ִ ؽƮ  Ű ǵǾ ־ Ѵ.
     ׷Ƿ callbacks.c  GtkText *gTextArea    
     Ѵ. ׸ callbacks.c  focus_in_event ñ׳ο  ڵ鷯
       ȿ   ڵ带 ߰ (-- interface.c  
      ϰų   ʱȭ ִ´ٸ   
     ִ.  ֳĸ GLADE  interface.c  밳 Լ ü ڵ尡 
     ִ create_xxx   Լ ְ ̴ ڰ GLADE 
      Build     ŵǾ  Ŀ͸
     ڵ尡 ǵǱ ̴.  callbacks.c  ִ  ַ
     ñ׳ ڵ鷯̸ interface.c  ؼ ǵǴ   .
     ׷  GLADE  Build  ؼ ҽ  ŵ , 
      ʴ  ʿ Ѵٸ callbacks.c  ִ  ڴ.
     ׷  ϴ     Ѵٸ Build  ʴ
      ص .--) :

     ___________________________________________________________________
     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;
     }
     ___________________________________________________________________

     GTK  ؽƮ    翡 ؼ Ctrl-C 
     Ű Ҵ  ִ.

     ڸ
        츮 void gtk_editable_cut_clipboard(GtkEditable *editable);
        Լ ؼ õ  Ŭ ߶   ִ.
          /ڸ ޴  Ǵ ñ׳ ڵ鷯
        on_Cut_activate() ȿ    ־.

        ________________________________________________________________
        gtk_editable_cut_clipboard( (GtkEditable *)gTextArea );
        ________________________________________________________________

     GTK  ؽƮ    ڸ⿡ ؼ Ctrl-X 
     Ű Ҵ  ִ.

     ̱
        츮 void gtk_editable_paste_clipboard(GtkEditable *editable);
        Լ ؼ Ŭ忡 ִ   Ŀ ġ  
        ִ.    /̱ ޴  Ǵ ñ׳
        ڵ鷯 on_Paste_activate() ȿ    ־.

        ________________________________________________________________
        gtk_editable_paste_clipboard( (GtkEditable *)gTextArea );
        ________________________________________________________________

     GTK  ؽƮ    ̱⿡ ؼ Ctrl-P 
     Ű Ҵ  ִ.

    о ؽƮ  о̰, Ͽ غ
  .

      б
           ȭ  ǿ õ  о 츮
        ø̼ ؽƮ  ÷غ.

           Open ȭڸ   ڰ Ȯ ư
          ۵Ǵ ñ׳ ڵ鷯 on_ok_button1_clicked() 
         о ؽƮ  ִ ڵ带 ߰غ.

        ________________________________________________________________
        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 );
             /* ߰    */
        }
        ________________________________________________________________

      ڵ   Ʈ(current insert point) ڿ ؽƮ
     ߰ϴ ̹Ƿ   ֱ ؽƮ   
     ־ٸ  Ŀ    ̴.

        GTK Լ  .

        1. gtk_text_insert() - ؽƮ   Ŀ Ŀ ־
             ä.

        2. gtk_text_freeze(), gtk_text_thaw() - ؽƮ  ŷϰ
           ŷѴ.

      
          ؽƮ   Ϸ Ẹ. ׷ ؽƮ
         ü ؾ Ѵ. ؽƮ  Ϻθ ϴ Լ
        gtk_editable_get_chars( GtkText *editable, gint start_pos, gint
        end_pos); ̴. ⼭ start_pos, end_pos  0 ϴ ġ
        ̴. ׸  Լν ؽƮ  ü ̸ ϴ
        Լ gtk_text_get_length( GtkText *gtktext );  ִ. ̵
        ̿ؼ Ͽ غ .

         Save ȭ ڸ    ȭڿ ߴ ó
        ߰.  ׸ ڰ Ȯ ư  Ǵ ñ׳
        ڵ鷯 on_ok_button3_clicked() Լ ȿ   ڵ带
        ־ :

        ________________________________________________________________
            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 );
        ________________________________________________________________

     ⼭ Ѱ   GTK 迭 Լ ѱ  2-byte
     ڰ ƴ 1-byte ڷ óѴٴ ̴. ݸ鿡 fwrite 
     2-byte ڸ 2-byte ״ óѴ. ׷ ̷  ѱ
     Ϸ ϸ  ߻Ѵ.

     ׸ g_free Լ gtk_editable_get_chars() Լ ȣϿ 
     gchar Ϳ ؼ ȣϿ ҽ ȯϴ Լν ݵ
     ̷ ҽ ȯϿ Ѵٰ Ѵ(GTK Ŵ ).

   Ʈ ٲپ ÷ غ.

     Ʈ   ÷
        Ʈ ؼ ÷ҷ  Ʈ  ȭڿ
        Ȯ   ̿ Ͽ Ǵ ñ׳ ڵ鷯
        ؾ Ѵ.  뷫 ϸ  ڵ鷯 ؾ  ,
        ü ؽƮ  ؽƮ     ڰ 
        Ʈ ̿ؼ gtk_text_insert() Լ ȣϴ ̴. 
        Լ Ʈ ĶͿ NULL ָ Ʈ Ʈ Ѵ.
         ҽ ñ׳ ڵ鷯(: on_ok_button2_clicked()) 
        ҽ(  ) ߰ϵ :

        ________________________________________________________________
                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 );
        ________________________________________________________________

     Ʈ  ȭ  .

                           Ʈ   ȭ

     Ŀ ԷµǴ  ؽƮ  Ʈ ÷̵ȴ. 
     Ѱ  Ȯ threshold  𸣰 Ŀٶ Ʈ(:
     72pt) ÷̰ ȵȴ.

  3.6.   ° ܰ - ¹ 

  ¹ٴ GLADE  ̸ GtkStatusbar   ȴ. ⿡
  ޽ Ϸ guint gtk_statusbar_push(GtkStatusbar *statusbar,
  guint context_id, const gchar *text);  Լ ϸ ȴ. 
   콺  ư  Open ư    ¹ٿ "
  б"  ޽ غ. ׸ 콺  ư  
  ¹ٿ ޽ 쵵 .

  켱 ؾ   ִ. ù  push Լ ù°
  Ķ͸  ؾ Ѵ. ׷   interface.c
      ϰ,

  ______________________________________________________________________
  GtkStatusBar *gStatusBar = NULL;
  ______________________________________________________________________

  create_window1() Լ ¹    Ϳ  
   (--  ϸ  Ⱦ ¹ ͸
  ȹϴ  ãƾ    ̷. ٸ GNOME
   ҽ  밳 GLADE ̿   ̰ ̵
   ƴϸ gnome ¹ٸ ׳  찡 Ҵ--) .

  ______________________________________________________________________
  gStatusBar = statusbar1;
  ______________________________________________________________________

  ι° ؾ   콺 ̵ ֽؼ Open ư   
  ߻Ǵ enter ñ׳  óϴ ñ׳ ڵ鷯 ؾ Ѵ.
  ̰    Ƿ Ѵ. ׸ 콺  ư
    ñ׳  ñ׳ ڵ鷯 ؾ Ѵ. ̰͵ 
  Ѵ.

  ΰ  ٸ  callbacks.c    extern 
    .

  ______________________________________________________________________
  extern GtkStatusbar gStatusBar;
  ______________________________________________________________________

  ׸ 콺 enter ñ׳ ڵ鷯   ڵ带 .

  ______________________________________________________________________
  gtk_statusbar_push( gStatusbar, 1, " " );
  ______________________________________________________________________

  ׸ leave ñ׳ ڵ鷯   ڵ带 .

  ______________________________________________________________________
  gtk_statusbar_pop( gStatusbar, 1 );
  ______________________________________________________________________

    ¹ٿ ޽ ߴ   :

                             ¹ 

  4.  

   ܼϳ 츮 GLADE  ؽƮ ͸  Ҵ.
  ?  ־ Ʃŭ    ִ. ׷ ټ
   κе ־ ⿡ װ ϰ Ѵ.

  4.1.  GLADE    ߰Ǿ  ΰ?

  GLADE  üó ȭϰ ִ ü̴.  ü̹Ƿ
  ӵǴ 簡 ־ ϴ  ƴϰڴ°?  ׷ ǹ̿
    GLADE  ϴ ɵ ̾ Ҵ.  
  ô е ߿ GLADE ̷ ɵ  Ϻθ   ִ ȸ
  ǽô е  Ѵ.

      ̽  
        ̰   ȰǱ ؼ  ʿ ̴.
        ٸ RAD  ϴ ó ODBC, JDBC    ä
        ޵Ǿ ϸ, ̸   پ  ̽ ڵ鸵
         ޵Ǿ  ̴.

     ׷ 
        ̳   ó  ִ  ߰Ǿ
        Ѵ.

       ͳ 
        ø (--  socket  Ѵ--) ׸  ư
        ͳݱ ̵ óϰ ִ  ߰Ǿ Ѵ.

    GTK  ų  ѱȭ .  GTK
  ̺귯 Լȿ ѱȭ  ̷⸦ ٶ 
  ű⿡   ִ ȸ ־ٸ  ڴ.

