class GroupTableModel

~~~~~~~~~~~~~~~~~~~~~~~~~~

Public Class Methods

new(groups, parent) click to toggle source
Calls superclass method
# File lib/tmis/interface/models/group_table_model.rb, line 7
def initialize(groups, parent)
  super()
  @groups = groups
  @groups.size
  @view = parent
  @SpecialityComboBoxDelegate = SpecialityComboBoxDelegate.new(self)
  @CourseComboBoxDelegate = CourseComboBoxDelegate.new(self)
  @view.setItemDelegateForColumn(1, @SpecialityComboBoxDelegate)
  @view.setItemDelegateForColumn(2, @CourseComboBoxDelegate)
end

Public Instance Methods

columnCount(parent) click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 29
def columnCount(parent)
  4
end
data(index, role = Qt::DisplayRole) click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 33
def data(index, role = Qt::DisplayRole)
  group = @groups[index.row]
  default = Qt::Variant.new
  case role
  when Qt::DisplayRole
    case index.column
    when 0
      group.title
    when 1
      group.speciality.try(:title)
    when 2
      group.course.try(:number)
    when 3
      group.emails.map(&:email).join(', ')
    else
      raise "invalid column #{index.column}"
    end.try(:to_v) || default
  when Qt::EditRole
    case index.column
    when 0
      group.title
    when 1
      group.speciality_id
    when 2
      group.course_id
    when 3
      group.emails.map(&:email).join(', ')
    else
      raise "invalid column #{index.column}"
    end.try(:to_v) || default
  else
    default
  end
end
flags(index) click to toggle source
Calls superclass method
# File lib/tmis/interface/models/group_table_model.rb, line 80
def flags(index)
  Qt::ItemIsEditable | super(index)
end
headerData(section, orientation, role = Qt::DisplayRole) click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 68
def headerData(section, orientation, role = Qt::DisplayRole)
  invalid = Qt::Variant.new
  return invalid unless role == Qt::DisplayRole
  v = case orientation
      when Qt::Horizontal
        %w(Название Специальность Курс Email)[section]
      else
        ''
      end
  Qt::Variant.new(v)
end
insert_new() click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 112
def insert_new
  new_group = Group.new
  @groups.prepend(new_group)
  (1..2).map{ |i| Subgroup.create(group: new_group, number: i) }
  emit layoutChanged()
end
refresh() click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 18
def refresh
  @groups = Group.all
  @SpecialityComboBoxDelegate.setup
  @CourseComboBoxDelegate.setup
  emit layoutChanged()
end
remove_current() click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 119
def remove_current
  if @view.currentIndex.valid?
    @groups[@view.currentIndex.row].try(:destroy)
    @groups.delete_at(@view.currentIndex.row)
    emit layoutChanged()
    @view.currentIndex = createIndex(-1, -1)
  end
end
rowCount(parent) click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 25
def rowCount(parent)
  @groups.size
end
setData(index, variant, role = Qt::EditRole) click to toggle source
# File lib/tmis/interface/models/group_table_model.rb, line 84
def setData(index, variant, role = Qt::EditRole)
  if index.valid? and role == Qt::EditRole
    group = @groups[index.row]
    case index.column
    when 0
      group.title = variant.toString.force_encoding('UTF-8')
    when 1
      group.speciality_id = variant.toInt
    when 2
      group.course_id = variant.toInt
    when 3
      emails = variant.toString.force_encoding('UTF-8').split(/,\s*/)
      group.emails.destroy_all
      emails.each do |email|
        group.emails.create(email: email)
      end
    else
      raise "invalid column #{index.column}"
    end
    group.save
    p group
    emit dataChanged(index, index)
    true
  else
    false
  end
end