表紙

Size: px
Start display at page:

Download "表紙"

Transcription

1 GUI Application Programming using GTK+/GNOME GTK+/GNOME による GUI アプリケーションプログラミング 菅谷保之著 THE TEO PROJECT

2 PROGRAMMER S NOTEBOOK GTK+/GNOME GUI THE TEO PROJECT

3

4 iii GTK+ GIMP (GNU Image Manipulation Program) GUI (Graphical User Interface) (toolkit). GIMP GTK+., Windows GNOME(GNU Network Object Model Environment), GTK+., GTK+ (GNOME KDE QT ). GTK+,,. GTK+,,.,. GUI GUI glade anjuta, GUI GUI., GTK+ GNOME., GTK+. GTK+/GNOME GUI., GTK+,..

5 iv 1, Linux GTK+/GNOME. Linux Vine Linux 4.1,. GTK+ 2, GTK+ GTK+., GUI. GLIB GLIB C., GLIB. 3, GLIB,. GDK 4, GTK+ GDK,,. GdkPixbuf GTK+ 2, GdkPixbuf. GdkPixbuf PNG JPEG,. 5,, GdkPixbuf. GTK+, GUI. 6,,. GTK+.,. 7,. GNOME 8, GNOME. GNOME GTK+, GNOME. 9, GTK+/GNOME anjuta. anjuta glade GUI GTK+/GNOME.

6 v, Vine Linux 4.1., Vine Linux 4.1,. 1 Vine Linux 4.1 GTK+/GNOME, Vine Linux 4.1,.,. sugaya@iim.ics.tut.ac.jp. sugaya/books/gui-applicationprogramming/

7

8 vii GTK GLib GLib Unicode GList : : GHashTable

9 viii Gdk Gdk GdkPixbuf GtkImage GtkDrawingArea GUI

10 ix UI GtkCellRenderer

11 x Gnome Gnome Gnome GUI glade Makikefile.am configure.in A GTK+ 263

12 xi B GtkStockItem 267 C

13

14 , 2 GTK+, 2 GTK+.., Vine Linux 4.1. Vine Linux 4.1,. Vine Linux 4.1,.. % rpm -qa grep gtk2 pygtk2-libglade vl1 gtk2-engines vl1 gtk vl3 pygtk vl1 xxx-devel, gtk2.,. 1.2,.

15 2 1. gtk2,, gtk2-devel. % apt-get install gtk2-devel,.,. y : XOrg-devel atk-devel cairo-devel freetype2-devel glib2-devel libpng-devel pango-devel zlib-devel : XOrg-devel atk-devel cairo-devel freetype2-devel glib2-devel gtk2-devel libpng-devel pango-devel zlib-devel : 0, : 9, : 0, : kB 38.3MB? [Y/n]y : /i386/main XOrg-devel vl23 [4371kB] : /i386/main glib2-devel vl1 [1256kB] : /i386/main atk-devel vl1 [117kB] : /i386/main zlib-devel vl5 [95.3kB] : /i386/main libpng-devel 2: vl1.1 [177kB] : /i386/main freetype2-devel vl8 [451kB] : /i386/main cairo-devel vl2 [346kB] : /i386/main pango-devel vl1 [265kB] : /i386/main gtk2-devel vl3 [2337kB] 9416kB 31s (302kB/s) ########################################### [100%] 1:XOrg-devel ########################################### [ 11%] 2:glib2-devel ########################################### [ 22%] 3:atk-devel ########################################### [ 33%] 4:zlib-devel ########################################### [ 44%] 5:libpng-devel ########################################### [ 56%]

16 :freetype2-devel ########################################### [ 67%] 7:cairo-devel ########################################### [ 78%] 8:pango-devel ########################################### [ 89%] 9:gtk2-devel ########################################### [100%] apt-get.,. gtk2-devel.,. GNOME, libgnomeui-devel. % rpm -qa grep gtk2 pygtk2-libglade vl1 gtk2-engines vl1 gtk2-devel vl3 gtk vl3 pygtk vl1 1.3,,.,.,. % apt-get script install-devel.lua. 167 (242MB) :

17 4 1 GConf GConf-devel GConf2-devel ImageMagick-devel ORBit ORBit-devel ORBit2-devel VFlib-devel XOrg-gl-devel Xaw3d-devel aalib-devel alsa-lib-devel anthy-devel apache-devel apache2-devel apr-devel apr-util-devel apt-devel arts-devel aspell-devel audiofile-devel avahi-devel avahi-glib-devel beecrypt-devel beepmp-devel bind-devel bonobo bonobo-devel bzip2-devel pump-devel pygtk2-devel python-devel readline-devel rpm-devel ruby-devel samba-libsmbclient-devel scim-devel slang-devel sox-devel sqlite sqlite-devel sqlite3-devel startup-notification-devel taglib-devel vte-devel wireless-tools-devel : 0, : 167, : 0, : MB 242MB? [Y/n] : /i386/main libxml2-devel vl1 [1929kB] : /i386/main libidl-devel vl1 [84.2kB] : /i386/main ORBit2-devel vl1 [360kB] : /i386/main GConf2-devel vl5 [183kB] : /i386/main ImageMagick-devel vl1 [1657kB] : /i386/main gnutls-devel vl1 [912kB] : /i386/main gpgme-devel vl1 [76.2kB] : /i386/main lcms-devel vl2 [130kB] : /i386/main libtermcap-devel vl1 [55.1kB] : /i386/main rpm-devel vl16 [1303kB] 62.0MB 5m30s (188kB/s) ########################################### [100%] 1:libxml2-devel ########################################### [ 1%] 2:libIDL-devel ########################################### [ 1%] 3:ORBit2-devel ########################################### [ 2%] 4:GConf2-devel ########################################### [ 2%] 5:ImageMagick-devel ########################################### [ 3%] :gnutls-devel ########################################### [ 98%] 164:gpgme-devel ########################################### [ 98%] 165:lcms-devel ########################################### [ 99%] 166:libtermcap-devel ########################################### [ 99%] 167:rpm-devel ########################################### [100%]

18 , GTK+/GNOME anjuta, anjuta glade, gtranslator, devhelp. apt-get.. % apt-get install anjuta glade2 devhelp gtranslator : gdb gtkspell : anjuta devhelp gdb glade2 gtkspell gtranslator : 0, : 6, : 0, : kB 21.7MB? [Y/n]y : /i386/plus gdb vl1 [3195kB] : /i386/plus anjuta 1.2.4a-0vl1 [2564kB] : /i386/plus devhelp vl1 [175kB] : /i386/plus glade vl1 [1866kB] : /i386/plus gtkspell vl1 [27.5kB] : /i386/plus gtranslator vl1 [593kB] 8421kB 29s (284kB/s) ########################################### [100%] 1:gdb ########################################### [ 17%] 2:anjuta ########################################### [ 33%] 3:devhelp ########################################### [ 50%] 4:glade2 ########################################### [ 67%] 5:gtkspell ########################################### [ 83%] 6:gtranslator ########################################### [100%]

19 6 1 Vine Linux 4.1. [ ]-[ ] gtranslator. gtranslator 10. devhelp GTK+. GTK+.,. 1.2 devhelp.. GTK+ GTK+,.. GNOME-LOOK.ORG ( Vine Linux 4.1,. A GTK+.

20 devhelp

21 Vine Linux Vine Linux 4.1 kernel gcc autoconf 2.59 automake gtk libgnome libgnomeui libgnomeprint libgnomeprintui gnome-vfs GConf anjuta 1.2.4a glade devhelp 0.12 gtranslator 1.1.6

22 9 2 GTK+ 2.1, GTK+ GUI,., Hello World 2 1 Hello World : hello world.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button ( GtkWidget * widget, gpointer data) { 4 g_print ("Hello World\n"); 5 } 6 7 int main (int argc, char *argv[]) { 8 GtkWidget * window; 9 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL);

23 10 2 GTK+ 14 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Hello World"); 15 gtk_ widget_ set_ size_ request ( window, 250, 80); 16 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 10); button = gtk_ button_ new_ with_ label (" Hello World"); 19 gtk_ container_ add ( GTK_ CONTAINER( window), button); g_ signal_ connect ( G_ OBJECT( window), 22 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); 23 g_ signal_ connect ( G_ OBJECT( button), 24 " clicked", G_ CALLBACK( cb_ button), NULL); gtk_ widget_ show_ all ( window); 27 gtk_main (); return 0; 30 } 2 1. pkg-config cflags libs gcc. % gcc hello_world.c -o hello_world pkg-config gtk cflags --libs, 2 1. (1 ) GTK+ gtk.h. Vine Linux 4.1 /usr/include/gtk-2.0/gtk gtk.h. GTK+ (11 ) gtk init GTK+, GTK+. GTK+. void gtk_init (int *argc, char ***argv); GUI (13 19 ),, Hello World.,,..,. 16 GTK CONTAINER GtkWidget GtkContainer. GTK+ C

24 (21 24 ),.. (27 ) gtk main,.,,. (3 5 ). clicked cb button, g print Hello World. 2.2 GUI.. GUI., C++. GObject,.,., GtkWindow GtkContainer, GTK CONTAINER GTK Reference Manual Object Hierarchy ( 2.3 ( ), ( ). GTK+,.,., clicked.,., GTK+ 2.0 Tutorial Appendix A. GTK Signals ( 9 glade.

25 12 2 GTK+ GObject GtkAccelGroup GtkAccelMap GtkObject GtkWidget GtkMisc GtkLabel GtkAccelLabel GtkTipsQuery GtkArrow GtkImage GtkPixmap GtkContainer GtkBin GtkButton GtkWindow GtkBox GtkButtonBox GtkHBox GtkVBox GtkDrawingArea GtkEntry GtkSpinButton GtkRange GtkScale GtkHScale GtkVScale GtkScrollbar GtkHScrollbar GtkVScrollbar GtkSeparator GtkHSeparator GtkVSeparator GtkAdjustment GtkCellRenderer GtkCellRendererPixbuf GtkCellRendererText GtkCellRendererToggle GtkTooltips GtkTreeViewColumn

26 2.4 13, g signal connect g_ signal_ connect ( G_ OBJECT( button), " clicked", G_ CALLBACK( cb_ button), NULL); void function_ name ( GtkWidget * widget, gpointer data); 1. 2 g signal connect 4. g signal connect 4, int char. gpointer. 3, gpointer gtypes.h. typedef void* gpointer;,., GTK+ 2.0 Tutorial Appendix A. GTK Signals ( 2.4 GUI,. GTK+ ( ),,, GUI.,. 3, , GtkWindow.. 1, 2. void gtk_ container_ add ( GtkContainer * container, GtkWidget * widget);, ( ) gtk container set border width.

27 14 2 GTK+ 2.3 void gtk_ container_ set_ border_ width ( GtkContainer * container, gint border_ width); , GUI..., gtk hbox new. 1 TRUE FALSE. TRUE,. 2. GtkWidget* gtk_ hbox_ new ( gboolean homogeneous, gint spacing);,, gtk vbox new. GtkWidget* gtk_ vbox_ new ( gboolean homogeneous, gint spacing);, gtk box pack start.. gtk box pack end. gtk box pack start (GtkVbox ) (GtkVbox ), gtk box pack end ( ) ( ) (TRUE or FALSE) (TRUE or FALSE) void gtk_ box_ pack_ start ( GtkBox * box, GtkWidget * child, gboolean expand, gboolean fill, guint padding);

28 gtk box pack start expand fill 1 TRUE TRUE 2 TRUE FALSE 3 FALSE FALSE 3, 4, GUI , expand fill gtk box pack start , expand, fill TRUE,. 2,,. 3,. fill expand TRUE. 2 2 : packing-sample.c 1 # include <gtk/ gtk. h> 2 3 int main (int argc, char *argv[]) { 4 GtkWidget * window; 5 GtkWidget * vbox, * hbox; 6 GtkWidget * button; 7 8 gtk_init (&argc, &argv); 9 10 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 11 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Packing Sample"); 12 gtk_ container_ set_ border_ width( GTK_ CONTAINER( window), 10); 13 g_ signal_ connect ( G_ OBJECT( window), 14 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL);

29 16 2 GTK+ 16 vbox = gtk_ vbox_ new ( TRUE, 5); 17 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); hbox = gtk_ hbox_ new ( FALSE, 0); 20 gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); 21 button = gtk_ button_ new_ with_ label (" expand: TRUE"); 22 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); 23 button = gtk_ button_ new_ with_ label (" fill: TRUE"); 24 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); hbox = gtk_ hbox_ new ( FALSE, 0); 27 gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); 28 button = gtk_ button_ new_ with_ label (" expand: TRUE"); 29 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, FALSE, 0); 30 button = gtk_ button_ new_ with_ label (" fill: FALSE"); 31 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, FALSE, 0); hbox = gtk_ hbox_ new ( FALSE, 0); 34 gtk_box_pack_start (GTK_BOX(vbox), hbox, TRUE, TRUE, 0); 35 button = gtk_ button_ new_ with_ label (" expand: FALSE"); 36 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); 37 button = gtk_ button_ new_ with_ label (" fill: FALSE"); 38 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 41 gtk_main (); return 0; 44 } 2.4.3, (GtkTable)., gtk table new. 1, 2,. 3 TRUE FALSE. TRUE, ( 2.5 ). FALSE, ( 2.5 ). GtkWidget* gtk_ table_ new ( guint rows, guint columns, gboolean homogeneous); gtk table attach. 1 2,.

30 void gtk_ table_ attach ( GtkTable * table, GtkWidget * child, guint left_ attach, guint right_ attach, guint top_ attach, guint bottom_ attach, GtkAttachOptions xoptions, GtkAttachOptions yoptions, guint xpadding, guint ypadding); 3 left attach 6 bottom attach, , left attach, right attach, top attach, bottom attach 1, 2, 0, 1. left attach, right attach, top attach, bottom attach 2, 4, 2, 3, 2.6, xoptoins, yoptions. GtkAttachOptions,. typedef enum { GTK_ EXPAND = 1 << 0, GTK_ SHRINK = 1 << 1, GTK_ FILL = 1 << 2 } GtkAttachOptions; GTK EXPAND...,. GTK SHRINK...,. GTK SHRINK,

31 18 2 GTK+ 2.2 GtkAttachOptions GtkAttachOptions GTK FILL GTK SHRINK GTK EXPAND GTK FILL GTK SHRINK GTK SHRINK GTK EXPAND. GTK FILL.... xoptions, yoptions, 2.2, : table-sample2.c 1 # include <gtk/ gtk. h> 2 3 int main (int argc, char *argv[]) { 4 GtkWidget *window, *vbox, *table, *button; 5 6 gtk_init (&argc, &argv); 7 8 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 9 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Table Sample2"); 10 gtk_ container_ set_ border_ width( GTK_ CONTAINER( window), 10); 11 g_ signal_ connect ( G_ OBJECT( window), 12 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); 13 vbox = gtk_ vbox_ new ( FALSE, 5); 14 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); table = gtk_ table_ new (3, 4, FALSE); 17 gtk_box_pack_start (GTK_BOX(vbox), table, TRUE, TRUE, 0); 18 { 19 button = gtk_ button_ new_ with_ label (" January"); 20 gtk_table_attach (GTK_TABLE(table), button, 0, 1, 0, 1, 21 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 2.7 2

32 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 0, 0); 23 button = gtk_ button_ new_ with_ label (" February"); 24 gtk_table_attach (GTK_TABLE(table), button, 1, 2, 0, 1, 25 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 26 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 0, 0); 27 button = gtk_ button_ new_ with_ label (" March"); 28 gtk_table_attach (GTK_TABLE(table), button, 2, 3, 0, 1, 29 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 30 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 0, 0); 31 button = gtk_ button_ new_ with_ label (" April"); 32 gtk_table_attach (GTK_TABLE(table), button, 3, 4, 0, 1, 33 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 34 GTK_ FILL GTK_ SHRINK GTK_ EXPAND, 0, 0); 35 button = gtk_ button_ new_ with_ label (" May"); 36 gtk_table_attach (GTK_TABLE(table), button, 0, 1, 1, 2, 37 GTK_ FILL GTK_ SHRINK, 38 GTK_ FILL GTK_ SHRINK, 0, 0); 39 button = gtk_ button_ new_ with_ label (" June"); 40 gtk_table_attach (GTK_TABLE(table), button, 1, 2, 1, 2, 41 GTK_ FILL GTK_ SHRINK, 42 GTK_ FILL GTK_ SHRINK, 0, 0); 43 button = gtk_ button_ new_ with_ label (" July"); 44 gtk_table_attach (GTK_TABLE(table), button, 2, 3, 1, 2, 45 GTK_ FILL GTK_ SHRINK, 46 GTK_ FILL GTK_ SHRINK, 0, 0); 47 button = gtk_ button_ new_ with_ label (" August"); 48 gtk_table_attach (GTK_TABLE(table), button, 3, 4, 1, 2, 49 GTK_ FILL GTK_ SHRINK, 50 GTK_ FILL GTK_ SHRINK, 0, 0); 51 button = gtk_ button_ new_ with_ label (" September"); 52 gtk_table_attach (GTK_TABLE(table), button, 0, 1, 2, 3, 53 GTK_ SHRINK GTK_ EXPAND, 54 GTK_ SHRINK GTK_ EXPAND, 0, 0); 55 button = gtk_ button_ new_ with_ label (" October"); 56 gtk_table_attach (GTK_TABLE(table), button, 1, 2, 2, 3, 57 GTK_ SHRINK GTK_ EXPAND, 58 GTK_ SHRINK GTK_ EXPAND, 0, 0); 59 button = gtk_ button_ new_ with_ label (" Norbember"); 60 gtk_table_attach (GTK_TABLE(table), button, 2, 3, 2, 3, 61 GTK_ SHRINK GTK_ EXPAND, 62 GTK_ SHRINK GTK_ EXPAND, 0, 0); 63 button = gtk_ button_ new_ with_ label (" December"); 64 gtk_table_attach (GTK_TABLE(table), button, 3, 4, 2, 3, 65 GTK_ SHRINK GTK_ EXPAND, 66 GTK_ SHRINK GTK_ EXPAND, 0, 0); 67 } 68 gtk_ widget_ show_ all ( window); 69 gtk_main (); 70 return 0; 71 }

33 20 2 GTK g signal connect data.. gulong g_ signal_ connect_ data ( gpointer instance, const gchar * detailed_ signal, GCallback c_ handler, gpointer data, GClosureNotify destroy_ data, GConnectFlags connect_ flags);. ID, void (* GClosureNotify) ( gpointer data, GClosure * closure); GConnectFlags... typedef enum { G_ CONNECT_ AFTER = 1 << 0, G_ CONNECT_ SWAPPED = 1 << 1 } GConnectFlags; g signal connect data , g signal connect data 4 Hello World. g strdup,. 5,,.. Destroy the callback function data..

34 %./signal-sample1 Hello World Hello World Destroy the callback function data. % : signal-sample1.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button ( GtkWidget * widget, gpointer data) { 4 g_print ((gchar *) data); 5 } 6 7 static void destroy_ data ( gpointer data, GClosure * closure) { 8 g_ print (" Destroy the callback function data.\ n"); 9 g_free ((gchar *) data); 10 } int main ( int argc, char * argv[]) { 13 GtkWidget * window, * button; 14 gulong handle; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 19 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Signal Sample1"); 20 g_ signal_ connect ( G_ OBJECT( window), 21 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Click me!"); 24 gtk_ container_ add ( GTK_ CONTAINER( window), button); 25 g_ signal_ connect_ data ( G_ OBJECT( button), " clicked", 26 G_ CALLBACK( cb_ button), 27 g_strdup ("Hello World\n"), destroy_data, 0); gtk_ widget_ show_ all ( window); 30 gtk_main (); 31 return 0; 32 }

35 22 2 GTK+ g signal connect data.., GClosureFunc., g signal connect data 3. g signal connect.. g signal connect data 0,,. # define g_ signal_ connect( instance, detailed_ signal, c_ handler, data)\ g_ signal_ connect_ data (( instance), ( detailed_ signal), \ (c_handler), (data), NULL, \ ( GConnectFlags) 0) g signal connect after.,. # define g_ signal_ connect_ after( instance, detailed_ signal, \ c_ handler, data) \ g_ signal_ connect_ data (( instance), ( detailed_ signal), \ (c_handler), (data), NULL, \ G_ CONNECT_ AFTER) g signal connect swapped c hander, 1, data. # define g_ signal_ connect_ swapped( instance, detailed_ signal, \ c_ handler, data) \ g_ signal_ connect_ data (( instance), ( detailed_ signal), \ (c_handler), (data), NULL, \ G_ CONNECT_ SWAPPED). g signal connect g signal connect after. 2 5., 4 (33 40 ).... %./signal-sample1 function 1.

36 function 2. function 3. function 4. %., g signal connect, g signal connect after.,. 2 5 : signal-sample2.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button1 ( GtkWidget * widget, gpointer data) { 4 g_print ("function 1.\n"); 5 } 6 7 static void cb_ button2 ( GtkWidget * widget, gpointer data) { 8 g_print ("function 2.\n"); 9 } static void cb_ button3 ( GtkWidget * widget, gpointer data) { 12 g_print ("function 3.\n"); 13 } static void cb_ button4 ( GtkWidget * widget, gpointer data) { 16 g_print ("function 4.\n"); 17 } int main ( int argc, char * argv[]) { 20 GtkWidget * window, * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 25 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Signal Sample2"); 26 g_ signal_ connect ( G_ OBJECT( window), 27 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Click me!"); 30 gtk_ container_ add ( GTK_ CONTAINER( window), button); g_ signal_ connect_ after ( G_ OBJECT( button), " clicked", 33 G_ CALLBACK( cb_ button3), NULL); 34 g_ signal_ connect_ after ( G_ OBJECT( button), " clicked",

37 24 2 GTK+ 35 G_ CALLBACK( cb_ button4), NULL); 36 g_ signal_ connect ( G_ OBJECT( button), 37 " clicked", G_ CALLBACK( cb_ button1), NULL); 38 g_ signal_ connect ( G_ OBJECT( button), 39 " clicked", G_ CALLBACK( cb_ button2), NULL); gtk_ widget_ show_ all ( window); 42 gtk_main (); return 0; 45 } g signal connect swapped. 1., g signal connect swapped 1, g signal connect swapped , g signal connect swapped.. 1 g signal connect., g signal connect swapped 4, 1.,., g signal connect swapped

38 g signal connect swapped : signal-sample3.c 1 # include <gtk/ gtk. h> 2 3 void cb_ button ( GtkWidget * widget, gpointer data) { 4 static gint count = 0; 5 gchar buf[ 64]; 6 7 sprintf (buf, "%d time(s) clicked.", ++count); 8 gtk_ button_ set_ label ( GTK_ BUTTON( widget), buf); 9 } int main ( int argc, char * argv[]) { 12 GtkWidget * window; 13 GtkWidget * hbox; 14 GtkWidget * button1, * button2; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 19 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Signal Sample3"); 20 g_ signal_ connect ( G_ OBJECT( window), 21 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 0); 24 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); button1 = gtk_ button_ new_ with_ label (" 0 time( s) clicked."); 27 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button1, TRUE, TRUE, 0); 28 g_ signal_ connect ( G_ OBJECT( button1), " clicked", 29 G_ CALLBACK( cb_ button), NULL); button2 = gtk_ button_ new_ with_ label (" Click me!"); 32 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button2, TRUE, TRUE, 0); 33 g_ signal_ connect_ swapped ( G_ OBJECT( button2), " clicked", 34 G_ CALLBACK( cb_ button), ( gpointer) button1); gtk_ widget_ show_ all ( window); 37 gtk_main (); return 0; 40 }

39 26 2 GTK ,. g signal handler disconnect., g signal connect ID. void g_ signal_ handler_ disconnect ( gpointer instance, gulong handler_ id); cb button Callback function is called disconnect handler..,, ID.., GObject GTK g object set data. 1 2, 3. void g_ object_ set_ data ( GObject * object, const gchar * key, gpointer data);, g object get data. gpointer g_ object_ get_ data ( GObject * object, const gchar * key);, disconnect handler g signal handler disconnect, g signal handler is connected. gboolean g_ signal_ handler_ is_ connected ( gpointer instance, gulong handler_ id); %./signal-sample4 Callback function is called. Callback function is diconnected. Callback function is already diconnected. %

40 g signal connect swapped : signal-sample4.c 1 # include <gtk/ gtk. h> 2 3 void cb_ button ( GtkWidget * widget, gpointer data) { 4 g_ printf (" Callback function is called.\ n"); 5 } 6 7 void disconnect_ handler ( GtkWidget * widget, gpointer data) { 8 GtkWidget * button; 9 gulong handle; button = GTK_ WIDGET( g_ object_ get_ data ( G_ OBJECT( widget), " button1")); 12 handle = ( gulong) g_ object_ get_ data ( G_ OBJECT( widget), " handle"); if ( g_ signal_ handler_ is_ connected ( button, handle)) { 15 g_ signal_ handler_ disconnect ( button, handle); 16 g_ print (" Callback function is diconnected.\ n"); 17 return; 18 } else { 19 g_ print (" Callback function is already diconnected.\ n"); 20 } 21 } int main ( int argc, char * argv[]) { 24 GtkWidget * window; 25 GtkWidget * hbox; 26 GtkWidget * button1, * button2; 27 gulong handle; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 32 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Signal Sample4"); 33 gtk_ widget_ set_ size_ request ( window, 500, 50); 34 g_ signal_ connect ( G_ OBJECT( window), 35 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 0); 38 gtk_ container_ add ( GTK_ CONTAINER( window), hbox);

41 28 2 GTK+ 40 button1 = gtk_ button_ new_ with_ label (" Click me!"); 41 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button1, TRUE, TRUE, 0); 42 handle = g_ signal_ connect ( G_ OBJECT( button1), 43 " clicked", G_ CALLBACK( cb_ button), NULL); button2 = gtk_ button_ new_ with_ label (" Disconnect button1 callbacks."); 46 g_ object_ set_ data ( G_ OBJECT( button2), " button1", ( gpointer) button1); 47 g_ object_ set_ data ( G_ OBJECT( button2), " handle", ( gpointer) handle); 48 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button2, TRUE, TRUE, 0); 49 g_ signal_ connect ( G_ OBJECT( button2), 50 " clicked", G_ CALLBACK( disconnect_ handler), NULL); gtk_ widget_ show_ all ( window); 53 gtk_main (); return 0; 56 } ,.. delete-event. 2 8, delete-event FALSE, destroy cb destroy,., delete-event TRUE, destroy. 2.11

42 : signal-sample5.c 1 # include <gtk/ gtk. h> 2 3 static gboolean cb_ delete ( GtkWidget * widget, gpointer data) { 4 GtkWidget * dialog; 5 gint result; 6 7 dialog = gtk_ message_ dialog_ new( GTK_ WINDOW( widget), 8 GTK_ DIALOG_ MODAL 9 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 10 GTK_ MESSAGE_ QUESTION, 11 GTK_ BUTTONS_ YES_ NO, 12 " Confirm are you sure you want to quit.", 13 " GTK_ MESSAGE_ QUESTION"); 14 result = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 15 gtk_ widget_ destroy ( dialog); if ( result == GTK_ RESPONSE_ YES) { 18 return FALSE; 19 } else { 20 return TRUE; 21 } 22 } static void cb_ destroy ( GtkWidget * widget, gpointer data) { 25 gtk_main_quit (); 26 } int main ( int argc, char * argv[]) { 29 GtkWidget * window; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 34 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Signal Sample5"); 35 g_ signal_ connect ( G_ OBJECT( window), 36 "delete -event", G_CALLBACK(cb_delete), NULL); 37 g_ signal_ connect ( G_ OBJECT( window), 38 " destroy", G_ CALLBACK( cb_ destroy), NULL); gtk_ widget_ show_ all ( window); 41 gtk_main (); return 0; 44 }

43

44 31 3 GLib GLib C, GTK+. GLib,,,., GLib. 3.1 GLib GLib, C GLib g strdup,. gchar* g_ strdup ( const gchar * str); g strdup printf,. sprintf,. gchar* g_ strdup_ printf ( const gchar * format, va_ list args);

45 32 3 GLib 3.1 GLib GLib gboolean gint gpointer void* gconstpointer const void * gchar char guchar unsigned char gint int guint unsigned int gshort short gushort unsigned short glong long gulong unsigned long gint8 signed char guint8 unsigned char gint16 signed short guint16 unsigned short gint32 signed int guint32 unsigned int gfloat float gdouble double g strsplit string delimiter max tokens. gchar** g_ strsplit ( const gchar * string, const gchar * delimiter, gint max_ tokens); g new0 struct type n structs, 0,. g malloc0. # define g_ new0( struct_ type, n_ structs) \ ((struct_type *) g_malloc0 (((gsize) sizeof (struct_type)) * \ ((gsize) (n_structs)))) gpointer g_ malloc0 ( gulong n_ bytes); g free g new0. void g_ free ( gpointer mem); g strfreev g strsplit. void g_ strfreev ( gchar ** str_ array);

46 g file test GFileTest. 2,,. gboolean g_ file_ test ( const gchar * filename, GFileTest test); GFileTest. typedef enum { G_ FILE_ TEST_ IS_ REGULAR = 1 << 0, G_ FILE_ TEST_ IS_ SYMLINK = 1 << 1, G_FILE_TEST_IS_DIR = 1 << 2, G_ FILE_ TEST_ IS_ EXECUTABLE = 1 << 3, G_ FILE_ TEST_ EXISTS = 1 << 4 } GFileTest; g dir open. g dir read name. GDir* g_ dir_ open ( const gchar * path, guint flags, GError **error); g dir read name g dir open.. NULL. G_ CONST_ RETURN gchar* g_ dir_ read_ name ( GDir * dir); g dir close g dir open. void g_ dir_ close ( GDir * dir); (15 ) g dir open GError, NULL. NULL.

47 34 3 GLib (17 22 ) 17 while, g dir read name. g file test, g build filename. g build filename, 21 g free. (23 ) g dir close.. % gcc file-sample.c -o file-sample pkg-config --cflags --libs glib-2.0 %./file-sample. file-sample.c file-sample.o testfolder file-sample Makefile % (file) (file) (folder) (file) (file) 3 1 : file-sample.c 1 # include <glib. h> 2 # include <stdlib. h> 3 4 int main (int argc, char *argv[]) { 5 GDir *dir; 6 const gchar * name; 7 gchar * path, * currentdir; 8 gboolean is_ dir; 9 10 if (argc!= 2) { 11 g_print ("Usage:./file -sample.c directory\n"); 12 exit (1); 13 } 14 currentdir = argv[ 1]; 15 dir = g_ dir_ open ( currentdir, 0, NULL); 16 if (dir) { 17 while ( name = g_ dir_ read_ name ( dir)) { 18 path = g_ build_ filename ( currentdir, name, NULL); 19 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 20 g_print ("%s\t(%s)\n", name, (is_dir)? "folder" : "file"); 21 g_free (path);

48 } 23 g_dir_close (dir); 24 } 25 return 0; 26 } Unicode g locale to utf8 C UTF8., g free. gchar* g_ locale_ to_ utf8 ( const gchar * opsysstring, gssize len, gsize * bytes_ read, gsize * bytes_ written, GError **error); g locale from utf8 UTF8 C., g free. gchar* g_ locale_ from_ utf8 ( const gchar * utf8string, gssize len, gsize * bytes_ read, gsize * bytes_ written, GError **error); GTK+ UTF8., g dir open,.,, UTF % gcc utf8-sample.c -o utf8-sample pkg-config --cflags --libs glib-2.0 %./utf8-sample. g locale to utf8 UTF8. 2, 1

49 36 3 GLib. 3 5 NULL. 3 2 : utf8-sample.c 1 # include <gtk/ gtk. h> 2 # include <stdlib. h> 3 4 int main (int argc, char *argv[]) { 5 GtkWidget * window, * label, * vbox; 6 gchar * name, * utf8name; 7 8 if (argc!= 2) { 9 g_print ("Usage:./utf8 -sample.c string\n"); 10 exit (1); 11 } 12 gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 15 gtk_ window_ set_ title ( GTK_ WINDOW( window), " UTF8 Sample"); 16 g_ signal_ connect ( G_ OBJECT( window), 17 " destroy", G_ CALLBACK( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( TRUE, 0); 20 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); name = argv[ 1]; 23 label = gtk_ label_ new ( name); 24 gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0); utf8name = g_ locale_ to_ utf8 ( name, -1, NULL, NULL, NULL); 27 label = gtk_ label_ new ( utf8name); 28 gtk_box_pack_start (GTK_BOX(vbox), label, TRUE, TRUE, 0); 29 g_ free ( utf8name); gtk_ widget_ show_ all ( window); 32 gtk_main (); return 0; 35 } 3.1

50 g get home dir. G_ CONST_ RETURN gchar* g_ get_ home_ dir ( void); g get current dir. gchar* g_ get_ current_ dir ( void); g path get basename.. gchar* g_ path_ get_ basename ( const gchar * file_ name); g path get dirname. gchar* g_ path_ get_ dirname ( const gchar * file_ name); g build filename ( /), 1. NULL. gchar* g_ build_ filename ( const gchar * first_ element,...); 3.3 GLib.,.,. GLib., gpointer,. struct GList { gpointer data; GList * next; GList * prev; }; GList GList.. g list append

51 38 3 GLib. list NULL. GList* g_ list_ append ( GList * list, gpointer data); g list insert.. GList* g_ list_ insert ( GList * list, gpointer data, gint position); g list delete link.,,. GList* g_ list_ delete_ link ( GList * list, GList * link_); g list free.,,. void g_ list_ free ( GList * list); g list foreach func. void g_ list_ foreach ( GList * list, GFunc func, gpointer user_ data); GFunc. 1. 2, g list foreach 3. void (* GFunc) ( gpointer data, gpointer user_ data); g list length. guint g_ list_ length ( GList * list); g list first. GList* g_ list_ first ( GList * list); g list last. GList* g_ list_ last ( GList * list); g list previous. # define g_ list_ previous( list) \ ((list)? (((GList *)(list)) ->prev) : NULL)

52 g list next. #define g_list_next(list) ((list)? (((GList *)(list)) ->next) : NULL) g list nth n. GList* g_ list_ nth ( GList * list, guint n); g list nth data n. gpointer g_ list_ nth_ data ( GList * list, guint n); g list sort compare func. GList* g_ list_ sort ( GList * list, GCompareFunc compare_ func); GCompareFunc. gint (* GCompareFunc) ( gconstpointer a, gconstpointer b); : GList. 3 3 January December,..,. % gcc list_sort.c -o list_sort pkg-config --cflags --libs glib-2.0 %./list_sort January February March April May June July August September October November December April August December February January July June March May November October September (14 16 ) GList g list append NULL. data. (19 ) g list append,. (20 23 ) g list nth data, n,. (25 )

53 40 3 GLib g list sort,. strcmp. (26 ) g list foreach,. for, g list foreach. (29 ) g list free,. 3 3 : list sort.c 1 # include <glib. h> 2 3 gint compare_ function ( gconstpointer a, gconstpointer b) { 4 return strcmp ((gchar *) a, (gchar *) b); 5 } 6 7 void print_ data ( gpointer data, gpointer user_ data) { 8 g_print ("%s ", (gchar *) data); 9 } int main ( int argc, 12 char *argv[]) { 13 GList * list = NULL; 14 gchar *data[] = {"January", "February", "March", "April", "May", "June", 15 "July", "August", "September", "October", "November", 16 "December"}; 17 int n; for ( n = 0; n < 12; n++) list = g_ list_ append ( list, ( gpointer) data[ n]); 20 for ( n = 0; n < 12; n++) { 21 g_print ("%s ", (gchar *) g_list_nth_data (list, n)); 22 } 23 g_print ("\n"); list = g_ list_ sort ( list, compare_ function); 26 g_ list_ foreach ( list, ( GFunc) print_ data, NULL); 27 g_print ("\n"); g_list_free (list); return 0; 32 }

54 :,., ( 3 4)., ( ) g list insert, g list delete link. (8 10 ), January, February, April., g strdup,. (16 ) 2 3 March. (22 23 ) g strdup,, g free. 4 ( 3), g list nth data. g list nth. (29 30 ), g list free, g list foreach g free. % gcc list_operation.c -o list_operation pkg-config --cflags --libs glib-2.0 %./list_operation January February April January February March April January February March 3 4 : list operation.c 1 # include <glib. h> 2 3 int main (int argc, char *argv[]) { 4 GList * list = NULL, * work; 5 gchar *data[] = {"January", "February", "April"}; 6 int n; 7 8 for ( n = 0; n < 3; n++) { 9 list = g_list_append (list, (gpointer) g_strdup (data[n])); 10 } 11 for ( work = list; work; work = g_ list_ next ( work)) { 12 g_print ("%s ", (gchar *) work - >data);

55 42 3 GLib 13 } 14 g_print ("\n"); list = g_ list_ insert ( list, ( gpointer) g_ strdup (" March"), 2); 17 for ( work = list; work; work = g_ list_ next ( work)) { 18 g_print ("%s ", (gchar *) work - >data); 19 } 20 g_print ("\n"); g_free (g_list_nth_data (list, 3)); 23 list = g_list_delete_link (list, g_list_nth (list, 3)); 24 for ( work = list; work; work = g_ list_ next ( work)) { 25 g_print ("%s ", (gchar *) work - >data); 26 } 27 g_print ("\n"); g_ list_ foreach ( list, ( GFunc) g_free, NULL); 30 g_list_free (list); return 0; 33 } 3.4. GLib GHashTable, g hash table GHashTable GHashTable.. g hash table new. hash func NULL g direct hash. key equal func,, GHashTable. GHashTable* g_ hash_ table_ new ( GHashFunc hash_ func, GEqualFunc key_ equal_ func); g hash table new full g hash table new GHashTable. GHashTable,. GHashTable* g_ hash_ table_ new_ full ( GHashFunc hash_ func, GEqualFunc key_ equal_ func, GDestroyNotify key_ destroy_ func, GDestroyNotify value_ destroy_ func);

56 g hash table insert. void g_ hash_ table_ insert ( GHashTable * hash_ table, gpointer key, gpointer value); g hash table size GHashTable. guint g_ hash_ table_ size ( GHashTable * hash_ table); g hash table lookup GHashTable. gpointer g_ hash_ table_ lookup ( GHashTable * hash_ table, gconstpointer key); g hash table destroy GHashTable.,. void g_ hash_ table_ destroy ( GHashTable * hash_ table); 3.4.2, GHashTable ( 3 3).,,. % gcc hash-sample.c -o hash pkg-config --cflags --libs glib-2.0 %./hash-sample Key: large => Value: +1 Key: normal => Value: +0 Key: small => Value: -1 (8 10 ) g hash table new full.,, GDestroyNotify g free. (11 13 ) g hash table insert,. (15 19 ) for. g hash table lookup. (20 )

57 44 3 GLib g hash table destroy., g hash table new full, g hash table destroy. g hash table new, g hash table destroy,. 3 5 : hash-sample.c 1 # include <glib. h> 2 3 int main (int argc, char *argv[]) { 4 GHashTable * hash; 5 gchar *data[] = {"large", "normal", "small"}; 6 int n; 7 8 hash = g_hash_table_new_full (g_str_hash, g_str_equal, 9 ( GDestroyNotify) g_free, 10 ( GDestroyNotify) g_ free); 11 g_hash_table_insert (hash, g_strdup (data[0]), g_strdup ("+1")); 12 g_hash_table_insert (hash, g_strdup (data[1]), g_strdup ("+0")); 13 g_hash_table_insert (hash, g_strdup (data[2]), g_strdup (" -1")); for ( n = 0; n < g_ hash_ table_ size( hash); n++) { 16 g_print ("Key: %s = > Value: %s\n", 17 data[n], 18 (gchar *) g_hash_table_lookup(hash, (gconstpointer) data[n])); 19 } 20 g_ hash_ table_ destroy ( hash); return 0; 23 } 3.5 GLib. g timeout add. guint g_ timeout_ add ( guint interval, GSourceFunc function, gpointer data); 1/1000. interval = 1000, 1., GSourceFunc. gboolean (* GSourceFunc) ( gpointer data); g timeout add 3,., ID.

