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

簡単なリスト表示

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

第 7 章 ウィジェットリファレンス 113

7.6 ツリービュー

7.6.1 簡単なリスト表示

リストデータを表示する手順は次のようになります.この流れを簡単な例(図7.26)をもとに解説します.ソースコード

はソース7–6–1のようになります.

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

図7.26 リストの作成

リストモデルの作成(44–45行目)

リスト表示のためのモデルには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などのマクロで指定します.データの項目数は表示するデー

タ数だけではなく,セルの色などの属性なども含めた項目数を表します.これについては,次の例で詳しく説明します.

列の作成と属性の設定(49–54行目)

モデルを作成したら,次は各列の作成と属性の割り当てを行います.列を扱う場合には,GtkTreeViewColumnと GtkCell-Rendererを組み合わせて使用します.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を呼び出す必要があります.

表7.14 列の属性 属性 説明

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

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

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

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

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の登録(52行目)

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. 列属性の割り当て(53–54行目)

関数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 ) ;

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

関数gtk tree view column newを使用して列を作成した場合は,上記で説明したようにいくつかの関数を呼び出す必要があ

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

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 , . . . ) ;

列のツリービューへの追加(55,61行目)

作成した列(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 ) ;

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

リストデータの追加は次の手順で行います.

1. 行の追加(29行目)

行の追加は関数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. 追加した行へのデータ登録(30–32行目)

関数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 , . . . ) ;

ソース7-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 {

5 C O L U M N _ I D ,

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

7 N _ C O L U M N S

8 } ;

9

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

11 {

12 g u i n t i d ;

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

14 } L i s t D a t a ;

15

16 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 " } } ;

17

18 s t a t i c v o i d

19 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 )

20 {

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

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

23 i n t n ;

24

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

26

27 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 + + )

28 {

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

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

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

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

33 }

34 }

35

36 s t a t i c G t k W i d g e t*

37 c r e a t e _ l i s t _ m o d e l (v o i d)

38 {

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

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

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

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

43

44 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 ,

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

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

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

48

49 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 ( ) ;

50 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 ( ) ;

51 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 " ) ;

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

53 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 ,

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

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

56

57 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 ( ) ;

58 c o l u m n =

59 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 ,

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

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

62

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

64 }

65 66 i n t

67 m a i n (i n t a r g c , c h a r * * a r g v )

68 {

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

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

71

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

73

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

75 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 " ) ;

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

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

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

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

80

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

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

83

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

85

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

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

88

89 r e t u r n 0 ;

90 }

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