第 7 章 ウィジェットリファレンス 113
7.2 コンテナウィジェット
7.2.4 ツールバー
ツールバーウィジェット(GtkToolbar)は,アイコン付きのボタンなどを並べてアプリケーションの操作性を高めるために 使われるウィジェットです.
オブジェクトの階層構造 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 T o o l b a r
ウィジェットの作成
ツールバーウィジェット(GtkToolbar)の作成には関数gtk toolbar newを使います.
G t k W i d g e t* g t k _ t o o l b a r _ n e w (v o i d) ;
図7.9 ツールバー
子ウィジェットの配置
ツールバーにウィジェットを配置するには,関数gtk toolbar insertを使用します.
v o i d g t k _ t o o l b a r _ i n s e r t (G t k T o o l b a r * t o o l b a r , G t k T o o l I t e m * i t e m ,
g i n t p o s ) ;
第1引数: ツールバーウィジェット.
第2引数: 配置するツールバーアイテム.
第3引数: アイテムの追加位置.負の値を指定すると末尾に追加される.
ツールアイテムの作成
ツールアイテム(GtkToolItem)には,次の3種類があります.
• 普通のアイテム
さまざまなウィジェットを配置することのできる汎用性の高いツールアイテムです.
• ボタンアイテム
ボタンウィジェットを配置したツールアイテムです.ツールボタンウィジェットには,普通のボタン,トグルボタン,ラ ジオボタンの3種類があります.
• セパレータアイテム
アイテムをグループごとに仕切る役割をするツールアイテムです.
それぞれのツールアイテムの作成方法を説明します.
普通のアイテムの作成 普通のツールアイテムを作成するには,関数gtk tool item newを使用します.
G t k T o o l I t e m * g t k _ t o o l _ i t e m _ n e w (v o i d) ;
そして,アイテムに使用したいウィジェットを作成し,関数gtk container addを使用して,ウィジェットをアイテムに配置し ます.
普通のボタンアイテムの作成 普通のボタンアイテムを作成するには,関数gtk tool button newを使用します.
G t k T o o l I t e m * g t k _ t o o l _ b u t t o n _ n e w (G t k W i d g e t * i c o n _ w i d g e t , c o n s t g c h a r * l a b e l ) ;
この関数は独自のアイコンを使う場合に使用し,使いたいアイコンがストックアイテムにある場合は関数gtk tool button new from stock を使用すればよいでしょう.
G t k T o o l I t e m * g t k _ t o o l _ 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 ) ;
ト グ ル ボ タ ン ア イ テ ム の 作 成 ト グ ル ボ タ ン ア イ テ ム を 作 成 す る に は ,関 数 gtk toggle tool button new も し く は gtk toggle tool button new from stockを使用します.
G t k T o o l I t e m * g t k _ t o g g l e _ t o o l _ b u t t o n _ n e w (v o i d) ; G t k T o o l I t e m *
g t k _ t o g g l e _ t o o l _ 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 ) ;
ラ ジ オ ボ タ ン ア イ テ ム の 作 成 ラ ジ オ ボ タ ン ア イ テ ム を 作 成 す る に は ,関 数 gtk radio tool button new も し く は gtk radio tool button new from stockを使用します.
G t k T o o l I t e m * g t k _ r a d i o _ t o o l _ b u t t o n _ n e w (G S L i s t * g r o u p ) ; G t k T o o l I t e m *
g t k _ r a d i o _ t o o l _ b u t t o n _ n e w _ f r o m _ s t o c k (G S L i s t * g r o u p , c o n s t g c h a r * s t o c k _ i d ) ;
ラ ジ オ ボ タ ン ア イ テ ム の 作 成 手 順 は ラ ジ オ ボ タ ン と 同 様 で す .最 初 の ラ ジ オ ボ タ ン ア イ テ ム を 作 成 す る と き に は ,そ れぞれの関数の第 1引数にはNULLを与えます.続くラジオボタンアイテムを作成するには,関数の第 1引数に関数 gtk raido tool button get groupで取得した最初のアイテムのグループを与えます.
G S L i s t* g t k _ r a d i o _ t o o l _ b u t t o n _ g e t _ g r o u p ( G t k R a d i o T o o l B u t t o n * b u t t o n ) ;
セパレータアイテムの作成 セパレータアイテムを作成するには,関数gtk separator tool item newを使用します.
G t k T o o l I t e m * g t k _ s e p a r a t o r _ t o o l _ i t e m _ n e w (v o i d) ;
シグナルとコールバック関数
表7.5にツールバーウィジェットのシグナルを示します.
orientation-changedシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります.
v o i d u s e r _ f u n c t i o n (G t k T o o l b a r * t o o l b a r , G t k O r i e n t a t i o n o r i e n t a t i o n , g p o i n t e r u s e r _ d a t a ) ;
GtkOrientationは次のように定義されており,現在のツールバーの方向が変数orientationに入ります.
t y p e d e f e n u m {
G T K _ O R I E N T A T I O N _ H O R I Z O N T A L , G T K _ O R I E N T A T I O N _ V E R T I C A L } G t k O r i e n t a t i o n;
popup-context-menuシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります.変数x,yにはマウ スカーソルの座標が,変数buttonにはボタン番号が入ります.キーが押された場合には値は−1となります.
g b o o l e a n u s e r _ f u n c t i o n (G t k T o o l b a r * t o o l b a r ,
g i n t x ,
g i n t y ,
g i n t b u t t o n ,
g p o i n t e r u s e r _ d a t a ) ;
style-changedシグナルに対するコールバック関数のプロトタイプ宣言は次のようになります.
v o i d u s e r _ f u n c t i o n (G t k T o o l b a r * t o o l b a r , G t k T o o l b a r S t y l e s t y l e , g p o i n t e r u s e r _ d a t a ) ;
GtkToolbarStyleは次のように定義されており,現在のツールバーのスタイルが変数styleに入ります.
t y p e d e f e n u m {
G T K _ T O O L B A R _ I C O N S , G T K _ T O O L B A R _ T E X T , G T K _ T O O L B A R _ B O T H , G T K _ T O O L B A R _ B O T H _ H O R I Z } G t k T o o l b a r S t y l e;
ウィジェットのプロパティ設定
ツールバーウィジェットのプロパティには次の3つの項目が存在します.
• ツールバーの方向(ツールバーアイテムが配置される方向)
ツールバーの方向は次の関数を使って取得したり,設定したりできます.
v o i d g t k _ o r i e n t a b l e _ s e t _ o r i e n t a t i o n ( G t k O r i e n t a b l e * o r i e n t a b l e , G t k O r i e n t a t i o n o r i e n t a t i o n ) ;
表7.5 ツールバーウィジェットのシグナル
シグナル 説明
orientation-changed ツールバーの方向が変化したときに発生するシグナル.
popup-context-menu ポップアップメニューを表示するためにマウスの右ボタンをクリックしたり,
キーが押されたりしたときに発生するシグナル.
style-changed ツールバーのスタイルが変更されたときに発生するシグナル.
G t k O r i e n t a t i o n g t k _ o r i e n t a b l e _ g e t _ o r i e n t a t i o n ( G t k O r i e n t a b l e * o r i e n t a b l e ) ;
• アイコンサイズ
ツールバーアイテムのアイコンの大きさです.アイコンサイズはGtkIconSizeで定義された値で扱います.
v o i d g t k _ t o o l b a r _ s e t _ i c o n _ s i z e (G t k T o o l b a r * t o o l b a r , G t k I c o n S i z e i c o n _ s i z e ) ; G t k I c o n S i z e g t k _ t o o l b a r _ g e t _ i c o n _ s i z e (G t k T o o l b a r * t o o l b a r ) ;
GtkIconSizeは次のように定義されています.
t y p e d e f e n u m {
G T K _ I C O N _ S I Z E _ I N V A L I D , G T K _ I C O N _ S I Z E _ M E N U ,
G T K _ I C O N _ S I Z E _ S M A L L _ T O O L B A R , G T K _ I C O N _ S I Z E _ L A R G E _ T O O L B A R , G T K _ I C O N _ S I Z E _ B U T T O N ,
G T K _ I C O N _ S I Z E _ D N D , G T K _ I C O N _ S I Z E _ D I A L O G } G t k I c o n S i z e;
サンプルプログラム
ツールバーウィジェットのサンプルプログラムをソース7–2–1に示します.プログラムの実行結果は図7.9(p.125)になり ます.
ソース7-2-1 ツールバーウィジェットのサンプルプログラム: gtktoolbar-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
4 c b _ s h o w _ t e x t (G t k W i d g e t * w i d g e t , g p o i n t e r u s e r _ d a t a )
5 {
6 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 ) ) )
7 {
8 g t k _ t o o l b a r _ s e t _ s t y l e ( G T K _ T O O L B A R ( u s e r _ d a t a ) , G T K _ T O O L B A R _ B O T H ) ;
9 }
10 e l s e
11 {
12 g t k _ t o o l b a r _ s e t _ s t y l e ( G T K _ T O O L B A R ( u s e r _ d a t a ) , G T K _ T O O L B A R _ I C O N S ) ;
13 }
14 }
15
16 s t a t i c v o i d
17 c b _ s e t _ h o r i z o n t a l ( G t k T o g g l e T o o l 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 )
18 {
19 i f ( g t k _ t o g g l e _ t o o l _ b u t t o n _ g e t _ a c t i v e ( w i d g e t ) )
20 {
21 G t k O r i e n t a b l e * o r i e n t a b l e ;
22
23 o r i e n t a b l e
24 = G T K _ O R I E N T A B L E ( g _ o b j e c t _ g e t _ d a t a ( G _ O B J E C T ( u s e r _ d a t a ) ,
25 " t o o l b a r " ) ) ;
26 g t k _ o r i e n t a b l e _ s e t _ o r i e n t a t i o n ( o r i e n t a b l e ,
27 G T K _ O R I E N T A T I O N _ H O R I Z O N T A L ) ;
28 g t k _ w i d g e t _ s e t _ s i z e _ r e q u e s t ( G T K _ W I D G E T ( u s e r _ d a t a ) , 4 0 0 , -1);
29 }
30 }
31
32 s t a t i c v o i d
33 c b _ s e t _ v e r t i c a l ( G t k T o g g l e T o o l 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 )
34 {
35 i f ( g t k _ t o g g l e _ t o o l _ b u t t o n _ g e t _ a c t i v e ( w i d g e t ) )
36 {
37 G t k O r i e n t a b l e * o r i e n t a b l e ;
38
39 o r i e n t a b l e
40 = G T K _ O R I E N T A B L E ( g _ o b j e c t _ g e t _ d a t a ( G _ O B J E C T ( u s e r _ d a t a ) ,
41 " t o o l b a r " ) ) ;
42 g t k _ o r i e n t a b l e _ s e t _ o r i e n t a t i o n ( o r i e n t a b l e ,
43 G T K _ O R I E N T A T I O N _ V E R T I C A L ) ;
44 g t k _ w i d g e t _ s e t _ s i z e _ r e q u e s t ( G T K _ W I D G E T ( u s e r _ d a t a ) , 1 0 0 , 3 0 0 ) ;
45 }
46 }
47 48 i n t
49 m a i n (i n t a r g c , c h a r * * a r g v )
50 {
51 G t k W i d g e t * w i n d o w ;
52 G t k W i d g e t * t o o l b a r ;
53 G t k W i d g e t * w i d g e t ;
54 G t k T o o l I t e m * i t e m ;
55 G S L i s t * g r o u p ;
56
57 g t k _ i n i t ( & a r g c , & a r g v ) ;
58
59 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 ) ;
60 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 T o o l b a r S a m p l e " ) ;
61 g t k _ w i n d o w _ s e t _ r e s i z a b l e ( G T K _ W I N D O W ( w i n d o w ) , F A L S E ) ;
62 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 " ,
63 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
64 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 , 4 0 0 , -1);
65
66 t o o l b a r = g t k _ t o o l b a r _ n e w ( ) ;
67 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 ) , t o o l b a r ) ;
68 g t k _ t o o l b a r _ s e t _ s t y l e ( G T K _ T O O L B A R ( t o o l b a r ) , G T K _ T O O L B A R _ B O T H ) ;
69 g t k _ t o o l b a r _ s e t _ o r i e n t a t i o n ( G T K _ T O O L B A R ( t o o l b a r ) ,
70 G T K _ O R I E N T A T I O N _ H O R I Z O N T A L ) ;
71 g _ o b j e c t _ s e t _ d a t a ( G _ O B J E C T ( w i n d o w ) , " t o o l b a r " , (g p o i n t e r) t o o l b a r ) ;
72
73 i t e m = g t k _ t o o l _ i t e m _ n e w ( ) ;
74 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 ( " S h o w t e x t " ) ;
75 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 ( i t e m ) , w i d g e t ) ;
76 g t k _ t o o l _ i t e m _ s e t _ t o o l t i p _ t e x t ( i t e m , " T o g g l e w h e t h e r s h o w t e x t " ) ;
77 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 ( w i d g e t ) , T R U E ) ;
78 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( w i d g e t ) , " t o g g l e d " ,
79 G _ C A L L B A C K ( c b _ s h o w _ t e x t ) , (g p o i n t e r) t o o l b a r ) ;
80 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
81
82 i t e m = g t k _ s e p a r a t o r _ t o o l _ i t e m _ n e w ( ) ;
83 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
84
85 i t e m
86 = g t k _ r a d i o _ t o o l _ b u t t o n _ n e w _ f r o m _ s t o c k ( N U L L , G T K _ S T O C K _ G O _ F O R W A R D ) ;
87 g t k _ t o o l _ b u t t o n _ s e t _ l a b e l ( G T K _ T O O L _ B U T T O N ( i t e m ) , " H o r i z o n t a l " ) ;
88 g t k _ t o g g l e _ t o o l _ b u t t o n _ s e t _ a c t i v e ( G T K _ T O G G L E _ T O O L _ B U T T O N ( i t e m ) ,
89 T R U E ) ;
90 g r o u p = g t k _ r a d i o _ t o o l _ b u t t o n _ g e t _ g r o u p ( G T K _ R A D I O _ T O O L _ B U T T O N ( i t e m ) ) ;
91 g t k _ t o o l _ i t e m _ s e t _ t o o l t i p _ t e x t ( i t e m , " S e t t h e t o o l b a r t o h o r i z o n t a l " ) ;
92 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( i t e m ) , " t o g g l e d " ,
93 G _ C A L L B A C K ( c b _ s e t _ h o r i z o n t a l ) , (g p o i n t e r) w i n d o w ) ;
94 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
95
96 i t e m
97 = g t k _ r a d i o _ t o o l _ b u t t o n _ n e w _ f r o m _ s t o c k ( g r o u p , G T K _ S T O C K _ G O _ D O W N ) ;
98 g t k _ t o o l _ b u t t o n _ s e t _ l a b e l ( G T K _ T O O L _ B U T T O N ( i t e m ) , " V e r t i c a l " ) ;
99 g t k _ t o o l _ i t e m _ s e t _ t o o l t i p _ t e x t ( i t e m , " S e t t h e t o o l b a r t o v e r t i c a l " ) ;
100 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( i t e m ) , " t o g g l e d " ,
101 G _ C A L L B A C K ( c b _ s e t _ v e r t i c a l ) , (g p o i n t e r) w i n d o w ) ;
102 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
103
104 i t e m = g t k _ s e p a r a t o r _ t o o l _ i t e m _ n e w ( ) ;
105 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
106
107 w i d g e t = g t k _ i m a g e _ n e w _ f r o m _ s t o c k ( G T K _ S T O C K _ Q U I T ,
108 g t k _ t o o l b a r _ g e t _ i c o n _ s i z e
109 ( G T K _ T O O L B A R ( t o o l b a r ) ) ) ;
110 i t e m = g t k _ t o o l _ b u t t o n _ n e w ( w i d g e t , " Q u i t " ) ;
111 g t k _ t o o l _ i t e m _ s e t _ t o o l t i p _ t e x t ( i t e m , " E x i t t h i s p r o g r a m " ) ;
112 g _ s i g n a l _ c o n n e c t _ s w a p p e d ( G _ O B J E C T ( i t e m ) , " c l i c k e d " ,
113 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) ,
114 (g p o i n t e r) w i n d o w ) ;
115 g t k _ t o o l b a r _ i n s e r t ( G T K _ T O O L B A R ( t o o l b a r ) , i t e m , -1);
116
117 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
118 g t k _ m a i n ( ) ;
119
120 r e t u r n 0 ;
121 }