58 3.5 45, g source remove. g timeout add ID. gboolean g_ source_ remove ( guint tag); 3 6. g timeout add 1 count down, count : timer-sample.c 1 # include <gtk/ gtk. h> 2 3 static gint count = 10; 4 static guint timer_ id; 5 6 static gboolean count_ down ( gpointer user_ data) { 7 GtkLabel * label = GTK_ LABEL( user_ data); 8 gchar format[] = " Count % 2d"; 9 gchar str[ 9]; sprintf ( str, format, --count); 12 gtk_ label_ set_ text ( label, str); if (count == 0) { 15 g_ source_ remove ( timer_ id); 16 gtk_main_quit (); 17 } 18 } int main ( int argc, char * argv[]) { 21 GtkWidget * window; 22 GtkWidget * label; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 27 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " Timer Sample"); 28 gtk_ widget_ set_ size_ request ( window, 200, -1); 29 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 10); label = gtk_ label_ new (" Count 10"); 32 gtk_ container_ add ( GTK_ CONTAINER( window), label);

59 46 3 GLib 34 timer_ id = g_ timeout_ add (1000, ( GSourceFunc) count_ down, label); gtk_ widget_ show_ all ( window); 37 gtk_main (); return 0; 40 }

60 47 4 Gdk 4.1 Gdk, Gdk. Gdk, GTK+. Gdk, (GdkDrawable) (GdkGC).,.,. GTK+ GdkWindow GdkPixmap, GdkBitmap., GdkWindow, GtkDrawingArea window..,.,,, ( GC) gdk gc new. GdkGC* gdk_ gc_ new ( GdkWindow * drawable); GdkWindow GdkPixmap. GC, g object unref. GC GObject,. 1, g object ref. g object unref

61 48 4 Gdk. 0,. gpointer g_ object_ ref ( gpointer object); void g_ object_ unref ( gpointer object); 4.2.2, GdkColor, GC. GdkColor. struct GdkColor { guint32 pixel; guint16 red; guint16 green; guint16 blue; }; GdkColor red, green, blue pixel, gdk color alloc. gdk colormap get system. gint gdk_ color_ alloc ( GdkColormap * colormap, GdkColor * color); GdkColormap* gdk_ colormap_ get_ system ( void); GdkColor, gdk gc set foreground gdk gc set background GC. gdk gc set foreground,. gdk gc set background. void gdk_ gc_ set_ foreground ( GdkGC * gc, const GdkColor * color); void gdk_ gc_ set_ background ( GdkGC * gc, const GdkColor * color); GdkGC *gc; 2 GdkColor color; 3 4 gc = gdk_ gc_ new ( window); 5 6 color. red = 0x0000; 7 color. green = 0x0000; 8 color. blue = 0xffff; 9 10 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), & color); 11 gdk_gc_set_foreground (gc, &color);

62 gdk draw point gdk draw points. gdk draw point., gdk draw points., GdkPoint. void gdk_ draw_ point ( GdkDrawable * drawable, GdkGC *gc, gint x, gint y); void gdk_ draw_ points ( GdkDrawable * drawable, GdkGC *gc, GdkPoint * points, gint npoints); GdkPoint,. struct GdkPoint { gint x; gint y; }; gdk draw line 2 (x1, y1), (x2, y2). void gdk_ draw_ line ( GdkDrawable * drawable, GdkGC *gc, gint x1, gint y1, gint x2, gint y2); gdk draw lines GdkPoint. void gdk_ draw_ lines ( GdkDrawable * drawable, GdkGC *gc, GdkPoint * points, gint npoints); gdk draw segments GdkSegment.

63 50 4 Gdk void gdk_ draw_ segments ( GdkDrawable * drawable, GdkGC *gc, GdkSegment * segs, gint nsegs); GdkSegment,. struct GdkSegment { gint x1; gint y1; gint x2; gint y2; }; gdk draw lines, gdk draw segments 4.1 ( ). (segs[0].x1, segs[0].y1) (segs[1].x2, segs[1].y2) (segs[2].x2, segs[2].y2) (segs[1].x1, segs[1].y1) (segs[2].x1, segs[2].y1) (segs[0].x2, segs[0].y2) 4.1,., , gdk gc set dashes void gdk_ gc_ set_ dashes ( GdkGC * gc, gint dash_ offset, gint8 dash_ list[], gint n); dash offset., dash list.,, GDK LINE SOLID GDK LINE ON OFF DASH GDK LINE DOUBLE DASH ( )

64 (GDK LINE DOUBLE DASH ) n. gint8 dash_list[] = {4, 2, 2, 2};, GDK CAP NOT LAST GDK CAP BUTT GDK CAP ROUND GDK CAP PROJECTING GDK CAP BUTT, 0,.... GDK_CAP_BUTT GDK_CAP_ROUND GDK_CAP_PROJECTING 4.2, GDK JOIN MITER GDK JOIN ROUND GDK JOIN BEVEL... GDK_JOIN_MITER GDK_JOIN_ROUND GDK_JOIN_BEVEL 4.3

65 52 4 Gdk, 4 2..,, GtkDrawingArea window. 115, expose event.,. expose event., : draw lines.c 1 # include <gtk/ gtk. h> 2 3 static void set_ color ( GdkGC * gc, 4 GdkColor * color, 5 guint16 red, 6 guint16 green, 7 guint16 blue, 8 void (*set_function) (GdkGC *gc, 9 const GdkColor * color)) { 10 color - >red = red; 11 color - >green = green; 12 color - >blue = blue; 13 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), color); 14 set_ function ( gc, color); 15 } gboolean cb_ expose_ event ( GtkWidget * widget, 18 GdkEventExpose * event, 19 gpointer user_ data) { 20 GdkWindow * drawable = widget - >window; 21 GdkGC * gc; 22 GdkColor color;

66 GdkPoint point[ 3]; 24 gint line_ width = 10; 25 gint8 dash_ style[] = {40, 10, 10, 10}; gc = gdk_ gc_ new ( drawable); /* */ 30 set_ color ( gc, & color, 0xffff, 0x0000, 0x0000, gdk_ gc_ set_ foreground); 31 gdk_ gc_ set_ line_ attributes ( gc, line_ width, 32 GDK_LINE_SOLID, GDK_CAP_BUTT,GDK_JOIN_MITER); 33 gdk_draw_line (drawable, gc, 20, 20, 180, 20); gdk_ gc_ set_ line_ attributes ( gc, line_ width, 36 GDK_LINE_ON_OFF_DASH, 37 GDK_ CAP_ BUTT, GDK_ JOIN_ MITER); 38 gdk_draw_line (drawable, gc, 20, 40, 180, 40); set_ color ( gc, & color, 0x0000, 0x0000, 0xffff, gdk_ gc_ set_ background); 41 gdk_ gc_ set_ line_ attributes ( gc, line_ width, 42 GDK_ LINE_ DOUBLE_ DASH, 43 GDK_ CAP_ BUTT, GDK_ JOIN_ MITER); 44 gdk_draw_line (drawable, gc, 20, 60, 180, 60); /* */ 47 gdk_gc_set_dashes (gc, 0, dash_style, 4); 48 gdk_draw_line (drawable, gc, 20, 80, 180, 80); gdk_gc_set_dashes (gc, 20, dash_style, 4); 51 gdk_draw_line (drawable, gc, 20, 100, 180, 100); /* */ 54 set_ color ( gc, & color, 0x0000, 0x8888, 0x0000, gdk_ gc_ set_ foreground); gdk_ gc_ set_ line_ attributes( gc, line_ width, 57 GDK_ LINE_ SOLID, GDK_ CAP_ BUTT, GDK_ JOIN_ MITER); 58 gdk_draw_line (drawable, gc, 20, 130, 180, 130); gdk_ gc_ set_ line_ attributes( gc, line_ width, 61 GDK_ LINE_ SOLID, 62 GDK_ CAP_ ROUND, GDK_ JOIN_ MITER); 63 gdk_draw_line (drawable, gc, 20, 150, 180, 150); gdk_ gc_ set_ line_ attributes ( gc, line_ width, 66 GDK_ LINE_ SOLID, 67 GDK_ CAP_ PROJECTING, GDK_ JOIN_ MITER); 68 gdk_draw_line (drawable, gc, 20, 170, 180, 170); /* */ 71 set_ color ( gc, & color, 0x0000, 0x8888, 0xcccc, gdk_ gc_ set_ foreground); 72 line_ width = 20;

67 54 4 Gdk gdk_ gc_ set_ line_ attributes ( gc, line_ width, 75 GDK_ LINE_ SOLID, 76 GDK_ CAP_ BUTT, GDK_ JOIN_ MITER); 77 point[ 0]. x = 220; point[ 0]. y = 90; 78 point[ 1]. x = 300; point[ 1]. y = 20; 79 point[ 2]. x = 380; point[ 2]. y = 90; 80 gdk_ draw_ lines ( drawable, gc, point, 3); gdk_ gc_ set_ line_ attributes ( gc, line_ width, 83 GDK_ LINE_ SOLID, 84 GDK_ CAP_ BUTT, GDK_ JOIN_ ROUND); 85 point[ 0]. x = 220; point[ 0]. y = 130; 86 point[ 1]. x = 300; point[ 1]. y = 60; 87 point[ 2]. x = 380; point[ 2]. y = 130; 88 gdk_ draw_ lines ( drawable, gc, point, 3); gdk_ gc_ set_ line_ attributes ( gc, line_ width, 91 GDK_ LINE_ SOLID, 92 GDK_ CAP_ BUTT, GDK_ JOIN_ BEVEL); 93 point[ 0]. x = 220; point[ 0]. y = 170; 94 point[ 1]. x = 300; point[ 1]. y = 100; 95 point[ 2]. x = 380; point[ 2]. y = 170; 96 gdk_ draw_ lines ( drawable, gc, point, 3); g_ object_ unref ( gc); return FALSE; 101 } int main ( int argc, char * argv[]) { 104 GtkWidget * window; 105 GtkWidget * canvas; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 110 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Line Examples"); 111 gtk_ widget_ set_ size_ request ( window, 400, 200); canvas = gtk_ drawing_ area_ new (); 114 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); 115 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 116 G_ CALLBACK ( cb_ expose_ event), NULL); gtk_ widget_ show_ all ( window); 119 gtk_main (); return 0; 122 }

68 , gdk draw rectangle. void gdk_ draw_ rectangle ( GdkDrawable * drawable, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height); gdk draw rectangle 4.5, x, y width, height. filled TRUE. (x, y) height width , gdk draw arc. void gdk_ draw_ arc ( GdkDrawable * drawable, GdkGC *gc, gboolean filled, gint x, gint y, gint width, gint height, gint angle1, gint angle2); x, y., width, height. angle1,. (3 ) 0, 1/64. angle2 angle1 ( 4.6). filled TRUE,.

69 56 4 Gdk (x, y) angle2 angle1 height width , gdk draw polygon. void gdk_ draw_ polygon ( GdkDrawable * drawable, GdkGC *gc, gboolean filled, GdkPoint * points, gint npoints); 4.7 GdkPoint. filled TRUE,. points[0] points[1] points[2] points[0] points[1] points[2] points[3] points[3] points[4] (a) filled FALSE points[4] (b) filled TRUE 4.7

70 GdkPixmap. GdkWindow. GdkPixmap., GdkWindow. GdkPixmap, GdkWindow (5 14 ) configure event. configure event.,. (16 37 ),,., gdk window set back pixmap.. gdk window clear,. void gdk_ window_ set_ back_ pixmap ( GdkWindow * window, GdkPixmap * pixmap, gboolean parent_ relative); void gdk_ window_ clear ( GdkWindow * window);, gdk draw drawable. void gdk_ draw_ drawable ( GdkDrawable * drawable, GdkGC *gc, GdkDrawable * src, gint xsrc, gint ysrc,

71 58 4 Gdk gint xdest, gint ydest, gint width, gint height); 4 3 : draw pixmap.c 1 # include <gtk/ gtk. h> 2 3 static GdkPixmap * pixmap = NULL; 4 5 gboolean cb_ configure_ event ( GtkWidget * widget, GdkEventConfigure * event) { 6 pixmap = gdk_ pixmap_ new ( widget - >window, 7 widget - >allocation. width, 8 widget - >allocation. height, 9-1); 10 gdk_draw_rectangle (pixmap, widget - >style - >white_gc, TRUE, 0, 0, 11 widget - >allocation. width, 12 widget - >allocation. height); 13 return TRUE; 14 } gboolean cb_ expose_ event ( GtkWidget * widget, 17 GdkEventExpose * event, 18 gpointer user_ data) { 19 GdkWindow * drawable = widget - >window; 20 GdkGC * gc; 21 GdkColor color; gc = gdk_ gc_ new ( pixmap); 24 color. red = 0x0000; 25 color. green = 0x8888; 26 color. blue = 0x0000; 27 gdk_ color_ alloc ( gdk_ colormap_ get_ system (), & color); 28 gdk_gc_set_foreground (gc, &color); gdk_draw_arc (pixmap, gc, TRUE, 10, 10, 180, 180, 30 * 64, 300 * 64); 31 gdk_ window_ set_ back_ pixmap ( drawable, pixmap, FALSE); gdk_ window_ clear( drawable); 34 g_ object_ unref ( gc); return FALSE; 37 } int main ( int argc, char * argv[]) { 40 GtkWidget * window; 41 GtkWidget * canvas; gtk_init (&argc, &argv); 44

72 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 46 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Draw Pixmap"); 47 gtk_ widget_ set_ size_ request ( window, 200, 200); canvas = gtk_ drawing_ area_ new (); 50 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); 51 g_ signal_ connect ( G_ OBJECT( canvas), " configure_ event", 52 G_ CALLBACK ( cb_ configure_ event), NULL); 53 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 54 G_ CALLBACK ( cb_ expose_ event), NULL); gtk_ widget_ show_ all ( window); 57 gtk_main (); return 0; 60 }

73

74 61 5 GdkPixbuf GdkPixbuf,., GTK+, GTK+. GdkPixbuf,., GdkPixbuf GTK GdkPixbuf, gdk pixbuf new from file,. GdkPixbuf 5.1 *1. GdkPixbuf* gdk_ pixbuf_ new_ from_ file ( const char * filename, GError **error); GError., NULL. typedef struct { GQuark domain; gint code; gchar * message; } GError; *

75 62 5 GdkPixbuf 5.1 GdkPixbuf jpeg png ico ani bmp gif pnm ras tga tiff xbm xpm, NULL, GError error.. %./read_image cannotread.png error->code : 2 error->message : cannotread.png : %./read_image nothing.png error->code : 4 error->message : nothing.png : GdkPixbuf. gdk pixbuf new GdkPixbuf. GdkPixbuf* gdk_ pixbuf_ new ( GdkColorspace colorspace, gboolean has_ alpha, int bits_ per_ sample, int width, int height); GdkColorspace, GDK COLORSPACE RGB

76 typedef enum { GDK_ COLORSPACE_ RGB } GdkColorspace;, has alpha TRUE, FALSE. bits per sample 8. gdk pixbuf new from data GdkPixbuf. guchar 1. GdkPixbuf* gdk_ pixbuf_ new_ from_ data ( const guchar * data, GdkColorspace colorspace, gboolean has_ alpha, int bits_ per_ sample, int width, int height, int rowstride, GdkPixbufDestroyNotify destroy_ fn, gpointer destroy_ fn_ data); GdkPixbufDestroyNotify,. destroy fn data GdkPixbufDestroyNotify 2. void (* GdkPixbufDestroyNotify) ( guchar * pixels, gpointer data); gdk pixbuf new from xpm data XPM GdkPixbuf. GdkPixbuf* gdk_ pixbuf_ new_ from_ xpm_ data ( const char ** data); gdk pixbuf new from inline GdkPixbuf. GdkPixbuf* gdk_ pixbuf_ new_ from_ inline ( gint data_ length, const guint8 * data, gboolean copy_ pixels, GError **error); data length, 1., copy pixels TRUE. gdk-pixbuf-csource. % gdk-pixbuf-csource --name="icon_pixbuf" /usr/share/pixmap/gnome-terminal.png \ > icon.h

77 64 5 GdkPixbuf. gdk-pixbuf-csource name. 1 /* GdkPixbuf RGBA C- Source image dump 1 -byte - run - length - encoded */ 2 3 #ifdef SUNPRO_C 4 # pragma align 4 ( icon_ pixbuf) 5 #endif 6 #ifdef GNUC 7 static const guint8 icon_pixbuf[] attribute (( aligned (4))) = 8 #else 9 static const guint8 icon_ pixbuf[] = 10 #endif 11 { "" 12 /* Pixbuf magic ( 0x47646b50) */ 13 "GdkP" 14 /* length: header ( 24) + pixel_ data ( 7104) */ 15 "\0\0\33\330" 16 /* pixdata_ type ( 0x ) */ 17 "\2\1\0\2" 18 /* rowstride (192) */ 19 "\0\0\0\300" 20 /* width (48) */ 21 "\0\0\0""0" 22 /* height (48) */ 23 "\0\0\0""0" 24 /* pixel_data: */ 25 "\377\0\0\0\0\222\0\0\0\0\6\0\0\0\1\0\0\0\2\0\0\0\4\0\0\0\7\0..." 26 "\0\0\12\204\0\0\0\13\233\0\0\0\14\203\0\0\0\13\6\0\0\0\12\0\..." 27 "\0\0\7\0\0\0\4\0\0\0\2\0\0\0\1\202\0\0\0\0\4\0\0\0\2\0\0\0""..." 28 "\1\1\1\377\246\0\0\0\377\20\0\0\0K\0\0\0\14\0\0\0\7\0\0\0\2\..." 29 "\0\0\0\0\0\0\4\0\0\0\377\340\336\334\332\352\351\346\377\357..." 30 "\377\360\357\355\377\361\360\356\377\362\361\357\377\360\360..." rowstride rowstride., W, 3W ( )., 4., rowstride = 3W + (4 3W %4) a%b a b.

78 GdkPixbuf gdk pixbuf save. gboolean gdk_ pixbuf_ save ( GdkPixbuf * pixbuf, const char * filename, const char * type, GError **error,...); GdkPixbuf jpeg, png, ico ( 5.1 ). type, jpeg, png, ico. GdkPixbuf jpeg. gdk_pixbuf_save (pixbuf, "sample.jpg", "jpeg", NULL, NULL); 4. NULL GdkPixbuf,,,.,. gdk pixbuf get width. int gdk_ pixbuf_ get_ width ( const GdkPixbuf * pixbuf); gdk pixbuf get height. int gdk_ pixbuf_ get_ height ( const GdkPixbuf * pixbuf); gdk pixbuf get n channels ( ). RGB, 3, 4. int gdk_ pixbuf_ get_ n_ channels ( const GdkPixbuf * pixbuf); gdk pixbuf get has alpha. TRUE, FALSE. 5.2 GdkPixbuf jpeg quality [0:100] png compression [0:9] ico depth 16, 24, 32

79 66 5 GdkPixbuf gboolean gdk_ pixbuf_ get_ has_ alpha ( const GdkPixbuf * pixbuf); gdk pixbuf get rowstride 1. int gdk_ pixbuf_ get_ rowstride ( const GdkPixbuf * pixbuf); gdk pixbuf get pixels. guchar* gdk_ pixbuf_ get_ pixels ( const GdkPixbuf * pixbuf); TEO GdkPixbuf GdkPixbuf TEO. TEO GTK+.. TEO C, TEOIMAGE. libteo TeoData (unsigned char )., gdk pixbuf new from data TEO GdkPixbuf. TEOIMAGE * img; GdkPixbuf * pixbuf; pixbuf = gdk_ pixbuf_ new_ from_ data (( guchar *) TeoData( img), GDK_ COLORSPACE_ RGB, FALSE, 8, TeoWidth( img), TeoHeight( img), TeoWidth( img) * 3, NULL, NULL); rowstride 1,. GdkPixbuf, 1 8 3, 4(4 ), TEO TEO UINT8 RGB.

80 ,.,,., GtkImage, GtkImage. GtkImage. GtkImage GtkImage : display1.c 1 # include <gtk/ gtk. h> 2 3 int main (int argc, char *argv[]) { 4 GtkWidget * window; 5 GtkWidget * image; 6 7 gtk_init (&argc, &argv); 8 9 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 10 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Display Image 1"); 11 image = gtk_ image_ new_ from_ file ( argv[ 1]); 12 gtk_ container_ add ( GTK_ CONTAINER( window), image); 13 gtk_ widget_ show_ all ( window); 14 gtk_main (); return 0; 17 } 5.1 GdkImage

81 68 5 GdkPixbuf 5 1, GtkImag GtkWindow. GdkPixbuf, gtk image new from file, GtkImage. GtkWidget* gtk_ image_ new_ from_ file ( const gchar * filename); GdkPixbuf GdkPixmap GtkImage. GtkWidget* gtk_ image_ new_ from_ pixbuf ( GdkPixbuf * pixbuf); GtkWidget* gtk_ image_ new_ from_ pixmap ( GdkPixmap * pixmap, GdkBitmap * mask); GtkImage GdkPixbuf GdkPixmap. GdkPixbuf* gtk_ image_ get_ pixbuf ( GtkImage * image); void gtk_ image_ get_ pixmap ( GtkImage * image, GdkPixmap ** pixmap, GdkBitmap ** mask); GtkDrawingArea, GtkDrawingArea. GtkImage,. GtkDrawingArea 5 2. (18 ) gdk pixbuf new from file. GtkDrawingArea (25 28 ) GtkImage,, GtkDrawingArea,. gtk widget set size request. void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); (29 30 ) GtkDrawingArea, expose event,. (6 7 ) gdk draw pixbuf,. 1 drawable. 5 2, GtkDrawingArea window. 2 gc, NULL. 3, 4., 5 8, (, ). width, height 1,. void gdk_ draw_ pixbuf ( GdkDrawable * drawable, GdkGC *gc,

82 GdkPixbuf * pixbuf, gint src_x, gint src_y, gint dest_x, gint dest_y, gint width, gint height, GdkRgbDither dither, gint x_ dither, gint y_ dither); GdkRgbDither. typedef enum { GDK_RGB_DITHER_NONE, GDK_ RGB_ DITHER_ NORMAL, GDK_ RGB_ DITHER_ MAX } GdkRgbDither; 5 2 GtkDrawingArea 1 : display2.c 1 # include <gtk/ gtk. h> 2 3 static gint cb_ expose ( GtkWidget * widget, 4 GdkEventExpose * event, 5 gpointer data) { 6 gdk_ draw_ pixbuf ( widget - >window, NULL, ( GdkPixbuf *) data, 7 0, 0, 0, 0, -1, -1, GDK_RGB_DITHER_NONE, 0, 0); 8 return TRUE; 9 } int main ( int argc, char * argv[]) { 12 GtkWidget * window; 13 GtkWidget * canvas; 14 GdkPixbuf * pixbuf; 5.2 GtkDrawingArea ( )

83 70 5 GdkPixbuf gtk_init (&argc, &argv); pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 21 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Display Image 2"); canvas = gtk_ drawing_ area_ new (); 24 gtk_ widget_ set_ size_ request ( canvas, 25 gdk_ pixbuf_ get_ width ( pixbuf), 26 gdk_ pixbuf_ get_ height( pixbuf)); 27 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 28 G_ CALLBACK( cb_ expose), pixbuf); 29 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); gtk_ widget_ show_ all ( window); 32 gtk_main (); return 0; 35 } GtkDrawingArea, GdkPixbuf (GdkPixmap) (GdkBitmap), gdk window set back pixmap GdkWindow. gdk window clear. GdkPixbuf, gdk pixbuf render pixmap and mask. 5 3, gdk pixbuf composite color,. 3 ( ),, 1, 2. void gdk_ pixbuf_ composite_ color ( const GdkPixbuf * src, GdkPixbuf * dest, int dest_x, int dest_y, int dest_ width, int dest_ height, double offset_ x, double offset_ y, double scale_x, double scale_y, GdkInterpType interp_ type, int overall_ alpha, int check_x, int check_y, int check_ size, guint32 color1, guint32 color2);

84 : 2 : 3 : X 4 : Y 5 : 6 : 7 : X 8 : Y 9 : X 10 : Y 11 : 12 : (0 255) 13 : X 14 : Y 15 : ( ) 16 : 1 17 : 2 scale x, scale y, (offset x, offset y) (dest x, dest y) dest width, dest height.. GdkInterpType. typedef enum { GDK_ INTERP_ NEAREST, GDK_ INTERP_ TILES, GDK_ INTERP_ BILINEAR, GDK_ INTERP_ HYPER } GdkInterpType; 5.3 GtkDrawingArea ( )

85 72 5 GdkPixbuf 5 3 GtkDrawingArea 2 : display3.c 1 # include <gtk/ gtk. h> 2 3 static gint cb_ expose ( GtkWidget * widget, 4 GdkEventExpose * event, 5 gpointer data) { 6 GdkPixbuf * pixbuf = ( GdkPixbuf *) data; 7 GdkPixbuf * background; 8 GdkPixmap * pixmap; 9 int w, h; w = gdk_ pixbuf_ get_ width ( pixbuf); 12 h = gdk_ pixbuf_ get_ height( pixbuf); 13 background = gdk_ pixbuf_ new ( GDK_ COLORSPACE_ RGB, FALSE, 8, w, h); 14 gdk_ pixbuf_ composite_ color ( pixbuf, background, 15 0, 0, w, h, 0, 0, 1.0, 1.0, 16 GDK_INTERP_BILINEAR, 255, 0, 0, 16, 17 0xaaaaaa, 0x555555); 18 gdk_ pixbuf_ render_ pixmap_ and_ mask ( background, & pixmap, NULL, 255); 19 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 20 gdk_ window_ clear( widget - >window); g_ object_ unref ( background); 23 g_ object_ unref ( pixmap); return TRUE; 26 } int main ( int argc, char * argv[]) { 29 GtkWidget * window; 30 GtkWidget * canvas; 31 GdkPixbuf * pixbuf; gtk_init (&argc, &argv); pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 38 gtk_ window_ set_ title ( GTK_ WINDOW( window), " Display Image 3"); canvas = gtk_ drawing_ area_ new (); 41 gtk_ widget_ set_ size_ request ( canvas, 42 gdk_ pixbuf_ get_ width ( pixbuf), 43 gdk_ pixbuf_ get_ height( pixbuf)); 44 g_ signal_ connect ( G_ OBJECT( canvas), " expose_ event", 45 G_ CALLBACK( cb_ expose), pixbuf); 46 gtk_ container_ add ( GTK_ CONTAINER( window), canvas); 47

86 gtk_ widget_ show_ all ( window); 49 gtk_main (); return 0; 52 } 5.4,. 5.4, 2 GUI... (GtkScrolledWindow) (GtkAlignment) (GtkSpinButton) GtkDrawingArea.,,,. GtkScrolledWindow.., 5.4 2

87 74 5 GdkPixbuf.,. 5.3, gdk window set back pixmap,,.,,, GtkAlignment. GtkAlignment,. GtkWidget* gtk_ alignment_ new ( gfloat xalign, gfloat yalign, gfloat xscale, gfloat yscale); xalign, yalign ( ), 1 ( ). xscale, yscale GtkAlignment 1. 0, GtkAlignment, GUI 5.5 GUI. (17 23 ),. (25 31 ), gtk scrolled window new., GtkAlignment GtkWindow GtkVbox GtkDrawingArea GtkScrolledWindow GtkLabel GtkSpinButton GtkHbox GtkButton 5.5 2

88 GTK POLICY ALWAYS GTK POLICY AUTOMATIC GTK POLICY NEVER... gtk scrolled window set policy GtkWidget* gtk_ scrolled_ window_ new ( GtkAdjustment * hadjustment, GtkAdjustment * vadjustment); void gtk_ scrolled_ window_ set_ policy ( GtkScrolledWindow * scrolled_ window, GtkPolicyType hscrollbar_ policy, GtkPolicyType vscrollbar_ policy); GtkScrolledWindow,. gtk scrolled window set shadow type. void gtk_ scrolled_ window_ set_ shadow_ type( GtkScrolledWindow scrolled_ window, GtkShadowType type); GtkShadowType typedef enum { GTK_ SHADOW_ NONE, GTK_SHADOW_IN, GTK_SHADOW_OUT, GTK_ SHADOW_ ETCHED_ IN, GTK_ SHADOW_ ETCHED_ OUT } GtkShadowType; (33 34 ) GtkAlignment gtk alignment new., GtkDrawingArea,. alignment = gtk_ alignment_ new (0.5, 0.5, 0, 0); (53 57 ) gtk spin button new. (GtkAdjustment).,., 128, 0, ,, value changed

89 76 5 GdkPixbuf GtkWidget* gtk_ spin_ button_ new ( GtkAdjustment * adjustment, gdouble climb_ rate, guint digits); GtkObject* gtk_ adjustment_ new ( gdouble value, gdouble lower, gdouble upper, gdouble step_ increment, gdouble page_ increment, gdouble page_ size); GUI : binarize.c 1 # define WINDOW_ WIDTH # define WINDOW_ HEIGHT static GtkWidget* make_ interface ( const gchar * title, 5 GdkPixbuf * pixbuf) { 6 GtkWidget * window; 7 GtkWidget * vbox; 8 GtkWidget * scrolledwindow; 9 GtkWidget * alignment; 10 GtkWidget * drawingarea; 11 GtkWidget * hbox; 12 GtkWidget * label; 13 GtkObject * adjustment; 14 GtkWidget * spinbutton; 15 GtkWidget * button; window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 18 gtk_ window_ set_ title ( GTK_ WINDOW( window), title); 5.6

90 gtk_ widget_ set_ size_ request ( window, WINDOW_ WIDTH, WINDOW_ HEIGHT); vbox = gtk_ vbox_ new ( FALSE, 3); 22 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); 23 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( vbox), 5); scrolledwindow = gtk_ scrolled_ window_ new ( NULL, NULL); 26 gtk_ box_ pack_ start ( GTK_ BOX( vbox), scrolledwindow, TRUE, TRUE, 0); 27 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW( scrolledwindow), 28 GTK_ POLICY_ AUTOMATIC, 29 GTK_ POLICY_ AUTOMATIC); 30 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW( scrolledwindow), 31 GTK_ SHADOW_ ETCHED_ IN); 32 { 33 alignment = gtk_ alignment_ new (0.5, 0.5, 0, 0); 34 gtk_ scrolled_ window_ add_ with_ viewport( GTK_ SCROLLED_ WINDOW 35 ( scrolledwindow), alignment); 36 { 37 drawingarea = gtk_ drawing_ area_ new (); 38 gtk_ container_ add ( GTK_ CONTAINER( alignment), drawingarea); 39 gtk_ widget_ set_ size_ request ( drawingarea, 40 gdk_ pixbuf_ get_ width ( pixbuf), 41 gdk_ pixbuf_ get_ height ( pixbuf)); 42 g_ signal_ connect ( G_ OBJECT( drawingarea), 43 " expose_ event", G_ CALLBACK( cb_ expose), 44 ( gpointer) pixbuf); 45 } 46 } 47 hbox = gtk_ hbox_ new ( FALSE, 5); 48 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 49 { 50 label = gtk_ label_ new (" Threshold :"); 51 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); adjustment = gtk_ adjustment_ new (128, 0, 255, 1, 5, 0); 54 spinbutton = gtk_ spin_ button_ new ( GTK_ ADJUSTMENT( adjustment), 1, 0); 55 gtk_ box_ pack_ start ( GTK_ BOX( hbox), spinbutton, TRUE, TRUE, 0); 56 g_ signal_ connect ( G_ OBJECT( spinbutton), " value_ changed", 57 G_ CALLBACK ( cb_ value_ changed), drawingarea); 58 } 59 hbox = gtk_ hbox_ new ( FALSE, 0); 60 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); 61 { 62 button = gtk_button_new_from_stock ("gtk -quit"); 63 gtk_box_pack_end (GTK_BOX(hbox), button, FALSE, FALSE, 0); 64 g_ signal_ connect ( G_ OBJECT( button), 65 " clicked", G_ CALLBACK( cb_ quit), ( gpointer) pixbuf); 66 } 67 return window; 68 }

91 78 5 GdkPixbuf 5.4.3, GtkDrawingArea, GtkSpinButton. GtkDrawingArea GtkDrawingArea expose event. expose event cb expose 2. 2 (15 ) 2, (pixbuf) 2 (bin). 2 (17 29 ), GtkSpinButton cb value changed, value changed., (Enter )., (cb expose)., gtk spin button get value as int., gtk spin button get value, 0 255,., gtk widget queue draw GtkDrawingArea expose event., cb expose. gint gtk_ spin_ button_ get_ value_ as_ int ( GtkSpinButton * spin_ button); gdouble gtk_ spin_ button_ get_ value ( GtkSpinButton * spin_ button); void gtk_ widget_ queue_ draw ( GtkWidget * widget); : binarize.c 1 # include <gtk/ gtk. h> 2 # include " operation. h" 3 4 GdkPixbuf * bin; 5 gint threshold = 128; 6 7 static gint cb_ expose ( GtkWidget * widget, 8 GdkEventExpose * event, 9 gpointer data) { 10 GdkPixbuf * pixbuf = ( GdkPixbuf *) data;

92 GdkPixbuf * background; 12 GdkPixmap * pixmap; 13 int w, h; create_ binarized_ image ( pixbuf, bin, threshold); w = gdk_ pixbuf_ get_ width ( pixbuf); 18 h = gdk_ pixbuf_ get_ height( pixbuf); 19 background = gdk_ pixbuf_ new ( GDK_ COLORSPACE_ RGB, FALSE, 8, w, h); 20 gdk_ pixbuf_ composite_ color ( bin, background, 21 0, 0, w, h, 0, 0, 1.0, 1.0, 22 GDK_INTERP_BILINEAR, 255, 0, 0, 16, 23 0xaaaaaa, 0x555555); 24 gdk_ pixbuf_ render_ pixmap_ and_ mask ( background, & pixmap, NULL, 255); 25 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 26 gdk_ window_ clear( widget - >window); g_ object_ unref ( background); 29 g_ object_ unref ( pixmap); return TRUE; 32 } static void cb_ value_ changed ( GtkSpinButton * spinbutton, 35 gpointer data) { 36 threshold=gtk_ spin_ button_ get_ value_ as_ int( GTK_ SPIN_ BUTTON( spinbutton)); 37 gtk_ widget_ queue_ draw ( GTK_ WIDGET( data)); 38 } , operation.h,., 1. [bytes] (5.1) GdkPixbuf, , GdkPixbuf 1, gdk pixbuf get rowstride., (x, y) p (rowstride) y + x + p (5.2) : operation.h 1 #ifndef OPERATION_H 2 #define OPERATION_H 3 4 #define gdk_pixbuf_get_pixel(pixbuf,x,y,p) \

93 80 5 GdkPixbuf 5 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 6 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 7 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p))) 8 9 #define gdk_pixbuf_put_pixel(pixbuf,x,y,p,val) \ 10 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 11 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 12 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p)) = (val)) void create_ binarized_ image ( const GdkPixbuf * src, 15 GdkPixbuf * dst, 16 gint threshold); #endif /* OPERATION_H */ operation.c create binarized image (x, y) RGB, 15 RGB (Y ).,, 255, : operation.c 1 # include <gtk/ gtk. h> 2 # include " operation. h" 3 4 void create_ binarized_ image ( const GdkPixbuf * src, 5 GdkPixbuf * dst, 6 gint threshold) { 7 int row, col; 8 guchar r, g, b, y, val; 9 10 for ( row = 0; row < gdk_ pixbuf_ get_ height ( src); row++) { 11 for ( col = 0; col < gdk_ pixbuf_ get_ width ( src); col++) { 12 r = gdk_pixbuf_get_pixel(src, col, row, 0); 13 g = gdk_pixbuf_get_pixel(src, col, row, 1); 14 b = gdk_pixbuf_get_pixel(src, col, row, 2); 15 y = ( guchar) ( * r * g * b); 16 val = ( y >= threshold)? 255 : 0; 17 gdk_pixbuf_put_pixel(dst, col, row, 0, val); 18 gdk_pixbuf_put_pixel(dst, col, row, 1, val); 19 gdk_pixbuf_put_pixel(dst, col, row, 2, val); 20 } 21 } 22 } ,. 3. gcc, Makefile

94 Makefile , % make gcc -Wall /usr/bin/pkg-config --cflags gtk c -o operation.o operation.c gcc binarize.o operation.o /usr/bin/pkg-config --libs gtk+-2.0 /usr/bin/pkg-co nfig --libs gtk o binarize_gui %./binarize_gui sample.png : binarize.c 1 int main (int argc, char *argv[]) { 2 GtkWidget * window; 3 GdkPixbuf * pixbuf; 4 5 gtk_init (&argc, &argv); 6 7 pixbuf = gdk_ pixbuf_ new_ from_ file ( argv[1], NULL); 8 bin = gdk_ pixbuf_ copy ( pixbuf); 9 window = make_ interface (" Image Binarization", pixbuf); 10 gtk_ widget_ show_ all ( window); 11 gtk_main (); return 0; 14 } 5.7

95 82 5 GdkPixbuf Makefile 1 CC = gcc -O2 2 3 INSTALL = / usr/ bin/ install 4 PREFIX = $( HOME) 5 PKG_ CONFIG = / usr/ bin/ pkg - config 6 7 CFLAGS = -Wall $( PKG_ CONFIG) --cflags gtk LDFLAGS = $( PKG_ CONFIG) --libs gtk LIBS = $( PKG_ CONFIG) --libs gtk SRCS = binarize. c operation. c 12 HDRS = operation. h 13 OBJS = $(SRCS:.c=.o) DEST = $( PREFIX)/ bin PROGRAM = binarize_ gui all: $( PROGRAM) $( PROGRAM): $( OBJS) $( HDRS) 22 $( CC) $( OBJS) $( LDFLAGS) $( LIBS) -o $( PROGRAM) clean:; rm -f *. o * ~ $( PROGRAM) install: $( PROGRAM) 27 $( INSTALL) -s $( PROGRAM) $( DEST) 28 strip $( DEST)/ $( PROGRAM)

96 GUI.,,,, GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton (GtkButton)

97 84 6 gtk button new. GtkWidget* gtk_ button_ new ( void); gtk button new with label ( 6.1 ). GtkWidget* gtk_ button_ new_ with_ label ( const gchar * label); gtk button new with mnemonic ( 6.1 ).. GtkWidget* gtk_ button_ new_ with_ mnemonic ( const gchar * label); gtk button new from stock ( 6.1 ). (GtkStockItem). ID (, GTK STOCK OK GTK STOCK OPEN), ID. GtkWidget* gtk_ button_ new_ from_ stock ( const gchar * stock_ id); 6.1. clicked, pressed released.. void user_ function ( GtkButton * button, gpointer user_ data);.,. gtk button get label. 6.1 enter leave pressed release clicked....,.

