class Plugin::Gtk::DialogWindow

Public Class Methods

new(title:, promise:, plugin:, default:, &proc) click to toggle source
Calls superclass method
# File core/plugin/gtk/dialog_window.rb, line 20
def initialize(title:, promise:, plugin:, default:, &proc)
  super(title)
  @plugin = plugin
  @container = DialogContainer.new(plugin, default.to_h.dup, &proc)
  @container.error_observer = self
  @promise = promise
  set_size_request(640, 480)
  set_window_position(Gtk::Window::POS_CENTER)
  add_button(Gtk::Stock::OK, Gtk::Dialog::RESPONSE_OK)
  add_button(Gtk::Stock::CANCEL, Gtk::Dialog::RESPONSE_CANCEL)
  vbox.pack_start(@container)
  register_response_listener
  run_container
end
open(title:, promise:, plugin:, default:, &proc) click to toggle source

ダイアログを開く。このメソッドを直接利用せずに、Pluginのdialog DSLを利用すること。

Args

title:

ダイアログのタイトルバーに表示する内容(String)

promise:

入力が完了・中断された時に呼ばれるDeferedオブジェクト

plugin:

呼び出し元のPluggaloid Plugin

default:

エレメントのデフォルト値。{キー: デフォルト値}のようなHash

&proc

DSLブロック

Return

作成されたDialogのインスタンス

# File core/plugin/gtk/dialog_window.rb, line 14
def self.open(title:, promise:, plugin:, default:, &proc)
  window = new(plugin: plugin, title: title, promise: promise, default: default, &proc)
  window.show_all
  window
end

Public Instance Methods

on_abort(err) click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 35
def on_abort(err)
  if err.is_a?(String)
    Delayer.new do
      set_sensitive(false)
      alert = Gtk::MessageDialog.new(nil,
                                     Gtk::Dialog::DESTROY_WITH_PARENT,
                                     Gtk::MessageDialog::ERROR,
                                     Gtk::MessageDialog::BUTTONS_CLOSE,
                                     err)
      alert.ssc(:response){|widget| widget.destroy; false }
      alert.ssc(:destroy) do
        set_sensitive(true)
        @container.reset
        run_container
        false
      end
      alert.show_all
    end
  else
    Delayer.new do
      @promise.fail(err) if @promise
      @promise = nil
      destroy
    end
  end
end