Ruby200 发表于 2013-11-15 00:03:25

[不作死不会死]选择窗口逻辑泛用容器

容器的意思是自动接管某些东西,这里接管了所有handler,包装成一个长得像模式对话框函数一类的东西
测试是:
DataManager.init
msgbox_p WindowContainer.new(Window_TitleCommand.new).show_command_dialog

应该返回
1. [你选择的项目, :ok]
或者取消的情况
2. [:cancel, :cancel]

代码

class WindowContainer
def initialize(window, autodispose = true)
    @window = window
    @autodispose = autodispose
end

def set_result(item, index)
    @selected = true
    @result =
end

def show_command_dialog
    raise "" unless Window_Selectable === @window
    x = @window.instance_variable_get(:@list)
    @window.set_handler :ok, lambda{
       set_result x[@window.index], :ok
    }
    @window.set_handler :cancel, lambda{
       set_result :cancel, :cancel
    }
    @selected = false
    while !@selected
      Graphics.update
      Input.update
      @window.update
    end
    end_dialog @result
end

def end_dialog(opaque)
    if @autodispose
      @window.dispose
    end
    opaque
end
end



houyuxiaoyang 发表于 2013-11-16 23:07:02

附个图呗
页: [1]
查看完整版本: [不作死不会死]选择窗口逻辑泛用容器