98 G_ CONST_ RETURN gchar* gtk_ button_ get_ label ( GtkButton * button); gtk button set label. void gtk_ button_ set_ label ( GtkButton * button, const gchar * label); ,,. 6.2, cb button clicked, : gtkbutton-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button_ clicked ( GtkButton * widget, gpointer data) { 4 static int count = 0; 5 char buf[ 1024]; 6 7 sprintf (buf, "%d time(s) clicked.", ++count); 8 gtk_ button_ set_ label ( widget, buf); 9 } int main ( int argc, char ** argv) { 12 GtkWidget * window; 13 GtkWidget * box; 14 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 19 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkButton Sample"); 20 gtk_ widget_ set_ size_ request ( window, 240, -1); 21 g_ signal_ connect ( G_ OBJECT( window), " destroy", 22 G_ CALLBACK ( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 25 gtk_ container_ add ( GTK_ CONTAINER( window), box); button = gtk_ button_ new_ with_ label (" Please click me."); 28 gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0);

99 g_ signal_ connect ( G_ OBJECT( button), " clicked", 30 G_ CALLBACK ( cb_ button_ clicked), NULL); gtk_ widget_ show_ all ( window); 33 gtk_main (); return 0; 36 } GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton +----GtkToggleButton +----GtkCheckButton (GtkCheckButton) 3. gtk check button new ( 6.3 ). GtkWidget* gtk_ check_ button_ new ( void); gtk check button new with label ( 6.3 ). GtkWidget* gtk_ check_ button_ new_ with_ label ( const gchar * label); gtk check button new with mnemonic ( 6.3 ).. GtkWidget* gtk_ check_ button_ new_ with_ mnemonic ( const gchar * label); 6.3

100 toggled. 6.2.,. toggled. toggled. void user_ function ( GtkToggleButton * togglebutton, gpointer user_ data); ( ). gtk toggle button get active TRUE, FALSE. gboolean gtk_ toggle_ button_ get_ active ( GtkToggleButton * toggle_ button); gtk toggle button set active. void gtk_ toggle_ button_ set_ active ( GtkToggleButton * toggle_ button, gboolean is_ active);, gtk toggle button toggled, ( ). void gtk_ toggle_ button_ toggled ( GtkToggleButton * toggle_ button); , toggled cb button toggled. 6.4

101 : gtkcheckbutton-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button_ toggled ( GtkToggleButton * widget, gpointer data) { 4 gboolean active; 5 gchar *str[] = {"FALSE", "TRUE"}; 6 7 active = gtk_ toggle_ button_ get_ active ( widget); 8 g_print ("Check button state : %s\n", str[active]); 9 } int main ( int argc, char ** argv) { 12 GtkWidget * window; 13 GtkWidget * box; 14 GtkWidget * button; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 19 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkCheckButton Sample"); 20 gtk_ widget_ set_ size_ request ( window, 300, -1); 21 g_ signal_ connect ( G_ OBJECT( window), " destroy", 22 G_ CALLBACK( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 25 gtk_ container_ add ( GTK_ CONTAINER( window), box); button = gtk_ check_ button_ new_ with_ label (" Please clicke me."); 28 gtk_box_pack_start (GTK_BOX(box), button, TRUE, TRUE, 0); 29 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON( button), TRUE); 30 g_ signal_ connect ( G_ OBJECT( button), " toggled", 31 G_ CALLBACK ( cb_ button_ toggled), NULL); gtk_ widget_ show_ all ( window); 34 gtk_main (); return 0; 37 }

102 GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkButton +----GtkToggleButton +----GtkCheckButton +----GtkRadioButton (GtkRadioButton) 6. gtk radio button new ( 6.5 ). GtkWidget* gtk_ radio_ button_ new ( GSList * group); gtk radio button new with label ( 6.5 ). GtkWidget* gtk_ radio_ button_ new_ with_ label ( GSList * group, const gchar * label); gtk radio button new with mnemonic ( 6.5 ).. GtkWidget* gtk_ radio_ button_ new_ with_ mnemonic ( GSList * group, const gchar * label);,. gtk radio button new from widget GtkWidget* gtk_ radio_ button_ new_ from_ widget ( GtkRadioButton * group); gtk radio button new with label from widget GtkWidget* gtk_ radio_ button_ new_ with_ label_ from_ widget ( GtkRadioButton * group, 6.5

103 90 6 const gchar * label); gtk radio button new with mnemonic from widget GtkWidget* gtk_ radio_ button_ new_ with_ mnemonic_ from_ widget( GtkRadioButton * group, const gchar * label); , NULL.,, gtk radio button new from widget GtkWidget * radio_ button[ 2]; 2 3 radio_ button[ 0] = gtk_ radio_ button_ new ( NULL); 4 radio_ button[ 1] = 5 gtk_radio_button_new_from_widget (GTK_RADIO_BUTTON(radio_button[0])); 6.3. toggled. group-changed,. group-changed. void user_ function ( GtkRadioButton * radiobutton, gpointer user_ data);,., gtk toggle button get active.. gtk radio button get group. GSList* gtk_ radio_ button_ get_ group ( GtkRadioButton * radio_ button);, gtk radio button set group. 6.3 group-changed toggled..

104 void gtk_ radio_ button_ set_ group ( GtkRadioButton * radio_ button, GSList *group); , toggled cb button toggled, : gtkradiobutton-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button_ toggled ( GtkRadioButton * widget, gpointer data) { 4 g_ print (" Catch the toggled signal from the radio button% d.\ n", 5 (gint) data); 6 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON( widget))) { 7 g_ print (" The radio button% d is selected.\ n", ( gint) data); 8 } 9 } int main ( int argc, char ** argv) { 12 GtkWidget * window; 13 GtkWidget * box; 14 GtkWidget * button[ 3]; 15 GSList * group = NULL; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 20 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkRadioButton Sample"); 21 gtk_ widget_ set_ size_ request ( window, 300, -1); 22 g_ signal_ connect ( G_ OBJECT( window), " destroy", 23 G_ CALLBACK ( gtk_ main_ quit), NULL); box = gtk_ vbox_ new ( TRUE, 0); 26 gtk_ container_ add ( GTK_ CONTAINER( window), box); button[ 0] = gtk_ radio_ button_ new_ with_ label ( group, " Red"); 29 gtk_ box_ pack_ start ( GTK_ BOX( box), button[0], TRUE, TRUE, 0);

105 button[ 1] = gtk_ radio_ button_ new_ with_ label_ from_ widget 32 (GTK_RADIO_BUTTON(button[0]), "Green"); 33 gtk_ box_ pack_ start ( GTK_ BOX( box), button[1], TRUE, TRUE, 0); button[ 2] = gtk_ radio_ button_ new_ with_ label_ from_ widget 36 (GTK_RADIO_BUTTON(button[0]), "Blue"); 37 gtk_ box_ pack_ start ( GTK_ BOX( box), button[2], TRUE, TRUE, 0); gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON( button[ 1]), TRUE); g_signal_connect (G_OBJECT(button[0]), "toggled", 42 G_ CALLBACK( cb_ button_ toggled), ( gpointer) 0); 43 g_signal_connect (G_OBJECT(button[1]), "toggled", 44 G_ CALLBACK( cb_ button_ toggled), ( gpointer) 1); 45 g_signal_connect (G_OBJECT(button[2]), "toggled", 46 G_ CALLBACK( cb_ button_ toggled), ( gpointer) 2); gtk_ widget_ show_ all ( window); 49 gtk_main (); return 0; 52 } 6.2 (GtkContainer), GtkWindow.,, GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow gtk window new. GtkWindowType. GTK WINDOW TOPLEVEL. GTK WINDOW POPUP.

106 GtkWidget* gtk_ window_ new ( GtkWindowType type); typedef enum { GTK_ WINDOW_ TOPLEVEL, GTK_ WINDOW_ POPUP } GtkWindowType; GtkContainer gtk container add... gtk window set title. gtk window get title const gchar* gtk_ window_ get_ title ( GtkWindow * window); void gtk_ window_ set_ title ( GtkWindow * window, const gchar * title); gtk window set resizable., gtk window get resizable. gboolean gtk_ window_ get_ resizable ( GtkWindow * window); void gtk_ window_ set_ resizable ( GtkWindow * window, gboolean resizable);,. GdkPixbuf* gtk_ window_ get_ icon ( GtkWindow * window); void gtk_ window_ set_ icon ( GtkWindow * window, GdkPixbuf * icon);, gtk window set decorated 2 FALSE,. void gtk_ window_ set_ decorated ( GtkWindow * window, gboolean setting); gtk window get decorated. gboolean gtk_ window_ get_ decorated ( GtkWindow * window);

107 94 6. gtk widget set size request void gtk_ widget_ set_ size_ request ( GtkWidget * widget, gint width, gint height); gtk window set resizable. 2 FALSE. gtk window resize void gtk_ window_ resize ( GtkWindow * window, gint width, gint height); gtk widget set size request., gtk window resize, gtk widget set size request. gdk screen width gdk screen height. gint gdk_ screen_ width ( void); gint gdk_ screen_ height ( void); gtk window fullscreen. gtk window unfullscreen. void gtk_ window_ fullscreen ( GtkWindow * window); void gtk_ window_ unfullscreen ( GtkWindow * window); gtk window iconify. gtk window deiconify. void gtk_ window_ iconify ( GtkWindow * window); void gtk_ window_ deiconify ( GtkWindow * window); gtk window maximize. gtk window unmaximize.

108 void gtk_ window_ maximize ( GtkWindow * window); void gtk_ window_ unmaximize ( GtkWindow * window); gtk window move void gtk_ window_ move ( GtkWindow * window, gint x, gint y); (GtkFrame),,.,.,,,. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkFrame gtk frame new.. GtkWidget* gtk_ frame_ new ( const gchar * label); GtkContainer gtk container add. 6.7

109 96 6.,. G_ CONST_ RETURN gchar* gtk_ frame_ get_ label ( GtkFrame * frame); void gtk_ frame_ set_ label ( GtkFrame * frame, const gchar * label);. xalign 0, 1. void gtk_ frame_ get_ label_ align ( GtkFrame * frame, gfloat * xalign, gfloat * yalign); void gtk_ frame_ set_ label_ align ( GtkFrame * frame, gfloat xalign, gfloat yalign); GtkShadowType. 6.7 ( ). GtkShadowType gtk_ frame_ get_ shadow_ type ( GtkFrame * frame); void gtk_ frame_ set_ shadow_ type ( GtkFrame * frame, GtkShadowType type); (GtkPaned) 2.,, 2 ( 6.8). 6.8

110 GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkPaned +----GtkHPaned +----GtkVPaned, 2 GtkHPaned 2 GtkVPaned 2.. GtkWidget* gtk_ hpaned_ new ( void); GtkWidget* gtk_ vpaned_ new ( void);, gtk hpaned new gtk vpaned new. ( ). 3,,. 4,,. void gtk_ paned_ pack1 ( GtkPaned * paned, GtkWidget * child, gboolean resize, gboolean shrink); void gtk_ paned_ pack2 ( GtkPaned * paned, GtkWidget * child, gboolean resize, gboolean shrink);., 3 FALSE, 4 TRUE. void gtk_ paned_ add1 ( GtkPaned * paned, GtkWidget * child); void gtk_ paned_ add2 ( GtkPaned * paned, GtkWidget * child); (GtkToolbar). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkToolbar (GtkToolbar) gtk toolbar new.

111 98 6 GtkWidget* gtk_ toolbar_ new ( void); 3. gtk toolbar append item. GtkWidget* gtk_ toolbar_ append_ item ( GtkToolbar * toolbar, const char * text, const char * tooltip_ text, const char * tooltip_ private_ text, GtkWidget * icon, GtkSignalFunc callback, gpointer user_ data);. 1 : 2 : 3 : 4 : 5 : 6 : 7 : gtk toolbar preppend item gtk toolbar insert item. gtk toolbar append element. GtkWidget* gtk_ toolbar_ append_ element( GtkToolbar * toolbar, GtkToolbarChildType type, GtkWidget * widget, const char * text, const char * tooltip_ text, 6.9

112 const char * tooltip_ private_ text, GtkWidget * icon, GtkSignalFunc callback, gpointer user_ data);. 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : 9 : GtkToolbarChildType. typedef enum { GTK_ TOOLBAR_ CHILD_ SPACE, GTK_ TOOLBAR_ CHILD_ BUTTON, GTK_ TOOLBAR_ CHILD_ TOGGLEBUTTON, GTK_ TOOLBAR_ CHILD_ RADIOBUTTON, GTK_ TOOLBAR_ CHILD_ WIDGET } GtkToolbarChildType; gtk toolbar preppend element gtk toolbar insert element. gtk toolbar append widget,. void gtk_ toolbar_ append_ widget ( GtkToolbar * toolbar, GtkWidget * widget, const char * tooltip_ text, const char * tooltip_ private_ text);. g signal connect. 1 : 2 : 3 : 4 : gtk toolbar preppend widget gtk toolbar insert widget.

113 orientation-changed. void user_ function ( GtkToolbar * toolbar, GtkOrientation orientation, gpointer user_ data); GtkOrientation, orientation. typedef enum { GTK_ ORIENTATION_ HORIZONTAL, GTK_ ORIENTATION_ VERTICAL } GtkOrientation; popup-context-menu. x, y, button. 1. gboolean user_ function ( GtkToolbar * toolbar, gint x, gint y, gint button, gpointer user_ data); style-changed. void user_ function ( GtkToolbar * toolbar, GtkToolbarStyle style, gpointer user_ data); GtkToolbarStyle, style. typedef enum { GTK_ TOOLBAR_ ICONS, GTK_ TOOLBAR_ TEXT, GTK_ TOOLBAR_ BOTH, GTK_ TOOLBAR_ BOTH_ HORIZ } GtkToolbarStyle; 6.4 orientation-changed popup-context-menu style-changed.,..

114 ( ),. void gtk_ toolbar_ set_ orientation ( GtkToolbar * toolbar, GtkOrientation orientation); GtkOrientation gtk_ toolbar_ get_ orientation ( GtkToolbar * toolbar);.,. void gtk_ toolbar_ set_ tooltips ( GtkToolbar * toolbar, gboolean enable); gboolean gtk_ toolbar_ get_ tooltips ( GtkToolbar * toolbar);. GtkIconSize. void gtk_ toolbar_ set_ icon_ size ( GtkToolbar * toolbar, GtkIconSize icon_ size); GtkIconSize gtk_ toolbar_ get_ icon_ size ( GtkToolbar * toolbar); GtkIconSize. typedef enum { GTK_ ICON_ SIZE_ INVALID, GTK_ICON_SIZE_MENU, GTK_ ICON_ SIZE_ SMALL_ TOOLBAR, GTK_ ICON_ SIZE_ LARGE_ TOOLBAR, GTK_ ICON_ SIZE_ BUTTON, GTK_ICON_SIZE_DND, GTK_ ICON_ SIZE_ DIALOG } GtkIconSize; : gtktoolbar-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ show_ tooltips ( GtkWidget * widget, gpointer data) { 4 gtk_ toolbar_ set_ tooltips ( GTK_ TOOLBAR( data),

115 gtk_ toggle_ button_ get_ active 6 (GTK_TOGGLE_BUTTON(widget))); 7 } 8 9 static void cb_ set_ horizontal ( GtkWidget * widget, gpointer data) { 10 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON( widget))) { 11 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( data), 12 GTK_ ORIENTATION_ HORIZONTAL); 13 } 14 } static void cb_ set_ vertical ( GtkWidget * widget, gpointer data) { 17 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON( widget))) { 18 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( data), 19 GTK_ ORIENTATION_ VERTICAL); 20 } 21 } int main ( int argc, char ** argv) { 24 GtkWidget * window; 25 GtkWidget * toolbar; 26 GtkWidget * alignment; 27 GtkWidget * checkbutton; 28 GtkWidget * radiobutton; 29 GtkWidget * button; 30 GtkWidget * icon; 31 GSList * radiobutton_ group = NULL; gtk_init (&argc, &argv); 34 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 35 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkToolbar Sample"); 36 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), FALSE); 37 g_ signal_ connect ( G_ OBJECT( window), " destroy", 38 G_ CALLBACK( gtk_ main_ quit), NULL); toolbar = gtk_ toolbar_ new (); 41 gtk_ container_ add ( GTK_ CONTAINER( window), toolbar); 42 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR( toolbar), GTK_ TOOLBAR_ BOTH); 43 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( toolbar), 44 GTK_ ORIENTATION_ HORIZONTAL); checkbutton = gtk_ check_ button_ new_ with_ label (" Show Tooltips"); 47 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON( checkbutton), TRUE); 48 g_ signal_ connect ( G_ OBJECT( checkbutton), " toggled", 49 G_ CALLBACK( cb_ show_ tooltips), toolbar); gtk_ toolbar_ append_ widget ( GTK_ TOOLBAR( toolbar), 52 checkbutton, 53 " Toggle where show tooltips", NULL); 54 gtk_ toolbar_ append_ space ( GTK_ TOOLBAR( toolbar));

116 icon = gtk_image_new_from_stock ("gtk -go -forward", 57 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 58 (toolbar))); radiobutton = gtk_ toolbar_ append_ element( GTK_ TOOLBAR( toolbar), 61 GTK_ TOOLBAR_ CHILD_ RADIOBUTTON, 62 NULL, 63 "Horizontal", 64 " Set the toolbar to horizontal", 65 NULL, icon, 66 G_ CALLBACK( cb_ set_ horizontal), 67 toolbar); 68 gtk_ radio_ button_ set_ group ( GTK_ RADIO_ BUTTON( radiobutton), 69 radiobutton_ group); 70 radiobutton_ group = 71 gtk_ radio_ button_ group ( GTK_ RADIO_ BUTTON( radiobutton)); 72 gtk_ toggle_ button_ set_ mode ( GTK_ TOGGLE_ BUTTON( radiobutton), FALSE); icon = gtk_image_new_from_stock ("gtk -go -down", 75 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 76 (toolbar))); 77 radiobutton = gtk_ toolbar_ append_ element( GTK_ TOOLBAR( toolbar), 78 GTK_ TOOLBAR_ CHILD_ RADIOBUTTON, 79 NULL, 80 "Vertical", 81 " Set the toolbar to vertical", 82 NULL, icon, 83 G_ CALLBACK( cb_ set_ vertical), 84 toolbar); 85 gtk_ radio_ button_ set_ group ( GTK_ RADIO_ BUTTON ( radiobutton), 86 radiobutton_ group); 87 gtk_ toggle_ button_ set_ mode ( GTK_ TOGGLE_ BUTTON( radiobutton), FALSE); gtk_ toolbar_ append_ space ( GTK_ TOOLBAR ( toolbar)); button = gtk_ toolbar_ append_ item( GTK_ TOOLBAR( toolbar), 92 "Exit", 93 " Exit this program.", 94 NULL, 95 gtk_ image_ new_ from_ stock 96 ("gtk -quit", 97 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 98 (toolbar))), 99 G_ CALLBACK( gtk_ main_ quit), NULL); 100 gtk_ widget_ show_ all ( window); 101 gtk_main (); return 0; 104 }

117 (GtkHandleBox),,. 6.10, GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkHandleBox gtk handle box new. GtkWidget* gtk_ handle_ box_ new ( void); GtkContainer gtk container add child-attached child-detached..

118 void user_ function ( GtkHandleBox * handlebox, GtkWidget * widget, gpointer user_ data); GtkShadowType. void gtk_ handle_ box_ set_ shadow_ type ( GtkHandleBox * handle_ box, GtkShadowType type); GtkShadowType gtk_ handle_ box_ get_ shadow_ type ( GtkHandleBox * handle_ box);,. void gtk_ handle_ box_ set_ handle_ position ( GtkHandleBox * handle_ box, GtkPositionType position); GtkPositionType gtk_ handle_ box_ get_ handle_ position ( GtkHandleBox * handle_ box); # include <gtk/ gtk. h> 2 3 static void cb_ show_ tooltips ( GtkWidget * widget, gpointer data) { 4 gtk_ toolbar_ set_ tooltips ( GTK_ TOOLBAR( data), 5 gtk_ toggle_ button_ get_ active 6 (GTK_TOGGLE_BUTTON(widget))); 7 } 8 9 static void cb_ set_ horizontal ( GtkWidget * widget, gpointer data) { 10 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON( widget))) { 11 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( data), 12 GTK_ ORIENTATION_ HORIZONTAL); 13 } 14 } static void cb_ set_ vertical ( GtkWidget * widget, gpointer data) { 17 if ( gtk_ toggle_ button_ get_ active ( GTK_ TOGGLE_ BUTTON( widget))) { 18 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( data),

119 GTK_ ORIENTATION_ VERTICAL); 20 } 21 } int main ( int argc, char ** argv) { 24 GtkWidget * window; 25 GtkWidget * handlebox; 26 GtkWidget * toolbar; 27 GtkWidget * checkbutton; 28 GtkWidget * radiobutton; 29 GtkWidget * button; 30 GtkWidget * icon; 31 GSList * radiobutton_ group = NULL; gtk_init (&argc, &argv); 34 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 35 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkHandleBox Sample"); 36 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), TRUE); 37 g_ signal_ connect ( G_ OBJECT( window), " destroy", 38 G_ CALLBACK ( gtk_ main_ quit), NULL); handlebox = gtk_ handle_ box_ new (); 41 gtk_ handle_ box_ set_ handle_ position ( GTK_ HANDLE_ BOX( handlebox), 42 GTK_ POS_ LEFT); 43 gtk_ container_ add ( GTK_ CONTAINER( window), handlebox); toolbar = gtk_ toolbar_ new (); 46 gtk_ toolbar_ set_ style ( GTK_ TOOLBAR( toolbar), GTK_ TOOLBAR_ BOTH); 47 gtk_ toolbar_ set_ orientation ( GTK_ TOOLBAR( toolbar), 48 GTK_ ORIENTATION_ HORIZONTAL); 49 gtk_ container_ add ( GTK_ CONTAINER( handlebox), toolbar); checkbutton = gtk_ check_ button_ new_ with_ label (" Show Tooltips"); 52 gtk_ toggle_ button_ set_ active ( GTK_ TOGGLE_ BUTTON( checkbutton), TRUE); 53 g_ signal_ connect ( G_ OBJECT( checkbutton), " toggled", 54 G_ CALLBACK( cb_ show_ tooltips), toolbar); gtk_ toolbar_ append_ widget ( GTK_ TOOLBAR( toolbar), 57 checkbutton, 58 " Toggle where show tooltips", NULL); gtk_ toolbar_ append_ space ( GTK_ TOOLBAR( toolbar)); icon = gtk_image_new_from_stock ("gtk -go -forward", 63 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 64 (toolbar))); radiobutton = gtk_ toolbar_ append_ element( GTK_ TOOLBAR( toolbar), 67 GTK_ TOOLBAR_ CHILD_ RADIOBUTTON, 68 NULL,

120 "Horizontal", 70 " Set the toolbar to horizontal", 71 NULL, icon, 72 G_ CALLBACK( cb_ set_ horizontal), 73 toolbar); 74 gtk_ radio_ button_ set_ group ( GTK_ RADIO_ BUTTON( radiobutton), 75 radiobutton_ group); 76 radiobutton_ group = 77 gtk_ radio_ button_ group ( GTK_ RADIO_ BUTTON( radiobutton)); 78 gtk_ toggle_ button_ set_ mode ( GTK_ TOGGLE_ BUTTON( radiobutton), TRUE); icon = gtk_image_new_from_stock ("gtk -go -down", 81 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 82 (toolbar))); 83 radiobutton = gtk_ toolbar_ append_ element ( GTK_ TOOLBAR( toolbar), 84 GTK_ TOOLBAR_ CHILD_ RADIOBUTTON, 85 NULL, 86 "Vertical", 87 " Set the toolbar to vertical", 88 NULL, icon, 89 G_ CALLBACK( cb_ set_ vertical), 90 toolbar); 91 gtk_ radio_ button_ set_ group ( GTK_ RADIO_ BUTTON( radiobutton), 92 radiobutton_ group); 93 gtk_ toggle_ button_ set_ mode ( GTK_ TOGGLE_ BUTTON( radiobutton), TRUE); gtk_ toolbar_ append_ space ( GTK_ TOOLBAR( toolbar)); button = gtk_ toolbar_ append_ item( GTK_ TOOLBAR( toolbar), 98 "Exit", 99 " Exit this program.", 100 NULL, 101 gtk_ image_ new_ from_ stock 102 ("gtk -quit", 103 gtk_ toolbar_ get_ icon_ size ( GTK_ TOOLBAR 104 (toolbar))), 105 G_ CALLBACK( gtk_ main_ quit), NULL); gtk_ widget_ show_ all ( window); 108 gtk_main (); return 0; 111 }

121 (GtkNotebook) ( 6.11 ). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkNotebook gtk notebook new. GtkWidget* gtk_ notebook_ new ( void);. gtk notebook append page. gint gtk_ notebook_ append_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label); child. tab label ( )., ( 0 ). gtk notebook append page menu. gtk notebook append page. gint gtk_ notebook_ append_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, 6.11

122 GtkWidget * tab_ label, GtkWidget * menu_ label); gtk notebook prepend page gtk notebook prepend page menu, gtk notebook insert page gtk notebook insert page menu. gint gtk_ notebook_ prepend_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label); gint gtk_ notebook_ prepend_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label, GtkWidget * menu_ label); gint gtk_ notebook_ insert_ page ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label, gint position); gint gtk_ notebook_ insert_ page_ menu ( GtkNotebook * notebook, GtkWidget * child, GtkWidget * tab_ label, GtkWidget * menu_ label, gint position); 6.6. switch-page. void user_ function ( GtkNotebook * notebook, GtkNotebookPage * page, guint page_ num, gpointer user_ data);. / void gtk_ notebook_ popup_ enable ( GtkNotebook * notebook); void gtk_ notebook_ popup_ disable ( GtkNotebook * notebook); 6.6 switch-page.

123 110 6,. void gtk_ notebook_ set_ current_ page ( GtkNotebook * notebook, gint page_ num); gint gtk_ notebook_ get_ current_ page ( GtkNotebook * notebook);. gint gtk_ notebook_ get_ n_ pages ( GtkNotebook * notebook); /,. void gtk_ notebook_ set_ scrollable ( GtkNotebook * notebook, gboolean scrollable); gboolean gtk_ notebook_ get_ scrollable ( GtkNotebook * notebook);,. void gtk_ notebook_ set_ tab_ pos ( GtkNotebook * notebook, GtkPositionType pos); GtkPositionType gtk_ notebook_ get_ tab_ pos ( GtkNotebook * notebook); : gtknotebook-sample.c 1 # include <gtk/ gtk. h> 2 3 GdkPixbuf * book_ open; 4 GdkPixbuf * book_ close; 5 6 static void set_ page_ image ( GtkNotebook * notebook, 7 gint page_ num, 8 GdkPixbuf * pixbuf) { 9 GtkWidget * page_ widget; 10 GtkWidget * icon; page_ widget = gtk_ notebook_ get_ nth_ page ( notebook, page_ num); 13 icon = ( GtkWidget *) 14 g_object_get_data (G_OBJECT(page_widget), "tab_icon"); 15 gtk_ image_ set_ from_ pixbuf ( GTK_ IMAGE( icon), pixbuf); 16 icon = ( GtkWidget *) 17 g_object_get_data (G_OBJECT(page_widget), "menu_icon"); 18 gtk_ image_ set_ from_ pixbuf ( GTK_ IMAGE( icon), pixbuf); 19 } 20

