第 7 章 ウィジェットリファレンス 113
7.1.2 チェックボタン
チェックボタンウィジェット(GtkCheckButton)はボタンウィジェットから派生したウィジェットで,ボタンを押すことで ボタン上にチェックマークを表示できます.アプリケーションの設定でオプションの使用の有無をユーザーが設定したいときに 使用します.
オブジェクトの階層構造
G O b j e c t
+ - - - -G I n i t i a l l y U n o w n e d + - - - -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
+ - - - -G t k T o g g l e B u t t o n + - - - -G t k C h e c k B u t t o n
表7.2 チェックボタンウィジェットのシグナル シグナル 説明
toggled チェックボタンの状態が変化したときに発生するシグナル.
ウィジェットの作成
チェックボタンウィジェット(GtkCheckButton)を作成する関数は次の3つです.
• gtk check button new
ラベルなしのチェックボタン(図7.3上段)を作成する関数です.
G t k W i d g e t* g t k _ c h e c k _ b u t t o n _ n e w (v o i d) ;
• gtk check button new with label
ラベル付きのチェックボタン(図7.3中段)を作成する関数です.
G t k W i d g e t* g t k _ c h e c 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 check button new with mnemonic
アクセラレータ機能付きチェックボタン(図7.3下段) を作成する関数です.アクセラレータキーに設定したい文字の前 にアンダースコアを挿入します.
G t k W i d g e t* g t k _ c h e c 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 ) ;
シグナルとコールバック関数
表7.2にチェックボタンウィジェットのシグナルを示します.オブジェクトの階層構造を見てもわかるように,チェックボタ ンはトグルボタンの機能を継承したウィジェットです.toggledシグナルはトグルボタンから継承したシグナルです.
toggledシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります.
v o i d u s e r _ f u n c t i o n (G t k T o g g l e B u t t o n * t o g g l e b u t t o n , g p o i n t e r u s e r _ d a t a ) ;
ウィジェットのプロパティ設定
チェックボタンがアクティブ(チェックされている状態)かどうかを調べるには,トグルボタンに対する関数を使います.関 数gtk toggle button get activeの戻り値がTRUEなら状態がアクティブ,FALSEなら状態がアクティブではないということ になります.
g b o o l e a n g t k _ t o g g l e _ b u t t o n _ g e t _ a c t i v e (G t k T o g g l e B u t t o n * t o g g l e _ b u t t o n ) ; トグルボタンの状態を設定するには関数gtk toggle button set activeを使います.
v o i d g t k _ t o g g l e _ b u t t o n _ s e t _ a c t i v e (G t k T o g g l e B u t t o n * t o g g l e _ b u t t o n , g b o o l e a n i s _ a c t i v e ) ;
また,関数gtk toggle button toggledを使うと,トグルボタンの今の状態を反転(トグル)できます.
v o i d g t k _ t o g g l e _ b u t t o n _ t o g g l e d (G t k T o g g l e B u t t o n * t o g g l e _ b u t t o n ) ;
図7.3 チェックボタン
サンプルプログラム
チェックボタンウィジェットのサンプルプログラムをソース7–1–2に示します.このプログラムは,チェックボタンの
toggledシグナルに対するコールバック関数cb button toggled内でチェックボタンの状態を調べて,ターミナル上に表示しま
す.
ソース7-1-2 チェックボタンウィジェットのサンプルプログラム: gtkcheckbutton-sample2.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
4 c b _ b u t t o n _ t o g g l e d (G t k T o g g l e B u t t o n * w i d g e t ,
5 g p o i n t e r u s e r _ d a t a )
6 {
7 g b o o l e a n a c t i v e ;
8 g c h a r * s t r [ ] = { " F A L S E " , " T R U E " } ;
9
10 a c t i v e = g t k _ t o g g l e _ b u t t o n _ g e t _ a c t i v e ( w i d g e t ) ;
11 g _ p r i n t ( " C h e c k b u t t o n s t a t e : % s \ n " , s t r [ a c t i v e ] ) ;
12 }
13 14 i n t
15 m a i n (i n t a r g c , c h a r * * a r g v )
16 {
17 G t k W i d g e t * w i n d o w ;
18 G t k W i d g e t * b o x ;
19 G t k W i d g e t * b u t t o n ;
20
21 g t k _ i n i t ( & a r g c , & a r g v ) ;
22
23 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 ) ;
24 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 C h e c k B u t t o n S a m p l e 2 " ) ;
25 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 , 3 0 0 , -1);
26 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 " ,
27 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
28
29 b o x = g t k _ v b o x _ n e w ( T R U E , 0 ) ;
30 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 ) ;
31
32 b u t t o n = g t k _ c h e c 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 . " ) ;
33 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 ) ;
34 g t k _ t o g g l e _ b u t t o n _ s e t _ a c t i v e ( G T K _ T O G G L E _ B U T T O N ( b u t t o n ) , T R U E ) ;
35 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 ) , " t o g g l e d " ,
36 G _ C A L L B A C K ( c b _ b u t t o n _ t o g g l e d ) , N U L L ) ;
37
38 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
39 g t k _ m a i n ( ) ;
40
41 r e t u r n 0 ;
42 }
図7.4 チェックボタンウィジェットのサンプルプログラム