SGEで画像ビューワー

早速迷走を。
タイトルとおり、SGEで画像ビューワーを作ろうと思いました。将来的にはタグとかつけられたり、画像を比較して大きさが違っても「これとこれ同じでないんかい?」と提案したりするような奴。
今の時点での実装は以下の通り。

  • 起動すると、コンソールが立ち上がる。
  • このコンソールにディレクトリをドラッグ&ドロップすると、そのディレクトリとサブディレクトリに含まれる全ての *.jpg と *.png をリストアップし、それを順番に表示する。
  • クリックで次の画像。
  • 全ての画像を表示したら終了。

root.lua

dofile("string.lua")
gui.create(800,600)

font.define({name="MS ゴシック", width=22, height=22}) -- フォントの設定

local dirs
while type(dirs) == "nil" do
	dirs = gui.getdropfilelist()
	gui.doevents()
end
local dir = dirs[1]
gui.caption(encoding.ansi_to_utf8(dir))

local file_list = {}
for k, v in ipairs(gui.getfilelist(dir)) do
	local exts = v:split(".") -- .で分割する。
	local ext = exts[#exts]:lower() -- 末尾を取得する。
	if ext == "jpg" or ext == "png" then
		local full = dir.."\\"..v
		file_list[1 + #file_list] = full
	end
end

function click()
	repeat
		gui.doevents()
		l,r,w,ld,rd=gui.getclick()
	until l
end


for k, v in ipairs(file_list) do
	texture.load(1, v)
	draw.beginscene() -- 描画開始
	draw.all(1, 0, 0, 255) -- 描画
	draw.endscene() -- 画面反映
	click()
end

string.lua(追加のモジュール)

--[[* split string *]]--
-- return iterator
string.split_it = function(str, sep)
        if str == nil then return nil end
        assert(type(str) == "string", "str must be a string")
        assert(type(sep) == "string", "sep must be a string")
        return string.gmatch(str, "[^\\" .. sep .. "]+")
end
-- return table
string.split = function(str, sep)
        local ret = {}
        for seg in string.split_it(str, sep) do
                ret[#ret+1] = seg
        end
        return ret
end
--[[* join *]]--
table.join = function (tbl, sep)
        local ret
        for n, v in pairs(tbl) do
                local seg = tostring(v)
                if ret == nil then
                        ret = seg
                else
                        ret = ret .. sep .. seg
                end
        end
        return ret
end

-- 日本語

上記の追加モジュールは、http://d.aoikujira.com/blog/index.php?2009%252F04%252F16%252FLua%E3%81%AEstring%E3%81%ABsplit%E3%81%A8join%E3%82%92%E5%AE%9F%E8%A3%85%E3%81%99%E3%82%8Bより使わせていただきました。

追記

トラックバック送れられなくね? ブログとか言ってる割に。