124 static void page_ switch ( GtkWidget * widget, 22 GtkNotebookPage * page, 23 gint page_ num) { 24 GtkNotebook * notebook = GTK_ NOTEBOOK( widget); 25 gint old_ page_ num; old_ page_ num = gtk_ notebook_ get_ current_ page ( notebook); 28 if ( page_ num == old_ page_ num) return; 29 set_ page_ image ( notebook, page_ num, book_ open); 30 if ( old_ page_ num! = -1) { 31 set_ page_ image ( notebook, old_ page_ num, book_ close); 32 } 33 } static void cb_ tab_ position_ left ( GtkWidget * widget, gpointer data) { 36 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK( data), GTK_ POS_ LEFT); 37 } static void cb_ tab_ position_ right ( GtkWidget * widget, gpointer data) { 40 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK( data), GTK_ POS_ RIGHT); 41 } static void cb_ tab_ position_ top ( GtkWidget * widget, gpointer data) { 44 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK( data), GTK_ POS_ TOP); 45 } static void cb_ tab_ position_ bottom ( GtkWidget * widget, gpointer data) { 48 gtk_ notebook_ set_ tab_ pos ( GTK_ NOTEBOOK( data), GTK_ POS_ BOTTOM); 49 } static GtkWidget* icon_ button_ new ( const gchar * stock_ id) { 52 GtkWidget * button; 53 GtkWidget * icon; icon = gtk_ image_ new_ from_ stock ( stock_ id, GTK_ ICON_ SIZE_ BUTTON); 56 button = gtk_ button_ new (); 57 gtk_ container_ add ( GTK_ CONTAINER( button), icon); return button; 60 } int main ( int argc, char ** argv) { 63 GtkWidget * window; 64 GtkWidget * vbox; 65 GtkWidget * hbox; 66 GtkWidget * notebook; 67 GtkWidget * box; 68 GtkWidget * label; 69 GtkWidget * label_ box; 70 GtkWidget * menu_ box;

125 GtkWidget * icon; 72 GtkWidget * button; 73 gchar buf[ 1024]; 74 int n; gtk_init (&argc, &argv); book_ open = gdk_ pixbuf_ new_ from_ file (" stock_ book_ open. png", NULL); 79 book_ close = gdk_ pixbuf_ new_ from_ file (" stock_ book_ close. png", NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 82 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkNotebook Sample"); 83 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), TRUE); 84 gtk_ widget_ set_ size_ request ( window, 300, 200); 85 gtk_ container_ set_ border_ width ( GTK_ CONTAINER ( window), 5); 86 g_ signal_ connect ( G_ OBJECT( window), " destroy", 87 G_ CALLBACK( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 90 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); notebook = gtk_ notebook_ new (); 93 gtk_ notebook_ set_ scrollable ( GTK_ NOTEBOOK( notebook), TRUE); 94 gtk_ notebook_ popup_ enable ( GTK_ NOTEBOOK( notebook)); 95 g_ signal_ connect ( G_ OBJECT( notebook), " switch_ page", 96 G_ CALLBACK( page_ switch), NULL); 97 gtk_ box_ pack_ start ( GTK_ BOX( vbox), notebook, TRUE, TRUE, 0); for ( n = 1; n <= 5; n++) { 100 box = gtk_ vbox_ new ( FALSE, 0); sprintf ( buf, " Contents % d", n); 103 label = gtk_ label_ new ( buf); 104 gtk_box_pack_start (GTK_BOX(box), label, TRUE, TRUE, 0); label_ box = gtk_ hbox_ new ( FALSE, 0); 107 icon = gtk_ image_ new_ from_ pixbuf ( book_ close); 108 g_object_set_data (G_OBJECT(box), "tab_icon", icon); 109 gtk_box_pack_start (GTK_BOX(label_box), icon, FALSE, TRUE, 0); 110 gtk_misc_set_padding (GTK_MISC(icon), 5, 1); sprintf (buf, "Page %d", n); 113 label = gtk_ label_ new ( buf); 114 gtk_ box_ pack_ start ( GTK_ BOX( label_ box), label, FALSE, TRUE, 0); gtk_ widget_ show_ all ( label_ box); menu_ box = gtk_ hbox_ new ( FALSE, 0); 119 icon = gtk_ image_ new_ from_ pixbuf ( book_ close); 120 g_object_set_data (G_OBJECT(box), "menu_icon", icon);

126 gtk_box_pack_start (GTK_BOX(menu_box), icon, FALSE, TRUE, 0); 122 gtk_misc_set_padding (GTK_MISC(icon), 5, 1); label = gtk_ label_ new ( buf); 125 gtk_box_pack_start (GTK_BOX(menu_box), label, FALSE, TRUE, 0); gtk_ widget_ show_ all ( menu_ box); gtk_ notebook_ append_ page_ menu ( GTK_ NOTEBOOK( notebook), 130 box, label_ box, menu_ box); 131 } 132 hbox = gtk_ hbox_ new ( TRUE, 0); 133 gtk_ box_ pack_ start ( GTK_ BOX ( vbox), hbox, FALSE, FALSE, 0); 134 { 135 button = icon_ button_ new ( GTK_ STOCK_ GO_ BACK); 136 g_ signal_ connect ( G_ OBJECT( button), " clicked", 137 G_ CALLBACK( cb_ tab_ position_ left), notebook); 138 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ FORWARD); 141 g_ signal_ connect ( G_ OBJECT( button), " clicked", 142 G_ CALLBACK( cb_ tab_ position_ right), notebook); 143 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ UP); 146 g_ signal_ connect ( G_ OBJECT( button), " clicked", 147 G_ CALLBACK( cb_ tab_ position_ top), notebook); 148 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, TRUE, 0); button = icon_ button_ new ( GTK_ STOCK_ GO_ DOWN); 151 g_ signal_ connect ( G_ OBJECT( button), " clicked", 152 G_ CALLBACK( cb_ tab_ position_ bottom), notebook); 153 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, TRUE, TRUE, 0); 154 } 155 button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 156 g_ signal_ connect ( G_ OBJECT( button), " clicked", 157 G_ CALLBACK( gtk_ main_ quit), NULL); 158 gtk_ box_ pack_ start ( GTK_ BOX( vbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 161 gtk_main (); return 0; 164 }

127 (GtkExpander),. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkExpander. gtk expander new. GtkWidget* gtk_ expander_ new ( const gchar * label); gtk expander new with mnemonic. GtkWidget* gtk_ expander_ new_ with_ mnemonic ( const gchar * label); gtk container add activate. void user_ function ( GtkExpander * toolbar, gpointer user_ data);. 6.12

128 activate,. ( ),. void gtk_ expander_ set_ expanded ( GtkExpander * expander, gboolean expanded); gboolean gtk_ expander_ get_ expanded ( GtkExpander * expander);. void gtk_ expander_ set_ label ( GtkExpander * expander, const gchar * label); G_ CONST_ RETURN gchar* gtk_ expander_ get_ label ( GtkExpander * expander); , : gtkexpander-sample.c 1 # include <gtk/ gtk. h> 2 3 int main ( int argc, 4 char **argv) { 5 GtkWidget *window, *vbox, *hbox, *label, *button, *expander; 6 7 gtk_init (&argc, &argv); 8 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 9 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkExpander Sample"); 10 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), FALSE); 11 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 12 g_ signal_ connect ( G_ OBJECT( window), " destroy", 13 G_ CALLBACK( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 16 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); label = 19 gtk_ label_ new (" Expander demo. Click on the triangle for details."); 20 gtk_ box_ pack_ start ( GTK_ BOX( vbox), label, FALSE, FALSE, 0); expander = gtk_ expander_ new (" Details");

129 gtk_ box_ pack_ start ( GTK_ BOX( vbox), expander, FALSE, FALSE, 0); 24 gtk_ expander_ set_ expanded ( GTK_ EXPANDER( expander), TRUE); label = gtk_ label_ new (" Details can be shown or hidden."); 27 gtk_ container_ add ( GTK_ CONTAINER( expander), label); hbox = gtk_ hbox_ new ( FALSE, 5); 30 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 33 g_ signal_ connect ( G_ OBJECT( button), " clicked", 34 G_ CALLBACK( gtk_ main_ quit), NULL); gtk_box_pack_end (GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 39 gtk_main (); return 0; 42 } 6.3, (GtkEntry), ( ). GObject +----GtkObject +----GtkWidget +----GtkEntry 6.13 gtk entry new. GtkWidget* gtk_ entry_ new ( void);

130 activate copy-clipboard paste-clipboard,,. activate. void user_ function ( GtkEntry * entry, gpointer user_ data);... void gtk_ entry_ set_ editable ( GtkEntry * entry, gboolean editable);. gboolean gtk_ entry_ get_ has_ frame ( GtkEntry * entry); void gtk_ entry_ set_ has_ frame ( GtkEntry * entry, gboolean setting);, ( * ). void gtk_ entry_ set_ invisible_ char ( GtkEntry * entry, gunichar ch); gunichar gtk_ entry_ get_ invisible_ char ( GtkEntry * entry);. void gtk_ entry_ set_ visibility ( GtkEntry * entry, gboolean visible); gboolean gtk_ entry_ get_ visibility ( GtkEntry * entry);. void gtk_ entry_ set_ text ( GtkEntry * entry, const gchar * text); G_ CONST_ RETURN gchar* gtk_ entry_ get_ text ( GtkEntry * entry); ,, 6.8 activate.

131 : gtkentry-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ entry ( GtkEntry * entry, gpointer data) { 4 g_print ("%s\n", gtk_entry_get_text (entry)); 5 } 6 7 static void cb_ button ( GtkButton * button, gpointer data) { 8 g_print ("%s\n", gtk_entry_get_text (GTK_ENTRY(data))); 9 } int main ( int argc, char ** argv) { 12 GtkWidget *window, *hbox, *label, *entry, *button; gtk_init (&argc, &argv); 15 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 16 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkEntry Sample"); 17 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), FALSE); 18 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 19 g_ signal_ connect ( G_ OBJECT( window), " destroy", 20 G_ CALLBACK( gtk_ main_ quit), NULL); 21 hbox = gtk_ hbox_ new ( FALSE, 5); 22 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("Input :"); 25 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); entry = gtk_ entry_ new (); 28 g_ signal_ connect ( G_ OBJECT( entry), " activate", 29 G_ CALLBACK( cb_ entry), NULL); 30 gtk_box_pack_start (GTK_BOX(hbox), entry, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 33 g_ signal_ connect ( G_ OBJECT( button), " clicked", 34 G_ CALLBACK( cb_ button), ( gpointer) entry); 35 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 38 gtk_main (); return 0; 41 }

132 (GtkComboBoxEntry).,. ( ) GtkTreeView., GtkTreeView. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkComboBox +----GtkComboBoxEntry. gtk combo box entry new text. GtkWidget* gtk_ combo_ box_ entry_ new_ text ( void); gtk combo box entry new., gtk combo box set model gtk combo box entry set text column. gtk combo box entry new text. GtkWidget* gtk_ combo_ box_ entry_ new ( void); gtk combo box entry new with model. GtkTreeModel. GtkWidget* gtk_ combo_ box_ entry_ new_ with_ model ( GtkTreeModel * model, gint text_ column);

133 changed. void user_ function ( GtkComboBox * combobox, gpointer user_ data); gtk combo box get active. gint gtk_ combo_ box_ get_ active ( GtkComboBox * combo_ box);, ( ), gtk combo box set active. 0. void gtk_ combo_ box_ set_ active ( GtkComboBox * combo_ box, gint index_); GtkComboBox * combobox; 2 GtkTreeModel * model; 3 GtkTreeIter iter; 4 gchar * label; 5 model = gtk_ combo_ box_ get_ model ( combobox); 6 if ( gtk_ combo_ box_ get_ active_ iter ( combobox, & iter)) { 7 gtk_tree_model_get (model, &iter, 0, &label, -1); 8 } gtk combo box get active iter GtkTreeIter. FALSE. gboolean gtk_ combo_ box_ get_ active_ iter ( GtkComboBox * combo_ box, GtkTreeIter * iter); gtk tree model get. 3,, changed.

134 void gtk_ tree_ model_ get ( GtkTreeModel * tree_ model, GtkTreeIter * iter,...); ,., ( ),.,,, : gtkcomboboxentry-sample.c 1 # include <gtk/ gtk. h> 2 3 # define COMBO_ LIST_ LIMIT static GList * combolist = NULL; 6 7 static GList* append_ item ( GtkComboBox * combobox, 8 GList * combolist, 9 const gchar * item_ label) { 10 gtk_ combo_ box_ append_ text ( combobox, g_ strdup ( item_ label)); 11 combolist = g_ list_ append ( combolist, g_ strdup ( item_ label)); return combolist; 14 } static GList* remove_ item ( GtkComboBox * combobox, 17 GList * combolist, 18 gint index) { 19 gtk_ combo_ box_ remove_ text ( combobox, index); 20 g_free (g_list_nth_data (combolist, index)); 21 combolist = g_ list_ remove_ link( combolist, g_ list_ nth ( combolist, index)); return combolist; 24 } static void cb_ combo_ changed ( GtkComboBox * combobox, 27 gpointer data) { 28 GtkTreeModel * model; 29 GtkTreeIter iter; 30 gchar * text; model = gtk_ combo_ box_ get_ model ( combobox); 33 if ( gtk_ combo_ box_ get_ active_ iter ( combobox, & iter)) { 34 gtk_tree_model_get (model, &iter, 0, &text, -1);

135 g_print ("Item number is %d (%s)\n", 36 gtk_ combo_ box_ get_ active ( combobox), text); 37 } 38 } static void cb_ combo_ entry_ activate ( GtkEntry * entry, 41 gpointer data) { 42 GtkComboBox * combobox; 43 GList * list; 44 gboolean exist_ flag = FALSE; 45 const gchar * new_ text; new_ text = gtk_ entry_ get_ text ( entry); 48 if (! new_ text strcmp ( new_ text, "") == 0) return; for ( list = combolist; list; list = g_ list_ next ( list)) { 51 if ( strcmp ( new_ text, ( gchar *) list - >data) == 0) { 52 exist_ flag = TRUE; 53 break; 54 } 55 } 56 if (! exist_ flag) { 57 combobox = GTK_ COMBO_ BOX( user_ data); 58 combolist = append_ item ( combobox, combolist, new_ text); 59 if ( g_ list_ length ( combolist) > COMBO_ LIST_ LIMIT) { 60 combolist = remove_ item ( combobox, combolist, 0); 61 } 62 g_ print (" Append a new item label %s.\n", new_ text); 63 } 64 } int main ( int argc, char ** argv) { 67 GtkWidget *window, *hbox, *label, *combo, *button; gtk_init (&argc, &argv); 70 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 71 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkComboBoxEntry Sample"); 72 gtk_ window_ set_ resizable ( GTK_ WINDOW( window), FALSE); 73 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 74 g_ signal_ connect ( G_ OBJECT( window), " destroy", 75 G_ CALLBACK( gtk_ main_ quit), NULL); 76 hbox = gtk_ hbox_ new ( FALSE, 5); 77 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("Input :"); 80 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); combo = gtk_ combo_ box_ entry_ new_ text (); 83 combolist = append_ item ( GTK_ COMBO_ BOX( combo), combolist, " 1st Item"); 84 combolist = append_ item ( GTK_ COMBO_ BOX( combo), combolist, " 2nd Item");

136 gtk_ combo_ box_ set_ active ( GTK_ COMBO_ BOX( combo), 0); g_ signal_ connect ( G_ OBJECT( combo), " changed", 88 G_ CALLBACK( cb_ combo_ changed), NULL); 89 g_ signal_ connect ( G_ OBJECT( GTK_ BIN( combo) - >child), " activate", 90 G_ CALLBACK( cb_ combo_ entry_ activate), combo); gtk_box_pack_start (GTK_BOX(hbox), combo, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 95 g_ signal_ connect ( G_ OBJECT( button), " clicked", 96 G_ CALLBACK( gtk_ main_ quit), NULL); 97 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 100 gtk_main (); return 0; 103 } (GtkSpinButton),,. GObject +----GtkObject +----GtkWidget +----GtkEntry +----GtkSpinButton. gtk spin button new GtkAdjustment,. climb rate. digits. GtkWidget* gtk_ spin_ button_ new ( GtkAdjustment * adjustment, gdouble climb_ rate, guint digits); 6.15

137 gtk spin button new. GtkAdjustment,, gtk spin button new with range GtkWidget * spinbutton; 2 GtkObject * adjustment; 3 gdouble value = 1.0, min = 0.0, max = ; 4 gdouble step = 0.1, page = 1.0, page_ size = 10.0, digits = 1; 5 6 adjustment = gtk_ adjustment_ new ( value, min, max, 7 step, page, page_ size); 8 spinbutton = gtk_ spin_ button_ new ( GTK_ ADJUSTMENT( adjustment), 9 step, digits); gtk spin button new with range. GtkWidget* gtk_ spin_ button_ new_ with_ range ( gdouble min, gdouble max, gdouble step); value-changed,,. value-changed. gboolean user_ function ( GtkSpinButton * spinbutton, gpointer user_ data);.,. void gtk_ spin_ button_ set_ increments ( GtkSpinButton * spin_ button, gdouble step, gdouble page); void gtk_ spin_ button_ get_ increments ( GtkSpinButton * spin_ button, 6.10 value-changed.

138 gdouble * step, gdouble *page); ,, : gtkspinbutton-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ value_ changed ( GtkSpinButton * spinbutton, gpointer data) { 4 g_print ("value = %f\n", gtk_spin_button_get_value (spinbutton)); 5 } 6 7 static void cb_ button ( GtkButton * button, gpointer data) { 8 g_print ("value = %f\n", 9 gtk_spin_button_get_value (GTK_SPIN_BUTTON(data))); 10 } int main ( int argc, char ** argv) { 13 GtkWidget * window; 14 GtkWidget * hbox; 15 GtkWidget * label; 16 GtkWidget * spinbutton; 17 GtkWidget * button; 18 GtkObject * adjustment; 19 gdouble min = 0.0, max = 100.0, step = 0. 1; gtk_init (&argc, &argv); 22 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 23 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkSpinButton Sample"); 24 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 25 gtk_ widget_ set_ size_ request ( window, 300, -1); 26 g_ signal_ connect ( G_ OBJECT( window), " destroy", 27 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 30 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("Input :"); 33 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); spinbutton = gtk_ spin_ button_ new_ with_ range ( min, max, step); 36 gtk_ spin_ button_ set_ digits ( GTK_ SPIN_ BUTTON( spinbutton), 2); 37 gtk_ spin_ button_ set_ wrap ( GTK_ SPIN_ BUTTON( spinbutton), TRUE); 38

139 g_ signal_ connect ( G_ OBJECT( spinbutton), " value_ changed", 40 G_ CALLBACK( cb_ value_ changed), NULL); 41 gtk_ box_ pack_ start ( GTK_ BOX( hbox), spinbutton, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 44 g_ signal_ connect ( G_ OBJECT( button), " clicked", 45 G_ CALLBACK( cb_ button), ( gpointer) spinbutton); 46 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 49 gtk_main (); return 0; 52 } (GtkTextView). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkTextView gtk text view new gtk text view new with buffer. GtkWidget* gtk_ text_ view_ new ( void); GtkWidget* gtk_ text_ view_ new_ with_ buffer ( GtkTextBuffer * buffer);, gtk text view new..,

140 GtkTextBuffer. GtkTextView GtkTextBuffer, gtk text view get buffer. GtkTextBuffer* gtk_ text_ view_ get_ buffer ( GtkTextView * text_ view); gtk text buffer set text UTF8. UTF8 g locale to utf8. len. 1. void gtk_ text_ buffer_ set_ text ( GtkTextBuffer * buffer, const gchar * text, gint len); gtk text buffer get text start end. UTF8. g free. gchar* gtk_ text_ buffer_ get_ text ( GtkTextBuffer * buffer, const GtkTextIter * start, const GtkTextIter * end, gboolean include_ hidden_ chars); GtkTextIter. gtk text buffer get iter at line GtkTextIter. 0. void gtk_ text_ buffer_ get_ iter_ at_ line ( GtkTextBuffer * buffer, GtkTextIter * iter, gint line_ number); gtk text buffer get start iter GtkTextIter. void gtk_ text_ buffer_ get_ start_ iter ( GtkTextBuffer * buffer, GtkTextIter * iter); gtk text buffer get end iter GtkTextIter. void gtk_ text_ buffer_ get_ end_ iter ( GtkTextBuffer * buffer, GtkTextIter * iter); ,

141 : gtktextview-sample.c 1 # include <gtk/ gtk. h> 2 3 static void set_ text ( GtkTextView * textview, const gchar * text) { 4 GtkTextBuffer * buffer; 5 gchar * utf8_ text; 6 7 utf8_ text = g_ locale_ to_ utf8 ( text, -1, NULL, NULL, NULL); 8 buffer = gtk_ text_ view_ get_ buffer ( textview); 9 gtk_ text_ buffer_ set_ text ( buffer, ( utf8_ text)? utf8_ text : text, -1); 10 if ( utf8_ text) g_ free ( utf8_ text); 11 } static void print_ text ( GtkWidget * widget, gpointer data) { 14 GtkTextBuffer * buffer; 15 GtkTextIter start, end; 16 gchar * utf8_ text; buffer = gtk_ text_ view_ get_ buffer ( GTK_ TEXT_ VIEW( data)); 19 gtk_ text_ buffer_ get_ start_ iter ( buffer, & start); 20 gtk_text_buffer_get_end_iter (buffer, &end); 21 utf8_ text = gtk_ text_ buffer_ get_ text ( buffer, & start, & end, TRUE); 22 g_print ("%s\n", utf8_text); 23 g_free (utf8_text); 24 } int main ( int argc, char ** argv) { 27 GtkWidget * window; 28 GtkWidget * vbox, * hbox; 29 GtkWidget * scrolledwindow; 30 GtkWidget * textview; 31 GtkWidget * button; gtk_init (&argc, &argv); 34 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 35 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkTextView Sample"); 36 gtk_ widget_ set_ size_ request ( window, 300, 100); 37 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 38 g_ signal_ connect ( G_ OBJECT( window), " destroy", 39 G_ CALLBACK( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 42 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); scrolledwindow = gtk_ scrolled_ window_ new ( NULL, NULL); 45 gtk_ scrolled_ window_ set_ shadow_ type ( GTK_ SCROLLED_ WINDOW( scrolledwindow), 46 GTK_ SHADOW_ ETCHED_ OUT);

142 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW( scrolledwindow), 48 GTK_ POLICY_ AUTOMATIC, 49 GTK_ POLICY_ AUTOMATIC); 50 gtk_ box_ pack_ start ( GTK_ BOX( vbox), scrolledwindow, TRUE, TRUE, 0); textview = gtk_ text_ view_ new (); 53 gtk_ container_ add ( GTK_ CONTAINER( scrolledwindow), textview); 54 set_ text ( GTK_ TEXT_ VIEW( textview), 55 " This is a sample program of GtkTextView.\ n" 56 " GtkTextView is a...\ n" 57 " G t k T e x t V i e w \n" 58 " "); hbox = gtk_ hbox_ new ( FALSE, 5); 61 gtk_box_pack_start (GTK_BOX(vbox), hbox, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 64 g_ signal_ connect ( G_ OBJECT( button), " clicked", 65 G_ CALLBACK( gtk_ main_ quit), NULL); 66 gtk_box_pack_end (GTK_BOX(hbox), button, FALSE, FALSE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 69 g_ signal_ connect ( G_ OBJECT( button), " clicked", 70 G_ CALLBACK( print_ text), ( gpointer) textview); 71 gtk_box_pack_end (GTK_BOX(hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 74 gtk_main (); return 0; 77 } ,, ( 6.17). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkMenuShell +----GtkMenuBar gtk menu bar new.

143 130 6 GtkWidget* gtk_ menu_ bar_ new ( void);., gtk menu new, gtk menu item new. GtkWidget* gtk_ menu_ new ( void); 5..,. gtk menu item new.. GtkWidget* gtk_ menu_ item_ new ( void); gtk menu item new with label. GtkWidget* gtk_ menu_ item_ new_ with_ label ( const gchar * label); gtk menu item new with mnemonic. GtkWidget* gtk_ menu_ item_ new_ with_ mnemonic ( const gchar * label); gtk image menu item new ( )

144 GtkWidget* gtk_ image_ menu_ item_ new ( void);, gtk image new, gtk image menu item set image. void gtk_ image_ menu_ item_ set_ image ( GtkImageMenuItem * image_ menu_ item, GtkWidget * image);. GtkWidget * item; GtkWidget * image; image = gtk_image_new_from_stock (GTK_STOCK_OK, GTK_ICON_SIZE_MENU); item = gtk_ image_ menu_ item_ new (); gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM( item), image); gtk image menu item new with label.. GtkWidget* gtk_ image_ menu_ item_ new_ with_ label ( const gchar * label); gtk image menu item new with mnemonic.. GtkWidget* gtk_ image_ menu_ item_ new_ with_ mnemonic ( const gchar * label); gtk image menu item new from stock GtkStockItem., GtkAccelGroup. GtkWidget* gtk_ image_ menu_ item_ new_ from_ stock ( const gchar * stock_ id, GtkAccelGroup * accel_ group); gtk check menu item new. GtkWidget* gtk_ check_ menu_ item_ new ( void); gtk check menu item new with label. GtkWidget* gtk_ check_ menu_ item_ new_ with_ label ( const gchar * label); gtk check menu item new with mnemonic.

145 132 6 GtkWidget* gtk_ check_ menu_ item_ new_ with_ mnemonic ( const gchar * label);, gtk check menu item set active. void gtk_ check_ menu_ item_ set_ active ( GtkCheckMenuItem * check_ menu_ item, gboolean is_ active); gtk radio menu item new., NULL. GtkWidget* gtk_ radio_ menu_ item_ new ( GSList * group); gtk radio menu item new from widget.,. GtkWidget* gtk_ radio_ menu_ item_ new_ from_ widget ( GtkRadioMenuItem * group); gtk radio menu item new with label., NULL. GtkWidget* gtk_ radio_ menu_ item_ new_ with_ label ( GSList * group, const gchar * label); gtk radio menu item new with label from widget.,. GtkWidget* gtk_ radio_ menu_ item_ new_ with_ label_ from_ widget ( GtkRadioMenuItem * group, const gchar * label); gtk radio menu item new with mnemonic. GtkWidget* gtk_ radio_ menu_ item_ new_ with_ mnemonic ( GSList * group, const gchar * label); gtk radio menu item new with mnemonic from widget.,.

146 GtkWidget* gtk_ radio_ menu_ item_ new_ with_ mnemonic_ from_ widget ( GtkRadioMenuItem * group, const gchar * label); ( ). gtk separator menu item new GtkWidget* gtk_ separator_ menu_ item_ new ( void); gtk tearoff menu item new GtkWidget* gtk_ tearoff_ menu_ item_ new ( void);,. gtk image menu item new from stock,., gtk widget add accelerator. void gtk_ widget_ add_ accelerator ( GtkWidget * widget, const gchar * accel_ signal, GtkAccelGroup * accel_ group, guint accel_ key, GdkModifierType accel_ mods, GtkAccelFlags accel_ flags); 1 : 2 : 3 : 4 : 5 : 6 :. GDK O, GDK CONTROL MASK CTRL+O( o). GtkAccelGroup,. GtkWidget * item; GtkAccelGroup * accel_ group; accel_ group = gtk_ accel_ group_ new (); item = gtk_menu_item_new_with_mnemonic ("_Open"); gtk_ widget_ add_ accelerator ( item, " activate", accel_ group, GDK_O, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); GdkModifierType.

147 134 6 typedef enum { GDK_ SHIFT_ MASK = 1 << 0, GDK_ LOCK_ MASK = 1 << 1, GDK_ CONTROL_ MASK = 1 << 2, GDK_ MOD1_ MASK = 1 << 3, GDK_ MOD2_ MASK = 1 << 4, GDK_ MOD3_ MASK = 1 << 5, GDK_ MOD4_ MASK = 1 << 6, GDK_ MOD5_ MASK = 1 << 7, GDK_ BUTTON1_ MASK = 1 << 8, GDK_ BUTTON2_ MASK = 1 << 9, GDK_ BUTTON3_ MASK = 1 << 10, GDK_ BUTTON4_ MASK = 1 << 11, GDK_ BUTTON5_ MASK = 1 << 12, GDK_ RELEASE_ MASK = 1 << 30, GDK_ MODIFIER_ MASK = GDK_ RELEASE_ MASK 0x1fff } GdkModifierType; GtkAccelFlags. typedef enum { GTK_ ACCEL_ VISIBLE = 1 << 0, /* display in GtkAccelLabel? */ GTK_ ACCEL_ LOCKED = 1 << 1, /* is it removable? */ GTK_ ACCEL_ MASK = 0x07 } GtkAccelFlags;., gtk menu item set submenu. void gtk_ menu_ item_ set_ submenu ( GtkMenuItem * menu_ item, GtkWidget * submenu);. 1. menu = gtk_menu_new (); 2. item = gtk_menu_item_new (); gtk_ container_ add ( GTK_ CONTAINER( menu), item); 3. submenu = gtk_ menu_ new (); 4. gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), submenu); 5.

148 subitem = gtk_ menu_ item_ new (); gtk_ container_ add ( GTK_ CONTAINER( submenu), subitem); File,. Edit,. View,,.,., gtk window add accel group. void gtk_ window_ add_ accel_ group ( GtkWindow * window, GtkAccelGroup * accel_ group); : gtkmenubar-sample.c 1 # include <gtk/ gtk. h> 2 # include <gdk/ gdkkeysyms. h> 3 4 static void cb_ quit ( GtkWidget * widget, gpointer data) { 5 gtk_main_quit (); 6 } 7 8 static GtkWidget* create_ menu ( void) { 9 GtkWidget * menubar; 10 GtkWidget * menu; 11 GtkWidget * item; 12 GtkWidget * image; 13 GtkAccelGroup * accel_ group; 14 GSList * group = NULL; menubar = gtk_ menu_ bar_ new (); 17 accel_ group = gtk_ accel_ group_ new (); item = gtk_menu_item_new_with_mnemonic ("_File"); 20 gtk_ container_ add ( GTK_ CONTAINER( menubar), item); 21 menu = gtk_ menu_ new (); 22 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 23 { 24 item = gtk_ tearoff_ menu_ item_ new (); 25 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_menu_item_new_with_mnemonic ("_New"); 28 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 29 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 30 GDK_N, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Open");

149 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 34 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 35 GDK_O, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Save"); 38 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 39 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 40 GDK_S, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_ menu_ item_ new_ with_ mnemonic (" Save _ as"); 43 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 44 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 45 GDK_S, GDK_ CONTROL_ MASK GDK_ SHIFT_ MASK, 46 GTK_ ACCEL_ VISIBLE); item = gtk_ separator_ menu_ item_ new (); 49 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_menu_item_new_with_mnemonic ("_Quit"); 52 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 53 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 54 GDK_Q, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); 55 g_ signal_ connect ( G_ OBJECT( item), " activate", G_ CALLBACK( cb_ quit), NULL ); 56 } 57 item = gtk_menu_item_new_with_mnemonic ("_Edit"); 58 gtk_ container_ add ( GTK_ CONTAINER( menubar), item); 59 menu = gtk_ menu_ new (); 60 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 61 { 62 item = gtk_ tearoff_ menu_ item_ new (); 63 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ CUT, accel_ group); 66 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ COPY, accel_ group); 69 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ PASTE, accel_ group) ; 72 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ DELETE, accel_ group ); 75 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 76 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 77 GDK_D, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); 78 } 79 item = gtk_menu_item_new_with_mnemonic ("_View");

150 gtk_ container_ add ( GTK_ CONTAINER( menubar), item); 81 menu = gtk_ menu_ new (); 82 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 83 { 84 item = gtk_ tearoff_ menu_ item_ new (); 85 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ check_ menu_ item_ new_ with_ label (" Show Hidden Folders"); 88 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 89 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 90 GDK_H, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_image_menu_item_new_with_label ("Sort by..."); 93 image = gtk_ image_ new_ from_ stock ( GTK_ STOCK_ SORT_ ASCENDING, 94 GTK_ ICON_ SIZE_ MENU); 95 gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM( item), image); 96 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 97 menu = gtk_ menu_ new (); 98 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 99 { 100 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File type"); 101 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 102 gtk_ check_ menu_ item_ set_ active ( GTK_ CHECK_ MENU_ ITEM( item), TRUE); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM( item)); 105 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File size"); 106 gtk_ container_ add ( GTK_ CONTAINER( menu), item); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM( item)); 109 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " Update time"); 110 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 111 } 112 } 113 return menubar; 114 } int main ( int argc, char ** argv) { 117 GtkWidget * window; 118 GtkWidget * menubar; gtk_init (&argc, &argv); 121 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 122 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkMenubar Sample"); 123 gtk_ widget_ set_ size_ request ( window, 300, -1); 124 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 125 g_ signal_ connect ( G_ OBJECT( window), " destroy", 126 G_ CALLBACK( gtk_ main_ quit), NULL); menubar = create_ menu (); 129 gtk_ container_ add ( GTK_ CONTAINER( window), menubar);

151 gtk_ widget_ show_ all ( window); 132 gtk_main (); return 0; 135 } 6.4.2, ( 6.18). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkMenuShell +----GtkMenu,.,,., gtk menu popup. void gtk_ menu_ popup ( GtkMenu * menu, GtkWidget * parent_ menu_ shell, GtkWidget * parent_ menu_ item, GtkMenuPositionFunc func, gpointer data, guint button, guint32 activate_ time); NULL

152 ,., GdkEventButton time., gtk get current event time. guint32 gtk_ get_ current_ event_ time ( void); , GdkEventButton button. 1, 2, 3,,,, : gtkpopupmenu-sample.c 1 # include <gtk/ gtk. h> 2 # include <gdk/ gdkkeysyms. h> 3 4 static void cb_ quit ( GtkWidget * widget, gpointer data) { 5 gtk_main_quit (); 6 } 7 8 static gboolean cb_ popup_ menu ( GtkWidget * widget, 9 GdkEventButton * event, 10 gpointer user_ data) { 11 GtkMenu * popupmenu = GTK_ MENU( user_ data); if (event - >button == 3) { /* */ 14 gtk_ menu_ popup ( popupmenu, NULL, NULL, NULL, NULL, 0, event - >time); 15 } 16 return FALSE; 17 } static GtkWidget* create_ popupmenu ( GtkWindow * parent) { 20 GtkWidget * popupmenu; 21 GtkWidget * menu; 22 GtkWidget * item; 23 GtkWidget * image; 24 GtkAccelGroup * accel_ group; 25 GSList * group = NULL; popupmenu = gtk_ menu_ new (); 28 accel_ group = gtk_ accel_ group_ new (); 29 gtk_ window_ add_ accel_ group ( parent, accel_ group); item = gtk_ menu_ item_ new_ with_ label (" Popup Menu"); 32 gtk_ widget_ set_ sensitive ( item, FALSE); 33 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL( popupmenu), item);

153 item = gtk_ separator_ menu_ item_ new (); 36 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL( popupmenu), item); item = gtk_menu_item_new_with_mnemonic ("_File"); 39 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL( popupmenu), item); 40 menu = gtk_ menu_ new (); 41 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 42 { 43 item = gtk_ tearoff_ menu_ item_ new (); 44 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_menu_item_new_with_mnemonic ("_New"); 47 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 48 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 49 GDK_N, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Open"); 52 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 53 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 54 GDK_O, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_menu_item_new_with_mnemonic ("_Save"); 57 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 58 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 59 GDK_S, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_ menu_ item_ new_ with_ mnemonic (" Save _ as"); 62 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 63 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 64 GDK_S, GDK_ CONTROL_ MASK GDK_ SHIFT_ MASK, 65 GTK_ ACCEL_ VISIBLE); item = gtk_ separator_ menu_ item_ new (); 68 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_menu_item_new_with_mnemonic ("_Quit"); 71 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 72 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 73 GDK_Q, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); 74 g_ signal_ connect ( G_ OBJECT( item), 75 " activate", G_ CALLBACK( cb_ quit), NULL); 76 } 77 item = gtk_menu_item_new_with_mnemonic ("_Edit"); 78 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL( popupmenu), item); 79 menu = gtk_ menu_ new (); 80 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 81 { 82 item = gtk_ tearoff_ menu_ item_ new (); 83 gtk_ container_ add ( GTK_ CONTAINER( menu), item);

154 item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ CUT, accel_ group); 86 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ COPY, accel_ group); 89 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ PASTE, accel_ group); 92 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ image_ menu_ item_ new_ from_ stock( GTK_ STOCK_ DELETE, 95 accel_ group); 96 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 97 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 98 GDK_D, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); 99 } 100 item = gtk_menu_item_new_with_mnemonic ("_View"); 101 gtk_ menu_ shell_ append ( GTK_ MENU_ SHELL( popupmenu), item); 102 menu = gtk_ menu_ new (); 103 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 104 { 105 item = gtk_ tearoff_ menu_ item_ new (); 106 gtk_ container_ add ( GTK_ CONTAINER( menu), item); item = gtk_ check_ menu_ item_ new_ with_ label (" Show Hidden Folders"); 109 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 110 gtk_ widget_ add_ accelerator( item, " activate", accel_ group, 111 GDK_H, GDK_ CONTROL_ MASK, GTK_ ACCEL_ VISIBLE); item = gtk_image_menu_item_new_with_label ("Sort by..."); 114 image = gtk_ image_ new_ from_ stock ( GTK_ STOCK_ SORT_ ASCENDING, 115 GTK_ ICON_ SIZE_ MENU); 116 gtk_ image_ menu_ item_ set_ image ( GTK_ IMAGE_ MENU_ ITEM( item), image); 117 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 118 menu = gtk_ menu_ new (); 119 gtk_ menu_ item_ set_ submenu ( GTK_ MENU_ ITEM( item), menu); 120 { 121 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File type"); 122 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 123 gtk_ check_ menu_ item_ set_ active ( GTK_ CHECK_ MENU_ ITEM( item), TRUE); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM( item)); 126 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " File size"); 127 gtk_ container_ add ( GTK_ CONTAINER( menu), item); group = gtk_ radio_ menu_ item_ get_ group ( GTK_ RADIO_ MENU_ ITEM( item)); 130 item = gtk_ radio_ menu_ item_ new_ with_ label ( group, " Update time"); 131 gtk_ container_ add ( GTK_ CONTAINER( menu), item); 132 } 133 }

155 return popupmenu; 135 } int main ( int argc, char ** argv) { 138 GtkWidget * window; 139 GtkWidget * eventbox; 140 GtkWidget * popupmenu; gtk_init (&argc, &argv); 143 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 144 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkPopupMenu Sample"); 145 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 146 gtk_ widget_ set_ size_ request ( window, 300, 100); 147 g_ signal_ connect ( G_ OBJECT( window), " destroy", 148 G_ CALLBACK( gtk_ main_ quit), NULL); popupmenu = create_ popupmenu ( GTK_ WINDOW( window)); 151 gtk_ widget_ show_ all ( popupmenu); eventbox = gtk_ event_ box_ new (); 154 gtk_ container_ add ( GTK_ CONTAINER( window), eventbox); 155 g_ signal_ connect ( G_ OBJECT( eventbox), " button_ press_ event", 156 G_ CALLBACK( cb_ popup_ menu), popupmenu); gtk_ widget_ show_ all ( window); 159 gtk_main (); return 0; 162 } UI UI (GtkUIManager), UI., UI. GObject +----GtkUIManager +----GtkActionGroup UI gtk ui manager new. GtkUIManager* gtk_ ui_ manager_ new ( void);

156 GtkActionEntry. GtkActionEntry. typedef struct { const gchar const gchar const gchar const gchar const gchar GCallback } GtkActionEntry; * name; * stock_ id; * label; * accelerator; * tooltip; callback;. name. stock id GtkStockItem. label.,. accelerator. <control><shift>s, <alt><shift>x. tooltips. callback <control>o 6.19 UI

157 144 6., GtkToggleActionEntry GtkRadioActionEntry. GtkToggleActionEntry. typedef struct { const gchar * name; const gchar * stock_ id; const gchar * label; const gchar * accelerator; const gchar * tooltip; GCallback callback; gboolean is_ active; } GtkToggleActionEntry; GtkToggleActionEntry, GtkActionEntry is active gboolean. GtkRadioActionEntry. typedef struct { const gchar * name; const gchar * stock_ id; const gchar * label; const gchar * accelerator; const gchar * tooltip; gint value; } GtkRadioActionEntry; GtkRadioActionEntry, callback, ID value gint. gtk action group add radio actions. UI (GtkAction- Group).. gtk action group new.. GtkActionGroup* gtk_ action_ group_ new ( const gchar * name);, 3. gtk action group add actions GtkActionEntry. 3, 4. void gtk_ action_ group_ add_ actions ( GtkActionGroup * action_ group,

158 const GtkActionEntry * entries, guint n_ entries, gpointer user_ data); gtk action group add toggle actions GtkActionToggleEntry. void gtk_ action_ group_ add_ toggle_ actions ( GtkActionGroup * action_ group, const GtkToggleActionEntry * entries, guint n_ entries, gpointer user_ data); gtk action group add radio actions GtkActionRadioEntry. 4 (GtkActionRadioEntry value ). 5. void gtk_ action_ group_ add_ radio_ actions ( GtkActionGroup * action_ group, const GtkRadioActionEntry * entries, guint n_ entries, gint value, GCallback on_ change, gpointer user_ data);.., GTK+. GtkUIManager,.. static const gchar * ui_ info = " <ui >" " <menubar name= MenuBar >" " <menu action= FileMenu >" " <menuitem action= New / >" " <menuitem action= Open / >" " <menuitem action= Save / >" " <menuitem action= SaveAs / >" " <separator/ >" " <menuitem action= Quit / >" " </menu >" " </menubar >" " </ui >"; <ui> </ui>.. <menuitem action= New /> action

159 146 6 GtkActionEntry name GtkUIManager UI : gtkuimanager-sample.c 1 # include <gtk/ gtk. h> 2 3 static GtkActionEntry entries[] = { 4 {"FileMenu", NULL, "_File"}, 5 {"EditMenu", NULL, "_Edit"}, 6 {"ViewMenu", NULL, "_View"}, 7 {"SortMenu", GTK_STOCK_SORT_ASCENDING, "Sort by..."}, 8 {"New", NULL, "_New", " <control >N", "Create a new file", NULL}, 9 {"Open", NULL, "_Open", " <control >O", "Open a file", NULL}, 10 {"Save", NULL, "_Save", " <control >S", "Save a file", NULL}, 11 {"SaveAs", NULL, "Save _as", " <shift > <control >S", NULL, NULL}, 12 {"Quit", NULL, "_Quit", " <control >Q", "Quit a program", gtk_main_quit}, 13 {"Cut", GTK_STOCK_CUT, _("C_ut"), " <control >X", NULL, NULL}, 14 {"Copy", GTK_STOCK_COPY, "_Copy", " <control >C", NULL, NULL}, 15 {"Paste", GTK_STOCK_PASTE, "_Paste", " <control >V", NULL, NULL}, 16 {"Delete", GTK_STOCK_DELETE, "_Delete", " <control >D", NULL, NULL} 17 }; static GtkToggleActionEntry toggle_ entries[] = { 20 {" ShowHidden", NULL, " Show Hidden Folders", " <control >H", 21 NULL, NULL, FALSE} 22 }; enum { 25 SORT_ FILE_ TYPE, 26 SORT_ FILE_ SIZE, 27 SORT_ UPDATE_ TIME 28 }; static GtkRadioActionEntry radio_ entries[] = { 31 {" FileType", NULL, " File type", NULL, NULL, SORT_ FILE_ TYPE}, 32 {" FileSize", NULL, " File size", NULL, NULL, SORT_ FILE_ SIZE}, 33 {" UpdateTime", NULL, " Update time", NULL, NULL, SORT_ UPDATE_ TIME} 34 }; static guint n_ entries = G_ N_ ELEMENTS ( entries); 37 static guint n_ toggle_ entries = G_ N_ ELEMENTS ( toggle_ entries); 38 static guint n_ radio_ entries = G_ N_ ELEMENTS ( radio_ entries); static const gchar * ui_ info = 41 " <ui >" 42 " <menubar name= MenuBar >"

160 " <menu action= FileMenu >" 44 " <menuitem action= New / >" 45 " <menuitem action= Open / >" 46 " <menuitem action= Save / >" 47 " <menuitem action= SaveAs / >" 48 " <separator/ >" 49 " <menuitem action= Quit / >" 50 " </menu >" 51 " <menu action= EditMenu >" 52 " <menuitem action= Cut / >" 53 " <menuitem action= Copy / >" 54 " <menuitem action= Paste / >" 55 " <menuitem action= Delete / >" 56 " </menu >" 57 " <menu action= ViewMenu >" 58 " <menuitem action= ShowHidden / >" 59 " <menu action= SortMenu >" 60 " <menuitem action= FileType / >" 61 " <menuitem action= FileSize / >" 62 " <menuitem action= UpdateTime / >" 63 " </menu >" 64 " </menu >" 65 " </menubar >" 66 " </ui >"; static void activate_ radio_ action ( GtkAction * action, 69 GtkRadioAction * current) { 70 g_print ("Radio action \"%s\" selected\n", 71 gtk_action_get_name (GTK_ACTION (current))); 72 } static GtkWidget* create_ menu ( GtkWidget * parent) { 75 GtkUIManager * ui; 76 GtkActionGroup * actions; actions = gtk_ action_ group_ new (" Actions"); 79 gtk_ action_ group_ add_ actions ( actions, entries, n_ entries, NULL); 80 gtk_ action_ group_ add_ toggle_ actions ( actions, 81 toggle_ entries, n_ toggle_ entries, 82 NULL); 83 gtk_ action_ group_ add_ radio_ actions ( actions, 84 radio_ entries, n_ radio_ entries, 85 SORT_ FILE_ TYPE, 86 G_ CALLBACK ( activate_ radio_ action), 87 NULL); ui = gtk_ ui_ manager_ new (); 90 gtk_ ui_ manager_ insert_ action_ group ( ui, actions, 0); 91 gtk_ ui_ manager_ set_ add_ tearoffs ( ui, TRUE); 92 gtk_ window_ add_ accel_ group ( GTK_ WINDOW( parent),

161 gtk_ui_manager_get_accel_group (ui)); 94 gtk_ ui_ manager_ add_ ui_ from_ string ( ui, ui_info, -1, NULL); return gtk_ui_manager_get_widget (ui, "/MenuBar"); 97 } int main ( int argc, char ** argv) { 100 GtkWidget * window; 101 GtkWidget * menubar; gtk_init (&argc, &argv); 104 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 105 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkUIManager Sample"); 106 gtk_ widget_ set_ size_ request ( window, 300, -1); 107 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 108 g_ signal_ connect ( G_ OBJECT( window), " destroy", 109 G_ CALLBACK( gtk_ main_ quit), NULL); menubar = create_ menu ( window); 112 gtk_ container_ add ( GTK_ CONTAINER( window), menubar); gtk_ widget_ show_ all ( window); 115 gtk_main (); return 0; 118 } 6.5, GtkDialog GtkMessageDialog GtkFileSelection., GtkDialog,.,. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog

162 GtkDialog. gtk dialog new gtk dialog new.. GtkDialog., vbox. action area. struct GtkDialog { GtkWidget * vbox; GtkWidget * action_ area; }; GtkWidget* gtk_ dialog_ new ( void); gtk dialog new with buttons. GtkDialogFlags. GtkWidget* gtk_ dialog_ new_ with_ buttons ( const gchar * title, GtkWindow * parent, GtkDialogFlags flags, const gchar * first_ button_ text,...); GtkDialogFlags. typedef enum { GTK_ DIALOG_ MODAL = 1 << 0, GTK_ DIALOG_ DESTROY_ WITH_ PARENT = 1 << 1, GTK_ DIALOG_ NO_ SEPARATOR = 1 << 2 } GtkDialogFlags;, 4 ID ID. NULL.. GtkWidget * dialog = gtk_ dialog_ new_ with_ buttons (" My dialog", main_ app_ window, 6.20

163 150 6 GTK_ DIALOG_ MODAL GTK_ DIALOG_ DESTROY_ WITH_ PARENT, GTK_STOCK_OK, GTK_ RESPONSE_ ACCEPT, GTK_ STOCK_ CANCEL, GTK_ RESPONSE_ REJECT, NULL); ID. typedef enum { GTK_ RESPONSE_ NONE = -1, GTK_ RESPONSE_ REJECT = -2, GTK_ RESPONSE_ ACCEPT = -3, GTK_ RESPONSE_ DELETE_ EVENT = -4, GTK_ RESPONSE_ OK = -5, GTK_ RESPONSE_ CANCEL = -6, GTK_ RESPONSE_ CLOSE = -7, GTK_ RESPONSE_ YES = -8, GTK_ RESPONSE_ NO = -9, GTK_ RESPONSE_ APPLY = -10, GTK_ RESPONSE_ HELP = -11 } GtkResponseType; ID, gtk dialog run. gint gtk_ dialog_ run ( GtkDialog * dialog);, vbox action area gtk dialog set has sesparator. gtk dialog get has sesparator. void gtk_ dialog_ set_ has_ separator ( GtkDialog * dialog, gboolean setting); gboolean gtk_ dialog_ get_ has_ separator ( GtkDialog * dialog); , 6.21.,.

164 : gtkdialog-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ button ( GtkButton * button, 4 gpointer user_ data) { 5 GtkWidget * dialog; 6 GtkWidget * parent; 7 GtkWidget * label; 8 gint response; 9 10 parent = GTK_ WIDGET( user_ data); dialog = gtk_ dialog_ new_ with_ buttons (" Save Confermation", 13 GTK_ WINDOW( parent), 14 GTK_ DIALOG_ MODAL 15 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 16 GTK_ STOCK_ NO, GTK_ RESPONSE_ NO, 17 GTK_ STOCK_ YES, GTK_ RESPONSE_ YES, 18 NULL); 19 label = gtk_ label_ new (" Confirm Are you sure you want to save."); 20 gtk_ container_ add ( GTK_ CONTAINER ( GTK_ DIALOG( dialog) - >vbox), label); 21 gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 24 if ( response == GTK_ RESPONSE_ YES) { 25 g_ print (" Yes button was pressed.\ n"); 26 } else if ( response == GTK_ RESPONSE_ NO) { 27 g_ print (" No button was pressed.\ n"); 28 } else { 29 g_ print (" Another response was recieved.\ n"); 30 } 31 gtk_ widget_ destroy ( dialog); 32 } int main ( int argc, 35 char **argv) { 36 GtkWidget * window; 37 GtkWidget * hbox; 6.21

165 GtkWidget * label; 39 GtkWidget * entry; 40 GtkWidget * button; gtk_init (&argc, &argv); 43 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 44 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkDialog Sample"); 45 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 46 g_ signal_ connect ( G_ OBJECT( window), " destroy", 47 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 50 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ SAVE); 53 g_ signal_ connect ( G_ OBJECT( button), " clicked", 54 G_ CALLBACK( cb_ button), ( gpointer) window); 55 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 58 g_ signal_ connect ( G_ OBJECT( button), " clicked", 59 G_ CALLBACK( gtk_ main_ quit), NULL); 60 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_ widget_ show_ all ( window); 63 gtk_main (); return 0; 66 } (GtkMessageDialog),,,. GtkButtonsType. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog +----GtkMessageDialog

166 GTK MESSAGE INFO GTK MESSAGE WARNING GTK MESSAGE QUESTION GTK MESSAGE ERROR ( 6.22 ). ( 6.22 ). ( 6.22 ). ( 6.22 ). GtkMessageDialog. gtk mesage dialog new (GtkDialogFlags), (GtkMessageType), (GtkButtonsType),, ( 6.22 ). GtkWidget* gtk_ message_ dialog_ new ( GtkWindow * parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar * message_ format,...); GtkMessageType ( 6.11 ). typedef enum { GTK_ MESSAGE_ INFO, GTK_ MESSAGE_ WARNING, GTK_ MESSAGE_ QUESTION, GTK_ MESSAGE_ ERROR } GtkMessageType; 6.22

167 typedef enum { GTK_ BUTTONS_ NONE, GTK_BUTTONS_OK, GTK_ BUTTONS_ CLOSE, GTK_ BUTTONS_ CANCEL, GTK_BUTTONS_YES_NO, GTK_ BUTTONS_ OK_ CANCEL } GtkButtonsType; gtk mesage dialog new with markup. GtkWidget* gtk_ message_ dialog_ new_ with_ markup ( GtkWindow * parent, GtkDialogFlags flags, GtkMessageType type, GtkButtonsType buttons, const gchar * message_ format,...); gtk message dialog set markup. void gtk_ message_ dialog_ set_ markup ( GtkMessageDialog * message_ dialog, const gchar * str); : gtkmessagedialog-sample.c 1 # include <gtk/ gtk. h> 2 3 GtkWidget * window; 4 5 static void show_ dialog ( GtkButton * button, 6 gpointer data) { 7 GtkWidget * dialog; 8 GtkButtonsType btype[] = { GTK_ BUTTONS_ CLOSE, 6.23

168 GTK_ BUTTONS_ OK_ CANCEL, 10 GTK_ BUTTONS_ YES_ NO, 11 GTK_ BUTTONS_ OK}; 12 GtkMessageType mtype = ( GtkMessageType) data; 13 gchar * string[] = {" GTK_ MESSAGE_ INFO", 14 " GTK_ MESSAGE_ WARNING", 15 " GTK_ MESSAGE_ QUESTION", 16 "GTK_MESSAGE_ERROE"}; 17 gint result; dialog = 20 gtk_ message_ dialog_ new ( GTK_ WINDOW( window), 21 GTK_ DIALOG_ MODAL 22 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 23 mtype, 24 btype[ mtype], 25 " This dialog is a GtkMessageDialog sample\ n" 26 "( GtkMessageType = % s)", 27 string[ mtype]); 28 result = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); switch ( result) { 31 case GTK_ RESPONSE_ OK: 32 g_printf ("GTK_RESPONSE_OK is recieved.\n"); 33 break; 34 case GTK_ RESPONSE_ CANCEL: 35 g_ printf (" GTK_ RESPONSE_ CANCEL is recieved.\ n"); 36 break; 37 case GTK_ RESPONSE_ CLOSE: 38 g_ printf (" GTK_ RESPONSE_ CLOSE is recieved.\ n"); 39 break; 40 case GTK_ RESPONSE_ YES: 41 g_ printf (" GTK_ RESPONSE_ YES is recieved.\ n"); 42 break; 43 case GTK_ RESPONSE_ NO: 44 g_printf ("GTK_RESPONSE_NO is recieved.\n"); 45 break; 46 default: 47 g_ printf (" Another response is recieved.\ n"); 48 break; 49 } 50 gtk_ widget_ destroy ( dialog); 51 } int main ( int argc, char ** argv) { 54 GtkWidget * hbox; 55 GtkWidget * button; 56 gchar * stock[] = { GTK_ STOCK_ DIALOG_ INFO, 57 GTK_ STOCK_ DIALOG_ WARNING, 58 GTK_ STOCK_ DIALOG_ QUESTION,

169 GTK_ STOCK_ DIALOG_ ERROR}; 60 int n; gtk_init (&argc, &argv); 63 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 64 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkMessageDialog Sample"); 65 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 66 g_ signal_ connect ( G_ OBJECT( window), " destroy", 67 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( TRUE, 5); 70 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); for ( n = 0; n < 4; n++) { 73 button = gtk_ button_ new_ from_ stock ( stock[ n]); 74 g_ signal_ connect ( G_ OBJECT( button), " clicked", 75 G_ CALLBACK( show_ dialog), ( gpointer) n); 76 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); 77 } 78 button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 79 g_ signal_ connect ( G_ OBJECT( button), " clicked", 80 G_ CALLBACK( gtk_ main_ quit), NULL); 81 gtk_box_pack_start (GTK_BOX(hbox), button, TRUE, TRUE, 0); gtk_ widget_ show_ all ( window); 84 gtk_main (); return 0; 87 } (GtkFileSelection), ( 6.24). GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog +----GtkFileSelection gtk file selection new..

170 GtkWidget* gtk_ file_ selection_ new ( const gchar * title);. gtk file selection get filename,, gtk file selection set filename,. G_ CONST_ RETURN gchar* gtk_ file_ selection_ get_ filename ( GtkFileSelection * filesel); void gtk_ file_ selection_ set_ filename ( GtkFileSelection * filesel, const gchar * filename);,., gtk file selection set select multiple,., gtk file selection get select multiple. void gtk_ file_ selection_ set_ select_ multiple ( GtkFileSelection * filesel, gboolean select_ multiple); gboolean gtk_ file_ selection_ get_ select_ multiple ( GtkFileSelection * filesel);, gtk file selection get selections. gchar** gtk_ file_ selection_ get_ selections ( GtkFileSelection * filesel); 6.24

171 158 6 (,, ). / gtk file selection hide fileop buttons, gtk file selection show fileop buttons. void gtk_ file_ selection_ hide_ fileop_ buttons ( GtkFileSelection * filesel); void gtk_ file_ selection_ show_ fileop_ buttons ( GtkFileSelection * filesel);,.., OK,,,,. OK ok button, cancel button., , 6.25., ( 6.25 )., OK, ( 6.25 ) : gtkfileselection-sample.c 1 # include <gtk/ gtk. h> 2 3 static void filesel_ ok ( GtkWidget * widget, gpointer data) { 4 GtkFileSelection * filesel; 5 GtkEntry * entry; 6 7 filesel = GTK_ FILE_ SELECTION( data); 8 entry = GTK_ENTRY(g_object_get_data (G_OBJECT(filesel), "entry")); 9 10 gtk_ entry_ set_ text ( entry, gtk_ file_ selection_ get_ filename ( filesel)); 11 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), FALSE); 12 gtk_ widget_ destroy ( GTK_ WIDGET( filesel)); 13 } static void filesel_ cancel ( GtkWidget * widget, gpointer data) { 16 GtkFileSelection * filesel; filesel = GTK_ FILE_ SELECTION( data); gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), FALSE);

172 gtk_ widget_ destroy ( GTK_ WIDGET( filesel)); 22 } static void cb_ button ( GtkButton * button, gpointer data) { 25 GtkWidget * filesel; 26 GtkWidget * parent; 27 GtkWidget * entry; parent = GTK_WIDGET(g_object_get_data (G_OBJECT(data), "parent")); 30 entry = GTK_ WIDGET( data); filesel = gtk_ file_ selection_ new (" File Selection Dialog"); 33 g_ object_ set_ data ( G_ OBJECT( filesel), " entry", ( gpointer) entry); g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >ok_ button), 36 " clicked", G_ CALLBACK( filesel_ ok), 37 ( gpointer) filesel); 38 g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >cancel_ button), 39 " clicked", G_ CALLBACK ( filesel_ cancel), 40 ( gpointer) filesel); 41 gtk_ window_ set_ transient_ for ( GTK_ WINDOW( filesel), GTK_ WINDOW( parent)); 42 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), TRUE); gtk_ widget_ show ( filesel); 45 } 6.25

