#!/usr/bin/ruby # -*- coding: utf-8 -*- require 'curses' include Curses class SUI def initialize(musiclist) @menu = [["playback", "p"],["stop", "s"], ["reset", "r"], ["next", "n"], ["number", :number], ["quit", "q"]] @menu_offset = 1 0.upto(@menu.length-1) do |i| setpos(i + @menu_offset, 0); addstr(@menu[i][0]) end #配列なので-1する @list = musiclist init_screen stdscr.keypad=true @rem = stdscr.subwin(10, 80, 0, 0) #コントロールウィンドウ @w = stdscr.subwin(8, 40, 10, 0) #曲目ウィンドウ @w.scrollok(false) @mes = stdscr.subwin(8, 24, 10, 56) #メッセージウィンドウ @mes.scrollok(true) end def winbox(win) win.box("|"[0], "-"[0]) subw = stdscr.subwin(win.maxy-2, win.maxx-2, win.begy+1, win.begx+1) end def remort() setpos(0,1) addstr("SO-SA WO ERANDE!(KETTEI HA [SPACE] DESU.)") setpos(1,1) addstr(" playback") setpos(2,1) addstr(" stop") setpos(3,1) addstr(" reset") setpos(4,1) addstr(" next") setpos(5,1) addstr(" tracknumber") setpos(6,1) addstr(" quit") setpos(7,1) @rem.refresh @mes.refresh end def scorelist() #曲目のウィンドウ @w.setpos(4,2) @w.addstr(printf("%s", @list[0][1])) end def message(menu, com) #メッセージウィンドウ if com == nil @mes.setpos(0, 1) @mes.addstr("oh message is none.") else return @menu[com] end @mes.refresh end def puts(str) @mes.setpos(8, 1) @mes.addstr(str+"\n") end def printf(*args) @w.setpos(3, 2) @w.addstr(sprintf(*args)) end def action() @m = 1 begin winbox(@rem) winbox(@w) winbox(@mes) remort() scorelist() message(nil, nil) while true setpos(@m, 1) cbreak noecho c = getch case c when KEY_UP, ?k @m -= 1 if @m < 1 @m = 5 end setpos(@m, 1) when KEY_DOWN, ?j @m += 1 if @m > 5 @m = 1 end when " "[0] @mes.setpos(4, 3) #@mes.setpos(1, 1) if @m < 5 @mes.setpos(5, 1) return @menu[@m-1][1] end case @m when 5 addstr("Enter tracknumber:") nocbreak echo get = getstr setpos(8, 1) return get when 6 return nil end refresh end end end end end