glade와 GTK+ 프로그램 개발, gwdic 0.1 (gtk/gtkmozembed/glade)
얼마전에, glade-3를 update하면서, 실행시켜보니, glade-2와는 달라진 점이 많았습니다. 일단 눈에 띄는 UI부터 많이 바뀌었고, glade-2에 있었던 code-generation 기능이 없어졌습니다. (최근에 3로 update된 것은 아닙니다. 다만 제가 마지막으로 실행시켜본 때가 너무나도 오래 전이다 보니...)
glade-3는 code를 만들어주는 대신, 사용자가 만든 UI를 xml 파일로 저장합니다. (보통은 .glade 확장자로 저장) 그리고, 이 xml 파일을 해석해서, 실제 widget으로 만들어 주는 역할은 libglade 라이브러리가 담당합니다. 따라서 코드 상에 다음과 같이 써 주게 됩니다:
#include <glade/glade.h> GladeXML *xml; ... xml = glade_xml_new("/somewhere/your.glade", NULL, NULL);
위와 같이 써 주면, your.glade 파일에 만들어둔 UI를 자동으로 불러옵니다. 만약 프로그래머가 직접 glade가 만든 widget을 제어할 필요가 있다면 glade-3에서 지정했던 이름을 써서 해당 widget에 대한 포인터를 얻을 수 있습니다:
GtkWidget *widget; ... widget = glade_xml_get_widget(xml, "my_window");
컴파일할 때에는 pkg-config의 libglade-2.0 package를 쓰면 됩니다. 예를 들어:
$ pkg-config --cflags --libs libglade-2.0
보통 이런 GUI application을 개발하는 과정에선, 항상 해당 widget에 대한 reference를 보며 코딩하는 것이 일반적입니다. glade-3는 해당 widget을 선택하고, 오른쪽 하단의 사전 모양의 아이콘을 누르면 도움말 창을 띄워서 해당 widget에 대한 reference를 보여주기 때문에, 꽤 편리합니다. (사실 이 도움말 창은 glade-3에 포함되어 있는 윈도우가 아니라 devhelp라는 별도의 프로그램을 호출하는 것입니다. glade-3를 쓰지 않더라도 devhelp는 충분히 쓸모 있는 프로그램이므로 꼭 써 보길 바랍니다.)
서론이 길었는데, 아뭏든 그래서 glade-3를 새로 써 본 기념?으로 간단한 GTK+ 프로그램을 만들어 보았습니다.
뭐~ 예전부터 가끔 많은 개발자들이 재미삼아 만들어본 web 사전 프로그램입니다. rendering은 Firefox가 제공하는 mozilla GTK widget을 썼고(gtkmozembed), 내부적으로 curl과 dict(1)를 사용합니다. 그리고 curl을 써서 사전 내용을 가져와서 내부 filter 프로그램에 전달해서, 가공하는 기능을 제공합니다. 따라서 이론적으로 filter program만 잘 짜두면, 어떤 web dictionary라도 쓸 수 있습니다. 일단 네이버의 영영/영한사전, 다음(daum.net)의 영영/영한사전 용은 간단하게 만들어 제공합니다.
dict(1)는 비슷한 단어를 유추하기 위해 사용하는 것으로 없어도 상관없습니다.
curl은 이미 여러분의 Linux system에 설치되어 있을 것입니다.
아직 history 관리 부분이 제대로 만들어지진 않았지만, 그래도 재미삼아 써 볼만 합니다.
gtkmozembed widget은 아주 기본적인 기능만 제공하기 때문에, 이 프로그램은 어디까지나 한계가 있습니다. 예를 들어, 완벽하게 back/forward 기능을 구현할 수가 없었습니다.
다운로드는 CVS만 제공합니다. 다운로드 방법은 http://www.cinsk.org/sw/gwdic/index-ko.html
설치는 make && make install 하시면 /usr/local prefix에 설치됩니다. 다른 위치를 원하시면 Makefile을 변경하시면 됩니다. gentoo 사용자라면 dictd package 빼고, 특별히 설치할 것은 없습니다. fedora 사용자라면 firefox-devel package를 설치해야 할 것 같습니다. (테스트 안해봤음)
README.ko 파일에 단축키 설명을 넣었습니다.
댓글
이 프로그램은, 제가
이 프로그램은, 제가 GTK+/glade/gtkmozembed 등을 쉽게 쓸 수 있다는 것을 보여 주기 위해 만든 것입니다. 사실 아직 쓸만한 프로그램이 못 됩니다.
일단, 여러번 검색하면, 내부 embed된 mozilla가 죽습니다. gtkmozembed의 문제인듯?
또, 검색어에 'hello;xxx' 형태로 입력하면 두번째 xxx를 shell 명령으로 이해하고 실행하는 버그가 있습니다. 보안에 치명적임. ^^;;;
GTK+/glade 등을 쓰는 예제 코드가 필요하신 분이라면 도움이 될 듯 하지만, 그 이외의 분들은 그냥 재미삼아 실행해 보시고, "make uninstall"로 지우는 편이 나을 듯 싶습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
"hello; xxx" 형태의
"hello; xxx" 형태의 버그는 고쳤습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
사실 glade 2에서
사실 glade 2에서 만들어졌던 코드는.. 솔직히 사람이 알아먹기 힘듭니다;; 그리고 유지보수도 힘들죠;;
그리고 libglade는 나가리될 예정입니다. gtk+ 2.12 이상을 사용한다면, GtkBuilder로 바꿔서 쓰면 됩니다.
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
----
데스크탑 프로그래머를 꿈꾸는 임베디드 삽질러
좋은 정보
좋은 정보 고맙습니다. libglade 대신, gtkbuilder를 쓰도록 고쳤습니다.
--
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://www.cinsk.org/cfaqs/
C FAQ: http://www.eskimo.com/~scs/C-faq/top.html
Korean Ver: http://cinsk.github.io/cfaqs/
댓글 달기