第 7 章 ウィジェットリファレンス 113
7.1.3 ラジオボタン
表7.3 ラジオボタンウィジェットのシグナル シグナル 説明
group-changed ラジオボタンのグループが変化したときに発生するシグナル.
toggled ボタンの状態が変化したときに発生するシグナル.
g t k _ r a d i o _ b u t t o n _ n e w _ w i t h _ m n e m o n i c _ f r o m _ w i d g e t (G t k R a d i o B u t t o n * g r o u p , c o n s t g c h a r * l a b e l ) ;
ラジオボタンを作成する例をソース7–1–3に示します.最初のラジオボタンを作成するときは,引数に与えるグループを必 ずNULLにします.そして,同じグループのラジオボタンを作成する場合には,先に作成したラジオボタンを引数に与えた関 数gtk radio button new from widgetによってラジオボタンを作成するようにします.
ソース7-1-3 ラジオボタンウィジェットの生成
1 G t k W i d g e t * r a d i o _ b u t t o n [ 2 ] ;
2
3 r a d i o _ b u t t o n [ 0 ] = g t k _ r a d i o _ b u t t o n _ n e w ( N U L L ) ;
4 r a d i o _ b u t t o n [ 1 ] =
5 g t k _ r a d i o _ b u t t o n _ n e w _ f r o m _ w i d g e t ( G T K _ R A D I O _ B U T T O N ( r a d i o _ b u t t o n [ 0 ] ) ) ;
シグナルとコールバック関数
表7.3にチェックボタンウィジェットのシグナルを示します.toggledシグナルは先ほどのチェックボタンと同様にトグルボ タンに対するシグナルです.group-changedシグナルはラジオボタンのシグナルで,そのボタンのグループが変更されたとき に発生するシグナルです.
group-changedシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります.
v o i d u s e r _ f u n c t i o n (G t k R a d i o B u t t o n * r a d i o 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を用います.
• グループ
またラジオボタン特有のプロパティとしてグループがあります.ラジオボタンが属しているグループを取得するには関数 gtk radio button get groupを用います.
G S L i s t* g t k _ r a d i o _ b u t t o n _ g e t _ g r o u p (G t k R a d i o B u t t o n * r a d i o _ b u t t o n ) ;
反対にラジオボタンのグループを別のグループに変更するには,関数gtk radio button set groupを用います.
v o i d g t k _ r a d i o _ b u t t o n _ s e t _ g r o u p (G t k R a d i o B u t t o n * r a d i o _ b u t t o n ,
G S L i s t * g r o u p ) ;
サンプルプログラム
ラジオボタンウィジェットのサンプルプログラムをソース7–1–4に示します.このプログラムは,ラジオボタンのtoggledシ グナルに対するコールバック関数cb button toggled内でボタンの状態を調べて,どのボタンが選択されているかをターミナル 上に表示します.
また,ここではコールバック関数に渡すデータとして,整数を設定しています.このような場合はGINT TO POINTERと いう特別なマクロを使用してデータを変換してください(11行目).反対にgpointer型に変換されたデータをもとの整数に戻 す場合にはGPOINTER TO INTを使用します.
ソース7-1-4 ラジオボタンウィジェットのサンプルプログラム: gtkradiobutton-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 R a d i o B u t t o n * w i d g e t , g p o i n t e r u s e r _ d a t a )
5 {
6 g _ p r i n t ( " C a t c h t h e t o g g l e d s i g n a l f r o m t h e r a d i o b u t t o n % d . \ n " ,
7 G P O I N T E R _ T O _ I N T ( u s e r _ d a t a ) ) ;
8 i f ( 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 ( w i d g e t ) ) )
9 {
10 g _ p r i n t ( " T h e r a d i o b u t t o n % d i s s e l e c t e d . \ n " ,
11 G P O I N T E R _ T O _ I N T ( u s e r _ d a t a ) ) ;
12 }
13 }
14 15 i n t
16 m a i n (i n t ar g c , c h a r * * a r g v )
17 {
18 G t k W i d g e t * w i n d o w ;
19 G t k W i d g e t * b o x ;
20 G t k W i d g e t * b u t t o n [ 3 ] ;
21 G S L i s t * g r o u p = N U L L ;
22
23 g t k _ i n i t ( & a r g c , & a r g v ) ;
24
25 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 ) ;
26 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 R a d i o B u t t o n S a m p l e 2 " ) ;
27 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);
28 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 " ,
29 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
30
31 b o x = g t k _ v b o x _ n e w ( T R U E , 0 ) ;
32 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 ) ;
33
34 b u t t o n [ 0 ] = g t k _ r a d i o _ b u t t o n _ n e w _ w i t h _ l a b e l ( g r o u p , " R e d " ) ;
35 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 [ 0 ] , T R U E , T R U E , 0 ) ;
36
37 b u t t o n [ 1 ] = g t k _ r a d i o _ b u t t o n _ n e w _ w i t h _ l a b e l _ f r o m _ w i d g e t
38 ( G T K _ R A D I O _ B U T T O N ( b u t t o n [ 0 ] ) , " G r e e n " ) ;
39 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 [ 1 ] , T R U E , T R U E , 0 ) ;
40
41 b u t t o n [ 2 ] = g t k _ r a d i o _ b u t t o n _ n e w _ w i t h _ l a b e l _ f r o m _ w i d g e t
42 ( G T K _ R A D I O _ B U T T O N ( b u t t o n [ 0 ] ) , " B l u e " ) ;
43 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 [ 2 ] , T R U E , T R U E , 0 ) ;
44
45 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 [ 1 ] ) , T R U E ) ;
46
47 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 [ 0 ] ) , " t o g g l e d " ,
48 G _ C A L L B A C K ( c b _ b u t t o n _ t o g g l e d ) , G I N T _ T O _ P O I N T E R ( 0 ) ) ;
49 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 [ 1 ] ) , " t o g g l e d " ,
50 G _ C A L L B A C K ( c b _ b u t t o n _ t o g g l e d ) , G I N T _ T O _ P O I N T E R ( 1 ) ) ;
51 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 [ 2 ] ) , " t o g g l e d " ,
52 G _ C A L L B A C K ( c b _ b u t t o n _ t o g g l e d ) , G I N T _ T O _ P O I N T E R ( 2 ) ) ;
53
54 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
55 g t k _ m a i n ( ) ;
56
57 r e t u r n 0 ;
58 }
図7.6 ラジオボタンウィジェットのサンプルプログラム