Newer
Older
intro2018 / sui.rb
@kanan kanan on 7 Aug 2018 2 KB add intro
#!/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