class Plugin::Gtk::DialogContainer

Constants

AWAIT
EXIT
STATE_AWAIT
STATE_EXIT
STATE_INIT
STATE_RUN
STATE_WAIT

Attributes

awaiting_deferred[R]
error_observer[RW]
result_of_proc[R]
state[R]

Public Class Methods

new(plugin, default=Hash.new, &proc) click to toggle source
Calls superclass method Gtk::FormDSL.new
# File core/plugin/gtk/dialog_window.rb, line 177
def initialize(plugin, default=Hash.new, &proc)
  @plugin = plugin
  @values = default
  @proc = proc
  reset
  super(){}
end

Public Instance Methods

[](key) click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 228
def [](key)
  @values[key.to_sym]
end
[]=(key, value) click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 232
def []=(key, value)
  @values[key.to_sym] = value
end
await(defer) click to toggle source

dialog DSLから利用するメソッド。 Deferredを受け取り、その処理が終わるまで処理を止める。 処理が終わると、deferの結果を返す。処理が失敗していると、 ダイアログウィンドウを閉じ、dialog DSLのtrapブロックを呼ぶ。

# File core/plugin/gtk/dialog_window.rb, line 169
def await(defer)
  Fiber.yield(AWAIT, defer)
end
await_input() click to toggle source

dialog DSLから利用するメソッド。 dialogウィンドウのエレメントの配置を、ユーザが次へボタンを押すまで中断する。 次へボタンが押されたら、 その時点で各エレメントに入力された内容を格納した Plugin::Gtk::DialogWindow::Response::Ok のインスタンスを返す

# File core/plugin/gtk/dialog_window.rb, line 152
def await_input
  Fiber.yield
end
create_inner_setting() click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 173
def create_inner_setting
  self.class.new(@plugin, @values)
end
reset() click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 236
def reset
  @state = STATE_INIT
  self
end
resume(response) click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 206
def resume(response)
  @state = STATE_RUN
  result, *args = @fiber.resume(response)
  set_sensitive(true)
  show_all
  case result
  when EXIT
    @state = STATE_EXIT
  when AWAIT
    @state = STATE_AWAIT
    @awaiting_deferred, = *args
    set_sensitive(false)
    @awaiting_deferred.next{|deferred_result|
      run(deferred_result)
    }.trap{|err|
      @error_observer.on_abort(err) if @error_observer
    }
  else
    @state = STATE_WAIT
  end
end
run(response=nil) click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 185
def run(response=nil)
  Delayer.new do
    case state
    when STATE_INIT
      @fiber = Fiber.new do
        @result_of_proc = instance_eval(&@proc)
        if @result_of_proc.is_a? Delayer::Deferred::Deferredable::Awaitable
          @result_of_proc = await(@result_of_proc)
        end
        EXIT
      end
      resume(response)
    when STATE_WAIT
      children.each(&method(:remove))
      resume(response)
    when STATE_AWAIT
      resume(response)
    end
  end
end
set_value(v={}) click to toggle source

dialog DSLから利用するメソッド。 初期値を動的に設定するためのメソッド。 {エレメントのキー: 値} のように書くことで、複数同時に設定できる。 既に置かれたエレメントの内容がこのメソッドによって書き換わることはないので、 エレメントを配置する前に呼び出す必要がある。

# File core/plugin/gtk/dialog_window.rb, line 161
def set_value(v={})
  @values.merge!(v)
end
to_h() click to toggle source
# File core/plugin/gtk/dialog_window.rb, line 241
def to_h
  @values.dup
end