173 int main ( int argc, char ** argv) { 48 GtkWidget * window; 49 GtkWidget * hbox; 50 GtkWidget * label; 51 GtkWidget * entry; 52 GtkWidget * button; gtk_init (&argc, &argv); 55 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 56 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkFileSelection Sample"); 57 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 58 g_ signal_ connect ( G_ OBJECT( window), " destroy", 59 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 62 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("File :"); 65 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); entry = gtk_ entry_ new (); 68 gtk_box_pack_start (GTK_BOX(hbox), entry, TRUE, TRUE, 0); 69 g_ object_ set_ data ( G_ OBJECT( entry), " parent", ( gpointer) window); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ OPEN); 72 g_ signal_ connect ( G_ OBJECT( button), " clicked", 73 G_ CALLBACK( cb_ button), ( gpointer) entry); 74 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 77 gtk_main (); return 0; 80 } GtkFileChooser 2.4 ( 6.26). GInterface +----GtkFileChooser gtk file chooser dialog new. GtkWidget* gtk_ file_ chooser_ dialog_ new ( const gchar * title,

174 GtkWidget * parent, GtkFileChooserAction action, const gchar * first_ button_ text,...);., 2,. 3 GtkFileChooserAction 4.. typedef enum { GTK_ FILE_ CHOOSER_ ACTION_ OPEN, GTK_ FILE_ CHOOSER_ ACTION_ SAVE, GTK_ FILE_ CHOOSER_ ACTION_ SELECT_ FOLDER, GTK_ FILE_ CHOOSER_ ACTION_ CREATE_ FOLDER } GtkFileChooserAction; 4.., NULL. GtkResponseType. GtkStockItem. dialog = gtk_ file_ chooser_ dialog_ new (" File Open Dialog", GTK_ WIDGET( parent), GTK_ FILE_ CHOOSER_ ACTION_ OPEN, GTK_ STOCK_ CANCEL, 6.26

175 162 6 GTK_ RESPONSE_ CANCE, GTK_STOCK_OPEN, GTK_ RESPONSE_ ACCEPT, NULL);. gtk file chooser get filename,, gtk file chooser set filename,. gchar* gtk_ file_ chooser_ get_ filename ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ filename ( GtkFileChooser * chooser, const gchar * filename); gtk file chooser get uri, gtk file chooser set uri. URI., file:///. gchar* gtk_ file_ chooser_ get_ uri ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ uri ( GtkFileChooser * chooser, const gchar * filename);, gtk file chooser get filenames, gtk file chooser get uris.. GSList* gtk_ file_ chooser_ get_ filenames ( GtkFileChooser * chooser); GSList* gtk_ file_ chooser_ get_ uris ( GtkFileChooser * chooser);, gtk file chooser get current folder, gtk file chooser set current folder. URI, gtk file chooser get current folder uri, gtk file chooser set current folder uri. gchar* gtk_ file_ chooser_ get_ current_ folder ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ current_ folder ( GtkFileChooser * chooser, gchar * filename); gchar* gtk_ file_ chooser_ get_ current_ folder_ uri ( GtkFileChooser * chooser); gboolean gtk_ file_ chooser_ set_ current_ folder_ uri ( GtkFileChooser * chooser, gchar *uri);

176 GtkFileChooser.,. GtkFileFilter. GtkFileFilter,. 1. gtk file filter new. GtkFileFilter* gtk_ file_ filter_ new ( void); 2. gtk file filter set name. void gtk_ file_ filter_ set_ name ( GtkFileFilter * filter, const gchar * name); 3..., void gtk_ file_ filter_ add_ pattern ( GtkFileFilter * filter, const gchar * pattern); void gtk_ file_ filter_ add_ mime_ type ( GtkFileFilter * filter, const gchar * mime_ type); void gtk_ file_ filter_ add_ pixbuf_ formats ( GtkFileFilter * filter); 4. gtk file chooser add filter. void gtk_ file_ chooser_ add_ filter ( GtkFileChooser * chooser, GtkFileFilter * filter); GTK FILE CHOOSER ACTION SAVE,. gtk file chooser set do overwrite confirmation 2 TRUE,.,, gtk file chooser get do overwrite confirmation. void gtk_ file_ chooser_ set_ do_ overwrite_ confirmation ( GtkFileChooser * chooser, gboolean do_ overwrite_ confirmation); gboolean gtk_ file_ chooser_ get_ do_ overwrite_ confirmation ( GtkFileChooser * chooser); gtk file chooser set show hidden 2 TRUE,

177 164 6., gtk file chooser get show hidden. void gtk_ file_ chooser_ set_ show_ hideen ( GtkFileChooser * chooser, gboolean show_ hidden); gboolean gtk_ file_ chooser_ get_ show_ hideen ( GtkFileChooser * chooser); gtk file chooser set select multiple 2 TRUE,. gtk file chooser get select multiple. void gtk_ file_ chooser_ set_ select_ multiple ( GtkFileChooser * chooser, gboolean select_ multiple); gboolean gtk_ file_ chooser_ get_ select_ multiple ( GtkFileChooser * chooser); , , Jpeg., gtk file filter add pattern, *. Jpeg gtk file filter add mime type., 41 notify::filter : gtkfilechooser-sample.c 1 # include <gtk/ gtk. h> 2 3 static void filter_ changed ( GtkFileChooserDialog * dialog, gpointer data) { 4 g_print ("File filter changed.\n"); 5 } 6 7 static void cb_ button ( GtkButton * button, gpointer data) { 8 GtkWidget * dialog; 9 GtkWidget * parent; 10 GtkEntry * entry; 11 GtkFileFilter * filter; 12 GtkFileChooserAction action[] = { GTK_ FILE_ CHOOSER_ ACTION_ OPEN, 13 GTK_ FILE_ CHOOSER_ ACTION_ SAVE, 14 GTK_ FILE_ CHOOSER_ ACTION_ SELECT_ FOLDER, 15 GTK_ FILE_ CHOOSER_ ACTION_ CREATE_ FOLDER};

178 gint response; parent = GTK_WIDGET(g_object_get_data (G_OBJECT(data), "parent")); 19 entry = GTK_ ENTRY( data); dialog = gtk_ file_ chooser_ dialog_ new (" File Chooser Dialog", 22 GTK_ WINDOW( parent), 23 action[0], 24 GTK_ STOCK_ CANCEL, 25 GTK_ RESPONSE_ CANCEL, 26 GTK_ STOCK_ OPEN, 27 GTK_ RESPONSE_ ACCEPT, 28 NULL); 29 filter = gtk_ file_ filter_ new (); 30 gtk_ file_ filter_ set_ name ( filter, " All Files"); 31 gtk_file_filter_add_pattern (filter, "*"); 32 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER( dialog), filter); filter = gtk_ file_ filter_ new (); 35 gtk_file_filter_set_name (filter, "JPEG"); 36 gtk_file_filter_add_mime_type (filter, "image/jpeg"); 37 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER( dialog), filter); filter = gtk_ file_ filter_ new (); 40 gtk_file_filter_set_name (filter, "PNG"); 41 gtk_file_filter_add_mime_type (filter, "image/png"); 42 gtk_ file_ chooser_ add_ filter ( GTK_ FILE_ CHOOSER( dialog), filter); g_ signal_ connect ( dialog, " notify:: filter", 45 G_ CALLBACK( filter_ changed), NULL); gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 50 if ( response == GTK_ RESPONSE_ ACCEPT) { 51 gchar * filename; 52 gchar * folder; filename = gtk_ file_ chooser_ get_ filename ( GTK_ FILE_ CHOOSER( dialog)); 55 folder = gtk_ file_ chooser_ get_ current_ folder( GTK_ FILE_ CHOOSER( dialog)); 56 g_print ("%s\n", folder); 57 g_ free ( folder); gtk_ entry_ set_ text ( entry, filename); 60 g_ free ( filename); 61 } else if ( response == GTK_ RESPONSE_ CANCEL) { 62 g_ print (" Cancel button was pressed.\ n"); 63 } else { 64 g_ print (" Another response was recieved.\ n"); 65 }

179 gtk_ widget_ destroy ( dialog); 67 } int main ( int argc, char ** argv) { 70 GtkWidget * window; 71 GtkWidget * hbox; 72 GtkWidget * label; 73 GtkWidget * entry; 74 GtkWidget * button; gtk_init (&argc, &argv); 77 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 78 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkFileChooser Sample"); 79 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 80 g_ signal_ connect ( G_ OBJECT( window), " destroy", 81 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 84 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("File :"); 87 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); entry = gtk_ entry_ new (); 90 gtk_box_pack_start (GTK_BOX(hbox), entry, TRUE, TRUE, 0); 91 g_ object_ set_ data ( G_ OBJECT( entry), " parent", ( gpointer) window); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ OPEN); 94 g_ signal_ connect ( G_ OBJECT( button), " clicked", 95 G_ CALLBACK( cb_ button), ( gpointer) entry); 96 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 99 gtk_main (); return 0; 102 }

180 GtkAboutDialog 2.6 ( 6.27). GtkAboutDialog, GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkBin +----GtkWindow +----GtkDialog +----GtkAboutDialog GtkAboutDialog. GtkWidget* gtk_ about_ dialog_ new ( void);. void gtk_ about_ dialog_ set_ name ( GtkAboutDialog * about, const gchar * name); const gchar* gtk_ about_ dialog_ get_ name ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ version ( GtkAboutDialog * about, const gchar * version); const gchar* gtk_ about_ dialog_ get_ version ( GtkAboutDialog * about);

181 168 6 void gtk_ about_ dialog_ set_ authors ( GtkAboutDialog * about, const gchar ** authors); const gchar* const * gtk_ about_ dialog_ get_ authors ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ documenters ( GtkAboutDialog * about, const gchar ** documenters); const gchar* const * gtk_ about_ dialog_ get_ documenters ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ translator_ credits ( GtkAboutDialog * about, const gchar * translator_ credits); const gchar* gtk_ about_ dialog_ get_ translator_ credits ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ comments ( GtkAboutDialog * about, const gchar * comments); const gchar* gtk_ about_ dialog_ get_ comments ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ copyright ( GtkAboutDialog * about, const gchar * copyright); const gchar* gtk_ about_ dialog_ get_ copyright ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ website ( GtkAboutDialog * about, const gchar * website); const gchar* gtk_ about_ dialog_ get_ website ( GtkAboutDialog * about); void gtk_ about_ dialog_ set_ logo ( GtkAboutDialog * about, GdkPixbuf * logo); GdkPixbuf* gtk_ about_ dialog_ get_ logo ( GtkAboutDialog * about);

182 : gtkaboutdialog-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ show_ dialog ( GtkWidget * widget, gpointer data) { 4 GtkWidget * dialog; 5 GtkAboutDialog * about; 6 GdkPixbuf * pixbuf; 7 8 const gchar * authors[] = {" Yasuyuki Sugaya", NULL}; 9 const gchar * documenters[] = {" Yasuyuki Sugaya", NULL}; 10 const gchar * translators = " Yasuyuki Sugaya"; dialog = gtk_ about_ dialog_ new (); 13 about = GTK_ ABOUT_ DIALOG( dialog); 14 gtk_ about_ dialog_ set_ name ( about, " GtkAoubtDialog - Sample"); 15 gtk_ about_ dialog_ set_ authors ( about, authors); 16 gtk_ about_ dialog_ set_ documenters ( about, documenters); 17 gtk_ about_ dialog_ set_ translator_ credits ( about, translators); 18 gtk_about_dialog_set_version (about, "1.0.0"); 19 gtk_ about_ dialog_ set_ copyright ( about, " Copyright ( C) 2007 TEO Project"); 20 gtk_ about_ dialog_ set_ comments( about, 21 " This is a GtkAboutDialog sample " 22 "program."); 23 gtk_about_dialog_set_website (about, "file:///..."); pixbuf = gdk_ pixbuf_ new_ from_ file (" gnome - tigert. png", NULL); 26 gtk_ about_ dialog_ set_ logo ( about, pixbuf); gtk_ container_ set_ border_ width ( GTK_ CONTAINER( dialog), 5); gtk_ widget_ show_ all ( dialog); 31 } int main ( int argc, char ** argv) { 34 GtkWidget * window; 35 GtkWidget * button; gtk_init (&argc, &argv); 38 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 39 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkAboutDialog - Sample"); 40 gtk_ widget_ set_ size_ request ( window, 300, -1); 41 g_ signal_ connect ( G_ OBJECT( window), " destroy", 42 G_ CALLBACK( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Show About Dialog");

183 gtk_ container_ add ( GTK_ CONTAINER( window), button); 46 g_ signal_ connect ( G_ OBJECT( button), " clicked", 47 G_ CALLBACK( cb_ show_ dialog), NULL); gtk_ widget_ show_ all ( window); 50 gtk_main (); return 0; 53 } 6.6 (GtkTreeView), 2.,.,.,,. GObject +----GtkObject +----GtkWidget +----GtkContainer +----GtkTreeView, gtk tree view new.,. GtkWidget* gtk_ tree_ view_ new ( void);, (GtkTreeModel),., gtk tree view new with model,. GtkWidget* gtk_ tree_ view_ new_ with_ model ( GtkTreeModel * model); gtk tree view new, gtk tree view set model. void gtk_ tree_ view_ set_ model ( GtkTreeView * tree_ view, GtkTreeModel * model); GtkListStore GtkTreeStore ( 6.28)

184 (37 38 ) GtkListStore., gtk list store new. GtkListStore* gtk_ list_ store_ new ( gint n_ columns,...); 1, G TYPE BOOLEAN, G TYPE INT, G TYPE STRING, GDK TYPE PIXBUF.,.,. (42 48 ),., GtkTreeView- Column GtkCellRenderer. GtkTreeViewColumn, GtkCellRenderer. GtkTreeViewColumn, gtk tree view column new. GtkTreeViewColumn* gtk_ tree_ view_ column_ new ( void); GtkCellRenderer,. gtk cell renderer text new. GtkCellRenderer* gtk_ cell_ renderer_ text_ new ( void); gtk cell renderer toggle new TRUE, FALSE. GtkCellRenderer* gtk_ cell_ renderer_ toggle_ new ( void); gtk cell renderer pixbuf new. GtkCellRenderer* gtk_ cell_ renderer_ pixbuf_ new ( void);

185 172 6 gtk tree view column new GtkTreeViewColumn, gtk tree view column set title, gtk tree view column pack start, gtk tree view column set attributes. 1. (44 ) void gtk_ tree_ view_ column_ set_ title ( GtkTreeViewColumn * tree_ column, const gchar * title); 2. GtkTreeViewColumn GtkCellRenderer (45 ) void gtk_ tree_ view_ column_ pack_ start ( GtkTreeViewColumn * tree_ column, GtkCellRenderer * cell, gboolean expand); 3. (46 47 ) gtk tree view column set attributes. 3, NULL.,, gtk tree view column add attribute. void gtk_ tree_ view_ column_ set_ attributes( GtkTreeViewColumn * tree_ column, GtkCellRenderer * cell_ renderer,...); void gtk_ tree_ view_ column_ add_ attribute ( GtkTreeViewColumn * tree_ column, GtkCellRenderer * cell_ renderer, const gchar * attribute, gint column); gtk tree view column new,, gtk tree view column new with attributes (51 53 ). GtkTreeViewColumn* gtk_ tree_ view_ column_ new_ with_ attributes ( const gchar * title, GtkCellRenderer * cell,...); 6.12 text active pixbuf...

186 (48 ) (GtkTreeViewColumn), gtk tree view append column.. gint gtk_ tree_ view_ append_ column ( GtkTreeView * tree_ view, GtkTreeViewColumn * column); (24 27 ). 1. (24 ) gtk list store append. void gtk_ list_ store_ append ( GtkListStore * list_ store, GtkTreeIter * iter); 2. (25 27 ) gtk list store append GtkTreeIter,. GtkTreeIter gtk list store set,. 3, 1. void gtk_ list_ store_ set ( GtkListStore * list_ store, GtkTreeIter * iter,...); : gtkliststore-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ ID, 5 COLUMN_ NAME, 6 N_ COLUMNS 7 }; 8 9 typedef struct _ ListData { 10 guint id; 11 gchar * name; 12 } ListData; static ListData data[] = { {0, "Mike"}, {1, "JoJo"} }; static void add_ data ( GtkTreeView * treeview) { 17 GtkListStore * store; 18 GtkTreeIter iter; 19 int n; store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); 22

187 for ( n = 0; n < sizeof( data) / sizeof( data[ 0]); n++) { 24 gtk_ list_ store_ append ( store, & iter); 25 gtk_list_store_set (store, &iter, 26 COLUMN_ID, data[n].id, 27 COLUMN_ NAME, data[ n]. name, -1); 28 } 29 } static GtkWidget* create_ list_ model ( void) { 32 GtkWidget * treeview; 33 GtkListStore * liststore; 34 GtkCellRenderer * renderer; 35 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_ COLUMNS, 38 G_TYPE_UINT, G_TYPE_STRING); 39 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL( liststore)); 40 g_ object_ unref ( liststore); renderer = gtk_ cell_ renderer_ text_ new (); 43 column = gtk_ tree_ view_ column_ new (); 44 gtk_tree_view_column_set_title (column, "ID"); 45 gtk_ tree_ view_ column_ pack_ start ( column, renderer, FALSE); 46 gtk_ tree_ view_ column_ set_ attributes ( column, renderer, 47 "text", COLUMN_ID, NULL); 48 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 51 column = 52 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 53 " text", COLUMN_ NAME, NULL); 54 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); return treeview; 57 } int main ( int argc, char ** argv) { 60 GtkWidget * window; 61 GtkWidget * treeview; gtk_init (&argc, &argv); 64 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 65 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkListStore Sample1"); 66 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 67 g_ signal_ connect ( G_ OBJECT( window), " destroy", 68 G_ CALLBACK( gtk_ main_ quit), NULL); 69 gtk_ widget_ set_ size_ request ( window, 300, 100); treeview = create_ list_ model (); 72 gtk_ container_ add ( GTK_ CONTAINER( window), treeview);

188 add_ data ( GTK_ TREE_ VIEW( treeview)); gtk_ widget_ show_ all ( window); 77 gtk_main (); return 0; 80 } , ( ),,., ( 6.29) (46 50 ) ID 2 G TYPE STRING G TYPE UINT. (64 67 ) gtk tree view column add attribute 2 background underline. devhelp background gchararray Write underline PangoUnderline Read / Write PangoUnderline. typedef enum { PANGO_ UNDERLINE_ NONE, PANGO_ UNDERLINE_ SINGLE, PANGO_ UNDERLINE_ DOUBLE, PANGO_ UNDERLINE_ LOW, PANGO_ UNDERLINE_ ERROR } PangoUnderline;

189 : gtkliststore-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ ID, 5 COLUMN_ NAME, 6 COLUMN_ NAME_ COLOR, 7 COLUMN_ NAME_ LINE, 8 N_ COLUMNS 9 }; typedef struct _ ListData { 12 guint id; 13 gchar * name; 14 gchar * color; 15 PangoUnderline linestyle; 16 } ListData; static ListData data[] = { 19 {0, " Mike", " Orange", PANGO_ UNDERLINE_ NONE}, 20 {1, " JoJo", " Red", PANGO_ UNDERLINE_ SINGLE} 21 }; static void add_ data ( GtkTreeView * treeview) { 24 GtkListStore * store; 25 GtkTreeIter iter; 26 int n; store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); for ( n = 0; n < sizeof( data) / sizeof( data[ 0]); n++) { 31 gtk_ list_ store_ append ( store, & iter); 32 gtk_list_store_set (store, &iter, 33 COLUMN_ID, data[n].id, 34 COLUMN_NAME, data[n].name, 35 COLUMN_NAME_COLOR, data[n].color, 36 COLUMN_ NAME_ LINE, data[ n]. linestyle, -1); 37 } 38 } static GtkWidget* create_ list_ model ( void) { 41 GtkWidget * treeview; 42 GtkListStore * liststore; 43 GtkCellRenderer * renderer; 44 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_ COLUMNS,

190 G_TYPE_UINT, 48 G_ TYPE_ STRING, 49 G_ TYPE_ STRING, 50 G_TYPE_UINT); 51 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL( liststore)); 52 g_ object_ unref ( liststore); renderer = gtk_ cell_ renderer_ text_ new (); 55 column = 56 gtk_ tree_ view_ column_ new_ with_ attributes (" ID", renderer, 57 "text", COLUMN_ID, NULL); 58 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 61 column = 62 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 63 " text", COLUMN_ NAME, NULL); 64 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, 65 " background", COLUMN_ NAME_ COLOR); 66 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, 67 " underline", COLUMN_ NAME_ LINE); gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); return treeview; 72 } int main ( int argc, char ** argv) { 75 GtkWidget * window; 76 GtkWidget * treeview; gtk_init (&argc, &argv); 79 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 80 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkListStore Sample2"); 81 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 82 g_ signal_ connect ( G_ OBJECT( window), " destroy", 83 G_ CALLBACK( gtk_ main_ quit), NULL); 84 gtk_ widget_ set_ size_ request ( window, 300, 100); treeview = create_ list_ model (); 87 gtk_ container_ add ( GTK_ CONTAINER( window), treeview); add_ data ( GTK_ TREE_ VIEW( treeview)); gtk_ widget_ show_ all ( window); 92 gtk_main (); return 0; 95 }

191 ( 6 6 3) (7 ), gtk tree view get selection. Gtk- TreeSelection. NULL. GtkTreeSelection* gtk_ tree_ view_ get_ selection ( GtkTreeView * tree_ view); (11 ) 1 GtkTreeSelection, gtk tree selection get selected (GtkTreeIter). FALSE. gboolean gtk_ tree_ selection_ get_ selected ( GtkTreeSelection * selection, GtkTreeModel ** model, GtkTreeIter * iter); (12 ), gtk list store remove. TRUE. gboolean gtk_ list_ store_ remove ( GtkListStore * list_ store, GtkTreeIter * iter);

192 : gtkliststore-sample3.c 1 static void delete_ list ( GtkTreeView * treeview) { 2 GtkListStore * store; 3 GtkTreeSelection * selection; 4 GtkTreeIter iter; 5 gboolean success; 6 7 selection = gtk_ tree_ view_ get_ selection ( treeview); 8 if (! selection) return; 9 10 store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); 11 success = gtk_ tree_ selection_ get_ selected ( selection, NULL, & iter); 12 if ( success) gtk_ list_ store_ remove ( store, & iter); 13 } 6.6.4, gtk tree model iter next (26 31 ) gtk tree model iter next (GtkTreeIter). gboolean gtk_ tree_ model_ iter_ next ( GtkTreeModel * tree_ model, GtkTreeIter * iter); gtk tree model get iter first,. OK. gboolean gtk_ tree_ model_ get_ iter_ first ( GtkTreeModel * tree_ model, GtkTreeIter * iter); 6.31

193 180 6 gtk tree model foreach (1 12, 33 ) gtk tree model foreach. void gtk_ tree_ model_ foreach ( GtkTreeModel * model, GtkTreeModelForeachFunc func, gpointer user_ data); GtkTreeModelForeachFunc. gboolean (* GtkTreeModelForeachFunc) ( GtkTreeModel * model, GtkTreePath * path, GtkTreeIter * iter, gpointer data); (GtkTreeIter), gtk tree model get void gtk_ tree_ model_ get ( GtkTreeModel * tree_ model, GtkTreeIter * iter,...); : gtkliststore-sample4.c 1 static gboolean list_ print_ func ( GtkTreeModel * model, 2 GtkTreePath * path, 3 GtkTreeIter * iter, 4 gpointer user_ data) { 5 gchar * name; 6 7 gtk_ tree_ model_ get ( model, iter, COLUMN_ NAME, & name, -1); 8 g_print ("%s\n", name); 9 g_free (name); return FALSE; 12 } static void cb_ button_ print ( GtkButton * button, 15 gpointer user_ data) { 16 GtkTreeView * treeview; 17 GtkTreeModel * model; 18 GtkTreeIter iter; 19 gboolean success; 20 gchar * name; treeview = 23 GTK_TREE_VIEW(g_object_get_data (G_OBJECT(user_data), "treeview")); 24 model = GTK_ TREE_ MODEL( gtk_ tree_ view_ get_ model ( treeview)); 25 #if 1 26 success = gtk_ tree_ model_ get_ iter_ first ( model, & iter); 27 while ( success) {

194 gtk_tree_model_get (model, &iter, COLUMN_NAME, &name, -1); 29 g_print ("%s\n", name); 30 success = gtk_ tree_ model_ iter_ next ( model, & iter); 31 } 32 #else 33 gtk_ tree_ model_ foreach ( model, list_ print_ func, NULL); 34 #endif 35 } 6.6.5,,.., gtk tree selection get selected, gtk tree model iter next (47, 50 ).,, 15 33,. GtkTreeIter, gtk list store swap 2. void gtk_ list_ store_ swap ( GtkListStore * store, GtkTreeIter * a, GtkTreeIter *b); : gtkliststore-sample5.c 1 static void up_ list ( GtkTreeView * treeview) { 2 GtkListStore * store; 3 GtkTreeSelection * selection; 4 GtkTreeIter iter, pre_ iter; 5 gboolean success, selected; 6 7 selection = gtk_ tree_ view_ get_ selection ( treeview); 8 if (! selection) return;

195 store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); 11 success = gtk_ tree_ model_ get_ iter_ first ( GTK_ TREE_ MODEL( store), & iter); 12 if ( gtk_ tree_ selection_ iter_ is_ selected ( selection, & iter)) return; while ( success) { 15 if ( gtk_ tree_ selection_ iter_ is_ selected ( selection, & iter)) { 16 gtk_list_store_swap (store, &pre_iter, &iter); 17 break; 18 } else { 19 pre_ iter = iter; 20 success = gtk_ tree_ model_ iter_ next ( GTK_ TREE_ MODEL( store), & iter); 21 } 22 } 23 } static void down_ list ( GtkTreeView * treeview) { 26 GtkListStore * store; 27 GtkTreeSelection * selection; 28 GtkTreeIter iter, next_ iter; 29 gboolean success, selected; selection = gtk_ tree_ view_ get_ selection ( treeview); 32 if (! selection) return; store = GTK_ LIST_ STORE( gtk_ tree_ view_ get_ model ( treeview)); 35 success = gtk_ tree_ selection_ get_ selected ( selection, NULL, & iter); 36 if (success) { 37 next_ iter = iter; 38 if (gtk_tree_model_iter_next (GTK_TREE_MODEL(store), &next_iter)) { 39 gtk_list_store_swap (store, &iter, &next_iter); 40 } 41 } 42 } GtkCellRenderer GtkCellRenderer (GtkCellRendererText), (GtkCellRendererToggle), (GtkCellRendererPixbuf). GtkCellRendererText GtkCellRendererToggle. 6.14, GtkCellRendererText edited.

196 GtkCellRendererToggle toggled. void user_ function ( GtkCellRendererToggle * cellrenderertoggle, gchar * path_ string, gpointer user_ data); void user_ function ( GtkCellRendererText * cellrenderertext, gchar * path_ string, gchar *new_text, gpointer user_ data); GtkCellRendererText 50 51, GtkTreeView, treeview , gtk list store set. GtkCellRendererToggle, GtkTreeView, treeview , ,, GtkCellRenderer : gtkliststore-sample6.c 1 static void cb_ name_ edited ( GtkCellRendererText * renderer, 2 gchar * path_ string, 3 gchar * new_ text, 4 gpointer user_ data) { 6.33 GtkCellRenderer

197 GtkTreeModel * model; 6 GtkTreeIter iter; 7 GtkTreePath * path; 8 gboolean status; 9 10 model = gtk_ tree_ view_ get_ model ( GTK_ TREE_ VIEW( user_ data)); 11 path = gtk_ tree_ path_ new_ from_ string ( path_ string); gtk_tree_model_get_iter (model, &iter, path); 14 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 15 COLUMN_ NAME, new_ text, -1); 16 gtk_ tree_ path_ free ( path); 17 } static void cb_ status_ toggled ( GtkCellRendererToggle * renderer, 20 gchar * path_ string, 21 gpointer user_ data) { 22 GtkTreeModel * model; 23 GtkTreeIter iter; 24 GtkTreePath * path; 25 gboolean status; model = gtk_ tree_ view_ get_ model ( GTK_ TREE_ VIEW( user_ data)); 28 path = gtk_ tree_ path_ new_ from_ string ( path_ string); gtk_tree_model_get_iter (model, &iter, path); 31 gtk_ tree_ model_ get ( model, & iter, COLUMN_ STATUS, & status, -1); 32 gtk_list_store_set (GTK_LIST_STORE(model), &iter, 33 COLUMN_ STATUS,! status, -1); 34 gtk_ tree_ path_ free ( path); 35 } static GtkWidget* list_ new ( void) { 38 GtkWidget * treeview; 39 GtkListStore * liststore; 40 GtkCellRenderer * renderer; 41 GtkTreeViewColumn * column; liststore = gtk_ list_ store_ new ( N_ COLUMNS, 44 G_ TYPE_ BOOLEAN, 45 G_ TYPE_ STRING, 46 G_ TYPE_ BOOLEAN); 47 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL( liststore)); renderer = gtk_ cell_ renderer_ toggle_ new (); 50 g_ signal_ connect ( renderer, " toggled", 51 G_ CALLBACK( cb_ status_ toggled), treeview); 52 column = 53 gtk_ tree_ view_ column_ new_ with_ attributes (" Status", renderer, 54 " active", COLUMN_ STATUS,

198 NULL); 56 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); renderer = gtk_ cell_ renderer_ text_ new (); 59 g_ signal_ connect ( renderer, " edited", 60 G_ CALLBACK( cb_ name_ edited), treeview); 61 column = 62 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 63 " text", COLUMN_ NAME, 64 " editable", COLUMN_ EDITABLE, 65 NULL); 66 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); 67 return treeview; 68 } 6.6.7, gtk tree view column sort column id. GtkTreeViewColumn ID COLUMN NAME,. void gtk_ tree_ view_ column_ set_ sort_ column_ id( GtkTreeViewColumn * tree_ column, gint sort_ column_ id); : gtkliststore-sample7.c 1 renderer = gtk_ cell_ renderer_ text_ new (); 2 g_ signal_ connect ( renderer, " edited", 3 G_ CALLBACK( cb_ name_ edited), treeview); 4 column = 5 gtk_ tree_ view_ column_ new_ with_ attributes (" Name", renderer, 6 "text", COLUMN_NAME, 7 " editable", COLUMN_ EDITABLE, 8 NULL); 9 gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); 10 gtk_ tree_ view_ column_ set_ sort_ column_ id ( column, COLUMN_ NAME); 6.34

199 (65 66 ) GtkTreeStore., gtk tree store new. gtk list store new. GtkTreeStore* gtk_ tree_ store_ new ( gint n_ columns,...); (72 76 ).., gtk cell renderer pixbuf new. GtkCellRenderer* gtk_ cell_ renderer_ pixbuf_ new ( void); (GdkPixbuf), pixbuf. (42 46 ). 1. (43 ) gtk tree store append. 2 GtkTreeIter, 3 GtkTreeIter., 3 NULL. void gtk_ tree_ store_ append ( GtkTreeStore * tree_ store, GtkTreeIter * iter, GtkTreeIter * parent); 2. (44 46 )

200 gtk tree store append GtkTreeIter,. GtkTreeIter gtk tree store set,. 3, 1. void gtk_ tree_ store_ set ( GtkTreeStore * tree_ store, GtkTreeIter * iter,...);, GdkPixbuf. gdk pixbuf new from file GdkPixbuf. (102 ) gtk tree view set headers visible. 2 TRUE, FALSE. void gtk_ tree_ view_ set_ headers_ visible ( GtkTreeView * tree_ view, gboolean headers_ visible); : gtktreestore-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ ICON, 5 COLUMN_ LABEL, 6 N_ COLUMNS 7 }; 8 9 typedef struct _ TreeData TreeData; 10 struct _ TreeData { 11 gchar * iconname; 12 gchar * label; 13 TreeData * child; 14 }; static TreeData sublevel1[] = { 17 {"file.png", "file 1-1", NULL}, {"file.png", "file 1-2", NULL}, NULL 18 }; static TreeData sublevel2[] = { 21 {"file.png", "file 2-1", NULL}, {"file.png", "file 2-2", NULL}, NULL 22 }; static TreeData toplevel[] = { 25 {" folder. png", " Folder 1", sublevel1}, 26 {" folder. png", " Folder 2", sublevel2}, 27 NULL 28 }; 29

