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

簡単なリスト表示

ドキュメント内 表紙 (ページ 183-188)

第 6 章 ウィジェットリファレンス 83

6.6 ツリービュー

6.6.1 簡単なリスト表示

45 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 u t t o n ) ;

46 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 ) , " c l i c k e d " ,

47 G _ C A L L B A C K ( c b _ s h o w _ d i a l o g ) , N U L L ) ;

48

49 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;

50 g t k _ m a i n ( ) ;

51

52 r e t u r n 0 ;

53 }

1. リストモデルの作成 2. 列の作成と属性の割り当て 3. リストデータの追加

図6.28 リストの作成

リストモデルの作成(37–38行目)

リスト表示のためのモデルにはGtkListStoreを使用します. モデル作成には,関数gtk list store newを使 います.

G t k L i s t S t o r e* g t k _ l i s t _ s t o r e _ n e w (g i n t n _ c o l u m n s , . . . ) ;

ま ず 第 1 引 数 に は デ ー タ の 項 目 数 を 指 定 し, 残 り の 引 数 に は そ れ ぞ れ の 項 目 の デ ー タ 型 を G TYPE BOOLEAN, G TYPE INT, G TYPE STRING, GDK TYPE PIXBUF な ど の マ ク ロ で 指 定します. データの項目数は表示するデータ数だけではなく, セルの色などの属性なども含めた項目数を表し ます. このことについては,次の例で詳しく説明します.

列の作成と属性の設定(42–48行目)

モデルを作成したら, 次は各列の作成と属性の割り当てを行います. 列を扱う場合には, GtkTreeView-Column とGtkCellRenderer を組み合わせて使用します. GtkTreeViewColumnは列全体を扱う変数で,

GtkCellRendererは列データの描画を扱う変数と考えてください.

GtkTreeViewColumnの作成には,関数gtk tree view column newを使用します. G t k T r e e V i e w C o l u m n* g t k _ t r e e _ v i e w _ c o l u m n _ n e w (v o i d) ;

GtkCellRendererの作成は, 列データにどんな種類のデータを描画するかで以下の関数を選択的に使用し

ます.

gtk cell renderer text new

数値や文字列を表示する場合にこの関数を使用します.

G t k C e l l R e n d e r e r* g t k _ c e l l _ r e n d e r e r _ t e x t _ n e w (v o i d) ;

gtk cell renderer toggle new

TRUE, FALSEのデータをチェックボタンで表示する場合にこの関数を使用します.  

G t k C e l l R e n d e r e r* g t k _ c e l l _ r e n d e r e r _ t o g g l e _ n e w (v o i d) ;

gtk cell renderer pixbuf new

アイコンデータを表示する場合にこの関数を使用します.

G t k C e l l R e n d e r e r* g t k _ c e l l _ r e n d e r e r _ p i x b u f _ n e w (v o i d) ;

関数gtk tree view column newでGtkTreeViewColumnを作成した場合には,関数gtk tree view column set title , 関数gtk tree view column pack start , 関数gtk tree view column set attributes を呼び出す必要があり ます.

1. 列のタイトル設定(44行目)

v o i d g t k _ t r e e _ v i e w _ c o l u m n _ s e t _ t i t l e (G t k T r e e V i e w C o l u m n * t r e e _ c o l u m n , c o n s t g c h a r * t i t l e ) ;

2. GtkTreeViewColumnへのGtkCellRendererの登録(45行目) v o i d

g t k _ t r e e _ v i e w _ c o l u m n _ p a c k _ s t a r t (G t k T r e e V i e w C o l u m n * t r e e _ c o l u m n , G t k C e l l R e n d e r e r * c e l l ,

g b o o l e a n e x p a n d ) ;

3. 列属性の割り当て(46–47行目)

関数gtk tree view column set attributesを列に対して複数の属性を割り当てることができます. 第3 引数からは属性と列番号を対にして与えて, 引数の最後にはNULLを与えます. また, これまでの設定 を保持したまま新しい設定を追加したい場合には,関数gtk tree view column add attributeを使用し ます.

