Class: GroupTableModel
- Defined in:
- lib/tmis/interface/models/group_table_model.rb
Overview
~~~~~~~~~~~~~~~~~~~~~~~~~~
Instance Method Summary collapse
- #columnCount(parent) ⇒ Object
- #data(index, role = Qt::DisplayRole) ⇒ Object
- #flags(index) ⇒ Object
- #headerData(section, orientation, role = Qt::DisplayRole) ⇒ Object
-
#initialize(groups, parent) ⇒ GroupTableModel
constructor
A new instance of GroupTableModel.
- #insert_new ⇒ Object
- #refresh ⇒ Object
- #remove_current ⇒ Object
- #rowCount(parent) ⇒ Object
- #setData(index, variant, role = Qt::EditRole) ⇒ Object
Constructor Details
#initialize(groups, parent) ⇒ GroupTableModel
Returns a new instance of GroupTableModel.
7 8 9 10 11 12 13 14 15 16 |
# 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 |
Instance Method Details
#columnCount(parent) ⇒ Object
29 30 31 |
# File 'lib/tmis/interface/models/group_table_model.rb', line 29 def columnCount(parent) 4 end |
#data(index, role = Qt::DisplayRole) ⇒ Object
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# 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) ⇒ Object
80 81 82 |
# 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) ⇒ Object
68 69 70 71 72 73 74 75 76 77 78 |
# 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 ⇒ Object
112 113 114 115 116 117 |
# 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 ⇒ Object
18 19 20 21 22 23 |
# 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 ⇒ Object
119 120 121 122 123 124 125 126 |
# 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) ⇒ Object
25 26 27 |
# File 'lib/tmis/interface/models/group_table_model.rb', line 25 def rowCount(parent) @groups.size end |
#setData(index, variant, role = Qt::EditRole) ⇒ Object
84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# 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 |