Class: LecturerTableModel

Inherits:
Qt::AbstractTableModel
  • Object
show all
Defined in:
lib/tmis/interface/models/lecturer_table_model.rb

Overview

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

Instance Method Summary collapse

Constructor Details

#initialize(lecturers, parent) ⇒ LecturerTableModel

Returns a new instance of LecturerTableModel.



8
9
10
11
12
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 8

def initialize(lecturers, parent)
  super()
  @lecturers = lecturers
  @view = parent
end

Instance Method Details

#columnCount(parent) ⇒ Object



23
24
25
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 23

def columnCount(parent)
  5
end

#data(index, role = Qt::DisplayRole) ⇒ Object



27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 27

def data(index, role = Qt::DisplayRole)
  invalid = Qt::Variant.new
  return invalid unless role == Qt::DisplayRole or role == Qt::EditRole
  lecturer = @lecturers[index.row]
  return invalid if lecturer.nil?
  v = case index.column
      when 0
        lecturer.surname
      when 1
        lecturer.name
      when 2
        lecturer.patronymic
      when 3
        lecturer.emails.map(&:email).join(', ')
      when 4
        lecturer.preferred_days
      else
        raise "invalid column #{index.column}"
      end || ''
  Qt::Variant.new(v)
end

#flags(index) ⇒ Object



61
62
63
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 61

def flags(index)
  Qt::ItemIsEditable | super(index)
end

#headerData(section, orientation, role = Qt::DisplayRole) ⇒ Object



49
50
51
52
53
54
55
56
57
58
59
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 49

def headerData(section, orientation, role = Qt::DisplayRole)
  invalid = Qt::Variant.new
  return invalid unless role == Qt::DisplayRole
  v = case orientation
      when Qt::Horizontal
        ['Фамилия', 'Имя', 'Отчество', 'Email', 'Предпочитаемые дни'][section]
      else
        ''
      end
  Qt::Variant.new(v)
end

#insert_newObject



94
95
96
97
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 94

def insert_new
  @lecturers.prepend(Lecturer.new)
  emit layoutChanged()
end

#refreshObject



14
15
16
17
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 14

def refresh
  @lecturers = Lecturer.all
  emit layoutChanged()
end

#remove_currentObject



99
100
101
102
103
104
105
106
107
108
109
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 99

def remove_current
  if @view.currentIndex.valid?
    lecturer = @lecturers[@view.currentIndex.row]
    unless lecturer.stub
      lecturer.try(:destroy)
      @lecturers.delete_at(@view.currentIndex.row)
      emit layoutChanged()
      @view.currentIndex = createIndex(-1, -1)
    end
  end
end

#rowCount(parent) ⇒ Object



19
20
21
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 19

def rowCount(parent)
  @lecturers.size
end

#setData(index, variant, role = Qt::EditRole) ⇒ Object



65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
# File 'lib/tmis/interface/models/lecturer_table_model.rb', line 65

def setData(index, variant, role = Qt::EditRole)
  if index.valid? and role == Qt::EditRole
    lecturer = @lecturers[index.row]
    case index.column
    when 0
      lecturer.surname = variant.toString.force_encoding('UTF-8')
    when 1
      lecturer.name = variant.toString.force_encoding('UTF-8')
    when 2
      lecturer.patronymic = variant.toString.force_encoding('UTF-8')
    when 3
      emails = variant.toString.force_encoding('UTF-8').split(/,\s*/)
      lecturer.emails.destroy_all
      emails.each do |email|
        lecturer.emails.create(email: email)
      end
    when 4
      lecturer.preferred_days = variant.toString.force_encoding('UTF-8').split(/,\s*/).select{|x| x[/^[1-7]$/]}.uniq.join(', ')
    else
      raise "invalid column #{index.column}"
    end
    lecturer.save
    emit dataChanged(index, index)
    true
  else
    false
  end
end