���� ���� ����

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 �� ���� ���� ������ ���ŵǾ� ������ Ŀ���͸����� �ڵ尡 ���ǵDZ� �����̴�. ��� 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 );

���� �� ���¹ٿ� �޽����� �ߴ� ����� ������ ����:

������ ���¹� ���


���� ���� ����