def columns(*val)
    if val.empty?
      # returns array of column names as Strings
      @list[0]
    else
      array = val[0]
      @_header_adjustment = 1
      @list ||= []
      @list.clear
      @list << array
      _init_model array

      # update the names in column model
      array.each_with_index { |n,i|
        c = get_column(i)
        #c.name = name     ## 2018-05-19 - seems to be a bug
        c.name = n
      }
      self
    end
  end
def columns(*val)
    if val.empty?
      # returns array of column names as Strings
      @list[0]
    else
      array = val[0]
      @_header_adjustment = 1
      @list ||= []
      @list.clear
      @list << array
      _init_model array

      # update the names in column model
      array.each_with_index { |n,i|
        c = get_column(i)
        #c.name = name     ## 2018-05-19 - seems to be a bug
        c.name = n
      }
      self
    end
  end
getter and setter for columns
 2014-04-10 - 13:49
 @param [Array] columns to set as Array of Strings
 @return if no args, returns array of column names as Strings
  NOTE
  Appends columns to array, so it must be set before data, and thus it should
  clear the list