v o i d

g t k _ t r e e _ v i e w _ c o l u m n _ s e t _ a t t r i b u t e s (G t k T r e e V i e w C o l u m n * t r e e _ c o l u m n , G t k C e l l R e n d e r e r * c e l l _ r e n d e r e r , . . . ) ;

v o i d

g t k _ t r e e _ v i e w _ c o l u m n _ a d d _ a t t r i b u t e (G t k T r e e V i e w C o l u m n * t r e e _ c o l u m n , G t k C e l l R e n d e r e r * c e l l _ r e n d e r e r , c o n s t g c h a r * a t t r i b u t e ,

g i n t c o l u m n ) ;

リストデータを表示するために最低限使用する属性を表6.12に示します. この他にも列に表示するデータの 種類によって様々な属性があります.

関数gtk tree view column newを使用して列を作成した場合は, 上記で説明したように幾つかの関数を呼

び出す必要がありますが, 関数gtk tree view column new with attributesを使用すると上記の手順を一括し て行うことができます(51–53行目).

G t k T r e e V i e w C o l u m n*

g t k _ t r e e _ v i e w _ c o l u m n _ n e w _ w i t h _ a t t r i b u t e s (c o n s t g c h a r * t i t l e , G t k C e l l R e n d e r e r * c e l l , . . . ) ;

表6.12 列の属性

属性 説明

”text” 数値や文字列を表示する列に対して設定します.

”active” ブール値をチェックボタンで表示する列に対して設定します.

”pixbuf” アイコンを表示する列に対して設定します.

列のツリービューへの追加(48行目)

作成した列(GtkTreeViewColumn)をツリービューに追加するには, 関数gtk tree view append column を使います. 関数の戻り値として新しい列を追加した後の列数が返ります.

g i n t g t k _ t r e e _ v i e w _ a p p e n d _ c o l u m n (G t k T r e e V i e w * t r e e _ v i e w , G t k T r e e V i e w C o l u m n * c o l u m n ) ;

リストデータの追加(24–27行目)

リストデータの追加は次の手順で行います. 1. 行の追加(24行目)

行の追加は関数gtk list store appendを用います.

v o i d g t k _ l i s t _ s t o r e _ a p p e n d (G t k L i s t S t o r e * l i s t _ s t o r e , G t k T r e e I t e r * i t e r ) ;

2. 追加した行へのデータ登録(25–27行目)

関数gtk list store appendで取得したGtkTreeIterは, 行データへのアクセスポイントとなります. こ のGtkTreeIterを関数gtk list store setの引数に与えて, データを登録します. 第3引数から列番号と データを対にして指定し, 最後の引数は1で終わります.

v o i d g t k _ l i s t _ s t o r e _ s e t (G t k L i s t S t o r e * l i s t _ s t o r e , G t k T r e e I t e r * i t e r ,

. . . ) ;

ソース 6–6–1 リストの作成とデータの登録: gtkliststore-sample1.c

1 # i n c l u d e <g t k / g t k . h >

2

3 e n u m {

4 C O L U M N _ I D ,

5 C O L U M N _ N A M E ,

6 N _ C O L U M N S

7 } ;

8

9 t y p e d e f s t r u c t _ L i s t D a t a {

10 g u i n t i d ;

11 g c h a r * n a m e ;

12 } L i s t D a t a ;

13

14 s t a t i c L i s t D a t a d a t a [ ] = { {0 , " M i k e " } , {1 , " J o J o " } } ;

15

16 s t a t i c v o i d a d d _ d a t a (G t k T r e e V i e w * t r e e v i e w ) {

17 G t k L i s t S t o r e * s t o r e ;

18 G t k T r e e I t e r i t e r ;

19 i n t n ;

20

21 s t o r e = G T K _ L I S T _ S T O R E ( g t k _ t r e e _ v i e w _ g e t _ m o d e l ( t r e e v i e w ) ) ;

22

23 f o r ( n = 0 ; n < s i z e o f( d a t a ) / s i z e o f( d a t a [ 0 ] ) ; n + + ) {

24 g t k _ l i s t _ s t o r e _ a p p e n d ( s t o r e , & i t e r ) ;

25 g t k _ l i s t _ s t o r e _ s e t ( s t o r e , & i t e r ,

26 C O L U M N _ I D , d a t a [ n ] . id ,

27 C O L U M N _ N A M E , d a t a [ n ] . n a m e , -1);

28 }

29 }

