第 3 章 もっと GTK+ 33
3.2 ウィジェットの配置
3.2.3 テーブル
テーブルの作成
ウィジェットを規則的にマス目状に配置したい場合には,テーブルウィジェット(GtkTable)を用いると便利です.テーブ ルウィジェットを作成するには,関数gtk table newを使用します.第1引数と第2引数で,縦に配置するウィジェット数と横 に配置するウィジェット数を指定します.
第3引数には,TRUEもしくはFALSEを指定します.TRUEを指定した場合は図3.4上段のように,すべてのセルの大き さを一番大きなウィジェットの大きさに統一します.一方,FALSEを指定した場合は図3.4下段のように,行と列ごとにセル の高さと幅が調整されます.
G t k W i d g e t* g t k _ t a b l e _ n e w (g u i n t r o w s , g u i n t c o l u m n s , g b o o l e a n h o m o g e n e o u s ) ; 第1引数 縦に配置するウィジェット数
第2引数 横に配置するウィジェット数
第3引数 セルの大きさをすべて統一するかどうか.TRUEまたはFALSEを指定する.
図3.4 テーブルウィジェットへの配置 その1
テーブルへの配置
テーブルウィジェットにウィジェットを配置するには関数gtk table attachを使用します.関数の引数の説明を次にまとめ ます.
v o i d g t k _ t a b l e _ a t t a c h (G t k T a b l e * t a b l e , G t k W i d g e t * c h i l d ,
g u i n t l e f t _ a t t a c h ,
g u i n t r i g h t _ a t t a c h ,
g u i n t t o p _ a t t a c h ,
g u i n t b o t t o m _ a t t a c h ,
G t k A t t a c h O p t i o n s x o p t i o n s , G t k A t t a c h O p t i o n s y o p t i o n s ,
g u i n t x p a d d i n g ,
g u i n t y p a d d i n g ) ;
第1引数 テーブルウィジェット
第2引数 テーブルに配置するウィジェット
第3引数 ウィジェットを配置する領域の左の列番号(図3.5を参照)
第4引数 ウィジェットを配置する領域の右の列番号(図3.5を参照)
第5引数 ウィジェットを配置する領域の上の行番号(図3.5を参照)
第6引数 ウィジェットを配置する領域の下の行番号(図3.5を参照)
第7引数 横方向の配置オプション 第8引数 縦方向の配置オプション
第9引数 配置するウィジェットの左右にあけるスペース 第10引数 配置するウィジェットの上下にあけるスペース
第3引数left attachから第6引数bottom attachは,ウィジェットをテーブルのどの位置に配置するかを指定する引数です.
図3.5のような3行4列のテーブルの1行2列目の斜線の位置にウィジェットを配置する場合には,left attach,right attach, top attach,bottom attachの値を1,2,0,1とします.left attach,right attach,top attach,bottom attachの値を2,4, 2,3とすると,図3.5の右下の斜線のように,セルをまたいでウィジェットを配置することも可能です.
第7,8引数に指定するxoptions とyoptions は,ウィジェットをどのように配置するかを指定するオプションです.
GtkAttachOptionsは表3.2のように定義されていて,論理和演算によって複数指定できます.
0 1 2 3 4
1 2 3
図3.5 テーブルウィジェットへの配置指定
例えば,xoptionsとyoptionsに表3.3に示した値を与えた場合,それぞれの行に対応するテーブルは図3.6のようになりま
す.図3.6のソースコードをソース3–2に示します.
ソース3–2 テーブルへの配置: table-sample2.c
1 # i n c l u d e <g t k / g t k . h >
2 3 i n t
4 m a i n (i n t ar g c , c h a r * * a r g v )
5 {
6 G t k W i d g e t * w i n d o w ;
7 G t k W i d g e t * v b o x ;
8 G t k W i d g e t * t a b l e ;
9
10 g t k _ i n i t ( & a r g c , & a r g v ) ;
11
12 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 ) ;
13 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 ) , " T a b l e S a m p l e 2 " ) ;
14 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 , 2 0 0 ) ;
15 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 ) , 1 0 ) ;
16 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 " ,
表3.2 テーブルの配置オプション(GtkAttachOptions)
値 説明
GTK EXPAND もしテーブルの格子があるウィジェットよりも大きい場合は,ウィジェットが広
がる.
GTK SHRINK も し テ ー ブ ル 自 体 が 要 求 し た サ イ ズ よ り も 小 さ い 空 間 を 占 め て い る 場 合 , 普通 はウ ィ ン ドウ の 下 部 へ押 し 出 され て 見 え なく な る .その よ う な 場合 に GTK SHRINKが指定されていると,ウィジェットはテーブルの中で縮む.
GTK FILL 領域を埋めるようにテーブルを広げる.
表3.3 GtkAttachOptionsのパラメータ指定 GtkAttachOptions
第1行 GTK FILL|GTK SHRINK|GTK EXPAND 第2行 GTK FILL|GTK SHRINK
第3行 GTK SHRINK|GTK EXPAND
図3.6 テーブルウィジェットへの配置 その2
17 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
18 v b o x = g t k _ v b o x _ n e w ( F A L S E , 5 ) ;
19 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 ) , v b o x ) ;
20
21 t a b l e = g t k _ t a b l e _ n e w (3 , 4 , F A L S E ) ;
22 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( v b o x ) , t a b l e , T R U E , T R U E , 0 ) ;
23 {
24 G t k W i d g e t * b u t t o n ;
25
26 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " J a n u a r y " ) ;
27 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 0 , 1 , 0 , 1 ,
28 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D ,
29 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
30 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " F e b r u a r y " ) ;
31 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 1 , 2 , 0 , 1 ,
32 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D ,
33 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
34 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " M a r c h " ) ;
35 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 2 , 3 , 0 , 1 ,
36 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D ,
37 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
38 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " A p r i l " ) ;
39 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 3 , 4 , 0 , 1 ,
40 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D ,
41 G T K _ F I L L | G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
42 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " M a y " ) ;
43 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 0 , 1 , 1 , 2 ,
44 G T K _ F I L L | G T K _ S H R I N K ,
45 G T K _ F I L L | G T K _ S H R I N K , 0 , 0 ) ;
46 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " J u n e " ) ;
47 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 1 , 2 , 1 , 2 ,
48 G T K _ F I L L | G T K _ S H R I N K ,
49 G T K _ F I L L | G T K _ S H R I N K , 0 , 0 ) ;
50 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " J u l y " ) ;
51 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 2 , 3 , 1 , 2 ,
52 G T K _ F I L L | G T K _ S H R I N K ,
53 G T K _ F I L L | G T K _ S H R I N K , 0 , 0 ) ;
54 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " A u g u s t " ) ;
55 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 3 , 4 , 1 , 2 ,
56 G T K _ F I L L | G T K _ S H R I N K ,
57 G T K _ F I L L | G T K _ S H R I N K , 0 , 0 ) ;
58 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " S e p t e m b e r " ) ;
59 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 0 , 1 , 2 , 3 ,
60 G T K _ S H R I N K | G T K _ E X P A N D ,
61 G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
62 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " O c t o b e r " ) ;
63 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 1 , 2 , 2 , 3 ,
64 G T K _ S H R I N K | G T K _ E X P A N D ,
65 G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
66 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " N o r b e m b e r " ) ;
67 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 2 , 3 , 2 , 3 ,
68 G T K _ S H R I N K | G T K _ E X P A N D ,
69 G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
70 b u t t o n = g t k _ b u t t o n _ n e w _ w i t h _ l a b e l ( " D e c e m b e r " ) ;
71 g t k _ t a b l e _ a t t a c h ( G T K _ T A B L E ( t a b l e ) , b u t t o n , 3 , 4 , 2 , 3 ,
72 G T K _ S H R I N K | G T K _ E X P A N D ,
73 G T K _ S H R I N K | G T K _ E X P A N D , 0 , 0 ) ;
74 }
75 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
76
77 g t k _ m a i n ( ) ;
78 r e t u r n 0 ;
79 }