diff --git a/scenes/frame-ecm-list/scroll-ecm-list.gd b/scenes/frame-ecm-list/scroll-ecm-list.gd index 39933aae..56b92fa2 100644 --- a/scenes/frame-ecm-list/scroll-ecm-list.gd +++ b/scenes/frame-ecm-list/scroll-ecm-list.gd @@ -42,6 +42,16 @@ const INTERFER_NAMES = { 'elrs': 'ЕЛРС' } +var SIGNALS_CONNECTIONS = [ + [signaller, 'interfer_new', 'on_interfer_new'], + [signaller, 'interfer_off', 'on_interfer_off'], + [signaller, 'rto_threat_unsel', 'on_rto_threat_unsel'], + [signaller, 'rto_threat_sel', 'on_rto_threat_sel'], + [interfer, 'interfer_update', 'on_interfer_update'], + [interfer, 'interfer_recommendate', 'on_interfer_recommendate'], + [interfer, 'interfer_resized', 'on_interfer_resized'] ] + + ## Индексы колонок const COLUMN_NUMBER = 0 const COLUMN_NAME = 1 @@ -52,8 +62,10 @@ const TABLE_TEXT_ROWS = 4 var course = 0.0 ## Курс корабля var color_emit: Color +var signal_conections: Array +var ecms: Dictionary ## Словарь с помехами -func on_rto_threat_unsel(_th_id): $table.clear_rows_selected() +func on_rto_threat_unsel(_th_id, _tbl_index): $table.clear_rows_selected() ## Вызывается при нажатии указателем мыши на выбранный ряд. @@ -86,17 +98,20 @@ func on_rto_threat_sel(th_id: int, table_index): # Called when the node enters the scene tree for the first time. func _ready(): var table_index: = Dictionary() - signaller.connect('interfer_new', Callable(self, 'on_interfer_new').bind(table_index)) - signaller.connect('interfer_off', Callable(self, 'on_interfer_off').bind(table_index)) - signaller.connect('rto_threat_unsel', Callable(self, 'on_rto_threat_unsel')) - signaller.connect('rto_threat_sel', Callable(self, 'on_rto_threat_sel').bind(table_index)) - interfer.connect('interfer_update', Callable(self, 'on_interfer_update').bind(table_index)) - interfer.connect('interfer_recommendate', Callable(self, 'on_interfer_recommendate')) + for item in SIGNALS_CONNECTIONS: + item.append(table_index) $table.connect('row_pressed', Callable(self, 'on_row_pressed')) call_deferred('init_table') var unit_nav = network.get_unit_instance('навигация') unit_nav.connect('data_received', on_navi_data_received) ProjectSettings.connect('settings_changed', on_settings_changed) + signaller.connect('режим_работа', connect_all) + signaller.connect('режим_контроль', disconnect_all) + signaller.connect('режим_журнал', disconnect_all) + signaller.connect('режим_эмс', disconnect_all) + signaller.connect('режим_эмс2', disconnect_all) + signaller.connect('режим_настройки', disconnect_all) + connect_all() func init_table(): @@ -180,7 +195,7 @@ func map_th_to_row(ecm) -> Array: return row -func on_interfer_recommendate(ecm): +func on_interfer_recommendate(ecm, _tbl_index): var sel_rows: Array $table.get_selected_rows(sel_rows) if not len(sel_rows): return @@ -207,3 +222,32 @@ func disable_edit(tbl, num_col: int, i_row: int): for col in num_col: var node: LineEdit = tbl.get_node2(col, i_row) node.editable = false + + +func connect_all() -> void: + signal_conections.clear() + var table_index = SIGNALS_CONNECTIONS[0][3] + for item in SIGNALS_CONNECTIONS: + var proc = Callable(self, item[2]).bind(item[3]) + var rc = item[0].connect(item[1], proc) + if rc == Error.OK: + signal_conections.append([item[0], item[1], proc]) + else: + var ers = error_string(rc) + push_error('%s: %s %s %s' % [ers, item[0], item[1], item[2]]) + signaller.emit_signal('connect_work_signal') + for ecm in ecms.values(): + on_interfer_new(ecm, table_index) + + +func disconnect_all() -> void: + var table_index = SIGNALS_CONNECTIONS[0][3] + for item in signal_conections: + item[0].disconnect(item[1], item[2]) + signal_conections.clear() + $table.clear_rows() + table_index.clear() + + +func on_interfer_resized(ecms_dic: Dictionary, _tbl_index) -> void: + ecms = ecms_dic