201 static void add_ data ( GtkTreeView * treeview) { 31 GtkTreeStore * store; 32 GtkTreeIter iter, child_ iter; 33 GdkPixbuf * pixbuf; 34 TreeData * top, * child; 35 int n; store = GTK_ TREE_ STORE( gtk_ tree_ view_ get_ model ( treeview)); top = toplevel; 40 while ( top - >iconname) { 41 child = top - >child; 42 pixbuf = gdk_ pixbuf_ new_ from_ file ( top - >iconname, NULL); 43 gtk_ tree_ store_ append ( store, & iter, NULL); 44 gtk_tree_store_set (store, &iter, 45 COLUMN_ ICON, pixbuf, 46 COLUMN_ LABEL, top - >label, -1); 47 while ( child - >iconname) { 48 pixbuf = gdk_ pixbuf_ new_ from_ file ( child - >iconname, NULL); 49 gtk_tree_store_append (store, &child_iter, &iter); 50 gtk_tree_store_set (store, &child_iter, 51 COLUMN_ ICON, pixbuf, 52 COLUMN_ LABEL, child - >label, -1); 53 child++; 54 } 55 top++; 56 } 57 } static GtkWidget* create_ tree_ model ( void) { 60 GtkWidget * treeview; 61 GtkTreeStore * treestore; 62 GtkCellRenderer * renderer; 63 GtkTreeViewColumn * column; treestore = gtk_ tree_ store_ new ( N_ COLUMNS, 66 GDK_ TYPE_ PIXBUF, G_ TYPE_ STRING); 67 treeview = gtk_ tree_ view_ new_ with_ model ( GTK_ TREE_ MODEL( treestore)); 68 g_ object_ unref ( treestore); column = gtk_ tree_ view_ column_ new (); renderer = gtk_ cell_ renderer_ pixbuf_ new (); 73 gtk_tree_view_column_set_title (column, "Folder"); 74 gtk_ tree_ view_ column_ pack_ start ( column, renderer, FALSE); 75 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, " pixbuf", 76 COLUMN_ ICON); renderer = gtk_ cell_ renderer_ text_ new (); 79 gtk_ tree_ view_ column_ pack_ start ( column, renderer, TRUE);

202 gtk_ tree_ view_ column_ add_ attribute ( column, renderer, " text", 81 COLUMN_ LABEL); gtk_ tree_ view_ append_ column ( GTK_ TREE_ VIEW( treeview), column); return treeview; 86 } int main ( int argc, 89 char **argv) { 90 GtkWidget * window; 91 GtkWidget * treeview; gtk_init (&argc, &argv); 94 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 95 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkTreeStore Sample1"); 96 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 97 g_ signal_ connect ( G_ OBJECT( window), " destroy", 98 G_ CALLBACK( gtk_ main_ quit), NULL); 99 gtk_ widget_ set_ size_ request ( window, 280, 240); treeview = create_ tree_ model (); 102 gtk_ tree_ view_ set_ headers_ visible ( GTK_ TREE_ VIEW( treeview), FALSE); 103 gtk_ container_ add ( GTK_ CONTAINER( window), treeview); add_ data ( GTK_ TREE_ VIEW( treeview)); gtk_ widget_ show_ all ( window); 108 gtk_main (); return 0; 111 } row-activated. g signal connect, (71 72 ). row-activated. void user_ function ( GtkTreeView * treeview, GtkTreePath * path, GtkTreeViewColumn * column, gpointer user_ data);,, gtk tree view expand row,, gtk tree view collapse row. gtk tree view expand row 3,.

203 190 6 gboolean gtk_ tree_ view_ expand_ row ( GtkTreeView * tree_ view, GtkTreePath * path, gboolean open_ all); gboolean gtk_ tree_ view_ collapse_ row ( GtkTreeView * tree_ view, GtkTreePath * path);.,, (18 34 ) : gtktreestore-sample2.c 1 static void get_ expanded_ path ( GtkTreeView * treeview, 2 GtkTreePath * path, 3 gpointer user_ data) { 4 GtkTreeModel * model; 5 GtkTreeIter iter; 6 GList ** list; 7 gchar * label; 8 9 list = user_ data; 10 model = gtk_ tree_ view_ get_ model ( treeview); gtk_tree_model_get_iter (model, &iter, path); 13 gtk_ tree_ model_ get ( model, & iter, COLUMN_ LABEL, & label, -1); *list = g_list_append (*list, label); 16 } static gboolean is_ expanded ( GtkTreeView * treeview, const gchar * label) { 19 GList * list = NULL, * node; 20 gboolean success = FALSE; gtk_ tree_ view_ map_ expanded_ rows ( treeview, get_ expanded_ path, & list); 23 for ( node = list; node; node = g_ list_ next ( node)) { 24 if ( strcmp (( char *) node - >data, label) == 0) { 25 success = TRUE; 26 break; 27 } 28 } 29 g_ list_ foreach ( list, ( GFunc) g_free, NULL); 30 g_list_free (list); return success; 33 } static void cb_ double_ clicked ( GtkTreeView * treeview, 36 GtkTreePath * path, 37 GtkTreeViewColumn * column, 38 gpointer data) {

204 GtkTreeModel * model; 40 GtkTreeIter iter; 41 gchar * label; model = gtk_ tree_ view_ get_ model ( treeview); 44 if (gtk_tree_model_get_iter (model, &iter, path)) { 45 gtk_ tree_ model_ get ( model, & iter, COLUMN_ LABEL, & label, -1); 46 if ( is_ expanded ( treeview, label)) { 47 gtk_ tree_ view_ collapse_ row ( treeview, path); 48 } else { 49 gtk_ tree_ view_ expand_ row ( treeview, path, FALSE); 50 } 51 g_ free ( label); 52 } 53 } int main ( int argc, char ** argv) { 56 GtkWidget * window; 57 GtkWidget * treeview; gtk_init (&argc, &argv); 60 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 61 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkTreeStore Sample1"); 62 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 63 g_ signal_ connect ( G_ OBJECT( window), " destroy", 64 G_ CALLBACK( gtk_ main_ quit), NULL); 65 gtk_ widget_ set_ size_ request ( window, 280, 240); treeview = create_ tree_ model (); 68 g_ signal_ connect ( treeview, " row - activated", 69 G_ CALLBACK( cb_ double_ clicked), NULL); 70 gtk_ tree_ view_ set_ headers_ visible ( GTK_ TREE_ VIEW( treeview), FALSE); 71 gtk_ container_ add ( GTK_ CONTAINER( window), treeview); add_ data ( GTK_ TREE_ VIEW( treeview)); gtk_ widget_ show_ all ( window); 76 gtk_main (); return 0; 79 } ,.,.. gtk tree store is ancestor 2 (iter) 3 (descendant) (

205 192 6 ) TRUE. gboolean gtk_ tree_ store_ is_ ancestor ( GtkTreeStore * tree_ store, GtkTreeIter * iter, GtkTreeIter * descendant); gtk tree store iter depth. 0. gint gtk_ tree_ store_ iter_ depth ( GtkTreeStore * tree_ store, GtkTreeIter * iter); (GtkTooltips),.,. GtkTooltips ( 6.36). GtkTooltips gtk tooltips new. GtkTooltips* gtk_ tooltips_ new ( void); GtkTooltips, gtk tooltips set tip,. void gtk_ tooltips_ set_ tip ( GtkTooltips * tooltips, GtkWidget * widget, const gchar * tip_ text, const gchar * tip_ private); 1 2, GtkTooltips. 3 4, ,,. 6.36,. 6.36

206 : gtktooltips-sample.c 1 # include <gtk/ gtk. h> 2 3 int main ( int argc, char ** argv) { 4 GtkWidget * window; 5 GtkWidget * hbox; 6 GtkTooltips * tooltips; 7 GtkWidget * button; 8 9 gtk_init (&argc, &argv); 10 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 11 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkTooltips Sample"); 12 g_ signal_ connect ( G_ OBJECT( window), " destroy", 13 G_ CALLBACK( gtk_ main_ quit, NULL); 14 hbox = gtk_ hbox_ new ( FALSE, 0); 15 gtk_ container_ add ( GTK_ CONTAINER ( window), hbox); tooltips = gtk_ tooltips_ new (); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ NEW); 20 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); 21 gtk_ tooltips_ set_ tip ( GTK_ TOOLTIPS( tooltips), button, 22 " Run new program", " Run new program"); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ OPEN); 25 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); 26 gtk_ tooltips_ set_ tip ( GTK_ TOOLTIPS( tooltips), button, 27 "Open a file", "Open a file"); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 30 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); 31 gtk_ tooltips_ set_ tip ( GTK_ TOOLTIPS( tooltips), button, 32 " Quit this program", " Quit this program"); 33 g_ signal_ connect ( G_ OBJECT( button), " clicked", 34 G_ CALLBACK( gtk_ main_ quit), NULL); gtk_ widget_ show_ all ( window); 37 gtk_main (); return 0; 40 }

207 (GtkProgressBar),., 6.37,, ( ), 6.37, ( )., 6.37,. GObject +----GtkObject +----GtkWidget +----GtkProgress +----GtkProgressBar, gtk progress bar new. GtkWidget* gtk_ progress_ bar_ new ( void);,., gtk progress bar pulse. void gtk_ progress_ bar_ pulse ( GtkProgressBar * pbar); 6.37

208 gtk progress bar set pulse step, void gtk_ progress_ bar_ set_ pulse_ step ( GtkProgressBar * pbar, gdouble fraction);, gtk progress bar set fraction., void gtk_ progress_ bar_ set_ fraction ( GtkProgressBar * pbar, gdouble fraction);., gtk progress bar get fraction., gtk progress bar set fracktion,. gdouble gtk_ progress_ bar_ get_ fraction ( GtkProgressBar * pbar);, gtk progress bar set orientation,., gtk progress bar get orientation,. void gtk_ progress_ bar_ set_ orientation ( GtkProgressBar * pbar, GtkProgressBarOrientation orientation); GtkProgressBarOrientation. typedef enum { GTK_ PROGRESS_ LEFT_ TO_ RIGHT, GTK_ PROGRESS_ RIGHT_ TO_ LEFT, GTK_ PROGRESS_ BOTTOM_ TO_ TOP, GTK_ PROGRESS_ TOP_ TO_ BOTTOM } GtkProgressBarOrientation;,., %., gtk progress bar set text., gtk progress bar get text. void gtk_ progress_ bar_ set_ text ( GtkProgressBar * pbar, const gchar * text);

209 196 6 G_ CONST_ RETURN gchar* gtk_ progress_ bar_ get_ text ( GtkProgressBar * pbar); ,.,, glib (g timeout add) : gtkprogressbar-sample.c 1 # include <gtk/ gtk. h> 2 3 static gboolean activity_ mode = 0; 4 static gboolean show_ text = 0; 5 static gint timer = 0; 6 7 static gboolean progressbar_ update ( gpointer data) { 8 GtkProgressBar * progressbar = GTK_ PROGRESS_ BAR( data); 9 gdouble new_ val; 10 const gchar * text; 11 gchar label[ 256]; if (! activity_ mode) { 14 gtk_ progress_ bar_ pulse( progressbar); 15 } else { 16 new_ val = gtk_ progress_ bar_ get_ fraction ( progressbar) ; 17 if ( new_ val > 1. 0) new_ val = 0. 0; 18 gtk_ progress_ bar_ set_ fraction ( progressbar, new_ val); 19 if ( show_ text) { 20 sprintf (label, "%3d%s", (int) (new_val * 100.0), "%"); 21 gtk_ progress_ bar_ set_ text ( progressbar, label); 22 } 23 } 24 return TRUE; 25 } static void cb_ show_ text ( GtkToggleButton * widget, gpointer data) { 28 if ( show_ text) { 29 gtk_progress_bar_set_text (GTK_PROGRESS_BAR(data), ""); 30 show_ text = FALSE; 31 } else { 32 show_ text = TRUE; 33 } 34 } static void cb_ activity_ mode ( GtkToggleButton * widget, gpointer data) { 37 activity_ mode = gtk_ toggle_ button_ get_ active ( widget);

210 if ( activity_ mode) { 39 gtk_ progress_ bar_ set_ fraction ( GTK_ PROGRESS_ BAR( data), 0. 0); 40 } else { 41 gtk_ progress_ bar_ pulse ( GTK_ PROGRESS_ BAR( data)); 42 } 43 } static void cb_ orientation ( GtkToggleButton * widget, gpointer data) { 46 GtkProgressBarOrientation orientation; orientation = 49 gtk_ progress_ bar_ get_ orientation ( GTK_ PROGRESS_ BAR( data)); 50 switch ( orientation) { 51 case GTK_ PROGRESS_ LEFT_ TO_ RIGHT: 52 gtk_ progress_ bar_ set_ orientation ( GTK_ PROGRESS_ BAR( data), 53 GTK_ PROGRESS_ RIGHT_ TO_ LEFT); 54 break; 55 case GTK_ PROGRESS_ RIGHT_ TO_ LEFT: 56 gtk_ progress_ bar_ set_ orientation ( GTK_ PROGRESS_ BAR( data), 57 GTK_ PROGRESS_ LEFT_ TO_ RIGHT); 58 break; 59 default: 60 break; 61 } 62 } static void cb_ quit ( GtkButton * widget, gpointer data) { 65 g_ source_ remove ( timer); 66 gtk_main_quit (); 67 } int main ( int argc, char ** argv) { 70 GtkWidget * window; 71 GtkWidget * vbox; 72 GtkWidget * progressbar; 73 GtkWidget * button; gtk_init (&argc, &argv); 76 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 77 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkProgressBar Sample"); 78 gtk_ widget_ set_ size_ request ( window, 300, -1); 79 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 80 g_ signal_ connect ( G_ OBJECT( window), " destroy", 81 G_ CALLBACK( cb_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 5); 84 gtk_ container_ add ( GTK_ CONTAINER ( window), vbox); progressbar = gtk_ progress_ bar_ new (); 87 gtk_ box_ pack_ start ( GTK_ BOX( vbox), progressbar, FALSE, FALSE, 0);

211 button = gtk_ check_ button_ new_ with_ label (" Show Text"); 90 gtk_ box_ pack_ start ( GTK_ BOX( vbox), button, FALSE, FALSE, 0); 91 g_ signal_ connect ( G_ OBJECT( button), " clicked", 92 G_ CALLBACK( cb_ show_ text), progressbar); button = gtk_ check_ button_ new_ with_ label (" Activity Mode"); 95 gtk_ box_ pack_ start ( GTK_ BOX( vbox), button, FALSE, FALSE, 0); 96 g_ signal_ connect ( G_ OBJECT( button), " clicked", 97 G_ CALLBACK( cb_ activity_ mode), progressbar); button = gtk_ check_ button_ new_ with_ label (" Right to Left"); 100 gtk_ box_ pack_ start ( GTK_ BOX( vbox), button, FALSE, FALSE, 0); 101 g_ signal_ connect ( G_ OBJECT( button), " clicked", 102 G_ CALLBACK( cb_ orientation), progressbar); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ QUIT); 105 gtk_ box_ pack_ start ( GTK_ BOX( vbox), button, FALSE, FALSE, 0); 106 g_ signal_ connect ( G_ OBJECT( button), " clicked", 107 G_ CALLBACK( gtk_ main_ quit), NULL); timer = g_ timeout_ add (100, progressbar_ update, progressbar); gtk_ widget_ show_ all ( window); 112 gtk_main (); return 0; 115 } (GtkSeparator), GUI. GObject +----GtkObject +----GtkWidget +----GtkSeparator +----GtkHSeparator +----GtkVSeparator. gtk hseparator new..

212 GtkWidget* gtk_ hseparator_ new ( void); gtk vseparator new. GtkWidget* gtk_ vseparator_ new ( void); (GtkScale), GUI., ( 6.38). GObject +----GtkObject +----GtkWidget +----GtkRange +----GtkScale +----GtkHScale +----GtkVScale,. gtk hscale new GtkAdjustment,. GtkWidget* gtk_ hscale_ new ( GtkAdjustment * adjustment); gtk hscale new with range. GtkWidget* gtk_ hscale_ new_ with_ range ( gdouble min, gdouble max, gdouble step); gtk vscale new GtkAdjustment,. GtkWidget* gtk_ vscale_ new ( GtkAdjustment * adjustment); gtk vscale new with range. 6.38

213 200 6 GtkWidget* gtk_ vscale_ new_ with_ range ( gdouble min, gdouble max, gdouble step); value-changed.. value-changed. 1 GtkScale GtkRange, GtkRange. gboolean user_ function ( GtkRange * range, gpointer user_ data);. gtk range get value. gtk range set value. gdouble gtk_ range_ get_ value ( GtkRange * range); void gtk_ range_ set_ value ( GtkRange * range, gdouble value);,.. gtk scale set draw value. gtk scale get draw value. void gtk_ scale_ set_ draw_ value ( GtkScale * scale, gboolean draw_ value); gboolean gtk_ scale_ get_ draw_ value ( GtkScale * scale);,., gtk scale set value pos gtk scale get value pos. void gtk_ scale_ set_ value_ pos ( GtkScale * scale, GtkPositionType pos); GtkPositionType gtk_ scale_ get_ value_ pos ( GtkScale * scale);,. void gtk_ scale_ set_ digits ( GtkScale * scale, gint digits); gint gtk_ scale_ get_ digits ( GtkScale * scale);

214 : gtkscale-sample.c 1 # include <gtk/ gtk. h> 2 3 static void cb_ value_ changed ( GtkScale * scale, gpointer data) { 4 g_print ("value = %f\n", gtk_range_get_value (GTK_RANGE(scale))); 5 } 6 7 static void cb_ button ( GtkButton * button, gpointer data) { 8 g_print ("value = %f\n", gtk_range_get_value (GTK_RANGE(data))); 9 } int main ( int argc, char ** argv) { 12 GtkWidget * window; 13 GtkWidget * hbox; 14 GtkWidget * label; 15 GtkWidget * scale; 16 GtkWidget * button; 17 gdouble min = 0.0, max = 100.0, step = 0. 1; gtk_init (&argc, &argv); 20 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 21 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkScale Sample"); 22 gtk_ widget_ set_ size_ request ( window, 400, -1); 23 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 24 g_ signal_ connect ( G_ OBJECT( window), " destroy", 25 G_ CALLBACK( gtk_ main_ quit), NULL); hbox = gtk_ hbox_ new ( FALSE, 5); 28 gtk_ container_ add ( GTK_ CONTAINER( window), hbox); label = gtk_label_new ("Input :"); 31 gtk_ box_ pack_ start ( GTK_ BOX( hbox), label, FALSE, FALSE, 0); scale = gtk_ hscale_ new_ with_ range ( min, max, step); 34 gtk_ scale_ set_ digits ( GTK_ SCALE( scale), 2); 35 gtk_ scale_ set_ draw_ value ( GTK_ SCALE( scale), TRUE); 36 gtk_ scale_ set_ value_ pos ( GTK_ SCALE( scale), GTK_ POS_ BOTTOM); g_ signal_ connect ( G_ OBJECT( scale), " value_ changed", 39 G_ CALLBACK( cb_ value_ changed), NULL); 40 gtk_box_pack_start (GTK_BOX(hbox), scale, TRUE, TRUE, 0); button = gtk_ button_ new_ from_ stock ( GTK_ STOCK_ APPLY); 43 g_ signal_ connect ( G_ OBJECT( button), " clicked", 44 G_ CALLBACK( cb_ button), ( gpointer) scale);

215 gtk_ box_ pack_ start ( GTK_ BOX( hbox), button, FALSE, FALSE, 0); gtk_ widget_ show_ all ( window); 48 gtk_main (); return 0; 51 } (GtkIconView), ( 6.39) GObject +----GInitiallyUnowned +----GtkObject +----GtkWidget +----GtkContainer +----GtkIconView gtk icon view new, gtk icon view new with model. GtkWidget* gtk_ icon_ view_ new ( void); GtkWidget* gtk_ icon_ view_ new_ with_ model ( GtkTreeModel * model); 2, GtkTreeModel.

216 item-activated select-all unselect-all... gtk list store new. (GdkPixbuf )... GtkListStore * store; store = gtk_ list_ store_ new (2, G_ TYPE_ STRING, GDK_ TYPE_ PIXBUF); gtk icon view new, gtk icon view set model. void gtk_ icon_ view_ set_ model ( GtkIconView * icon_ view, GtkTreeModel * model);,.. void gtk_ icon_ view_ set_ text_ column ( GtkIconView * icon_ view, gint column); void gtk_ icon_ view_ set_ pixbuf_ column ( GtkIconView * icon_ view, gint column); 2,. 0., gtk list store append gtk list store set item-activated.,,. item-activated.

217 204 6 void user_ function ( GtkIconView * iconview, GtkTreePath * arg1, gpointer user_ data); 2 gtk tree model get iter, Gtk- TreeIter ,. void gtk_ icon_ view_ set_ columns ( GtkIconView * icon_ view, gint columns); gint gtk_ icon_ view_ get_ columns ( GtkIconView * icon_ view); (margin). void gtk_ icon_ view_ set_ margin ( GtkIconView * icon_ view, gint margin); gint gtk_ icon_ view_ get_ margin ( GtkIconView * icon_ view); (item width). 1,. void gtk_ icon_ view_ set_ item_ width ( GtkIconView * icon_ view, gint item_ width); gint gtk_ icon_ view_ get_ item_ width ( GtkIconView * icon_ view); (column spacing). void gtk_ icon_ view_ set_ column_ spacing ( GtkIconView * icon_ view, gint column_ spacing); margin item width spacing column spacing row spacing 6.40

218 gint gtk_ icon_ view_ get_ column_ spacing ( GtkIconView * icon_ view); (row spacing). void gtk_ icon_ view_ set_ row_ spacing ( GtkIconView * icon_ view, gint row_ spacing); gint gtk_ icon_ view_ get_ row_ spacing ( GtkIconView * icon_ view); (spacing). void gtk_ icon_ view_ set_ spacing ( GtkIconView * icon_ view, gint spacing); gint gtk_ icon_ view_ get_ spacing ( GtkIconView * icon_ view);. GtkOrientation. void gtk_ icon_ view_ set_ orientation ( GtkIconView * icon_ view, GtkOrientation orientation); GtkOrientation gtk_ icon_ view_ get_ orientation ( GtkIconView * icon_ view); /. void gtk_ icon_ view_ set_ reorderable ( GtkIconView * icon_ view, gboolean reorderable); gboolean gtk_ icon_ view_ get_ reorderable ( GtkIconView * icon_ view);. GtkSelectionMode. void gtk_ icon_ view_ set_ selection_ mode ( GtkIconView * icon_ view, GtkSelectionMode mode); GtkSelectionMode gtk_ icon_ view_ get_ selection_ mode ( GtkIconView * icon_ view); typedef enum { GTK_ SELECTION_ NONE, /* Nothing can be selected */ GTK_ SELECTION_ SINGLE, GTK_ SELECTION_ BROWSE, GTK_ SELECTION_ MULTIPLE, GTK_ SELECTION_ EXTENDED = GTK_ SELECTION_ MULTIPLE /* Deprecated */ } GtkSelectionMode;

219 : gtkiconview-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ NAME, 5 COLUMN_ PIXBUF, 6 N_ COLUMNS 7 }; 8 9 static GdkPixbuf * file_ pixbuf, * folder_ pixbuf; 10 static gchar* currentdir; static void load_ pixbuf ( void) { 13 file_ pixbuf = gdk_ pixbuf_ new_ from_ file (" file. png", NULL); 14 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file (" folder. png", NULL); 15 } static void add_ data ( GtkIconView * iconview) { 18 GtkListStore * store; 19 GDir * dir; 20 const gchar * name; 21 GtkTreeIter iter; store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); gtk_ list_ store_ clear ( store); gtk_ list_ store_ append ( store, & iter); 28 gtk_list_store_set (store, &iter, 29 COLUMN_ NAME, " folder. png", 30 COLUMN_ PIXBUF, folder_ pixbuf, -1); gtk_ list_ store_ append ( store, & iter); 33 gtk_list_store_set (store, &iter, 34 COLUMN_NAME, "file.png", 35 COLUMN_ PIXBUF, file_ pixbuf, -1); 36 } static GtkWidget* create_ icon_ view_ widget ( void) { 39 GtkWidget * iconview; 40 GtkListStore * store; 41

220 store = gtk_ list_ store_ new ( N_ COLUMNS, G_ TYPE_ STRING, GDK_ TYPE_ PIXBUF); 43 iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL( store)); 44 g_ object_ unref ( store); return iconview; 47 } static void cb_ item_ activated ( GtkIconView * iconview, 50 GtkTreePath * treepath, 51 gpointer data) { 52 GtkListStore * store; 53 GtkTreeIter iter; 54 gchar * name; store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); 57 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL( store), & iter, treepath); 58 gtk_tree_model_get (GTK_TREE_MODEL(store), &iter, 59 COLUMN_NAME, &name, -1); 60 g_print ("item %s is clicked.\n", name); 61 g_free (name); 62 } int main ( int argc, char ** argv) { 65 GtkWidget * window; 66 GtkWidget * scrolled_ window; 67 GtkWidget * iconview; gtk_init (&argc, &argv); 70 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 71 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkIconView Sample1"); 72 gtk_ widget_ set_ size_ request ( window, 500, 300); 73 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 74 g_ signal_ connect ( G_ OBJECT( window), " destroy", 75 G_ CALLBACK( gtk_ main_ quit), NULL); scrolled_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 78 gtk_ scrolled_ window_ set_ shadow_ type( GTK_ SCROLLED_ WINDOW( scrolled_ window), 79 GTK_ SHADOW_ ETCHED_ IN); 80 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW( scrolled_ window), 81 GTK_ POLICY_ AUTOMATIC, 82 GTK_ POLICY_ AUTOMATIC); 83 gtk_ container_ add ( GTK_ CONTAINER( window), scrolled_ window); load_ pixbuf (); iconview = create_ icon_ view_ widget (); 88 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW( iconview), COLUMN_ NAME); 89 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW( iconview), COLUMN_ PIXBUF); 90 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW( iconview), 128); 91 g_ signal_ connect ( G_ OBJECT( iconview), " item_ activated",

221 G_ CALLBACK( cb_ item_ activated), NULL); gtk_ container_ add ( GTK_ CONTAINER( scrolled_ window), iconview); add_ data ( GTK_ ICON_ VIEW( iconview)); gtk_ widget_ show_ all ( window); 99 gtk_main (); return 0; 102 }..,.,, , (98 99 ) gtk tree sortable set default sort func. void gtk_ tree_ sortable_ set_ default_ sort_ func ( GtkTreeSortable * sortable, GtkTreeIterCompareFunc sort_ func, gpointer user_ data, GtkDestroyNotify destroy); ( ) gtk tree sortable set sort column id.,., GtkSortType. 2 GTK TREE SORTABLE DEFAULT SORT COLUMN ID, gtk tree sortable set default sort func. void gtk_ tree_ sortable_ set_ sort_ column_ id ( GtkTreeSortable * sortable, gint sort_ column_ id, GtkSortType order); typedef enum { GTK_ SORT_ ASCENDING, GTK_ SORT_ DESCENDING } GtkSortType;

222 : gtkiconview-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ PATH, 5 COLUMN_ DISPLAY_ NAME, 6 COLUMN_ PIXBUF, 7 COLUMN_ IS_ DIRECTORY, 8 N_ COLUMNS 9 }; static GdkPixbuf * file_ pixbuf, * folder_ pixbuf; 12 static gchar* currentdir; static void load_ pixbuf ( void) { 15 file_ pixbuf = gdk_ pixbuf_ new_ from_ file (" file. png", NULL); 16 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file (" folder. png", NULL); 17 } static void add_ data ( GtkIconView * iconview) { 20 GtkListStore * store; 21 GDir * dir; 22 const gchar * name; 23 GtkTreeIter iter; store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); gtk_ list_ store_ clear ( store); 6.41

223 dir = g_ dir_ open ( currentdir, 0, NULL); 30 if (! dir) return; while ( name = g_ dir_ read_ name ( dir)) { 33 gchar * path, * display_ name; 34 gboolean is_ dir; if (name[0]!=. ) { 37 path = g_ build_ filename ( currentdir, name, NULL); 38 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 39 display_ name = g_ filename_ to_ utf8 ( name, -1, NULL, NULL, NULL); gtk_ list_ store_ append ( store, & iter); 42 gtk_list_store_set (store, &iter, 43 COLUMN_ PATH, path, 44 COLUMN_ DISPLAY_ NAME, display_ name, 45 COLUMN_ IS_ DIRECTORY, is_dir, 46 COLUMN_ PIXBUF, 47 ( is_ dir)? folder_ pixbuf : file_ pixbuf, -1); 48 g_free (path); 49 g_ free ( display_ name); 50 } 51 } 52 g_dir_close (dir); if (g_utf8_collate (currentdir, "/")!= 0) { 55 gtk_ list_ store_ append ( store, & iter); 56 gtk_list_store_set (store, &iter, 57 COLUMN_ PATH, g_ path_ get_ dirname ( currentdir), 58 COLUMN_DISPLAY_NAME, "..", 59 COLUMN_ IS_ DIRECTORY, TRUE, 60 COLUMN_ PIXBUF, folder_ pixbuf, -1); 61 } 62 } static gint sort_ func ( GtkTreeModel * model, 65 GtkTreeIter * a, 66 GtkTreeIter * b, 67 gpointer data) { 68 gboolean is_ dir_ a, is_ dir_ b; 69 gchar * name_a, * name_ b; 70 int result; gtk_ tree_ model_ get ( model, a, 73 COLUMN_IS_DIRECTORY, &is_dir_a, 74 COLUMN_ DISPLAY_ NAME, & name_a, 75-1); 76 gtk_ tree_ model_ get ( model, b, 77 COLUMN_IS_DIRECTORY, &is_dir_b,

224 COLUMN_ DISPLAY_ NAME, & name_b, 79-1); 80 if (!is_dir_a && is_dir_b) { 81 result = 1; 82 } else if (is_dir_a &&!is_dir_b) { 83 result = -1; 84 } else { 85 result = g_ utf8_ collate ( name_a, name_ b); 86 } 87 return result; 88 } static GtkWidget* create_ icon_ view_ widget ( void) { 91 GtkWidget * iconview; 92 GtkListStore * store; currentdir = g_ get_ current_ dir (); 95 store = gtk_ list_ store_ new( N_ COLUMNS, 96 G_ TYPE_ STRING, G_ TYPE_ STRING, GDK_ TYPE_ PIXBUF, 97 G_ TYPE_ BOOLEAN); 98 gtk_ tree_ sortable_ set_ default_ sort_ func ( GTK_ TREE_ SORTABLE( store), 99 sort_ func, NULL, NULL); 100 gtk_ tree_ sortable_ set_ sort_ column_ id 101 ( GTK_ TREE_ SORTABLE ( store), GTK_ TREE_ SORTABLE_ DEFAULT_ SORT_ COLUMN_ ID, 102 GTK_ SORT_ ASCENDING); iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL( store)); 105 g_ object_ unref ( store); return iconview; 108 } static void cb_ item_ activated ( GtkIconView * iconview, 111 GtkTreePath * treepath, 112 gpointer data) { 113 GtkListStore * store; 114 GtkTreeIter iter; 115 gchar * path; 116 gboolean is_ dir; store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); 119 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL( store), & iter, treepath); 120 gtk_tree_model_get(gtk_tree_model(store), &iter, 121 COLUMN_ PATH, & path, COLUMN_ IS_ DIRECTORY, & is_dir, -1); 122 if (is_dir) { 123 g_ free ( currentdir); 124 currentdir = g_ strdup ( path); 125 add_ data ( iconview); 126 } 127 g_ free ( path);

225 } int main ( int argc, char ** argv) { 131 GtkWidget * window; 132 GtkWidget * scrolled_ window; 133 GtkWidget * iconview; gtk_init (&argc, &argv); 136 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 137 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkIconView Sample2"); 138 gtk_ widget_ set_ size_ request ( window, 500, 300); 139 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 140 g_ signal_ connect ( G_ OBJECT( window), " destroy", 141 G_ CALLBACK( gtk_ main_ quit), NULL); scrolled_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 144 gtk_ scrolled_ window_ set_ shadow_ type( GTK_ SCROLLED_ WINDOW( scrolled_ window), 145 GTK_ SHADOW_ ETCHED_ IN); 146 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW( scrolled_ window), 147 GTK_ POLICY_ AUTOMATIC, 148 GTK_ POLICY_ AUTOMATIC); 149 gtk_ container_ add ( GTK_ CONTAINER( window), scrolled_ window); load_ pixbuf (); iconview = create_ icon_ view_ widget (); 154 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW( iconview), 155 COLUMN_ DISPLAY_ NAME); 156 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW( iconview), COLUMN_ PIXBUF); 157 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW( iconview), 80); 158 g_ signal_ connect ( G_ OBJECT( iconview), " item_ activated", 159 G_ CALLBACK( cb_ item_ activated), NULL); gtk_ icon_ view_ set_ margin ( GTK_ ICON_ VIEW( iconview), 16); 162 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW( iconview), 80); 163 gtk_ icon_ view_ set_ spacing ( GTK_ ICON_ VIEW( iconview), 16); 164 gtk_ icon_ view_ set_ spacing ( GTK_ ICON_ VIEW( iconview), 16); 165 gtk_ icon_ view_ set_ column_ spacing ( GTK_ ICON_ VIEW( iconview), 32); 166 gtk_ icon_ view_ set_ row_ spacing ( GTK_ ICON_ VIEW( iconview), 32); gtk_ container_ add ( GTK_ CONTAINER( scrolled_ window), iconview); add_ data ( GTK_ ICON_ VIEW( iconview)); gtk_ widget_ show_ all ( window); 173 gtk_main (); return 0; 176 }

226 (GtkEntryCompletion),.,. GObject +----GtkEntryCompletion gtk entry completion new. GtkEntryCompletion* gtk_ entry_ completion_ new ( void); gtk list store new. G TYPE STRING. gtk entry completion set model. gtk entry completion set text column.. void gtk_ entry_ completion_ set_ model ( GtkEntryCompletion * completion, GtkTreeModel * model); void gtk_ entry_ completion_ set_ text_ column ( GtkEntryCompletion * completion, gint column); a, ai, aiu

227 : gtkientrycompletion-sample1.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ COMPLETION_ TEXT, 5 N_ COLUMNS 6 }; 7 8 static GtkEntryCompletion* create_ completion_ widget ( void) { 9 GtkEntryCompletion * completion; 10 GtkListStore * store; 11 GtkTreeIter iter; completion = gtk_ entry_ completion_ new (); 14 store = gtk_ list_ store_ new ( N_ COLUMNS, G_ TYPE_ STRING); 15 gtk_ entry_ completion_ set_ model ( completion, GTK_ TREE_ MODEL( store)); 16 g_ object_ unref ( store); 17 gtk_ entry_ completion_ set_ text_ column ( completion, 0); gtk_ list_ store_ append ( store, & iter); 20 gtk_ list_ store_ set ( store, & iter, COLUMN_ COMPLETION_ TEXT, " a", -1); gtk_ list_ store_ append ( store, & iter); 23 gtk_ list_ store_ set ( store, & iter, COLUMN_ COMPLETION_ TEXT, " ai", -1); gtk_ list_ store_ append ( store, & iter); 26 gtk_ list_ store_ set ( store, & iter, COLUMN_ COMPLETION_ TEXT, " aiu", -1); return completion; 29 } int main ( int argc, char ** argv) { 32 GtkWidget * window; 33 GtkWidget * entry; 34 GtkEntryCompletion * completion; gtk_init (&argc, &argv); 37 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 38 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkEntryCompletion Sample 1"); 39 gtk_ widget_ set_ size_ request ( window, 320, -1); 40 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 41 g_ signal_ connect ( G_ OBJECT( window), " destroy", 42 G_ CALLBACK( gtk_ main_ quit), NULL); entry = gtk_ entry_ new (); 45 gtk_ container_ add ( GTK_ CONTAINER( window), entry); 46

228 completion = create_ completion_ widget (); 48 gtk_ entry_ set_ completion ( GTK_ ENTRY( entry), completion); 49 g_ object_ unref ( completion); gtk_ widget_ show_ all ( window); 52 gtk_main (); return 0; 55 } ,,., gtk tree sortable set sort column id, ( 6.43)

229 : gtkientrycompletion-sample2.c 1 # include <gtk/ gtk. h> 2 3 enum { 4 COLUMN_ COMPLETION_ TEXT, 5 N_ COMPLETION_ COLUMNS 6 }; 7 8 enum { 9 COLUMN_ PATH, 10 COLUMN_ DISPLAY_ NAME, 11 COLUMN_ PIXBUF, 12 COLUMN_ IS_ DIRECTORY, 13 N_ ICONVIEW_ COLUMNS 14 }; static GdkPixbuf * file_ pixbuf, * folder_ pixbuf; 17 static gchar* currentdir; static GtkEntryCompletion* create_ completion_ widget ( void) { 20 GtkEntryCompletion * completion; 21 GtkTreeModel * completion_ model; completion = gtk_ entry_ completion_ new (); 24 completion_ model = 25 GTK_ TREE_ MODEL( gtk_ list_ store_ new ( N_ COMPLETION_ COLUMNS, 26 G_TYPE_STRING)); 27 gtk_ tree_ sortable_ set_ sort_ column_ id 28 ( GTK_ TREE_ SORTABLE ( completion_ model), COLUMN_ COMPLETION_ TEXT, 29 GTK_ SORT_ ASCENDING); 30 gtk_ entry_ completion_ set_ model ( completion, completion_ model); 31 g_ object_ unref ( completion_ model); 32 gtk_ entry_ completion_ set_ text_ column ( completion, 0); return completion; 35 } static void load_ pixbuf ( void) { 38 file_ pixbuf = gdk_ pixbuf_ new_ from_ file (" file. png", NULL); 39 folder_ pixbuf = gdk_ pixbuf_ new_ from_ file (" folder. png", NULL); 40 } static void add_ data ( GtkIconView * iconview, 43 GtkEntryCompletion * completion) { 44 GtkListStore * iconview_ store, * completion_ store; 45 GDir * dir; 46 const gchar * name;

