第 6 章 ウィジェットリファレンス 83
6.2 コンテナウィジェット
6.2.4 ツールバー
ツールバーウィジェット(GtkToolbar)はアイコン付きのボタンなどを並べてアプリケーションの操作性を 高めるために使用されるウィジェットです.
オブジェクトの階層構造
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 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) ;
子ウィジェットの配置
ツールバーにウィジェットを配置する方法は3種類あります.
• gtk toolbar append item
ボタンをツールバーに配置する関数です. G t k W i d g e t*
g t k _ t o o l b a r _ a p p e n d _ i t e m (G t k T o o l b a r * t o o l b a r , c o n s t c h a r * t e x t ,
c o n s t c h a r * t o o l t i p _ t e x t ,
c o n s t c h a r * t o o l t i p _ p r i v a t e _ t e x t , G t k W i d g e t * i c o n ,
G t k S i g n a l F u n c c a l l b a c k , g p o i n t e r u s e r _ d a t a ) ;
関数の引数は以下の通りです.
第1引数: ツールバーウィジェット 第2引数: ボタンラベル
第3引数: ツールチップテキスト 第4引数: ツールチップテキスト
第5引数: ボタン用のアイコンウィジェット 第6引数: ボタン用のコールバック関数 第7引数: コールバック関数に渡すデータ
この関数の類似関数に関数gtk toolbar preppend itemと関数gtk toolbar insert itemがあります.
• gtk toolbar append element
配置するウィジェットの種類を指定して追加する関数です. G t k W i d g e t*
g t k _ t o o l b a r _ a p p e n d _ e l e m e n 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 b a r C h i l d T y p e t y p e ,
G t k W i d g e t * w i d g e t ,
c o n s t c h a r * t e x t ,
c o n s t c h a r * t o o l t i p _ t e x t ,
図6.9 ツールバー
c o n s t c h a r * t o o l t i p _ p r i v a t e _ t e x t ,
G t k W i d g e t * i c o n ,
G t k S i g n a l F u n c c a l l b a c k ,
g p o i n t e r u s e r _ d a t a ) ;
関数の引数は以下の通りです.
第1引数: ツールバーウィジェット 第2引数: ツールバーアイテムの種類 第3引数: 配置するウィジェット 第4引数: ラベル
第5引数: ツールチップテキスト 第6引数: ツールチップテキスト
第7引数: ボタン用のアイコンウィジェット 第8引数: ボタン用のコールバック関数 第9引数: コールバック関数に渡すデータ
ツールバーアイテムの種類は次のGtkToolbarChildTypeから選択します. t y p e d e f e n u m
{
G T K _ T O O L B A R _ C H I L D _ S P A C E , G T K _ T O O L B A R _ C H I L D _ B U T T O N ,
G T K _ T O O L B A R _ C H I L D _ T O G G L E B U T T O N , G T K _ T O O L B A R _ C H I L D _ R A D I O B U T T O N , G T K _ T O O L B A R _ C H I L D _ W I D G E T
} G t k T o o l b a r C h i l d T y p e;
この関数の類似関数に関数gtk toolbar preppend element と関数gtk toolbar insert elementがあり ます.
• gtk toolbar append widget
配置するウィジェットを独立に作成し, そのウィジェットをツールバーに配置する関数です. v o i d g t k _ t o o l b a r _ a p p e n d _ w i d g e t (G t k T o o l b a r * t o o l b a r ,
G t k W i d g e t * w i d g e t ,
c o n s t c h a r * t o o l t i p _ t e x t ,
c o n s t c h a r * t o o l t i p _ p r i v a t e _ t e x t ) ;
関数の引数は以下の通りです. ウィジェットに対するコールバック関数は関数g signal connect等を 使って設定する必要があります.
第1引数: ツールバーウィジェット 第2引数: 配置するウィジェット 第3引数: ツールチップテキスト 第4引数: ツールチップテキスト
この関数の類似関数に関数 gtk toolbar preppend widget と関数gtk toolbar insert widget があり ます.
シグナルとコールバック関数
表6.4にツールバーウィジェットのシグナルを示します.
”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;
表6.4 ツールバーウィジェットのシグナル
シグナル 説明
”orientation-changed” ツールバーの方向が変化したときに発生するシグナルです.
”popup-context-menu” ポップアップメニューを表示するためにマウスの右ボタンをクリックしたり, キーが押されたりしたときに発生するシグナルです.
”style-changed” ツールバーのスタイルが変更されたときに発生するシグナルです.
ウィジェットのプロパティ設定
ツールバーウィジェットのプロパティには次の3つの項目が存在します.
• ツールバーの方向(ツールバーアイテムが配置される方向)
ツールバーの方向は次の関数を使って取得したり, 設定したりできます.
v o i d 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 , 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 t k O r i e n t a t i o n g t k _ t o o l b a r _ g 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 ) ;
• ツールチップの表示の有無
ツールバーに配置されたウィジェット上にマウスカーソルが一定時間以上存在するときに表示される説 明をツールチップと呼びます. ツールチップを表示するかどうか, また現在の設定を次の関数で調べる ことができます.
v o i d g t k _ t o o l b a r _ s e t _ t o o l t i p s (G t k T o o l b a r * t o o l b a r , g b o o l e a n e n a b l e ) ; g b o o l e a n g t k _ t o o l b a r _ g e t _ t o o l t i p s (G t k T o o l b a r * t o o l b a r ) ;
• アイコンサイズ
ツールバーアイテムのアイコンの大きさです. アイコンサイズは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;
サンプルプログラム
ツールバーウィジェットのサンプルプログラムをソース6–2–1に示します. プログラムの実行結果は図6.9 になります.
ソース 6–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 c b _ s h o w _ t o o l t i p s (G t k W i d g e t * w i d g e t , g p o i n t e r d a t a ) {
4 g t k _ t o o l b a r _ s e t _ t o o l t i p s ( G T K _ T O O L B A R ( d a t a ) ,
5 g t k _ t o g g l e _ b u t t o n _ g e t _ a c t i v e
6 ( G T K _ T O G G L E _ B U T T O N ( w i d g e t ) ) ) ;
7 }
8
9 s t a t i c v o i d c b _ s e t _ h o r i z o n t a l (G t k W i d g e t * w i d g e t , g p o i n t e r d a t a ) {
10 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 ) ) ) {
11 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 ( d a t a ) ,
12 G T K _ O R I E N T A T I O N _ H O R I Z O N T A L ) ;
13 }
14 }
15
16 s t a t i c v o i d c b _ s e t _ v e r t i c a l (G t k W i d g e t * w i d g e t , g p o i n t e r d a t a ) {
17 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 ) ) ) {
18 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 ( d a t a ) ,
19 G T K _ O R I E N T A T I O N _ V E R T I C A L ) ;
20 }
21 }
22
23 i n t m a i n (i n t ar g c , c h a r * * a r g v ) {
24 G t k W i d g e t * w i n d o w ;
25 G t k W i d g e t * t o o l b a r ;
26 G t k W i d g e t * a l i g n m e n t ;
27 G t k W i d g e t * c h e c k b u t t o n ;
28 G t k W i d g e t * r a d i o b u t t o n ;
29 G t k W i d g e t * b u t t o n ;
30 G t k W i d g e t * i c o n ;
31 G S L i s t * r a d i o b u t t o n _ g r o u p = N U L L ;
32
33 g t k _ i n i t ( & a r g c , & a r g v ) ;
34 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 ) ;
35 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 " ) ;
36 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 ) ;
37 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 " ,
38 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
39
40 t o o l b a r = g t k _ t o o l b a r _ n e w ( ) ;
41 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 ) ;
42 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 ) ;
43 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 ) ,
44 G T K _ O R I E N T A T I O N _ H O R I Z O N T A L ) ;
45
46 c h e c k 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 ( " S h o w à T o o l t i p s " ) ;
47 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 ( c h e c k b u t t o n ) , T R U E ) ;
48 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( c h e c k b u t t o n ) , " t o g g l e d " ,
49 G _ C A L L B A C K ( c b _ s h o w _ t o o l t i p s ) , t o o l b a r ) ;
50
51 g t k _ t o o l b a r _ a p p e n d _ w i d g e t ( G T K _ T O O L B A R ( t o o l b a r ) ,
52 c h e c k b u t t o n ,
53 " T o g g l e à w h e r e às h o w à t o o l t i p s " , N U L L ) ;
54 g t k _ t o o l b a r _ a p p e n d _ s p a c e ( G T K _ T O O L B A R ( t o o l b a r ) ) ;
55
56 i c o n = g t k _ i m a g e _ n e w _ f r o m _ s t o c k ( " gtk - go - f o r w a r d " ,
57 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
58 ( t o o l b a r ) ) ) ;
59
60 r a d i o b u t t o n = g t k _ t o o l b a r _ a p p e n d _ e l e m e n t ( G T K _ T O O L B A R ( t o o l b a r ) ,
61 G T K _ T O O L B A R _ C H I L D _ R A D I O B U T T O N ,
62 N U L L ,
63 " H o r i z o n t a l " ,
64 " 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 " ,
65 N U L L , i c o n ,
66 G _ C A L L B A C K ( c b _ s e t _ h o r i z o n t a l ) ,
67 t o o l b a r ) ;
68 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 ) ,
69 r a d i o b u t t o n _ g r o u p ) ;
70 r a d i o b u t t o n _ g r o u p =
71 g t k _ r a d i o _ b u t t o n _ 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 ) ) ;
72 g t k _ t o g g l e _ b u t t o n _ s e t _ m o d e ( G T K _ T O G G L E _ B U T T O N ( r a d i o b u t t o n ) , F A L S E ) ;
73
74 i c o n = g t k _ i m a g e _ n e w _ f r o m _ s t o c k ( " gtk - go - d o w n " ,
75 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
76 ( t o o l b a r ) ) ) ;
77 r a d i o b u t t o n = g t k _ t o o l b a r _ a p p e n d _ e l e m e n t ( G T K _ T O O L B A R ( t o o l b a r ) ,
78 G T K _ T O O L B A R _ C H I L D _ R A D I O B U T T O N ,
79 N U L L ,
80 " V e r t i c a l " ,
81 " S e t à t h e à t o o l b a r à t o à v e r t i c a l " ,
82 N U L L , i c o n ,
83 G _ C A L L B A C K ( c b _ s e t _ v e r t i c a l ) ,
84 t o o l b a r ) ;
85 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 ) ,
86 r a d i o b u t t o n _ g r o u p ) ;
87 g t k _ t o g g l e _ b u t t o n _ s e t _ m o d e ( G T K _ T O G G L E _ B U T T O N ( r a d i o b u t t o n ) , F A L S E ) ;
88
89 g t k _ t o o l b a r _ a p p e n d _ s p a c e ( G T K _ T O O L B A R ( t o o l b a r ) ) ;
90
91 b u t t o n = g t k _ t o o l b a r _ a p p e n d _ i t e m ( G T K _ T O O L B A R ( t o o l b a r ) ,
92 " E x i t " ,
93 " E x i t à t h i s à p r o g r a m . " ,
94 N U L L ,
95 g t k _ i m a g e _ n e w _ f r o m _ s t o c k
96 ( " gtk - q u i t " ,
97 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
98 ( t o o l b a r ) ) ) ,
99 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
100 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
101 g t k _ m a i n ( ) ;
102
103 r e t u r n 0 ;
104 }