• 検索結果がありません。

ツールバー

ドキュメント内 ÆþÌçGTK+ (ページ 137-142)

第 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 }

ドキュメント内 ÆþÌçGTK+ (ページ 137-142)