230 GtkTreeIter iter; iconview_ store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); 50 completion_ store 51 = GTK_ LIST_ STORE( gtk_ entry_ completion_ get_ model ( completion)); gtk_ list_ store_ clear ( iconview_ store); 54 gtk_ list_ store_ clear ( completion_ store); dir = g_ dir_ open ( currentdir, 0, NULL); 57 if (! dir) return; while ( name = g_ dir_ read_ name ( dir)) { 60 gchar * path, * display_ name; 61 gboolean is_ dir; if (name[0]!=. ) { 64 path = g_ build_ filename ( currentdir, name, NULL); 65 is_dir = g_file_test (path, G_FILE_TEST_IS_DIR); 66 display_ name = g_ filename_ to_ utf8 ( name, -1, NULL, NULL, NULL); gtk_ list_ store_ append ( iconview_ store, & iter); 69 gtk_ list_ store_ set ( iconview_ store, & iter, 70 COLUMN_ PATH, path, 71 COLUMN_ DISPLAY_ NAME, display_ name, 72 COLUMN_ IS_ DIRECTORY, is_dir, 73 COLUMN_ PIXBUF, 74 ( is_ dir)? folder_ pixbuf : file_ pixbuf, -1); gtk_ list_ store_ append ( completion_ store, & iter); 77 gtk_ list_ store_ set ( completion_ store, & iter, 78 COLUMN_ COMPLETION_ TEXT, display_ name, -1); 79 g_free (path); 80 g_ free ( display_ name); 81 } 82 } 83 g_dir_close (dir); if (g_utf8_collate (currentdir, "/")!= 0) { 86 gtk_ list_ store_ append ( iconview_ store, & iter); 87 gtk_ list_ store_ set ( iconview_ store, & iter, 88 COLUMN_ PATH, g_ path_ get_ dirname ( currentdir), 89 COLUMN_DISPLAY_NAME, "..", 90 COLUMN_ IS_ DIRECTORY, TRUE, 91 COLUMN_ PIXBUF, folder_ pixbuf, -1); 92 } 93 } static gint sort_ func ( GtkTreeModel * model, 96 GtkTreeIter * a,

231 GtkTreeIter * b, 98 gpointer data) { 99 gboolean is_ dir_ a, is_ dir_ b; 100 gchar * name_a, * name_ b; 101 int result; gtk_ tree_ model_ get ( model, a, 104 COLUMN_IS_DIRECTORY, &is_dir_a, 105 COLUMN_ DISPLAY_ NAME, & name_a, 106-1); 107 gtk_ tree_ model_ get ( model, b, 108 COLUMN_IS_DIRECTORY, &is_dir_b, 109 COLUMN_ DISPLAY_ NAME, & name_b, 110-1); 111 if (!is_dir_a && is_dir_b) { 112 result = 1; 113 } else if (is_dir_a &&!is_dir_b) { 114 result = -1; 115 } else { 116 result = g_ utf8_ collate ( name_a, name_ b); 117 } 118 return result; 119 } static GtkWidget* create_ icon_ view_ widget ( void) { 122 GtkWidget * iconview; 123 GtkListStore * store; currentdir = g_ get_ current_ dir (); 126 store = gtk_ list_ store_ new( N_ ICONVIEW_ COLUMNS, 127 G_ TYPE_ STRING, G_ TYPE_ STRING, GDK_ TYPE_ PIXBUF, 128 G_ TYPE_ BOOLEAN); 129 gtk_ tree_ sortable_ set_ default_ sort_ func ( GTK_ TREE_ SORTABLE( store), 130 sort_ func, NULL, NULL); 131 gtk_ tree_ sortable_ set_ sort_ column_ id 132 ( GTK_ TREE_ SORTABLE ( store), GTK_ TREE_ SORTABLE_ DEFAULT_ SORT_ COLUMN_ ID, 133 GTK_ SORT_ ASCENDING); iconview = gtk_ icon_ view_ new_ with_ model ( GTK_ TREE_ MODEL( store)); 136 g_ object_ unref ( store); return iconview; 139 } static void cb_ item_ activated ( GtkIconView * iconview, 142 GtkTreePath * treepath, 143 gpointer data) { 144 GtkListStore * store; 145 GtkTreeIter iter; 146 gchar * path;

232 gboolean is_ dir; 148 GtkEntryCompletion * completion; store = GTK_ LIST_ STORE( gtk_ icon_ view_ get_ model ( iconview)); 151 gtk_ tree_ model_ get_ iter ( GTK_ TREE_ MODEL( store), & iter, treepath); 152 gtk_tree_model_get(gtk_tree_model(store), &iter, 153 COLUMN_ PATH, & path, COLUMN_ IS_ DIRECTORY, & is_dir, -1); 154 if (is_dir) { 155 g_ free ( currentdir); 156 currentdir = g_ strdup ( path); 157 add_ data ( iconview, GTK_ ENTRY_ COMPLETION( data)); 158 } 159 g_ free ( path); 160 } int main ( int argc, char ** argv) { 163 GtkWidget * window; 164 GtkWidget * vbox; 165 GtkWidget * entry; 166 GtkWidget * scrolled_ window; 167 GtkWidget * iconview; 168 GtkEntryCompletion * completion; gtk_init (&argc, &argv); 171 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 172 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GtkEntryCompletion Sample2"); 173 gtk_ widget_ set_ size_ request ( window, 500, 300); 174 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 175 g_ signal_ connect ( G_ OBJECT( window), " destroy", 176 G_ CALLBACK( gtk_ main_ quit), NULL); vbox = gtk_ vbox_ new ( FALSE, 0); 179 gtk_ container_ add ( GTK_ CONTAINER( window), vbox); entry = gtk_ entry_ new (); 182 gtk_ box_ pack_ start ( GTK_ BOX( vbox), entry, FALSE, FALSE, 0); completion = create_ completion_ widget (); 185 gtk_ entry_ set_ completion ( GTK_ ENTRY( entry), completion); 186 g_ object_ unref ( completion); scrolled_ window = gtk_ scrolled_ window_ new ( NULL, NULL); 189 gtk_ scrolled_ window_ set_ shadow_ type( GTK_ SCROLLED_ WINDOW( scrolled_ window), 190 GTK_ SHADOW_ ETCHED_ IN); 191 gtk_ scrolled_ window_ set_ policy ( GTK_ SCROLLED_ WINDOW( scrolled_ window), 192 GTK_ POLICY_ AUTOMATIC, 193 GTK_ POLICY_ AUTOMATIC); 194 gtk_ box_ pack_ start ( GTK_ BOX( vbox), scrolled_ window, TRUE, TRUE, 0); load_ pixbuf ();

233 iconview = create_ icon_ view_ widget (); 199 gtk_ icon_ view_ set_ text_ column ( GTK_ ICON_ VIEW( iconview), 200 COLUMN_ DISPLAY_ NAME); 201 gtk_ icon_ view_ set_ pixbuf_ column ( GTK_ ICON_ VIEW( iconview), COLUMN_ PIXBUF); 202 gtk_ icon_ view_ set_ item_ width ( GTK_ ICON_ VIEW( iconview), 80); 203 g_ signal_ connect ( G_ OBJECT( iconview), " item_ activated", 204 G_ CALLBACK( cb_ item_ activated), completion); gtk_ container_ add ( GTK_ CONTAINER( scrolled_ window), iconview); add_ data ( GTK_ ICON_ VIEW( iconview), completion); gtk_ widget_ show_ all ( window); 211 gtk_main (); return 0; 214 }

234 221 7., (GtkIcon- Button), png, jpeg GtkImage GdkPixbuf,,,.,. 7.1

235 222 7 gtk icon button new gtk icon button new from image gtk icon button new from pixbuf gtk icon button new from inline gtk icon button new with label gtk icon button new from image label gtk icon button new from pixbuf label gtk icon button new from inline label gtk icon button new with mnemonic gtk icon button new from image mnemonic gtk icon button new from pixbuf mnemonic gtk icon button new from inline mnemonic gtk icon button get label gtk icon button get icon gtk icon button get text position gtk icon button set label gtk icon button set icon gtk icon button set text position 7.2, (gtkbutton.h) (gtkiconbutton.h). gtkbutton.h 7 1. (1 2 ). GTK BUTTON, GTK BUTTON,. GtkIconButton GTK ICON BUTTON. C++ (8 10, ) C++. (12 22 ),..,

236 GtkIconButton. 7 1 GtkButton : gtkbutton.h 1 #ifndef GTK_BUTTON_H 2 #define GTK_BUTTON_H 3 4 # include <gdk/ gdk. h> 5 # include <gtk/ gtkbin. h> 6 # include <gtk/ gtkenums. h> 7 8 # ifdef cplusplus 9 extern "C" { 10 #endif /* cplusplus */ # define GTK_ TYPE_ BUTTON ( gtk_ button_ get_ type ()) 13 # define GTK_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ CAST (( obj), \ 14 GTK_ TYPE_ BUTTON, GtkButton)) 15 # define GTK_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ CAST (( klass), \ 16 GTK_ TYPE_ BUTTON, GtkButtonClass)) 17 # define GTK_ IS_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ TYPE (( obj), \ 18 GTK_ TYPE_ BUTTON)) 19 # define GTK_ IS_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ TYPE (( klass), \ 20 GTK_ TYPE_ BUTTON)) 21 # define GTK_ BUTTON_ GET_ CLASS( obj) ( G_ TYPE_ INSTANCE_ GET_ CLASS (( obj), \ 22 GTK_ TYPE_ BUTTON, GtkButtonClass)) # ifdef cplusplus 26 } 27 #endif /* cplusplus */ #endif /* GTK_BUTTON_H */, GtkIconButton.,. enum { GTK_ICON_BUTTON_TEXT_TOP, GTK_ ICON_ BUTTON_ TEXT_ BOTTOM, GTK_ ICON_ BUTTON_ TEXT_ LEFT, GTK_ ICON_ BUTTON_ TEXT_ RIGHT }; enum { GTK_ ICON_ BUTTON_ SOURCE_ FILE, GTK_ ICON_ BUTTON_ SOURCE_ INLINE, GTK_ ICON_ BUTTON_ SOURCE_ IMAGE, GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF };

237 224 7 gtkiconbutton.h GtkIconButton : gtkiconbutton.h 1 #ifndef GTK_ICON_BUTTON_H 2 #define GTK_ICON_BUTTON_H 3 4 # include <gtk/ gtk. h> 5 6 # ifdef cplusplus 7 extern "C" { 8 #endif 9 10 # define GTK_ TYPE_ ICON_ BUTTON ( gtk_ icon_ button_ get_ type ()) 11 # define GTK_ ICON_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ CAST(( obj),\ 12 GTK_TYPE_ICON_BUTTON,\ 13 GtkIconButton)) 14 # define GTK_ ICON_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ CAST(( klass),\ 15 GTK_TYPE_ICON_BUTTON,\ 16 GtkIconButtonClass)) 17 # define GTK_ IS_ ICON_ BUTTON( obj) ( G_ TYPE_ CHECK_ INSTANCE_ TYPE(( obj),\ 18 GTK_ TYPE_ ICON_ BUTTON)) 19 # define GTK_ IS_ ICON_ BUTTON_ CLASS( klass) ( G_ TYPE_ CHECK_ CLASS_ TYPE(( klass),\ 20 GTK_ TYPE_ ICON_ BUTTON)) 21 # define GTK_ ICON_ BUTTON_ GET_ CLASS( obj) ( G_ TYPE_ INSTANCE_ GET_ CLASS(( obj),\ 22 GTK_TYPE_ICON_BUTTON,\ 23 GtkIconButtonClass)) enum { 26 GTK_ ICON_ BUTTON_ TEXT_ TOP, 27 GTK_ ICON_ BUTTON_ TEXT_ BOTTOM, 28 GTK_ ICON_ BUTTON_ TEXT_ LEFT, 29 GTK_ ICON_ BUTTON_ TEXT_ RIGHT 30 }; enum { 33 GTK_ ICON_ BUTTON_ SOURCE_ FILE, 34 GTK_ ICON_ BUTTON_ SOURCE_ INLINE, 35 GTK_ ICON_ BUTTON_ SOURCE_ IMAGE, 36 GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF 37 }; # ifdef cplusplus 42 } 43 #endif #endif /* GTK_ICON_BUTTON_H */

238 , GtkButton, GtkButton., text position, icon source, pixbuf GtkIconButton : gtkiconbutton.h 1 typedef struct _ GtkIconButton GtkIconButton; 2 typedef struct _ GtkIconButtonClass GtkIconButtonClass; 3 4 struct _ GtkIconButton { 5 GtkButton button; 6 guint text_ position; 7 guint icon_ source; 8 GdkPixbuf * pixbuf; 9 }; struct _ GtkIconButtonClass { 12 GtkButtonClass parent_ class; 13 }; 7.4 ( ), gtk icon button get type., ID. 2, ID. GTypeInfo. struct _ GTypeInfo { guint16 class_ size; GBaseInitFunc base_ init; GBaseFinalizeFunc base_ finalize; GClassInitFunc class_ init; GClassFinalizeFunc clss_ finalize; gconstpointer class_ data; guint16 instance_ size; guint16 n_ preallocs; GInstanceInitFunc instalce_ init; const GTypeValueTable * value_ table; }; 7 4 gtk icon button get type. gtk button get type GtkIconButton.

239 gtk icon button get type 1 GType 2 gtk_ icon_ button_ get_ type ( void) { 3 static GType icon_ button_ type = 0; 4 5 if (! icon_ button_ type) { 6 static const GTypeInfo icon_ button_ info = { 7 sizeof ( GtkIconButtonClass), 8 NULL, /* base_init */ 9 NULL, /* base_ finalize */ 10 ( GClassInitFunc) gtk_ icon_ button_ class_ init, 11 NULL, /* class_ finalize */ 12 NULL, /* class_ data */ 13 sizeof ( GtkIconButton), 14 16, /* n_preallocs */ 15 ( GInstanceInitFunc) gtk_ icon_ button_ init, 16 }; 17 icon_ button_ type 18 = g_ type_ register_ static ( GTK_ TYPE_ BUTTON, " GtkIconButton", 19 &icon_button_info, 0); 20 } 21 return icon_ button_ type; 22 } 7.5 gtk icon button class init gtk icon button init static void 2 gtk_ icon_ button_ class_ init ( GtkIconButtonClass * klass) { 3 parent_ class = g_ type_ class_ peek_ parent ( klass); 4 } 5 6 static void 7 gtk_ icon_ button_ init ( GtkIconButton * button) { 8 button - >pixbuf = NULL; 9 }

240 , ( 7 6).. ( set icon ) ( gtk icon button construct child ) static GtkWidget* 2 _ gtk_ icon_ button_ new ( const gchar * label_ text, 3 guint text_ position, 4 guint use_ underline, 5 guint icon_ source, 6 gpointer data) { 7 GtkIconButton * ibutton; 8 GtkWidget * widget; 9 GtkButton * button; widget = GTK_WIDGET(gtk_type_new (gtk_icon_button_get_type ())); 12 ibutton = GTK_ ICON_ BUTTON ( widget); 13 button = GTK_ BUTTON( ibutton); if ( label_ text) { 16 button - >label_ text = g_ strdup ( label_ text); 17 } else { 18 button - >label_ text = NULL; 19 } 20 button - >use_ underline = use_ underline; 21 ibutton - >text_ position = text_ position; 22 ibutton - >icon_ source = icon_ source; if ( data) _ set_ icon ( ibutton, data); 25 gtk_ icon_ button_ construct_ child ( ibutton); return widget; 28 } set icon( 7 7). 4 (GdkPixbuf ).

241 static void 2 _ set_ icon ( GtkIconButton * ibutton, 3 gpointer data) { 4 if ( ibutton - >pixbuf) g_ object_ unref ( ibutton - >pixbuf); 5 6 switch ( ibutton - >icon_ source) { 7 case GTK_ ICON_ BUTTON_ SOURCE_ FILE: 8 ibutton - >pixbuf = gdk_ pixbuf_ new_ from_ file (( gchar *) data, NULL); 9 break; 10 case GTK_ ICON_ BUTTON_ SOURCE_ INLINE: 11 ibutton - >pixbuf = gdk_ pixbuf_ new_ from_ inline ( -1, ( guint8 *) data, 12 TRUE, NULL); 13 break; 14 case GTK_ ICON_ BUTTON_ SOURCE_ IMAGE: 15 ibutton - >pixbuf = gtk_ image_ get_ pixbuf ( GTK_ IMAGE( data)); 16 break; 17 case GTK_ ICON_ BUTTON_ SOURCE_ PIXBUF: 18 ibutton - >pixbuf = gdk_ pixbuf_ copy (( GdkPixbuf *) data); 19 break; 20 } 21 } gtk icon button construct child ( 7 8). GtkButton.,,. gtkbutton.c gtk button construct child. GtkButton, GtkButton. GtkIconButton, text position,., text position,. 7 8 gtk icon button construct child 1 static void 2 gtk_ icon_ button_ construct_ child ( GtkIconButton * ibutton) { 3 GtkButton * button; 4 GtkButtonPrivate * priv; 5 GtkWidget * label = NULL; 6 GtkWidget * box; 7 GtkWidget * align; 8 GdkPixbuf * pixbuf;

242 button = GTK_ BUTTON( ibutton); 11 priv = GTK_ BUTTON_ GET_ PRIVATE ( button); if (! button - >constructed) return; if (GTK_BIN (button) ->child) { 16 gtk_ container_ remove ( GTK_ CONTAINER ( button), GTK_ BIN ( button) - >child); 17 priv - >image = NULL; 18 } 19 if ( ibutton - >text_ position == GTK_ ICON_ BUTTON_ TEXT_ TOP 20 ibutton - >text_ position == GTK_ ICON_ BUTTON_ TEXT_ BOTTOM) { 21 box = gtk_ vbox_ new ( FALSE, 2); 22 } else { 23 box = gtk_ hbox_ new ( FALSE, 2); 24 } 25 if ( button - >label_ text) { 26 if ( button - >use_ underline) { 27 label = gtk_ label_ new_ with_ mnemonic ( button - >label_ text); 28 gtk_ label_ set_ mnemonic_ widget ( GTK_ LABEL( label), GTK_ WIDGET( button)); 29 } else { 30 label = gtk_ label_ new ( button - >label_ text); 31 } 32 } 33 if ( ibutton - >pixbuf) { 34 priv - >image = gtk_ image_ new_ from_ pixbuf ( ibutton - >pixbuf); 35 g_object_set (priv - >image, 36 "visible", show_image (button), "no_show_all", TRUE, 37 NULL); 38 } 39 if ( button - >label_ text && priv - >align_ set) { 40 align = gtk_ alignment_ new ( priv - >xalign, priv - >yalign, 0.0, 0. 0); 41 gtk_ misc_ set_ alignment ( GTK_ MISC ( label), priv - >xalign, priv - >yalign); 42 } else { 43 align = gtk_ alignment_ new (0.5, 0.5, 0.0, 0. 0); 44 } 45 if ( ibutton - >text_ position == GTK_ ICON_ BUTTON_ TEXT_ TOP 46 ibutton - >text_ position == GTK_ ICON_ BUTTON_ TEXT_ LEFT) { 47 if ( label) gtk_ box_ pack_ start ( GTK_ BOX( box), label, FALSE, FALSE, 0); 48 if (priv - >image) { 49 gtk_box_pack_end (GTK_BOX(box), priv - >image, FALSE, FALSE, 0); 50 } 51 } else { 52 if (priv - >image) { 53 gtk_box_pack_start (GTK_BOX(box), priv - >image, FALSE, FALSE, 0); 54 } 55 if ( label) gtk_ box_ pack_ end ( GTK_ BOX( box), label, FALSE, FALSE, 0); 56 } 57 gtk_ container_ add ( GTK_ CONTAINER ( button), align); 58 gtk_ container_ add ( GTK_ CONTAINER ( align), box);

243 gtk_ widget_ show_ all ( align); return; 62 } GtkWidget* 65 gtk_ icon_ button_ new ( const gchar * filename) { 66 return _ gtk_ icon_ button_ new ( NULL, 0, 67 GTK_ ICON_ BUTTON_ TEXT_ RIGHT, 68 GTK_ ICON_ BUTTON_ SOURCE_ FILE, 69 ( gpointer) filename); 70 } 7.7,..,,., G_ CONST_ RETURN gchar* 2 gtk_ icon_ button_ get_ label ( GtkIconButton * ibutton) { 3 g_ return_ val_ if_ fail ( GTK_ IS_ ICON_ BUTTON ( ibutton), NULL); 4 5 return GTK_ BUTTON( ibutton) - >label_ text; 6 } 7 8 G_ CONST_ RETURN GdkPixbuf* 9 gtk_ icon_ button_ get_ icon ( GtkIconButton * ibutton) { 10 g_ return_ val_ if_ fail ( GTK_ IS_ ICON_ BUTTON ( ibutton), NULL); return ibutton - >pixbuf; 13 } guint 16 gtk_ icon_ button_ get_ text_ position ( GtkIconButton * ibutton) { 17 g_return_val_if_fail (GTK_IS_ICON_BUTTON (ibutton), 0); return ibutton - >text_ position; 20 } 7.8., gtk icon button construct child.

244 void 2 gtk_ icon_ button_ set_ label ( GtkIconButton * ibutton, 3 const gchar * label) { 4 GtkButton * button; 5 gchar * new_ label; 6 7 g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); 8 9 button = GTK_ BUTTON( ibutton); new_ label = g_ strdup ( label); 12 g_free (button - >label_text); 13 button - >label_ text = new_ label; gtk_ icon_ button_ construct_ child ( ibutton); 16 g_object_notify (G_OBJECT (ibutton), "label"); 17 } void 20 gtk_ icon_ button_ set_ icon ( GtkIconButton * ibutton, 21 const GdkPixbuf * pixbuf) { 22 g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); if ( ibutton - >pixbuf) g_ object_ unref ( ibutton - >pixbuf); 25 ibutton - >pixbuf = gdk_ pixbuf_ copy ( pixbuf); gtk_ icon_ button_ construct_ child ( ibutton); 28 } void 31 gtk_ icon_ button_ set_ text_ position ( GtkIconButton * ibutton, 32 guint text_ position) { 33 g_return_if_fail (GTK_IS_ICON_BUTTON (ibutton)); ibutton - >text_ position = text_ position; gtk_ icon_ button_ construct_ child ( ibutton); 38 } 7.9 ( )

245 GtkIconButton 1 # include <gtk/ gtk. h> 2 # include " gtkiconbutton. h" 3 4 static void cb_ click ( GtkWidget * widget, gpointer data) { 5 static guint position = 0; 6 7 position++; 8 if ( position == 4) position = 0; 9 gtk_ icon_ button_ set_ text_ position ( GTK_ ICON_ BUTTON( widget), position); 10 } int main ( int argc, char ** argv) { 13 GtkWidget * window; 14 GtkWidget * ibutton; gtk_init (&argc, &argv); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 19 gtk_ window_ set_ title ( GTK_ WINDOW ( window), " GtkIconButton Test"); 20 gtk_ widget_ set_ size_ request ( window, 300, 100); 21 g_ signal_ connect ( G_ OBJECT( window), " destroy", 22 G_ CALLBACK( gtk_ main_ quit), NULL); ibutton = gtk_ icon_ button_ new_ with_ label (" gnome - tigert. png", 25 "Push me!!", 26 GTK_ICON_BUTTON_TEXT_TOP, 5); 27 g_ signal_ connect ( G_ OBJECT( ibutton), " clicked", G_ CALLBACK( cb_ click), NULL); 28 gtk_ container_ add ( GTK_ CONTAINER( window), ibutton); gtk_ widget_ show_ all ( window); 31 gtk_main (); return 0; 34 }

246 233 8 Gnome GNOME, GNOME GUI. GNOME GUI, GTK+,., GNOME. 8.1 Gnome 8.1, GNOME GNOME GTK Gnome

247 234 8 Gnome 8 1 GNOME : gnome-sample.c 1 # include <gnome. h> 2 3 int main ( int argc, char ** argv) { 4 GnomeProgram * app; 5 GtkWidget * window; 6 GtkWidget * iconlist; 7 int n; 8 9 app = gnome_program_init ("gnome -sample", "1.0.0", LIBGNOMEUI_MODULE, 10 argc, argv, NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 13 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 14 gtk_window_set_title (GTK_WINDOW(window), "Gnome -sample"); 15 gtk_ widget_ set_ size_ request ( window, 360, 200); iconlist = gnome_ icon_ list_ new (64, NULL, 0); 18 gtk_ container_ add ( GTK_ CONTAINER( window), iconlist); for ( n = 0; n < 10; n++) { 21 gnome_ icon_ list_ append ( GNOME_ ICON_ LIST( iconlist), 22 "folder.png", "folder.png"); 23 } 24 gtk_ widget_ show_ all ( window); 25 gtk_main (); 26 return 0; 27 } (1 ) GNOME gnome.h. Vine Linux 4.1 /usr/include/libgnomeui-2.0 gnome.h. GNOME (10 ) gnome program init GNOME, ( gtk init ). GnomeProgram* gnome_ program_ init ( const char * app_id, const char * app_ version, const GnomeModuleInfo * module_ info, int argc, char **argv,

248 8.1 Gnome 235 const char * first_ property_ name,...); GnomeProgram, gnome program get app version,. const char* gnome_ program_ get_ app_ version ( GnomeProgram * program); 3 GnomeModuleInfo,, LIBGNOMEUI MODULE. struct GnomeModuleInfo { const char * name; const char * version; const char * description; GnomeModuleRequirement * requirements; GnomeModuleHook instance_ init; GnomeModuleHook pre_ args_ parse, post_ args_ parse; struct poptoption * options; GnomeModuleInitHook init_ pass; GnomeModuleClassInitHook class_ init; const char * opt_ prefix; gpointer expansion1; }; (13 ). GNOME GTK+ GtkWindow. (18 24 ) (GnomeIconList). GdkPixbuf., gnome icon list new. GtkWidget* gnome_ icon_ list_ new ( guint icon_ width, GtkAdjustment * adj, int flags);, gnome icon list append.. GdkPixbuf, gnome icon list append pixbuf.. int gnome_ icon_ list_ append ( GnomeIconList * gil, const char * icon_ filename, const char * text); int gnome_ icon_ list_ append_ pixbuf ( GnomeIconList * gil, GdkPixbuf * im, const char * icon_ filename, const char * text);

249 236 8 Gnome,, gnome icon list insert gnome icon list insert pixbuf. void gnome_ icon_ list_ insert ( GnomeIconList * gil, int pos, const char * icon_ filename, const char * text); void gnome_ icon_ list_ insert_ pixbuf ( GnomeIconList * gil, int pos, GdkPixbuf * im, const char * icon_ filename, const char * text); GNOME GNOME, GNOME. pkg-config. GNOME pkg-config libgnomeui-2.0. % gcc gnome-sample.c -o gnome-sample pkg-config libgnomeui cflags --libs 8.2 Gnome Gnome (GnomeFileEntry).,., gnome file entry new. GtkWidget* gnome_ file_ entry_ new ( const char * history_ id, const char * browse_ dialog_ title); 8.2

250 8.2 Gnome 237, gnome file entry get full path. gnome file entry set filename. char* gnome_ file_ entry_ get_ full_ path ( GnomeFileEntry * fentry, gboolean file_ must_ exist); void gnome_ file_ entry_ set_ filename ( GnomeFileEntry * fentry, const char * filename); : gnomefileentry-sample.c 1 # include <gnome. h> 2 3 int main ( int argc, char ** argv) { 4 GtkWidget * window; 5 GtkWidget * fileentry; 6 7 gnome_program_init("gnome_file_entry -sample", "1.0.0", LIBGNOMEUI_MODULE, 8 argc, argv, NULL); 9 10 window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 11 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 12 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GnomeFileEntry - Sample"); 13 gtk_ widget_ set_ size_ request ( window, 360, -1); 14 g_ signal_ connect ( G_ OBJECT( window), " destroy", 15 G_ CALLBACK( gtk_ main_ quit), NULL); fileentry = gnome_ file_ entry_ new ( NULL, NULL); 18 gtk_ container_ add ( GTK_ CONTAINER( window), fileentry); gtk_ widget_ show_ all ( window); 21 gtk_main (); return 0; 24 } (GnomeAbout).,.

251 238 8 Gnome, gnome about new.. GtkWidget* gnome_ about_ new ( const gchar * name, const gchar * version, const gchar * copyright, const gchar * comments, const gchar ** authors, const gchar ** documenters, const gchar * translator_ credits, GdkPixbuf * logo_ pixbuf);. 1 : 2 : 3 : 4 : 5 : 6 : 7 : 8 : GdkPixbuf : gnomeaboutdialog-sample.c 1 # include <gnome. h> 2 3 static void cb_ show_ dialog ( GtkWidget * widget, gpointer data) { 8.3

252 8.2 Gnome GtkWidget * dialog; 5 const gchar * authors[] = {" Yasuyuki Sugaya", NULL}; 6 const gchar * documenters[] = {" Yasuyuki Sugaya", NULL}; 7 gchar * translators = " Yasuyuki Sugaya"; 8 9 dialog = gnome_about_new ("GnomeAbout -Sample", "1.0.0", 10 " Copyright ( C) 2005 TEO Project", 11 " This is a GnomeAbout dialog sample program.", 12 authors, documenters, translators, NULL); 13 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( dialog), 5); gtk_ widget_ show_ all ( dialog); 16 } int main ( int argc, char ** argv) { 19 GtkWidget * window; 20 GtkWidget * button; gnome_program_init ("gnome_about_dialog -sample", "1.0.0", 23 LIBGNOMEUI_ MODULE, argc, argv, NULL); window = gtk_ window_ new ( GTK_ WINDOW_ TOPLEVEL); 26 gtk_ container_ set_ border_ width ( GTK_ CONTAINER( window), 5); 27 gtk_ window_ set_ title ( GTK_ WINDOW( window), " GnomeAbout - Sample"); 28 gtk_ widget_ set_ size_ request ( window, 250, -1); 29 g_ signal_ connect ( G_ OBJECT( window), " destroy", 30 G_ CALLBACK( gtk_ main_ quit), NULL); button = gtk_ button_ new_ with_ label (" Show About Dialog"); 33 gtk_ container_ add ( GTK_ CONTAINER( window), button); 34 g_ signal_ connect ( G_ OBJECT( button), " clicked", 35 G_ CALLBACK( cb_ show_ dialog), NULL); gtk_ widget_ show_ all ( window); 38 gtk_main (); return 0; 41 }

253

254 241 9, GTK+/GNOME anjuta( ). anjuta, GTK+/GNOME GUI glade. glade, GUI.,,. 9.1 anjuta, gnome, [ ]-[ ]-[Anjuta IDE]. anjuta, 9.1., [ ]. 9.1 anjuta

255 ImageOperator 0.1, 9.2(a),., GTK+-2.0 ( 9.2(b)).,, (c). ( 9.2(d)),..,. (a) (b) (c) (d) (e) (f) 9.2

256 9.2 GUI anjuta, 9.3,. 9.2 GUI glade, GUI. GUI glade. anjuta glade, [ ]-[ GUI ]. glade [ ]-[ ]-[Glade ]. anjuta glade ,,. glade,.,.

257 glade window1., ,.,.. 3, 2 OK., GUI ( 9.6). 9.5

258 9.2 GUI GUI 9.2.3,. GTK+ 2.,. glade,... ( 9.7( )), ( 9.7( )).,. 9.7( ). 9.7

259 ( - - ). GUI 9.8. glade [ ]- [ ] ,, 9.2(a), (b).,, 9.2(c). (a) (b) (c) 9.9

260 , expose event., ( 9.10)...., expose event OK. cb canavs expose. glade GUI. (a) (b) [ ]-[ ]., [ ]-[ ]( F3 ) glade,.

261 cb open cb save cb saveas cb quit cb about cb operation undo cb operation gray cb operation reverse cb operation flip cb canvas expose ( ) ( ) ( ) ( ) image operator.h,., [ ]-[ ]. 9.11, image operator.h, C-C++ Header File, OK., 9.12, main window, pixbuf, backup cb canvas expose. cb open GtkDrawingArea. 9 1.

262 cb canvas expose 1 gboolean 2 cb_ canvas_ expose ( GtkWidget * widget, 3 GdkEventExpose * event, 4 gpointer user_ data) { 5 GdkPixmap* pixmap; 6 7 if (pixbuf) { 8 gdk_ pixbuf_ render_ pixmap_ and_ mask ( pixbuf, & pixmap, NULL, 255); 9 gdk_ window_ set_ back_ pixmap ( widget - >window, pixmap, FALSE); 10 gdk_ window_ clear( widget - >window); 11 } 12 return FALSE; 13 } 9.3.3,

263 250 9 cb open., selection mode. selection mode image operator.h. open filename save filename image operator.h. enum { FILE_ SELECTION_ OPEN, FILE_ SELECTION_ SAVE }; cb open FILE SELECTION OPEN, cb save FILE SELECTION SAVE.,. gtk main. open filename,., filesel cancel., open filename NULL. OK gtk file selection get filename, open filename., save filename. 9 2 : callbacks.c 1 static void 2 filesel_ ok ( GtkWidget * widget, 3 gpointer user_ data) { 4 GtkWidget * filesel = GTK_ WIDGET( user_ data); 5 const gchar * filename; 6 7 filename = gtk_ file_ selection_ get_ filename ( GTK_ FILE_ SELECTION( filesel)); 8 if (filename && strcmp (filename, "")!= 0) { 9 switch ( selection_ mode) { 10 case FILE_ SELECTION_ OPEN: 11 if ( open_ filename) g_ free ( open_ filename); 12 open_ filename = g_ strdup ( filename); 13 if ( save_ filename) g_ free ( save_ filename); 14 save_ filename = g_ strdup ( filename); 15 break; 16 case FILE_ SELECTION_ SAVE: 17 if ( save_ filename) g_ free ( save_ filename); 18 save_ filename = g_ strdup ( filename); 19 break; 20 } 21 } 22 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), FALSE); 23 gtk_ widget_ destroy ( filesel);

264 gtk_main_quit (); 25 } static void 28 filesel_ cancel ( GtkWidget * widget, 29 gpointer user_ data) { 30 GtkWidget * filesel = GTK_ WIDGET( user_ data); switch ( selection_ mode) { 33 case FILE_ SELECTION_ OPEN: 34 if ( open_ filename) { 35 g_ free ( open_ filename); 36 open_ filename = NULL; 37 } 38 break; 39 case FILE_ SELECTION_ SAVE: 40 if ( save_ filename) { 41 g_ free ( save_ filename); 42 save_ filename = NULL; 43 } 44 break; 45 } 46 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), FALSE); 47 gtk_ widget_ destroy ( filesel); 48 gtk_main_quit (); 49 } void 52 cb_ open ( GtkMenuItem * menuitem, 53 gpointer user_ data) { 54 GtkWidget * parent = GTK_ WIDGET( user_ data); 55 GtkWidget * filesel; 56 GtkWidget * canvas; selection_ mode = FILE_ SELECTION_ OPEN; filesel = gtk_ file_ selection_ new (_(" Select image filename")); 61 g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >ok_ button), 62 " clicked", G_ CALLBACK( filesel_ ok), 63 ( gpointer) filesel); 64 g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >cancel_ button), 65 " clicked", G_ CALLBACK( filesel_ cancel), 66 ( gpointer) filesel); 67 gtk_ window_ set_ transient_ for ( GTK_ WINDOW( filesel), GTK_ WINDOW( parent)); 68 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), TRUE); 69 gtk_ widget_ show ( filesel); 70 gtk_main (); if ( open_ filename) { 73 if ( pixbuf) g_ object_ unref ( pixbuf);

265 pixbuf = gdk_ pixbuf_ new_ from_ file ( open_ filename, NULL); 75 if (pixbuf) { 76 canvas = GTK_ WIDGET( g_ object_ get_ data ( G_ OBJECT( parent), 77 "canvas")); 78 gtk_ widget_ queue_ draw ( canvas); 79 } 80 } 81 } ,.,. cb open. save, cb save save () save, gdk pixbuf save JPEG PNG. 9 3 : callbacks.c 1 static void 2 _ save ( gchar * filename) 3 { 4 gchar * ext; 5 6 ext = strrchr (filename,. ); 7 if (ext) { 8 ext++; 9 if (strcmp (ext, "png") == 0) { 10 gdk_ pixbuf_ save ( pixbuf, filename, " png", NULL, NULL); 11 } else if (strcmp (ext, "jpg") == 0) { 12 gdk_ pixbuf_ save ( pixbuf, filename, " jpeg", NULL, NULL); 13 } else { 14 g_ printerr (_(" Image format %s is not supported\ n"), ext); 15 } 16 } 17 } void 20 cb_ save ( GtkMenuItem * menuitem, 21 gpointer user_ data) 22 {

266 _ save ( save_ filename); 24 } void 27 cb_ saveas ( GtkMenuItem * menuitem, 28 gpointer user_ data) 29 { 30 GtkWidget * parent = GTK_ WIDGET( user_ data); 31 GtkWidget * filesel; selection_ mode = FILE_ SELECTION_ SAVE; filesel = gtk_ file_ selection_ new (_(" Select image filename")); 36 g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >ok_ button), 37 " clicked", G_ CALLBACK( filesel_ ok), 38 ( gpointer) filesel); 39 g_ signal_ connect ( G_ OBJECT( GTK_ FILE_ SELECTION( filesel) - >cancel_ button), 40 " clicked", G_ CALLBACK( filesel_ cancel), 41 ( gpointer) filesel); 42 gtk_ window_ set_ transient_ for ( GTK_ WINDOW( filesel), GTK_ WINDOW( parent)); 43 gtk_ window_ set_ modal ( GTK_ WINDOW( filesel), TRUE); 44 gtk_ widget_ show ( filesel); 45 gtk_main (); if ( save_ filename) _ save ( save_ filename); 48 } GdkPixbuf, : image operator.h 1 #define gdk_pixbuf_get_pixel(pixbuf,x,y,p) \ 2 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 3 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 4 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p))) 5 6 #define gdk_pixbuf_put_pixel(pixbuf,x,y,p,val) \ 7 (*(gdk_pixbuf_get_pixels((pixbuf)) + \ 8 gdk_ pixbuf_ get_ rowstride(( pixbuf)) * ( y) + \ 9 gdk_pixbuf_get_n_channels((pixbuf)) * (x) + (p)) = (val)). cb operation undo do backup 9 5. GdkPixbuf backup image operator.h

267 254 9, main NULL., backup gdk pixbuf copy area. gdk pixbuf copy. cb operation undo gdk pixbuf copy area backup pixbuf.,, pixbuf backup, backup. 9 5 : callbacks.c 1 static void 2 do_ backup ( void) { 3 if (backup) { 4 gdk_pixbuf_copy_area (pixbuf, 0, 0, 5 gdk_ pixbuf_ get_ width ( pixbuf), 6 gdk_ pixbuf_ get_ height( pixbuf), 7 backup, 0, 0); 8 } else { 9 backup = gdk_ pixbuf_ copy ( pixbuf); 10 } 11 } void 14 cb_ operation_ undo ( GtkMenuItem * menuitem, 15 gpointer user_ data) 16 { 17 GtkWidget * canvas; 18 GdkPixbuf *_ backup; if (backup) { 21 _ backup = gdk_ pixbuf_ copy ( pixbuf); 22 gdk_pixbuf_copy_area (backup, 0, 0, 23 gdk_ pixbuf_ get_ width( backup), 24 gdk_ pixbuf_ get_ height( backup), 25 pixbuf, 0, 0); 26 gdk_pixbuf_copy_area (_backup, 0, 0, 27 gdk_ pixbuf_ get_ width(_ backup), 28 gdk_ pixbuf_ get_ height(_ backup), 29 backup, 0, 0); 30 g_ object_ unref (_ backup); 31 canvas = GTK_ WIDGET( g_ object_ get_ data( G_ OBJECT( main_ window)," canvas")); 32 gtk_ widget_ queue_ draw ( canvas); 33 } 34 } do backup, gtk widget queue draw canvas expose.

268 cb operation gray : callbacks.c 1 void 2 cb_ operation_ gray ( GtkMenuItem * menuitem, 3 gpointer user_ data) 4 { 5 GtkWidget * canvas; 6 int x, y; 7 guchar val, r, g, b; 8 9 if (pixbuf) { 10 do_backup (); 11 for ( y = 0; y < gdk_ pixbuf_ get_ height( pixbuf); y++) { 12 for ( x = 0; x < gdk_ pixbuf_ get_ width( pixbuf); x++) { 13 r = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 0); 14 g = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 1); 15 b = gdk_ pixbuf_ get_ pixel( pixbuf, x, y, 2); 16 val = * r * g * b; 17 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 0, val); 18 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 1, val); 19 gdk_ pixbuf_ put_ pixel( pixbuf, x, y, 2, val); 20 } 21 } 22 canvas = GTK_ WIDGET( g_ object_ get_ data( G_ OBJECT( main_ window)," canvas")); 23 gtk_ widget_ queue_ draw ( canvas); 24 } 25 } cb about

