[不作死不会死]选择窗口逻辑泛用容器
容器的意思是自动接管某些东西,这里接管了所有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
附个图呗
页:
[1]