Class: Signal_mapper

Inherits:
Qt::Widget
  • Object
show all
Defined in:
lib/class/Signal_mapper.rb

Instance Method Summary collapse

Constructor Details

#initializeSignal_mapper

Returns a new instance of Signal_mapper.



14
15
16
17
18
19
20
21
22
# File 'lib/class/Signal_mapper.rb', line 14

def initialize
  super()
  @view = Ui_Signal_mapper.new
  centerWindow(self)
  @view.setupUi(self)
  init_bus_list
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end

Instance Method Details

#are_values_ok?Boolean

Returns:

  • (Boolean)


82
83
84
85
86
87
88
# File 'lib/class/Signal_mapper.rb', line 82

def are_values_ok?
  pins = []
  @view.map_table.rowCount.times do |i|
    pins.push(@view.map_table.item(i, 1).text)
  end
  return true if check_empty(pins) && check_duplicate(pins)
end

#check_duplicate(pins) ⇒ Object



101
102
103
104
105
106
107
108
109
110
111
112
113
# File 'lib/class/Signal_mapper.rb', line 101

def check_duplicate(pins)
  duplicate = pins.inject(Hash.new(0)) {|ha, e| ha[e] += 1 ; ha}.delete_if {|k, v| v == 1}.keys
  unless duplicate.empty?
    @view.map_table.setCurrentItem(@view.map_table.item(pins.index(duplicate[0]), 1))
    Qt::MessageBox.new(
      Qt::MessageBox::Warning,
      'Wrong value',
      "Duplicate values detected: #{duplicate[0]}"
    ).exec
    return false
  end
  return true
end

#check_empty(pins) ⇒ Object



90
91
92
93
94
95
96
97
98
99
# File 'lib/class/Signal_mapper.rb', line 90

def check_empty(pins)
  return true unless pins.include?('')
  @view.map_table.setCurrentItem(@view.map_table.item(pins.index(''), 1))
Qt::MessageBox.new(
    Qt::MessageBox::Warning,
    'Empty pin',
    'Empty pin value detected'
  ).exec
  return false
end

#check_mapping_value(item) ⇒ Object



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/class/Signal_mapper.rb', line 30

def check_mapping_value(item)
  if item.column == 1
    item.setText(item.text.upcase)
    reg = Qt::RegExp.new("^[A-H]{1}[0-7]${1}")
    reg_val = Qt::RegExpValidator.new(reg, self)
    if reg_val.validate(item.text, item.text.length) == Qt::Validator::Invalid || item.text.nil?
      item.setText('')
      Qt::MessageBox.new(
        Qt::MessageBox::Warning,
        'Wrong data',
        'Only values from A0 to H7 are accepted in this cell'
      ).exec
    end
  end
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end

#init_bus_listObject



24
25
26
27
28
# File 'lib/class/Signal_mapper.rb', line 24

def init_bus_list
  Bus.all.each do |b|
    @view.cbx_bus.addItem(b.name) unless b.name == "NA"
  end
end

#resize_to_contentObject



115
116
117
118
119
# File 'lib/class/Signal_mapper.rb', line 115

def resize_to_content
  @view.map_table.resizeColumnsToContents
  @view.map_table.resizeRowsToContents
  @view.map_table.horizontalHeader.stretchLastSection = true
end

#save_signal_mappingObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'lib/class/Signal_mapper.rb', line 66

def save_signal_mapping
  return 0 unless are_values_ok?
  @view.map_table.rowCount.times do |i|
    current_signal = Signall.find_by(name: @view.map_table.item(i, 0).text)
    if current_signal.name != @view.map_table.item(i, 1).text
      current_signal.update(pin: @view.map_table.item(i, 1).text)
    end
  end
  Qt::MessageBox.new(
    Qt::MessageBox::Information,
    'Save mapping',
    'Pin mapping saved successfuly'
  ).exec
  close
end

#update_map_table(bus_name) ⇒ Object



48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
# File 'lib/class/Signal_mapper.rb', line 48

def update_map_table(bus_name)
  unless bus_name == 'Bus...'
    @view.map_table.clearContents
    @view.map_table.setRowCount(0)
    Bus.find_by(name: bus_name).signalls.each do |s|
      @view.map_table.insertRow(@view.map_table.rowCount)
      signal_cell = Qt::TableWidgetItem.new(s.name)
      signal_cell.setFlags(Qt::ItemIsEnabled)
      @view.map_table.setItem(@view.map_table.rowCount - 1, 0, signal_cell)
      pin_cell = Qt::TableWidgetItem.new(s.pin)
      @view.map_table.setItem(@view.map_table.rowCount - 1, 1, pin_cell)
    end
    resize_to_content
  end
rescue Exception => msg
  ErrorMsg.new.unknown(msg)
end