다음 이전 차례

2. GLADE를 이용한 텍스트 에디터 개발 - 사전 단계

설치가 제대로 되었는가? 그렇다면 실행을 해보자. 이상없이 실행되었다면 이제 단순한 예제 개발을 통해서 GLADE를 익혀 보도록 하자:

2.1 사전 지식(preliminaries)

그냥 드래그 앤 드랍으로 개발할 수도 있지만 외형을 만드는 것보다 좀 더 깊숙히 들어갈려면 다음과 같은 사전 지식이 필요하다:

라이브러리

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 아키텍쳐

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 살피기

세 개의 디폴트 윈도우

GLADE를 실행하면 다음과 같은 세개의 창이 디폴트로 뜬다:

주 윈도우(main glade window)

GLADE 메인 윈도우

이것은 프로젝트를 구성하는 모든 창들과 대화상자들을 담고 있다. 이들 중의 하나를 더블 클릭하면 이에 대응하는 창이나 대화상자 템플리트가 뜬다. 그리고 이에 대응하는 창이나 대화상자의 프로퍼티를 설정할 수 있도록 프로퍼티 에디터 객체가 이것으로 변경된다.

위젯 팔레트 윈도우(widget palette window)

GLADE 위젯 팔레트 윈도우

이것은 가능한 모든 위젯들의 들어 있는 팔레트이다. 새로운 창이나 대화 상자를 프로젝트에 추가하려면 팔레트에 있는 창이나 대화상자를 클릭하기만 하면된다. 이렇게 생성된 창이나 대화상자에 위젯을 붙이려면 위젯을 클릭해서 선택한 다음 더하고자 하는 위치에 클릭하면 된다.

속성 편집기 윈도우(property editor window)

GLADE 속성 편집기 윈도우

이것은 창이나 대화상자, 그리고 이들 위에 있는 위젯들의 크기 또는 텍스트 등과 같은 속성들을 변경할 때 사용한다. 주 윈도우에 있는 창이나 대화상자를 클릭하여, 또는 창이나 대화상자 위에 있는 위젯을 클릭해서, 프로퍼티를 설정할 대상 객체를 선택할 수 있다.

기타 보조 창들

GLADE는 다음과 같은 보조 창들을 가지고 있으며 주로 메뉴를 통해서 접근될 수 있다:

메뉴 작성 윈도우

GLADE 메뉴 작성 윈도우

이것은 프로젝트 창에 메뉴를 추가한 경우 이 메뉴를 클릭한후 속성 편집기 윈도우에 나타나는 edit menu 버튼을 누르면 나타난다. 이것을 통해서 여러분은 프로젝트의 메뉴를 편집할 수 있다.

이곳에서 생성된 메뉴는 소스에 자동으로 들어가게 된다.

add를 누른 후에 Stock Item 콤보박스를 눌러서 미리 정의된, 그리고 널리 쓰이는 메뉴를 선택할 수 있다. 이 때 Handler가 이에 맞춰 정형화된 꼴로 나타나게 되어 있는 데, 한글화된 버전의 경우 한글로 된 함수가 Handler가 되어서 소스에 깨지거나 한글 부분이 언더라인으로 채워진 함수가 나타나게 된다. 고로 Handler 부분은 되도록이면 영문으로 바꿔 주는 것이 좋겠다.

위젯 트리(widget tree)

GLADE 위젯 트리

이것은 프로젝트에 사용된 모든 위젯들의 트리 구조를 보여주는 윈도우이다. 이것은 주 윈도우의 View/Show WidgetTree을 선택해서 볼 수 있다.

2.3 분석/설계 - 텍스트 에디터 기능

우리가 만들고자 하는 텍스트 에디터는 단순한 데스크탑 어플리케이션으로써 우선 윈도우즈의 notepad를 닮았다고 생각하시면 된다. 그렇다면 이 에디터가 지원해야 하는 그래서 구현해야 하는 기능들 리스트를 살펴보자:


다음 이전 차례