第 6 章 ウィジェットリファレンス 83
6.1.1 普通のボタン
オブジェクトの階層構造
G O b j e c t
+ - - - -G t k O b j e c t + - - - -G t k W i d g e t
+ - - - -G t k C o n t a i n e r + - - - -G t k B i n
+ - - - -G t k B u t t o n
ウィジェットの作成
ボタンウィジェット(GtkButton)を作成する関数は次の4つです.
図6.1 普通のボタン
• gtk button new
ラベルのない普通のボタンを作成する関数です. G t k W i d g e t* g t k _ b u t t o n _ n e w (v o i d) ;
• gtk button new with label
ラベル付きのボタン(図6.1上段)を作成する関数です.
G t k W i d g e t* g t k _ b u t t o n _ n e w _ w i t h _ l a b e l (c o n s t g c h a r * l a b e l ) ;
• gtk button new with mnemonic
アクセラレータ機能付きボタン(図6.1中段)を作成する関数です. アクセラレータキーに設定したい文 字の前にアンダースコアを挿入します.
G t k W i d g e t* g t k _ b u t t o n _ n e w _ w i t h _ m n e m o n i c (c o n s t g c h a r * l a b e l ) ;
• gtk button new from stock
画像入りのボタン(図6.1下段)を作成する関数です. 画像データはストックアイテム(GtkStockItem) から取得します. ストックアイテムには決められた文字列がID (例えば, GTK STOCK OK とか
GTK STOCK OPEN)として登録してあり,このIDを関数の引数に指定します.
G t k W i d g e t* g t k _ b u t t o n _ n e w _ f r o m _ s t o c k (c o n s t g c h a r * s t o c k _ i d ) ;
シグナルとコールバック関数
表6.1にボタンウィジェットのシグナルを示します. 通常は”clicked”シグナルのみで十分ですが,ボタンを 押したときと離したときで別の動作をさせたい場合には”pressed” シグナルや”released”シグナルを利用し ます.
上記のシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります. v o i d u s e r _ f u n c t i o n (G t k B u t t o n * b u t t o n , g p o i n t e r u s e r _ d a t a ) ;
ウィジェットのプロパティ設定
ボタンのプロパティとしてよく使用されるのはラベルです. ボタンのラベルを取得したり,ラベルを更新し たりするには次の関数を使用します.
• gtk button get label
ボタンウィジェットのラベルに設定されている文字列を返します.
表6.1 ボタンウィジェットのシグナル
シグナル 説明
”enter” マウスポインタがボタン領域に入ったときに発生するシグナルです.
”leave” マウスポインタがボタン領域から出たときに発生するシグナルです.
”pressed” ボタンが押されたときに発生するシグナルです.
”release” ボタンが離されたときに発生するシグナルです.
”clicked” ボタンを押して離すという一連の動作,すなわちボタンがクリックされたときに発生する
シグナルです.
G _ C O N S T _ R E T U R N g c h a r* g t k _ b u t t o n _ g e t _ l a b e l (G t k B u t t o n * b u t t o n ) ;
• gtk button set label
ボタンウィジェットのラベルを更新します.
v o i d g t k _ b u t t o n _ s e t _ l a b e l (G t k B u t t o n * b u t t o n , c o n s t g c h a r * l a b e l ) ;
サンプルプログラム
ボタンウィジェットのサンプルプログラムをソース6–1–1に示します. このプログラムは, ボタンをクリッ クした回数を記憶して, クリックのたびにボタンのラベルにクリック回数を表示するものです. プログラム起 動時は図6.2左のように表示されますが,ボタンをクリックするとコールバック関数cb button clickedが呼び 出され, ラベルが図6.2右のように更新されます.
図6.2 ボタンウィジェットのサンプルプログラム
ソース 6–1–1 ボタンウィジェットのサンプルプログラム: gtkbutton-sample.c
1 # i n c l u d e <g t k / g t k . h >
2
3 s t a t i c v o i d c b _ b u t t o n _ c l i c k e d (G t k B u t t o n * w i d g e t , g p o i n t e r d a t a ) {
4 s t a t i c i n t c o u n t = 0 ;
5 c h a r b u f [ 1 0 2 4 ] ;
6
7 s p r i n t f ( buf , " % d à t i m e ( s ) à c l i c k e d . " , + + c o u n t ) ;
8 g t k _ b u t t o n _ s e t _ l a b e l ( w i d g e t , b u f ) ;
9 }
10
11 i n t m a i n (i n t ar g c , c h a r * * a r g v ) {
12 G t k W i d g e t * w i n d o w ;
13 G t k W i d g e t * b o x ;
14 G t k W i d g e t * b u t t o n ;
15
16 g t k _ i n i t ( & a r g c , & a r g v ) ;
17
18 w i n d o w = g t k _ w i n d o w _ n e w ( G T K _ W I N D O W _ T O P L E V E L ) ;
19 g t k _ w i n d o w _ s e t _ t i t l e ( G T K _ W I N D O W ( w i n d o w ) , " G t k B u t t o n à S a m p l e " ) ;
20 g t k _ w i d g e t _ s e t _ s i z e _ r e q u e s t ( w i n d o w , 2 4 0 , -1);
21 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( w i n d o w ) , " d e s t r o y " ,
22 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
23
24 b o x = g t k _ v b o x _ n e w ( T R U E , 0 ) ;
25 g t k _ c o n t a i n e r _ a d d ( G T K _ C O N T A I N E R ( w i n d o w ) , b o x ) ;
26
27 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " P l e a s e à c l i c k à m e . " ) ;
28 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( b o x ) , b u t t o n , T R U E , T R U E , 0 ) ;
29 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( b u t t o n ) , " c l i c k e d " ,
30 G _ C A L L B A C K ( c b _ b u t t o n _ c l i c k e d ) , N U L L ) ;
31
32 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
33 g t k _ m a i n ( ) ;
34
35 r e t u r n 0 ;
36 }