class TopLeftPanel(wx.Panel):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.app_data = AppData()
        self._input_matrix_enabled = False
        self._in_matrix_update_stage = 0

        self.modbus = ModbusConnectionThreadSingleton()
        self.modbus = self.modbus.thread_instance_get()

        self.input_matrix = InputArray(parent=self,
                                       title='Inputs mode toggle:',
                                       interface=INPUT_INTERFACE,
                                       dimension=(3, 5),
                                       col_titles=['1', '2', '3', '4', '5'],
                                       row_titles=['X1', 'X2', 'X3'])

        inner_panel_sizer = wx.BoxSizer(wx.VERTICAL)
        inner_panel_sizer.Add(self.input_matrix, 0, wx.ALL | wx.CENTER, 15)

        self.input_matrix.disable()
        self.app_data.iface_conn_handler_register(
            self._matrix_initial_data_setup)
        self.app_data.iface_output_handler_register(
            self._matrix_visibility_update)
        self.app_data.iface_input_handler_register(self._in_matrix_data_gather)

        self.SetSizer(inner_panel_sizer)

        for instance in self.input_matrix.instance_array:
            self.Bind(wx.EVT_CHECKBOX, self._checkbox_pressed_handle,
                      instance.cell_instance.checkbox)

    def _checkbox_pressed_handle(self, event):
        self.app_data.user_interaction = True

    def _matrix_initial_data_setup(self):
        for i in range(15):
            toggle = self.app_data.input_trigger_type_is_toggle_get(i)
            self.input_matrix.value_set_by_index(i, toggle)

    def _matrix_visibility_update(self):
        if self.modbus.is_connected:
            if self._input_matrix_enabled is False:
                self.input_matrix.enable()
                self._input_matrix_enabled = True
        else:
            if self._input_matrix_enabled is True:
                self.input_matrix.disable()
                self._input_matrix_enabled = False

    def _in_matrix_data_gather(self):
        val_list = []
        for in_id in range(15):
            value = self.input_matrix.value_get_by_index(in_id)
            val_list.append(value)

        self.app_data.input_trigger_type_is_toggle_set_mask(val_list)
class BtmLeftPanel(wx.Panel):

    def __init__(self, parent):

        # Basic Construction stuff
        super().__init__(parent)
        self.app_data = AppData()
        self._output_garbage_collector = 0
        self._input_matrix_enabled = False

        # Create modbus instance, to have access to its props
        instance = ModbusConnectionThreadSingleton()
        self.modbus = instance.thread_instance_get()

        # Create content for
        self.input_matrix = InputArray(parent=self, title='Associated inputs:',
                                       dimension=(3, 5),
                                       col_titles=['1', '2', '3', '4', '5'],
                                       row_titles=['X1', 'X2', 'X3'])

        self.inner_panel_sizer = wx.BoxSizer(wx.VERTICAL)
        self.inner_panel_sizer.Add(self.input_matrix, 0, wx.ALL | wx.ALIGN_CENTER, 10)
        self.SetSizer(self.inner_panel_sizer)

        self.input_matrix.disable()
        self.app_data.iface_output_handler_register(self._matrix_visibility_update)
        for instance in self.input_matrix.instance_array:
            self.Bind(wx.EVT_CHECKBOX, self._checkbox_pressed_handle, instance.cell_instance.checkbox)

    def _checkbox_pressed_handle(self, event):
        self.app_data.user_interaction = True

    def _matrix_visibility_update(self):
        if self.modbus.is_connected:
            if self._input_matrix_enabled is False:
                self.input_matrix.enable()
                self._input_matrix_enabled = True
        else:
            if self._input_matrix_enabled is True:
                self.input_matrix.disable()
                self._input_matrix_enabled = False