30

31 s t a t i c G t k W i d g e t* c r e a t e _ l i s t _ m o d e l (v o i d) {

32 G t k W i d g e t * t r e e v i e w ;

33 G t k L i s t S t o r e * l i s t s t o r e ;

34 G t k C e l l R e n d e r e r * r e n d e r e r ;

35 G t k T r e e V i e w C o l u m n * c o l u m n ;

36

37 l i s t s t o r e = g t k _ l i s t _ s t o r e _ n e w ( N _ C O L U M N S ,

38 G _ T Y P E _ U I N T , G _ T Y P E _ S T R I N G ) ;

39 t r e e v i e w = g t k _ t r e e _ v i e w _ n e w _ w i t h _ m o d e l ( G T K _ T R E E _ M O D E L ( l i s t s t o r e ) ) ;

40 g _ o b j e c t _ u n r e f ( l i s t s t o r e ) ;

41

42 r e n d e r e r = g t k _ c e l l _ r e n d e r e r _ t e x t _ n e w ( ) ;

43 c o l u m n = g t k _ t r e e _ v i e w _ c o l u m n _ n e w ( ) ;

44 g t k _ t r e e _ v i e w _ c o l u m n _ s e t _ t i t l e ( c o l u m n , " I D " ) ;

45 g t k _ t r e e _ v i e w _ c o l u m n _ p a c k _ s t a r t ( c o l u m n , r e n d e r e r , F A L S E ) ;

46 g t k _ t r e e _ v i e w _ c o l u m n _ s e t _ a t t r i b u t e s ( c o l u m n , r e n d e r e r ,

47 " t e x t " , C O L U M N _ I D , N U L L ) ;

48 g t k _ t r e e _ v i e w _ a p p e n d _ c o l u m n ( G T K _ T R E E _ V I E W ( t r e e v i e w ) , c o l u m n ) ;

49

50 r e n d e r e r = g t k _ c e l l _ r e n d e r e r _ t e x t _ n e w ( ) ;

51 c o l u m n =

52 g t k _ t r e e _ v i e w _ c o l u m n _ n e w _ w i t h _ a t t r i b u t e s ( " N a m e " , r e n d e r e r ,

53 " t e x t " , C O L U M N _ N A M E , N U L L ) ;

54 g t k _ t r e e _ v i e w _ a p p e n d _ c o l u m n ( G T K _ T R E E _ V I E W ( t r e e v i e w ) , c o l u m n ) ;

55

56 r e t u r n t r e e v i e w ;

57 }

58

59 i n t m a i n (i n t ar g c , c h a r * * a r g v ) {

60 G t k W i d g e t * w i n d o w ;

61 G t k W i d g e t * t r e e v i e w ;

62

63 g t k _ i n i t ( & a r g c , & a r g v ) ;

64 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 ) ;

65 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 L i s t S t o r e à S a m p l e 1 " ) ;

66 g t k _ c o n t a i n e r _ s e t _ b o r d e r _ w i d t h ( G T K _ C O N T A I N E R ( w i n d o w ) , 5 ) ;

67 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 " ,

68 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;

69 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 0 0 ) ;

70

71 t r e e v i e w = c r e a t e _ l i s t _ m o d e l ( ) ;

72 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 r e e v i e w ) ;

73

74 a d d _ d a t a ( G T K _ T R E E _ V I E W ( t r e e v i e w ) ) ;

75

76 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;

77 g t k _ m a i n ( ) ;

78

79 r e t u r n 0 ;

80 }

ドキュメント内 表紙 (ページ 183-188)