第 6 章 ウィジェットリファレンス 83
6.5 ダイアログ
6.5.3 ファイル選択ダイアログ
59 G T K _ S T O C K _ D I A L O G _ E R R O R } ;
60 i n t n ;
61
62 g t k _ i n i t ( & a r g c , & a r g v ) ;
63 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 ) ;
64 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 M e s s a g e D i a l o g à S a m p l e " ) ;
65 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 ) ;
66 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 " ,
67 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
68
69 h b o x = g t k _ h b o x _ n e w ( T R U E , 5 ) ;
70 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 ) , h b o x ) ;
71
72 f o r ( n = 0 ; n < 4 ; n + + ) {
73 b u t t o n = g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( s t o c k [ n ] ) ;
74 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 " ,
75 G _ C A L L B A C K ( s h o w _ d i a l o g ) , (g p o i n t e r) n ) ;
76 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( h b o x ) , b u t t o n , T R U E , T R U E , 0 ) ;
77 }
78 b u t t o n = g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( G T K _ S T O C K _ Q U I T ) ;
79 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 " ,
80 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
81 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( h b o x ) , b u t t o n , T R U E , T R U E , 0 ) ;
82
83 g t k _ w i d g e t _ s h o w _ a l l ( w i n d o w ) ;
84 g t k _ m a i n ( ) ;
85
86 r e t u r n 0 ;
87 }
G t k W i d g e t* g t k _ f i l e _ s e l e c t i o n _ n e w (c o n s t g c h a r * t i t l e ) ;
ウィジェットのプロパティ設定
ファイル選択ダイアログの設定項目を以下に示します.
• ファイル名
関数gtk file selection get filename によって,エントリに入力されているファイル名を取得したり,関 数gtk file selection set filenameによって,指定したファイル名をエントリに設定することができます.
G _ C O N S T _ R E T U R N g c h a r*
g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e (G t k F i l e S e l e c t i o n * f i l e s e l ) ; v o i d g t k _ f i l e _ s e l e c t i o n _ s e t _ f i l e n a m e (G t k F i l e S e l e c t i o n * f i l e s e l ,
c o n s t g c h a r * f i l e n a m e ) ;
• 複数ファイルの選択の有無
ダイアログ右のファイル名リストをクリックすることで, ファイルを選択することができます. このと き, 関数gtk file selection set select multipleによって, 複数のファイルを選択することができるかど うか設定することができます. また, 関数gtk file selection get select multiple によって現在の設定を 取得することができます.
v o i d g t k _ f i l e _ s e l e c t i o n _ s e t _ s e l e c t _ m u l t i p l e
(G t k F i l e S e l e c t i o n * f i l e s e l ,
g b o o l e a n s e l e c t _ m u l t i p l e ) ; g b o o l e a n
g t k _ f i l e _ s e l e c t i o n _ g e t _ s e l e c t _ m u l t i p l e (G t k F i l e S e l e c t i o n * f i l e s e l ) ;
選択された複数のファイル名を取得するには,関数gtk file selection get selectionsを使用します. g c h a r* *
g t k _ f i l e _ s e l e c t i o n _ g e t _ s e l e c t i o n s (G t k F i l e S e l e c t i o n * f i l e s e l ) ;
• オペーレーションボタンの表示の有無
図6.24 ファイル選択ダイアログ
フ ァ イ ル 選 択 ダ イ ア ロ グ に は 標 準 で フ ァ イ ル オ ペ レ ー シ ョ ン ボ タ ン (「 新 し い フ ォ ル ダ 」,
「 フ ァ イ ル の 削 除 」, 「 フ ァ イ ル 名 の 変 更 」) が 表 示 さ れ ま す. こ の ボ タ ン 表 示/非 表 示 を 関 数 gtk file selection hide fileop buttons と,関数gtk file selection show fileop buttonsで設定すること ができます.
v o i d
g t k _ f i l e _ s e l e c t i o n _ h i d e _ f i l e o p _ b u t t o n s (G t k F i l e S e l e c t i o n * f i l e s e l ) ; v o i d
g t k _ f i l e _ s e l e c t i o n _ s h o w _ f i l e o p _ b u t t o n s (G t k F i l e S e l e c t i o n * f i l e s e l ) ;
サンプルプログラム
ファイル選択ダイアログを使用する多くのケースは, ファイル名の指定をダイアログを使って簡単に行いた い場合だと考えられます. 別のウィンドウ上のエントリにダイアログ上で選択したファイル名を設定するには どうしたらいいでしょうか.
ダイアログの動作としては, OKボタンが押されたら,選択されているファイル名を取得して,何らかの動作 を実行し,キャンセルボタンが押されたら,ダイアログを閉じるという動作が一般的です. ダイアログのOKボ タンとキャンセルボタンはファイル選択ダイアログのメンバok button, cancel buttonとして取得することが できます. これらのウィジェットに対してコールバック関数を設定して, それぞれのボタンが押された場合の 動作を設定します.
ソース 6–5–3にファイル選択ダイアログのサンプルプログラムを示します. プログラムを実行すると, 図
6.25上段のウィンドウが表示されます. 開くボタンを押すと,ファイル選択ダイアログ(図6.25中段)が表示 されます. ファイルを選択,もしくは入力してOKボタンを押すと,選択したファイル名がメインウィンドウの エントリに反映されます(図6.25下段).
ソース 6–5–3 ファイル選択ダイアログウィジェットのサンプルプログラム: gtkfileselection-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 f i l e s e l _ o k (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 F i l e S e l e c t i o n * f i l e s e l ;
5 G t k E n t r y * e n t r y ;
6
7 f i l e s e l = G T K _ F I L E _ S E L E C T I O N ( d a t a ) ;
8 e n t r y = G T K _ E N T R Y ( g _ o b j e c t _ g e t _ d a t a ( G _ O B J E C T ( f i l e s e l ) , " e n t r y " ) ) ;
9
10 g t k _ e n t r y _ s e t _ t e x t ( e n t r y , g t k _ f i l e _ s e l e c t i o n _ g e t _ f i l e n a m e ( f i l e s e l ) ) ;
11 g t k _ w i n d o w _ s e t _ m o d a l ( G T K _ W I N D O W ( f i l e s e l ) , F A L S E ) ;
12 g t k _ w i d g e t _ d e s t r o y ( G T K _ W I D G E T ( f i l e s e l ) ) ;
13 }
14
15 s t a t i c v o i d f i l e s e l _ c a n c e 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 ) {
16 G t k F i l e S e l e c t i o n * f i l e s e l ;
17
18 f i l e s e l = G T K _ F I L E _ S E L E C T I O N ( d a t a ) ;
19
20 g t k _ w i n d o w _ s e t _ m o d a l ( G T K _ W I N D O W ( f i l e s e l ) , F A L S E ) ;
21 g t k _ w i d g e t _ d e s t r o y ( G T K _ W I D G E T ( f i l e s e l ) ) ;
22 }
23
24 s t a t i c v o i d c b _ b u t t o n (G t k B u t t o n * b u t t o n , g p o i n t e r d a t a ) {
25 G t k W i d g e t * f i l e s e l ;
26 G t k W i d g e t * p a r e n t ;
27 G t k W i d g e t * e n t r y ;
28
29 p a r e n t = G T K _ W I D G E T ( g _ o b j e c t _ g e t _ d a t a ( G _ O B J E C T ( d a t a ) , " p a r e n t " ) ) ;
30 e n t r y = G T K _ W I D G E T ( d a t a ) ;
31
32 f i l e s e l = g t k _ f i l e _ s e l e c t i o n _ n e w ( " F i l e à S e l e c t i o n à D i a l o g " ) ;
33 g _ o b j e c t _ s e t _ d a t a ( G _ O B J E C T ( f i l e s e l ) , " e n t r y " , (g p o i n t e r) e n t r y ) ;
34
35 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( G T K _ F I L E _ S E L E C T I O N ( f i l e s e l ) - >o k _ b u t t o n ) ,
36 " c l i c k e d " , G _ C A L L B A C K ( f i l e s e l _ o k ) ,
37 (g p o i n t e r) f i l e s e l ) ;
38 g _ s i g n a l _ c o n n e c t ( G _ O B J E C T ( G T K _ F I L E _ S E L E C T I O N ( f i l e s e l ) - >c a n c e l _ b u t t o n ) ,
39 " c l i c k e d " , G _ C A L L B A C K ( f i l e s e l _ c a n c e l ) ,
40 (g p o i n t e r) f i l e s e l ) ;
41 g t k _ w i n d o w _ s e t _ t r a n s i e n t _ f o r ( G T K _ W I N D O W ( f i l e s e l ) , G T K _ W I N D O W ( p a r e n t ) ) ;
42 g t k _ w i n d o w _ s e t _ m o d a l ( G T K _ W I N D O W ( f i l e s e l ) , T R U E ) ;
43
44 g t k _ w i d g e t _ s h o w ( f i l e s e l ) ;
45 }
図6.25 ファイル選択ダイアログウィジェットのサンプルプログラム
46
47 i n t m a i n (i n t ar g c , c h a r * * a r g v ) {
48 G t k W i d g e t * w i n d o w ;
49 G t k W i d g e t * h b o x ;
50 G t k W i d g e t * l a b e l ;
51 G t k W i d g e t * e n t r y ;
52 G t k W i d g e t * b u t t o n ;
53
54 g t k _ i n i t ( & a r g c , & a r g v ) ;
55 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 ) ;
56 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 F i l e S e l e c t i o n à S a m p l e " ) ;
57 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 ) ;
58 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 " ,
59 G _ C A L L B A C K ( g t k _ m a i n _ q u i t ) , N U L L ) ;
60
61 h b o x = g t k _ h b o x _ n e w ( F A L S E , 5 ) ;
62 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 ) , h b o x ) ;
63
64 l a b e l = g t k _ l a b e l _ n e w ( " F i l e à : " ) ;
65 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( h b o x ) , l a b e l , F A L S E , F A L S E , 0 ) ;
66
67 e n t r y = g t k _ e n t r y _ n e w ( ) ;
68 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( h b o x ) , e n t r y , T R U E , T R U E , 0 ) ;
69 g _ o b j e c t _ s e t _ d a t a ( G _ O B J E C T ( e n t r y ) , " p a r e n t " , (g p o i n t e r) w i n d o w ) ;
70
71 b u t t o n = g t k _ b u t t o n _ n e w _ f r o m _ s t o c k ( G T K _ S T O C K _ O P E N ) ;
72 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 " ,
73 G _ C A L L B A C K ( c b _ b u t t o n ) , (g p o i n t e r) e n t r y ) ;
74 g t k _ b o x _ p a c k _ s t a r t ( G T K _ B O X ( h b o x ) , b u t t o n , F A L S E , F A L S E , 0 ) ;
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 }