ruby-****@sourc*****
ruby-****@sourc*****
2008年 10月 27日 (月) 09:15:44 JST
------------------------- REMOTE_ADDR = 222.225.51.171 REMOTE_HOST = URL = http://ruby-gnome2.sourceforge.jp/ja/hiki.cgi?libglade2-tut-create-src ------------------------- @@ -85,8 +85,8 @@ @window = @glade['main_window'] @editor = @glade['textview1'] - @filedlg = @glade['filechooser'] - @aboutdlg = @glade['aboutdialog'] + @filedialog = @glade['filechooser'] + @aboutdialog = @glade['aboutdialog'] end 以下、シグナルハンドラの実装例です。 @@ -118,7 +118,7 @@ def on_about1_activate(widget) puts "on_about1_activate" - @aboutdlg.run do |response| + @aboutdialog.run do |response| case response when Gtk::Dialog::RESPONSE_DELETE_EVENT puts "RESPONSE_DELETE_EVENT" @@ -126,7 +126,7 @@ puts "RESPONSE_CLOSE" end end - @aboutdlg.hide + @aboutdialog.hide end Gtk::Dialog#runは、ダイアログ上で何らかの"response" Signalが発生するまで待機し、Signalを受け取ると関連付けられたブロックを実行してメソッドを抜けます。"response" Signalとは、"response ID"が設定されたボタンが押されるか、またはダイアログ枠のクローズボタン(これを押したというイベントにも"response ID"が設定されています)が押された時に発生するSignalです。"response ID"はブロック引数として渡されるので、ブロック内でこの値に応じた処理を行うことができます。 @@ -137,8 +137,8 @@ def on_about1_activate(widget) puts "on_about1_activate" - @aboutdlg.run - @aboutdlg.hide + @aboutdialog.run + @aboutdialog.hide end Gtk::Dialog#runは、どのボタンを押してもダイアログが閉じる処理の場合には便利ですが、そうでない場合、他のウィジェットと同じ方法でシグナルハンドラを設定することもできます。詳しくは((<「Gtk2チュートリアル」の「ダイアログ」のページ|gtk2-tut-dialog>))を見て下さい。 @@ -195,8 +195,8 @@ @window = @glade['main_window'] @editor = @glade['textview1'] - @filedlg = @glade['filechooser'] - @aboutdlg = @glade['aboutdialog'] + @filedialog = @glade['filechooser'] + @aboutdialog = @glade['aboutdialog'] initialize_editor # 追加 end @@ -225,20 +225,20 @@ def on_open1_activate(widget) puts "on_open1_activate" - show_opendlg # 追加 + show_opendialog # 追加 end - def show_opendlg # 新規作成 - @filedlg.action = Gtk::FileChooser::ACTION_OPEN # ダイアログをオープン用に設定 - @filedlg.title = 'Open Dialog' - if****@filed***** == Gtk::Dialog::RESPONSE_OK - if File.exist?(get_platform_filename(@filedlg.filename)) - @filename =****@filed***** # ファイルパスを記録 + def show_opendialog # 新規作成 + @filedialog.action = Gtk::FileChooser::ACTION_OPEN # ダイアログをオープン用に設定 + @filedialog.title = 'Open Dialog' + if****@filed***** == Gtk::Dialog::RESPONSE_OK + if File.exist?(get_platform_filename(@filedialog.filename)) + @filename =****@filed***** # ファイルパスを記録 read_file(@filename) # 選択されたファイルを読み込んでTextViewに表示 update_window_title(@filename) end end - @filedlg.hide + @filedialog.hide end def get_platform_filename(filename) # 新規作成 @@ -249,7 +249,7 @@ end end -このチュートリアルのプログラムでは、一つのFileChooserDialogをオープン時、保存時両方で使い回しますので、まず"show_opendlg"メソッドの冒頭でオープン用の設定をしています。その後ダイアログを表示して、"OK"ボタンで閉じられ、かつ取得したファイルパスが存在する時だけファイルの読み込みと表示を行います。 +このチュートリアルのプログラムでは、一つのFileChooserDialogをオープン時、保存時両方で使い回しますので、まず"show_opendialog"メソッドの冒頭でオープン用の設定をしています。その後ダイアログを表示して、"OK"ボタンで閉じられ、かつ取得したファイルパスが存在する時だけファイルの読み込みと表示を行います。 アバウトダイアログの例と同じようにrunメソッドを使っていますが、ブロックは付けずに戻り値から"OK"ボタンが押されたかどうかを判定しています。 @@ -278,14 +278,14 @@ === "Save(保存)"コマンド -保存ファイルパスが既に決まっている場合(既存ファイルを読み込んだ、もしくは保存済み)、そのまま保存し、そうでなければダイアログを表示してユーザに指定してもらいます。"save_file"メソッドは"Save As(別名で保存)"コマンドでも使います。"show_savedlg"メソッドは"Save As(別名で保存)"コマンドで説明します。 +保存ファイルパスが既に決まっている場合(既存ファイルを読み込んだ、もしくは保存済み)、そのまま保存し、そうでなければダイアログを表示してユーザに指定してもらいます。"save_file"メソッドは"Save As(別名で保存)"コマンドでも使います。"show_savedialog"メソッドは"Save As(別名で保存)"コマンドで説明します。 def on_save1_activate(widget) puts "on_save1_activate" if @filename save_file(@filename) else - show_savedlg + show_savedialog end end @@ -299,41 +299,41 @@ def on_save_as1_activate(widget) puts "on_save_as1_activate" - show_savedlg + show_savedialog end 常にダイアログを表示してユーザにファイル名を入力してもらいます。 - def show_savedlg # 新規作成 - @filedlg.action = Gtk::FileChooser::ACTION_SAVE # ダイアログを保存用に設定 - @filedlg.title = 'Save Dialog' + def show_savedialog # 新規作成 + @filedialog.action = Gtk::FileChooser::ACTION_SAVE # ダイアログを保存用に設定 + @filedialog.title = 'Save Dialog' loop do - if****@filed***** == Gtk::Dialog::RESPONSE_OK - next unles****@filed***** # ファイル名が空 - if File.exist?(get_platform_filename(@filedlg.filename)) - next unless overwrite_file?(@filedlg.filename) # 上書き拒否 + if****@filed***** == Gtk::Dialog::RESPONSE_OK + next unles****@filed***** # ファイル名が空 + if File.exist?(get_platform_filename(@filedialog.filename)) + next unless overwrite_file?(@filedialog.filename) # 上書き拒否 else - next unless filename_valid?(@filedlg.filename) # ファイル名が不正 + next unless filename_valid?(@filedialog.filename) # ファイル名が不正 end - save_file(@filedlg.filename) - @filename =****@filed***** + save_file(@filedialog.filename) + @filename =****@filed***** update_window_title(@filename) end break end - @filedlg.hide + @filedialog.hide end -"show_savedlg"メソッドでは、"Open(開く)"コマンドでも使ったGtk::FileChooserDialogを保存用に使い、入力されたファイル名が不正でなければ保存します。Gtk::Dialog#runメソッドでレスポンスを捕捉してその値をチェックするのは"show_opendlg"メソッドと同じですが、そのブロックを無限ループで挟んで、"OK"ボタンが押され、かつ上書きが拒否されたり入力されたファイル名が不正である場合、そのままファイル保存ダイアログが表示され続けるようにしています。 +"show_savedialog"メソッドでは、"Open(開く)"コマンドでも使ったGtk::FileChooserDialogを保存用に使い、入力されたファイル名が不正でなければ保存します。Gtk::Dialog#runメソッドでレスポンスを捕捉してその値をチェックするのは"show_opendialog"メソッドと同じですが、そのブロックを無限ループで挟んで、"OK"ボタンが押され、かつ上書きが拒否されたり入力されたファイル名が不正である場合、そのままファイル保存ダイアログが表示され続けるようにしています。 def overwrite_file?(filename) # 新規作成 - dlg = Gtk::MessageDialog.new( - @filedlg, Gtk::Dialog::MODAL, + dialog = Gtk::MessageDialog.new( + @filedialog, Gtk::Dialog::MODAL, Gtk::MessageDialog::QUESTION, Gtk::MessageDialog::BUTTONS_OK_CANCEL, filename + "\n already exists. Do you overwrite it?") - result = dlg.run - dlg.destroy + result = dialog.run + dialog.destroy result == Gtk::Dialog::RESPONSE_OK end @@ -344,13 +344,13 @@ File.open(get_platform_filename(filename), 'w') do |f| end rescue Errno::EINVAL => err p err - dlg = Gtk::MessageDialog.new( - @filedlg, Gtk::Dialog::MODAL, + dialog = Gtk::MessageDialog.new( + @filedialog, Gtk::Dialog::MODAL, Gtk::MessageDialog::ERROR, Gtk::MessageDialog::BUTTONS_CLOSE, File.basename(filename) + " is an invalid file name.") - dlg.run - dlg.destroy + dialog.run + dialog.destroy return false end true