GTKmm (3.0) と glade によるアプリ (11) - ファイル選択ダイアログ
今回は、前回の" GTKmm (3.0) と glade によるアプリ (10) - プログレスバーと2つのモード "で作成したプログラムを使って、ファイル選択ダイアログでファイルを選択できるようにしてみたいと思います。
ファイルを選択した結果はこんな感じで、呼び出し元のウィンドウに表示されます。
glade を使ったプログラムも用意しようと思いましたが。結果的に直接呼び出したものより、ソースコードが大きくなったこと、現時点でgladeでタイトルバー(ヘッダーバー)にボタンがついているダイアログを使うと、ワーニング(?)を出力する仕様(?)になっていることを考慮して、今回は、gladeを使ったものは掲載しないことにしました。
以前にも、「GTKmm の FileChooserDialog をただ表示するアプリ」で、FileChooserDialog を紹介しましたが、
今回は、フィルター機能も追加しています。
ソースコードは最後に両方の機能を含めたものを公開。(zipダウンロードできます)
gladeに新しく "file select" ボタンを追加し、クリックイベントで FileChooserDialog を使っている on_btnfileselect() を呼び出しています。
glade にボタン追加したり、ソースコードのクリックイベント処理などについての云々かんぬんはもう良いでしょう。
関数 on_btnfileselect() のソース
● Child_Window.cc
… void Child_Window::on_btnfileselect() { // don't use glade Gtk::FileChooserDialog dialog( *this, "open file", Gtk::FILE_CHOOSER_ACTION_OPEN ); dialog.add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK); dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL); auto filter_cpp = Gtk::FileFilter::create(); filter_cpp->set_name("C/C++ files"); filter_cpp->add_mime_type("text/x-c"); filter_cpp->add_mime_type("text/x-c++"); filter_cpp->add_mime_type("text/x-c-header"); dialog.add_filter(filter_cpp); auto filter_all = Gtk::FileFilter::create(); filter_all->set_name("all files"); filter_all->add_pattern("*.*"); dialog.add_filter(filter_all); switch( dialog.run() ){ case Gtk::RESPONSE_OK: m_labeldisp1->set_text("GTK::FileChooserDialog\n"+dialog.get_filename()); break; case Gtk::RESPONSE_CANCEL: m_labeldisp1->set_text("GTK::FileChooserDialog\nCANCEL"); break; } }
(1) Gtk::FileChooserDialog で dialog を作成
Gtk::FileChooserDialog::FileChooserDialog (
Gtk::Window& parent,
const Glib::ustring & title,
FileChooserAction action = FILE_CHOOSER_ACTION_OPEN
)
parent は親となる widget を指定。
title はダイアログのタイトルバーに表示する文字列を指定。
action は以下の4種類があります。特に説明の必要はないでしょう。
FILE_CHOOSER_ACTION_OPEN
FILE_CHOOSER_ACTION_SAVE
FILE_CHOOSER_ACTION_SELECT_FOLDER
FILE_CHOOSER_ACTION_CREATE_FOLDER
(2) レスポンス用のボタンを指定
add_button() を使って、OPEN と CACEL を設定。
Button* Gtk::Dialog::add_button (
const Gtk::StockID& stock_id,
int response_id
)
stock_id はストックしているボタンIDを指定。
ビルトインボタンの中から関連しそうな ID
OPEN , CANCEL , SAVE , SAVE_AS , CLOSE , NEW など
response_id はダイアログの応答ID(リターン値)を指定。
標準的な response ID
RESPONSE_NONE , RESPONSE_REJECT , RESPONSE_ACCEPT , RESPONSE_DELETE_EVENT , RESPONSE_OK , RESPONSE_CANCEL , RESPONSE_CLOSE , RESPONSE_YES , RESPONSE_NO , RESPONSE_APPLY , RESPONSE_HELP
(3) フィルターなどの設定
一覧表示されるファイルを指定した拡張子(mime-type)またはパターンで絞りこむフィルターを設定します。
static Glib::RefPtr
でフィルターを作成し、フィルター名を設定、
void Gtk::FileFilter::set_name ( const Glib::ustring & name );
mime-type または パターンを指定します。
void Gtk::FileFilter::add_mime_type ( const Glib::ustring & mime_type );
void Gtk::FileFilter::add_pattern ( const Glib::ustring & pattern );
最後に FileChooser に作成したフィルターを追加します。
void Gtk::FileChooser::add_filter ( const Glib::RefPtr< FileFilter >& filter );
フィルターが設定されていない場合、ダイアログにはフィルター選択ドロップダウンリストは表示されません。
表示したいファイルのmime-typeが不明な場合、file コマンドを使うと mime-type を表示できます。
$ file -i MainWindow.cc
MainWindow.cc: text/x-c++; charset=us-ascii
まは、Ubuntu であれば、/usr/share/mime/globs2 などで一覧をみることもできます。
パターン指定では、、ワイルドカードでファイル名のセットを指定するパターンを指定します。
"*.txt" など。
(4) 選択されたファイル名などを取得
フィルターなどを設定したら、run() で表示し、ユーザーの選択結果を待ちます。
FileChooserDialog のリターン値は通常のダイアログと同じです。
ユーザーが選択ファイルやパスを取得する場合、以下の関数などを使います。
std::string Gtk::FileChooser::get_filename ( ) const
std::vector
Glib::RefPtr
Glib::RefPtr
エンコーディングなどが必要な場合は、以下の関数を使うと良いです。
Glib::ustring Gtk::FileChooser::get_uri ( ) const
std::vector
Gtk::FileChooserDialog は、初期表示指定など基本的なことは当然できますが、記述しきれないほど複雑なことができますので、マニュアル等を熟読すると良いでしょう。
Qtより細かいことがやり易いです。
以上、簡単でしたね!
devhelp などを使い、Gtk::FileChooserDialog のクラスリファレンスを開けば、クラスの相関図が表示されているので、そこから追跡すると良いでしょう。
最後に、全てのファイルを圧縮したファイル(zip)を載せます。
●ソース一式
GTKプログラミングを学習するなら!
- 作者: ToshioCP
- 発売日: 2017/06/06
- メディア: Kindle版
- この商品を含むブログを見る
GTK+とGladeで作るLinuxプログラミング超入門―かっこいいアプリを自分で作ろう! (CompuBooks)
- 作者: 鈴木哲哉
- 出版社/メーカー: すばる舎
- 発売日: 2000/06
- メディア: 単行本
- クリック: 25回
- この商品を含むブログ (1件) を見る
GTK+・GDKによるLinuxアプリケーション開発 (New riders)
- 作者: エリックハーロウ,Eric Harlow,アンク
- 出版社/メーカー: 翔泳社
- 発売日: 1999/10/01
- メディア: 単行本
- クリック: 56回
- この商品を含むブログ (1件) を見る
- 出版社/メーカー: Saravana Pugazhendi
- 発売日: 2015/11/16
- メディア: アプリ
- この商品を含むブログを見る