#==============================================================================
# ■ Window_Selectable_X vol.1.00
#------------------------------------------------------------------------------
# １列の選択肢の場合、『←』『→』キーでページのめくり機能を追加
# ※Input.trigger?()を削除でノンストップカーソル！
# 08/02/08
#==============================================================================
class Window_Selectable < Window_Base
  #--------------------------------------------------------------------------
  # ■ フレーム更新(再定義)
  #--------------------------------------------------------------------------
  def update
    super
    # カーソルの移動が可能な状態の場合
    if self.active && @item_max > 0 && @index >= 0
      #…………………………………………………………………………………………………
      # ■ 方向ボタンの下が押された場合
      #…………………………………………………………………………………………………
      if Input.repeat?(Input::DOWN)
        if (@column_max == 1 && Input.trigger?(Input::DOWN)) or @index < @item_max - @column_max
          # □カーソルを下に移動
          $game_system.se_play($data_system.cursor_se)
          @index = (@index + @column_max) % @item_max
        end
      end
      #…………………………………………………………………………………………………
      # ■ 方向ボタンの上が押された場合
      #…………………………………………………………………………………………………
      if Input.repeat?(Input::UP)
        if Input.trigger?(Input::UP) && @column_max == 1 && 
          @index == 0 && self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
          # カーソル SE を演奏
          $game_system.se_play($data_system.cursor_se)
          # □全ページ数を取得
          pege_all = [(@item_max - 1) / page_item_max,0].max
          # カーソルを 一番最後のページへ移動
          @index = pege_all * page_item_max
          # □カーソルが先頭の行を選択する
          self.top_row = @index / @column_max
        elsif Input.trigger?(Input::UP) && @column_max == 1 && 
          @index == 0 && self.top_row + (self.page_row_max - 1) == (self.row_max - 1)
          # カーソルが一番最後の行を選択する
          $game_system.se_play($data_system.cursor_se)
          @index = (@index - @column_max + @item_max) % @item_max
        elsif (@column_max == 1 && Input.trigger?(Input::UP)) or @index >= @column_max
          # カーソルを上に移動
          $game_system.se_play($data_system.cursor_se)
          @index = (@index - @column_max + @item_max) % @item_max
        end
      end
      #…………………………………………………………………………………………………
      # ■ 方向ボタンの右が押された場合
      #…………………………………………………………………………………………………
      if Input.repeat?(Input::RIGHT) && @column_max > 1
        # 列数が 2 以上で、カーソル位置が(項目数 - 1)より前の場合
        if @column_max >= 2 && @index < @item_max - 1
          # カーソルを右に移動
          $game_system.se_play($data_system.cursor_se)
          @index += 1
        end
      elsif Input.repeat?(Input::RIGHT) && @column_max == 1
        # 表示されている最後尾の行が、データ上の最後の行よりも前の場合
        if self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
          # カーソルを 1 ページ後ろに移動
          $game_system.se_play($data_system.cursor_se)
          # 全ページ数を取得
          pege_all = @index / page_item_max
          # 項目数を超える場合
          if (pege_all+1) * page_item_max < @item_max - 1
            @index = (pege_all+1) * page_item_max
          else
            # 一番最後のページへ移動
            pege_all = (@item_max - 1) / page_item_max
            @index = pege_all * page_item_max
          end
          # □カーソルが先頭の行を選択する
          self.top_row = @index / @column_max
        elsif Input.trigger?(Input::RIGHT) && self.top_row > 0
          # カーソルを 1 ページ前に移動
          $game_system.se_play($data_system.cursor_se)
          # 一番最初のページへ移動
          @index = 0
          # □カーソルが先頭の行を選択する
          self.top_row -= self.page_row_max
        end
      end
      #…………………………………………………………………………………………………
      # ■ 方向ボタンの左が押された場合
      #…………………………………………………………………………………………………
      if Input.repeat?(Input::LEFT) && @column_max > 1
        # 列数が 2 以上で、カーソル位置が 0 より後ろの場合
        if @column_max >= 2 && @index > 0
          # カーソルを左に移動
          $game_system.se_play($data_system.cursor_se)
          @index -= 1
        end
      elsif Input.repeat?(Input::LEFT) && @column_max == 1
        # 表示されている先頭の行が 0 より後ろの場合
        if self.top_row > 0
          # カーソルを 1 ページ前に移動
          $game_system.se_play($data_system.cursor_se)
          # 全ページ数を取得
          pege_all = @index / page_item_max
          # 項目数を超える場合
          if (pege_all-1) * page_item_max < 0
            @index = 0
          else
            @index = (pege_all-1) * page_item_max
          end
          # □カーソルが先頭の行を選択する
          self.top_row = @index / @column_max
        elsif Input.trigger?(Input::LEFT) && 
          self.top_row + (self.page_row_max - 1) < (self.row_max - 1)
          # カーソルを 1 ページ後ろに移動
          $game_system.se_play($data_system.cursor_se)
          # 全ページ数を取得
          pege_all = (@item_max - 1) / page_item_max
          # 一番最後のページへ移動
          @index = pege_all * page_item_max
          # □カーソルが先頭の行を選択する
          self.top_row = @index / @column_max
        end
      end
    end
    # ヘルプテキストを更新 (update_help は継承先で定義される)
    if self.active && @help_window != nil
      update_help
    end
    # カーソルの矩形を更新
    update_cursor_rect
  end
end