269 cb about 1 void 2 cb_ about ( GtkMenuItem * menuitem, 3 gpointer user_ data) 4 { 5 GtkWidget * dialog; 6 gchar * info; 7 gint response; 8 9 info = g_strdup_printf ("%s %s\n%s\n%s %s\n", 10 PACKAGE, VERSION, 11 _("Copyright(C)..."), 12 PACKAGE, 13 _(" is a simple image proccessing application.")); 14 dialog = gtk_ message_ dialog_ new ( GTK_ WINDOW( user_ data), 15 GTK_ DIALOG_ MODAL 16 GTK_ DIALOG_ DESTROY_ WITH_ PARENT, 17 GTK_ MESSAGE_ INFO, 18 GTK_ BUTTONS_ CLOSE, 19 info); gtk_ widget_ show_ all ( dialog); response = gtk_ dialog_ run ( GTK_ DIALOG( dialog)); 24 gtk_ widget_ destroy ( dialog); 25 } cb quit cb quit 1 void 2 cb_ quit ( GtkMenuItem * menuitem, 3 gpointer user_ data) 4 { 5 if ( pixbuf) g_ object_ unref ( pixbuf); 6 if ( backup) g_ object_ unref ( backup); 7 if ( open_ filename) g_ free ( open_ filename); 8 if ( save_ filename) g_ free ( save_ filename); 9 10 gtk_main_quit (); 11 }

270 [ ]-[ ] [ ]-[ ] Build [ ]-[ ] Makikefile.am [ ]-[ ]., image operator.h, src Makefile.am

271 258 9 image operator.h. 9.16, src Makefile.am Makefile.am Makefile.am Makefile.am 9.16 imageoperator SOURCES image operator.h [ ]-[ ], Makefile., [ ]- [ ],.. ImageOperator-0.1.tar.gz. % cd ~/Projects/ImageOperator % ls AUTHORS Makefile.am config.guess* libtool* COPYING@ Makefile.in config.h ltmain.sh ChangeLog NEWS config.h.in missing@ INSTALL@ README config.log mkinstalldirs* ImageOperator-0.1.tar.gz TODO config.status* po/

272 ImageOperator.glade acconfig.h config.sub* setup-gettext* ImageOperator.gladep acinclude.m4 configure* src/ ImageOperator.prj aclocal.m4 configure.in stamp-h.in ImageOperator.pws autogen.sh* stamp-h1 Makefile autom4te.cache/ 9.5.3,.,. make install. prefix /var/tmp/imageoperator/usr,. % cd % mkdir tmp % cd tmp % tar xvfz ~/Projects/ImageOperator/ImageOperator-0.1.tar.gz... % cd ImageOperator-0.1 %./configure --prefix=/var/tmp/imageoperator/usr % make % make install prefix=/var/tmp/imageoperator/usr.. % cd /var/tmp/imageoperator % ls -R.: usr/./usr: bin/ doc/ share/./usr/bin: imageoperator*

273 260 9./usr/doc: ImageOperator/./usr/doc/ImageOperator: AUTHORS COPYING ChangeLog INSTALL NEWS README TODO./usr/share: gettext,. ImageOperator.pot. po. ImageOperator.pot ja.po. % cd ~/Projects/ImageOperator/po % cp ImageOperator.pot ja.po emacs gedit, gtranslator. gtranslator, [ ]-[ ]- [gtranslator] gtaranslator gtranslator gtanslator, ja.po

274 , configure.in configure.in. configure.in ALL LINGUAS=. ALL LINGUAS= ja., [ ]- [ ] , anjuta.. anjuta URL,.

275 Anjuta IDE Anjuta FAQ

276 263 A GTK+ GTK+ GTK+.. GNOME-LOOK.org ( GTK+. A.1 GNOME-LOOK.org

277 264 A GTK+ GNOME-LOOK.org,. Vine Linux 4.1 OS. A.2 [ ]-[ ]-[ ]. A.2 A.3,. GUI. A.3

278 265 A.4 4. (a) (c) Vine Linux 4.1. (d).. (a) ClearVine (b) Grand-Canyon (c) Xfce-4.0 (d) A.4 GTK+

279

280 267 B GtkStockItem GTK+ GtkStockItem. B.1 gtk-demo GtkStockItem *1. B.1 GtkStockItem *1 GTK+.

ÆþÌçGTK+

ÆþÌçGTK+ GTK+ 2016 11 1 iii GTK+ GUI GIMP GIMP GTK+ Windows GNOME GTK+ GTK+ GNOME KDE Qt GTK+ GTK+ GUI GUI Glade Anjuta GUI GUI GTK+, GUI GTK+, GTK+ 2 2009., GTK+ 3, 2., 2009 GTK+ 3,. 2016 10 iv C GUI GTK+ GUI

More information

ÆþÌçGTK+

ÆþÌçGTK+ GTK+ 2012 10 10 iii GTK+ GUI GIMP GIMP GTK+ Windows GNOME GTK+ GTK+ GNOME KDE Qt GTK+ GTK+ GUI GUI Glade Anjuta GUI GUI GTK+ GTK+ GTK+ GUI 2009 10 iv C GUI GTK+ GUI GTK+ GTK+ GTK+ GTK+ 1 GTK+ GTK+ Ubuntu

More information

TA tani/class/mech enshu/ X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk

TA   tani/class/mech enshu/ X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk 1 2011 8 TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 2011 7 7 1 X Window System GUI(Graphical User Interface) GUI (event driven) 2 Gtk+ GUI 2.1 GUI GUI GUI (event driven) GUI GUI GUI GUI

More information

2 2 Gtk+ GUI (widget ) GUI Gtk+ GUI Gtk+ GUI 2.2 Gtk GUI sample1.c Web (http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/) enshu2009gui1.tar.gz

2 2 Gtk+ GUI (widget ) GUI Gtk+ GUI Gtk+ GUI 2.2 Gtk GUI sample1.c Web (http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/) enshu2009gui1.tar.gz 1 2009 B4 GUI TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 2008 6 11 1 1 1 4 C GUI(Graphical User Interface) X Window System GUI 5 GUI 2 Gtk+ GUI 2.1 GUI GUI GUI (event driven) GUI GUI GUI

More information

ÆþÌçGTK+

ÆþÌçGTK+ 1 1 GTK+ 1.1 GTK+ GTK+ *1 GUI Graphical User Interface GIMP * 2 1.1 GIMP GNOME *3 GTK+ + GTK+ 2 Pango ATK cairo 2 GTK+ GLib... 1.1 GIMP *1 GTK+ The GIMP Toolkit : http://www.gtk.org/ *2 GIMP The GNU Image

More information

2 2 GtkWidget* gtk_drawing_area_new ( void ); /* */ void gtk_drawing_area_size ( GtkDrawingArea *darea, gint width, gint height); realize size allocat

2 2 GtkWidget* gtk_drawing_area_new ( void ); /* */ void gtk_drawing_area_size ( GtkDrawingArea *darea, gint width, gint height); realize size allocat 200 B3 GUI TA http://www.cyber.t.u-tokyo.ac.jp/ tani/class/mech enshu/ 200 7 6 X Window System GUI(Graphical User Interface) GUI (event driven) C GUI(Graphical User Interface) X Window System GUI GUI 2

More information

r07.dvi

r07.dvi 19 7 ( ) 2019.4.20 1 1.1 (data structure ( (dynamic data structure 1 malloc C free C (garbage collection GC C GC(conservative GC 2 1.2 data next p 3 5 7 9 p 3 5 7 9 p 3 5 7 9 1 1: (single linked list 1

More information

ohp07.dvi

ohp07.dvi 19 7 ( ) 2019.4.20 1 (data structure) ( ) (dynamic data structure) 1 malloc C free 1 (static data structure) 2 (2) C (garbage collection GC) C GC(conservative GC) 2 2 conservative GC 3 data next p 3 5

More information

GLS user s reference 19 8 21 1 3 1.1....................................................... 3 1.2....................................................... 3 1.3.......................................................

More information

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1

/ SCHEDULE /06/07(Tue) / Basic of Programming /06/09(Thu) / Fundamental structures /06/14(Tue) / Memory Management /06/1 I117 II I117 PROGRAMMING PRACTICE II 2 MEMORY MANAGEMENT 2 Research Center for Advanced Computing Infrastructure (RCACI) / Yasuhiro Ohara yasu@jaist.ac.jp / SCHEDULE 1. 2011/06/07(Tue) / Basic of Programming

More information

ProVisionaire Control V3.0セットアップガイド

ProVisionaire Control V3.0セットアップガイド ProVisionaire Control V3 1 Manual Development Group 2018 Yamaha Corporation JA 2 3 4 5 NOTE 6 7 8 9 q w e r t r t y u y q w u e 10 3. NOTE 1. 2. 11 4. NOTE 5. Tips 12 2. 1. 13 3. 4. Tips 14 5. 1. 2. 3.

More information

double float

double float 2015 3 13 1 2 2 3 2.1.......................... 3 2.2............................. 3 3 4 3.1............................... 4 3.2 double float......................... 5 3.3 main.......................

More information

Condition DAQ condition condition 2 3 XML key value

Condition DAQ condition condition 2 3 XML key value Condition DAQ condition 2009 6 10 2009 7 2 2009 7 3 2010 8 3 1 2 2 condition 2 3 XML key value 3 4 4 4.1............................. 5 4.2...................... 5 5 6 6 Makefile 7 7 9 7.1 Condition.h.............................

More information

program.dvi

program.dvi 2001.06.19 1 programming semi ver.1.0 2001.06.19 1 GA SA 2 A 2.1 valuename = value value name = valuename # ; Fig. 1 #-----GA parameter popsize = 200 mutation rate = 0.01 crossover rate = 1.0 generation

More information

r08.dvi

r08.dvi 19 8 ( ) 019.4.0 1 1.1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( ) 1 next 1 prev 1 head cur tail head cur prev

More information

r03.dvi

r03.dvi 19 ( ) 019.4.0 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void... argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0 a a \0 b b b \0 c c c \0 1: // argdemo1.c ---

More information

Complex Lab – Operating Systems - Graphical Console

Complex Lab – Operating Systems - Graphical Console Complex Lab Operating Systems Graphical Console Martin Küttler Last assignment Any questions? Any bug reports, whishes, etc.? 1 / 13 We are here Pong Server Paddle Client 1 Paddle Client 2 Memory Management

More information

ohp03.dvi

ohp03.dvi 19 3 ( ) 2019.4.20 CS 1 (comand line arguments) Unix./a.out aa bbb ccc ( ) C main void int main(int argc, char *argv[]) {... 2 (2) argc argv argc ( ) argv (C char ) ( 1) argc 4 argv NULL. / a. o u t \0

More information

ohp08.dvi

ohp08.dvi 19 8 ( ) 2019.4.20 1 (linked list) ( ) next ( 1) (head) (tail) ( ) top head tail head data next 1: 2 (2) NULL nil ( ) NULL ( NULL ) ( 1 ) (double linked list ) ( 2) 3 (3) head cur tail head cur prev data

More information

LiveCode初心者開発入門サンプル

LiveCode初心者開発入門サンプル / About LiveCode 01:... 11 02: Create... 15 set 03:... 21 name title LiveCode 04:... 29 global local width height 05:... 37 Controls Tools Palette Script Editor message handler 06:... 52 RGB 07:... 63

More information

C

C C 1 2 1.1........................... 2 1.2........................ 2 1.3 make................................................ 3 1.4....................................... 5 1.4.1 strip................................................

More information

Qt4.0 GUI Nishio 2007 8 29 3 1 Hello Qt! 5 1.1 Hello Qt!................................. 5 1.2 (QLabel)........................ 7 1.3 (QPushButton)................ 8 1.4 (QFont)................... 9

More information

大統一Debian勉強会 gdb+python拡張を使ったデバッグ手法

大統一Debian勉強会 gdb+python拡張を使ったデバッグ手法 Debian 2013 gdb+python nozzy@debian.or.jp 2013 6 29 Level Debian Up Debian Debian debian sid unstable Debian debian sid unstable *-dbg Debian debian sid unstable *-dbg gdb Debian debian sid unstable *-dbg

More information

1-4 int a; std::cin >> a; std::cout << "a = " << a << std::endl; C++( 1-4 ) stdio.h iostream iostream.h C++ include.h 1-4 scanf() std::cin >>

1-4 int a; std::cin >> a; std::cout << a =  << a << std::endl; C++( 1-4 ) stdio.h iostream iostream.h C++ include.h 1-4 scanf() std::cin >> 1 C++ 1.1 C C++ C++ C C C++ 1.1.1 C printf() scanf() C++ C hello world printf() 1-1 #include printf( "hello world\n" ); C++ 1-2 std::cout

More information

美唄市広報メロディー2014年1月号

美唄市広報メロディー2014年1月号 1 2014 E-mailkouhoujouhou@city.bibai.lg.jp January May September October November December February March June July August April BIBAI CITY INFORMATION http://db.net-bibai.co.jp/bibai/

More information

WinHPC ppt

WinHPC ppt MPI.NET C# 2 2009 1 20 MPI.NET MPI.NET C# MPI.NET C# MPI MPI.NET 1 1 MPI.NET C# Hello World MPI.NET.NET Framework.NET C# API C# Microsoft.NET java.net (Visual Basic.NET Visual C++) C# class Helloworld

More information

untitled

untitled C -1 - -2 - concept lecture keywords FILE, fopen, fclose, fscanf, fprintf, EOF, r w a, typedef gifts.dat Yt JZK-3 Jizake tsumeawase 45 BSP-15 Body soap set 3 BT-2 Bath towel set 25 TEA-2 Koutya

More information

Linux XScreenSaver T020074

Linux XScreenSaver T020074 Linux XScreenSaver T020074 Linux XScreenSaver XScreenSaver Linux Linux Linux X Window System X Window System Xlib XScreenSaver X Window System Xlib XScreenSaver Xlib vroot.h Xlib XScreenSaver Linux Linux

More information

‚æ4›ñ

‚æ4›ñ ( ) ( ) ( ) A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z 0 1 2 3 4 5 6 7 8 9 (OUS) 9 26 1 / 28 ( ) ( ) ( ) A B C D Z a b c d z 0 1 2 9 (OUS) 9

More information

Specview Specview Specview STSCI(Space Telescope SCience Institute) VO Specview Web page htt

Specview Specview Specview STSCI(Space Telescope SCience Institute) VO Specview Web page   htt Specview Specview Specview STSCI(Space Telescope SCience Institute) VO Specview Web page http://www.stsci.edu/resources/software_hardware/specview http://specview.stsci.edu/javahelp/main.html Specview

More information

lexex.dvi

lexex.dvi (2018, c ) http://istksckwanseiacjp/ ishiura/cpl/ 4 41 1 mini-c lexc,, 2 testlexc, lexc mini-c 1 ( ) mini-c ( ) (int, char, if, else, while, return 6 ) ( ) (+, -, *, /, %, &, =, ==,!=, >, >=,

More information

O(N) ( ) log 2 N

O(N) ( ) log 2 N 2005 11 21 1 1.1 2 O(N) () log 2 N 1.2 2 1 List 3-1 List 3-3 List 3-4? 3 3.1 3.1.1 List 2-1(p.70) 1 1 10 1 3.1.2 List 3-1(p.70-71) 1 1 2 1 2 2 1: 1 3 3.1.3 1 List 3-1(p.70-71) 2 #include stdlib.h

More information

ÆþÌçGTK+

ÆþÌçGTK+ 249 10 & 10.1 10.1.1 void gtk_ widget_ set_ events ( GtkWidget * widget, gint events); 1 2 GtkEventMask typedef enum { GDK_ EXPOSURE_ MASK = 1

More information

untitled

untitled Clutter Overview 2009/09/11 Youngsik Yoon Software Application Engineer Agenda Moblin UI Clutter Clutter 2 Moblin UI Moblin UI Services Customer Provided UI / Apps WM + Clutter Compositor Platform Specific

More information

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B

A/B (2018/10/19) Ver kurino/2018/soft/soft.html A/B A/B (2018/10/19) Ver. 1.0 kurino@math.cst.nihon-u.ac.jp http://edu-gw2.math.cst.nihon-u.ac.jp/ kurino/2018/soft/soft.html 2018 10 19 A/B 1 2018 10 19 2 1 1 1.1 OHP.................................... 1

More information

Java updated

Java updated Java 2003.07.14 updated 3 1 Java 5 1.1 Java................................. 5 1.2 Java..................................... 5 1.3 Java................................ 6 1.3.1 Java.......................

More information

(pack ) Toplevel

(pack ) Toplevel 1 1 2 2 3 (pack ) 6 3.1................................... 6 3.2 1............................ 8 3.3 Toplevel........................................ 9 3.4............................... 10 3.5 Toplevel..................................

More information

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( )

mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( ) 2008 3 10 1 mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( ) stream FILE ( man ) 40 ( ) %./a.out String : test

More information

untitled

untitled II 4 Yacc Lex 2005 : 0 1 Yacc 20 Lex 1 20 traverse 1 %% 2 [0-9]+ { yylval.val = atoi((char*)yytext); return NUM; 3 "+" { return + ; 4 "*" { return * ; 5 "-" { return - ; 6 "/" { return / ; 7 [ \t] { /*

More information

November 13 June 1 April 23 October 1 December 22 August 6 September 5 July 2 May 2 8 6 11 1 7 01 1516 4 23 4 1995 4 23 1999 4 23 19 2 02 88 5 2 3 03 6 1 6 1 300 4 04 100 7 2 7 2 706 15 2 5 05 8 6 86

More information

TEOライブラリによる画像処理プログラミング入門

TEOライブラリによる画像処理プログラミング入門 Image Processing Program using TEO library A Beginners s Guide TEO ライブラリによる画像処理プログラミング入門 菅谷保之著 THE TEO PROJECT PROGRAMMER S NOTEBOOK TEO THE TEO PROJECT iii libteo. libteo, TEO C TEO. TEO,. TEO. TEO.

More information

untitled

untitled II yacc 005 : 1, 1 1 1 %{ int lineno=0; 3 int wordno=0; 4 int charno=0; 5 6 %} 7 8 %% 9 [ \t]+ { charno+=strlen(yytext); } 10 "\n" { lineno++; charno++; } 11 [^ \t\n]+ { wordno++; charno+=strlen(yytext);}

More information

C B

C B C 095707B 2010 6 8 1 LEVE1 2 1.1 LEVEL 1.1................................................ 2 1.1.1 1................................................ 2 1.1.2 1.2..............................................

More information

6-1

6-1 6-1 (data type) 6-2 6-3 ML, Haskell, Scala Lisp, Prolog (setq x 123) (+ x 456) (setq x "abc") (+ x 456) ; 6-4 ( ) subtype INDEX is INTEGER range -10..10; type DAY is (MON, TUE, WED, THU, FRI, SAT, SUN);

More information

joho07-1.ppt

joho07-1.ppt 0xbffffc5c 0xbffffc60 xxxxxxxx xxxxxxxx 00001010 00000000 00000000 00000000 01100011 00000000 00000000 00000000 xxxxxxxx x y 2 func1 func2 double func1(double y) { y = y + 5.0; return y; } double func2(double*

More information

fx-9860G Manager PLUS_J

fx-9860G Manager PLUS_J fx-9860g J fx-9860g Manager PLUS http://edu.casio.jp k 1 k III 2 3 1. 2. 4 3. 4. 5 1. 2. 3. 4. 5. 1. 6 7 k 8 k 9 k 10 k 11 k k k 12 k k k 1 2 3 4 5 6 1 2 3 4 5 6 13 k 1 2 3 1 2 3 1 2 3 1 2 3 14 k a j.+-(),m1

More information

JavaScript の使い方

JavaScript の使い方 JavaScript Release10.5 JavaScript NXJ JavaScript JavaScript JavaScript 2 JavaScript JavaScript JavaScript NXJ JavaScript 1: JavaScript 2: JavaScript 3: JavaScript 4: 1 1: JavaScript JavaScript NXJ Static

More information

ex01.dvi

ex01.dvi ,. 0. 0.0. C () /******************************* * $Id: ex_0_0.c,v.2 2006-04-0 3:37:00+09 naito Exp $ * * 0. 0.0 *******************************/ #include int main(int argc, char **argv) double

More information

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63>

<4D F736F F D B B83578B6594BB2D834A836F815B82D082C88C60202E646F63> デザイン言語 Processing 入門 サンプルページ この本の定価 判型などは, 以下の URL からご覧いただけます. http://www.morikita.co.jp/books/mid/084931 このサンプルページの内容は, 初版 1 刷発行当時のものです. Processing Ben Fry Casey Reas Windows Mac Linux Lesson 1 Processing

More information

Microsoft Word - Meta70_Preferences.doc

Microsoft Word - Meta70_Preferences.doc Image Windows Preferences Edit, Preferences MetaMorph, MetaVue Image Windows Preferences Edit, Preferences Image Windows Preferences 1. Windows Image Placement: Acquire Overlay at Top Left Corner: 1 Acquire

More information

1 1.1 (JCPRG) 30 Nuclear Reaction Data File (NRDF) PC GSYS2.4 JCPRG GSYS2.4 Java Windows, Linux, Max OS X, FreeBSD GUI PNG, GIF, JPEG X Y GSYS2

1 1.1 (JCPRG) 30 Nuclear Reaction Data File (NRDF) PC GSYS2.4 JCPRG GSYS2.4 Java Windows, Linux, Max OS X, FreeBSD GUI PNG, GIF, JPEG X Y GSYS2 (GSYS2.4) GSYS2.4 Manual SUZUKI Ryusuke Hokkaido University Hospital Abstract GSYS2.4 is an update version of GSYS version 2. Main features added in this version are Magnifying glass function, Automatically

More information

1 May 2011

1 May 2011 1 May 2011 2 May 2011 3 May 2011 4 May 2011 5 June 2011 6 June 2011 7 June 2011 8 June 2011 9 July 2011 10 July 2011 11 July 2011 12 July 2011 13 August 2011 14 August 2011 15 August 2011 16 August 2011

More information

ARM gcc Kunihiko IMAI 2009 1 11 ARM gcc 1 2 2 2 3 3 4 3 4.1................................. 3 4.2............................................ 4 4.3........................................

More information

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~ alse

¥×¥í¥°¥é¥ß¥ó¥°±é½¬I  Exercise on Programming I [1zh] ` `%%%`#`&12_`__~~~alse I Exercise on Programming I http://bit.ly/oitprog1 1, 2 of 14 ( RD S ) I 1, 2 of 14 1 / 44 Ruby Ruby ( RD S ) I 1, 2 of 14 2 / 44 7 5 9 2 9 3 3 2 6 5 1 3 2 5 6 4 7 8 4 5 2 7 9 6 4 7 1 3 ( RD S ) I 1, 2

More information

cpp1.dvi

cpp1.dvi 2017 c 1 C++ (1) C C++, C++, C 11, 12 13 (1) 14 (2) 11 1 n C++ //, [List 11] 1: #include // C 2: 3: int main(void) { 4: std::cout

More information

ch31.dvi

ch31.dvi 1 1 1.1 1.1.1 ( ) ( 1.1 ): [ ] [ ] CPU[ + ] [ ] CPU( ) ( 1 2 1 1.1: ( 1.1 ): ( ) [ ] ( )[ ] + ( ) (+ ) ( ) ( ) 1.1. 3 1.2: ( ) ( ) ( 1.2) 4 1 1.3: 120m/ (432km/h) 0.5 2m/ 1 ( 1 ) ( ) ( ) ( 1.3) 1.1. 5

More information

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV tutimura@mist.i.u-tokyo.ac.jp kaneko@ipl.t.u-tokyo.ac.jp http://www.misojiro.t.u-tokyo.ac.jp/ tutimura/sem3/ 2002 12 11 p.1/33 10/16 1. 10/23 2. 10/30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20

More information

MEISEI HEROES HERO HERO HERO MEISEI HEROES

MEISEI HEROES HERO HERO HERO MEISEI HEROES MEISEI HEROES MEISEI HEROES HERO HERO HERO MEISEI HEROES 04 INDEX 06 28 08 24 26 10 14 16 22 18 20 MEISEI HEROES 05 04 MEISEI HEROES 2014 SCHOOL GUIDE MEISEI HEROES 1 2 3 4 5 06 MEISEI HEROES 2014 SCHOOL

More information

para02-2.dvi

para02-2.dvi 2002 2 2002 4 23 : MPI MPI 1 MPI MPI(Message Passing Interface) MPI UNIX Windows Machintosh OS, MPI 2 1 1 2 2.1 1 1 1 1 1 1 Fig. 1 A B C F Fig. 2 A B F Fig. 1 1 1 Fig. 2 2.2 Fig. 3 1 . Fig. 4 Fig. 3 Fig.

More information

New version (2.15.1) of Specview is now available Dismiss Windows Specview.bat set spv= Specview set jhome= JAVA (C:\Program Files\Java\jre<version>\

New version (2.15.1) of Specview is now available Dismiss Windows Specview.bat set spv= Specview set jhome= JAVA (C:\Program Files\Java\jre<version>\ Specview VO 2012 2012/3/26 Specview Specview STSCI(Space Telescope SCience Institute) VO Specview Web page http://www.stsci.edu/resources/software hardware/specview http://specview.stsci.edu/javahelp/main.html

More information

Nios® II HAL API を使用したソフトウェア・サンプル集 「Modular Scatter-Gather DMA Core」

Nios® II HAL API を使用したソフトウェア・サンプル集 「Modular Scatter-Gather DMA Core」 ALTIMA Company, MACNICA, Inc Nios II HAL API Modular Scatter-Gather DMA Core Ver.17.1 2018 8 Rev.1 Nios II HAL API Modular Scatter-Gather DMA Core...3...3...4... 4... 5 3-2-1. msgdma... 6 3-2-2. On-Chip

More information

(1/2) 2/45 HPC top runner application programmer PC-9801F N88-BASIC Quick BASIC + DOS ( ) BCB Windows Percolation, Event-driven MD ActionScript Flash

(1/2) 2/45 HPC top runner application programmer PC-9801F N88-BASIC Quick BASIC + DOS ( ) BCB Windows Percolation, Event-driven MD ActionScript Flash 1/45 8 Outline 1. 2. 3. 4. Jun. 6, 2013@ A (1/2) 2/45 HPC top runner application programmer PC-9801F N88-BASIC Quick BASIC + DOS ( ) BCB Windows Percolation, Event-driven MD ActionScript Flash MPI MD (2/2)

More information

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l

1 C STL(1) C C C libc C C C++ STL(Standard Template Library ) libc libc C++ C STL libc STL iostream Algorithm libc STL string vector l C/C++ 2007 6 18 1 C STL(1) 2 1.1............................................... 2 1.2 stdio................................................ 3 1.3.......................................... 10 2 11 2.1 sizeof......................................

More information

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV

10/ / /30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20 6. http, CGI Perl 11/27 7. ( ) Perl 12/ 4 8. Windows Winsock 12/11 9. JAV tutimura@mist.i.u-tokyo.ac.jp kaneko@ipl.t.u-tokyo.ac.jp http://www.misojiro.t.u-tokyo.ac.jp/ tutimura/sem3/ 2002 11 20 p.1/34 10/16 1. 10/23 2. 10/30 3. ( ) 11/ 6 4. UNIX + C socket 11/13 5. ( ) C 11/20

More information

help gem gem gem my help

help gem gem gem my help hikiutils 1234 2017 3 1 1 6 1.0.1 help gem................... 7 gem.................................... 7 gem................................... 7 my help.................................. 7 my help......................

More information

新版明解C言語 実践編

新版明解C言語 実践編 2 List - "max.h" a, b max List - max "max.h" #define max(a, b) ((a) > (b)? (a) : (b)) max List -2 List -2 max #include "max.h" int x, y; printf("x"); printf("y"); scanf("%d", &x); scanf("%d", &y); printf("max(x,

More information

K227 Java 2

K227 Java 2 1 K227 Java 2 3 4 5 6 Java 7 class Sample1 { public static void main (String args[]) { System.out.println( Java! ); } } 8 > javac Sample1.java 9 10 > java Sample1 Java 11 12 13 http://java.sun.com/j2se/1.5.0/ja/download.html

More information

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java

2 1 Web Java Android Java 1.2 6) Java Java 7) 6) Java Java (Swing, JavaFX) (JDBC) 7) OS 1.3 Java Java 1 Java Java 1.1 Java 1) 2) 3) Java OS Java 1.3 4) Java Web Start Web / 5) Java C C++ Java JSP(Java Server Pages) 1) OS 2) 3) 4) Java Write Once, Run Anywhere 5) Java Web Java 2 1 Web Java Android Java

More information

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co

~~~~~~~~~~~~~~~~~~ wait Call CPU time 1, latch: library cache 7, latch: library cache lock 4, job scheduler co 072 DB Magazine 2007 September ~~~~~~~~~~~~~~~~~~ wait Call CPU time 1,055 34.7 latch: library cache 7,278 750 103 24.7 latch: library cache lock 4,194 465 111 15.3 job scheduler coordinator slave wait

More information

MORALITY LEARNING AMBITION 2 KASUMIGAOKA

MORALITY LEARNING AMBITION 2 KASUMIGAOKA KASUMIGAOKA MORALITY LEARNING AMBITION 2 KASUMIGAOKA KASUMIGAOKA 3 4 KASUMIGAOKA KASUMIGAOKA 5 Super Science High School 6 KASUMIGAOKA School Life 4 April 5 May 6 June 7 July 8 August 9 September 10 October

More information

0.2 Button TextBox: menu tab 2

0.2 Button TextBox: menu tab 2 Specview VO 2012 2012/9/27 Specview Specview STSCI(Space Telescope SCience Institute) VO Specview Web page http://www.stsci.edu/resources/software hardware/specview http://specview.stsci.edu/javahelp/main.html

More information

Microsoft Word - C.....u.K...doc

Microsoft Word - C.....u.K...doc C uwêííôöðöõ Ð C ÔÖÐÖÕ ÐÊÉÌÊ C ÔÖÐÖÕÊ C ÔÖÐÖÕÊ Ç Ê Æ ~ if eíè ~ for ÒÑÒ ÌÆÊÉÉÊ ~ switch ÉeÍÈ ~ while ÒÑÒ ÊÍÍÔÖÐÖÕÊ ~ 1 C ÔÖÐÖÕ ÐÊÉÌÊ uê~ ÏÒÏÑ Ð ÓÏÖ CUI Ô ÑÊ ÏÒÏÑ ÔÖÐÖÕÎ d ÈÍÉÇÊ ÆÒ Ö ÒÐÑÒ ÊÔÎÏÖÎ d ÉÇÍÊ

More information

ProVAL Recent Projects, ProVAL Online 3 Recent Projects ProVAL Online Show Online Content on the Start Page Page 13

ProVAL Recent Projects, ProVAL Online 3 Recent Projects ProVAL Online Show Online Content on the Start Page Page 13 ProVAL Unit System Enable Recording Log Preferred Language Default File Type Default Project Path ProVAL : Unit SystemUse SI Units SI SI USCS Enable Recording Log Language Default File Type Default Project

More information

(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C

(Java/FX ) Java CD Java version Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas C (Java/FX ) Java CD Java version 10.0.1 Java VC++ Python Ruby Java Java Eclipse Java Java 3 Java for Everyone 2 10 Java Midi Java JavaFX Shape Canvas Canvas Eclipse Eclipse M... 1 javafx e(fx)clipse 3.0.0

More information

表紙

表紙 YONGAKU-KAGAWANISHI Vos estis sal terrae. Evangelium secundum Matthaeum V,13 01 YONGAKU-KAGAWANISHI Message SCHOOL GUIDE 2017 02 03 YONGAKU-KAGAWANISHI Message Message SCHOOL GUIDE 2017 04 Message Message

More information

Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n

Original : Hello World! (0x0xbfab85e0) Copy : Hello World! (0x0x804a050) fgets mstrcpy malloc mstrcpy (main ) mstrcpy malloc free fgets stream 1 ( \n 2008 3 10 1 mstrcpy char *mstrcpy(const char *src); mstrcpy malloc (main free ) stdio.h fgets char *fgets(char *s, int size, FILE *stream); s size ( ) stream FILE ( man ) 40 ( ) %./a.out String : test

More information

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D

Minimum C Minimum C Minimum C BNF T okenseq W hite Any D 6 2019 5 14 6.1 Minimum C....................... 6 1 6.2....................................... 6 7 6.1 Minimum C Minimum C BNF T okenseq W hite Any Digit ::= 0 1 2... 9. Number ::= Digit Digit. Alphabet

More information

fp.gby

fp.gby 1 1 2 2 3 2 4 5 6 7 8 9 10 11 Haskell 12 13 Haskell 14 15 ( ) 16 ) 30 17 static 18 (IORef) 19 20 OK NG 21 Haskell (+) :: Num a => a -> a -> a sort :: Ord a => [a] -> [a] delete :: Eq a => a -> [a] -> [a]

More information

Ver.1 1/17/2003 2

Ver.1 1/17/2003 2 Ver.1 1/17/2003 1 Ver.1 1/17/2003 2 Ver.1 1/17/2003 3 Ver.1 1/17/2003 4 Ver.1 1/17/2003 5 Ver.1 1/17/2003 6 Ver.1 1/17/2003 MALTAB M GUI figure >> guide GUI GUI OK 7 Ver.1 1/17/2003 8 Ver.1 1/17/2003 Callback

More information

グラフ数値読み取りシステム (GSYS2.4) 利用の手引

グラフ数値読み取りシステム (GSYS2.4) 利用の手引 (GSYS2.4) GSYS2.4 Manual SUZUKI Ryusuke Hokkaido University Hospital 2011 6 7 Abstract GSYS2.4 is an update version of GSYS version 2. Main features added in this version are Magnifying glass function,

More information

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM

RX600 & RX200シリーズ アプリケーションノート RX用仮想EEPROM R01AN0724JU0170 Rev.1.70 MCU EEPROM RX MCU 1 RX MCU EEPROM VEE VEE API MCU MCU API RX621 RX62N RX62T RX62G RX630 RX631 RX63N RX63T RX210 R01AN0724JU0170 Rev.1.70 Page 1 of 33 1.... 3 1.1... 3 1.2... 3

More information

For_Beginners_CAPL.indd

For_Beginners_CAPL.indd CAPL Vector Japan Co., Ltd. 目次 1 CAPL 03 2 CAPL 03 3 CAPL 03 4 CAPL 04 4.1 CAPL 4.2 CAPL 4.3 07 5 CAPL 08 5.1 CANoe 5.2 CANalyzer 6 CAPL 10 7 CAPL 11 7.1 CAPL 7.2 CAPL 7.3 CAPL 7.4 CAPL 16 7.5 18 8 CAPL

More information

\\afs001-0m0005\project02\A32\M

\\afs001-0m0005\project02\A32\M Technical Information 2004.09 2009.04 Store Request Query Request Retrieve Request DICOM Client Application Remote SCP Remote Query/Retrieve SCP Image Stored * DICOM Server Application Remote SCU Print

More information

tuat1.dvi

tuat1.dvi ( 1 ) http://ist.ksc.kwansei.ac.jp/ tutimura/ 2012 6 23 ( 1 ) 1 / 58 C ( 1 ) 2 / 58 2008 9 2002 2005 T E X ptetex3, ptexlive pt E X UTF-8 xdvi-jp 3 ( 1 ) 3 / 58 ( 1 ) 4 / 58 C,... ( 1 ) 5 / 58 6/23( )

More information

r11.dvi

r11.dvi 19 11 ( ) 2019.4.20 1 / 1.1 ( n n O(n 2 O(n 2 ) ( 1 d n 1 n logn O(nlogn n ( n logn C 1.2 ( ( merge 2 1 1 3 1 4 5 4 2 3 7 9 7 1 2 3 4 5 7 9 1: 2 ivec merge int *ivec_new(int size) { int *a = (int*)malloc((size+1)

More information

ohp11.dvi

ohp11.dvi 19 11 ( ) 2019.4.20 1 / ( ) n O(n 2 ) O(n 2 ) ( ) 1 d n 1 n logn O(nlogn) n ( n logn C ) 2 ( ) ( merge) 2 1 1 3 1 4 5 4 2 3 7 9 7 1 2 3 4 5 7 9 1: 2 ivec merge 3 ( ) (2) int *ivec_new(int size) { int *a

More information

第3章 OpenGL の基礎

第3章 OpenGL の基礎 3 OpenGL April 11, 2017 1 / 28 3.1 ( ) OpenGL OpenGL 2 / 28 3.2 OpenGL OpenGL OpenGL (Open Graphics Library) Silicon Graphics, Inc. 2 3 API (Application Program Interface) [4] UNIX OS Windows Macintosh

More information

SOZO_経営_PDF用.indd

SOZO_経営_PDF用.indd Faculty of Business Administration Department of Business Administration CONTENTS ADMISSION POLICY 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 INTERNET SOZO Wireless Network 16 Campus Life Calendar APRIL MAY JUNE

More information

slide5.pptx

slide5.pptx ソフトウェア工学入門 第 5 回コマンド作成 1 head コマンド作成 1 早速ですが 次のプログラムを head.c という名前で作成してください #include #include static void do_head(file *f, long nlines); int main(int argc, char *argv[]) { if (argc!=

More information

1.ppt

1.ppt /* * Program name: hello.c */ #include int main() { printf( hello, world\n ); return 0; /* * Program name: Hello.java */ import java.io.*; class Hello { public static void main(string[] arg)

More information

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1

( ) ( ) 30 ( ) 27 [1] p LIFO(last in first out, ) (push) (pup) 1 () 2006 2 27 1 10 23 () 30 () 27 [1] p.97252 7 2 2.1 2.1.1 1 LIFO(last in first out, ) (push) (pup) 1 1: 2.1.2 1 List 4-1(p.100) stack[] stack top 1 2 (push) (pop) 1 2 void stack push(double val) val stack

More information

2

2 L C -24K 9 L C -22K 9 2 3 4 5 6 7 8 9 10 11 12 11 03 AM 04 05 0 PM 1 06 1 PM 07 00 00 08 2 PM 00 4 PM 011 011 021 041 061 081 051 071 1 2 4 6 8 5 7 00 00 00 00 00 00 00 00 30 00 09 00 15 10 3 PM 45 00

More information

:30 12:00 I. I VI II. III. IV. a d V. VI

:30 12:00 I. I VI II. III. IV. a d V. VI 2017 2017 08 03 10:30 12:00 I. I VI II. III. IV. a d V. VI. 80 100 60 1 I. Backus-Naur BNF X [ S ] a S S ; X X X, S [, a, ], ; BNF X (parse tree) (1) [a;a] (2) [[a]] (3) [a;[a]] (4) [[a];a] : [a] X 2 222222

More information

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i +=

Local variable x y i paint public class Sample extends Applet { public void paint( Graphics gc ) { int x, y;... int i=10 ; while ( i < 100 ) {... i += Safari AppletViewer Web HTML Netscape Web Web 13-1 Applet Web Applet init Web paint Web start Web HTML stop destroy update init Web paint start Web update Event Driven paint Signature Overwriting Overriding

More information

MPI MPI MPI.NET C# MPI Version2

MPI MPI MPI.NET C# MPI Version2 MPI.NET C# 2 2009 2 27 MPI MPI MPI.NET C# MPI Version2 MPI (Message Passing Interface) MPI MPI Version 1 1994 1 1 1 1 ID MPI MPI_Send MPI_Recv if(rank == 0){ // 0 MPI_Send(); } else if(rank == 1){ // 1

More information

pptx

pptx iphone 2010 8 18 C xkozima@myu.ac.jp C Hello, World! Hello World hello.c! printf( Hello, World!\n );! os> ls! hello.c! os> cc hello.c o hello! os> ls! hello!!hello.c! os>./hello! Hello, World!! os>! os>

More information