docs: def mouse_click(self, widget, event=None):
          """Triggered when mouse click is pressed in the history tree. The method shows all scoped data for an execution
          step as tooltip or fold and unfold the tree by double-click and select respective state for double clicked
          element.
          """
          if event.type == Gdk.EventType._2BUTTON_PRESS and event.get_button()[1] == 1:
  
              (model, row) = self.history_tree.get_selection().get_selected()
              if row is not None:
                  histroy_item_path = self.history_tree_store.get_path(row)
                  histroy_item_iter = self.history_tree_store.get_iter(histroy_item_path)
                  # logger.info(history_item.state_reference)
                  # TODO generalize double-click folding and unfolding -> also used in states tree of state machine
                  if histroy_item_path is not None and self.history_tree_store.iter_n_children(histroy_item_iter):
                      if self.history_tree.row_expanded(histroy_item_path):
                          self.history_tree.collapse_row(histroy_item_path)
                      else:
                          self.history_tree.expand_to_path(histroy_item_path)
                  sm = self.get_history_item_for_tree_iter(histroy_item_iter).state_reference.get_state_machine()
                  if sm:
                      if sm.state_machine_id != self.model.selected_state_machine_id:
                          self.model.selected_state_machine_id = sm.state_machine_id
                  else:
                      logger.info("No state machine could be found for selected item's state reference and "
                                  "therefore no selection is performed.")
                      return
                  active_sm_m = self.model.get_selected_state_machine_model()
                  assert active_sm_m.state_machine is sm
                  state_path = self.get_history_item_for_tree_iter(histroy_item_iter).state_reference.get_path()
                  ref_state_m = active_sm_m.get_state_model_by_path(state_path)
                  if ref_state_m and active_sm_m:
                      active_sm_m.selection.set(ref_state_m)
  
              return True
  
          if event.type == Gdk.EventType.BUTTON_PRESS and event.get_button()[1] == 2:
              x = int(event.x)
              y = int(event.y)
              pthinfo = self.history_tree.get_path_at_pos(x, y)
              if pthinfo is not None:
                  path, col, cellx, celly = pthinfo
                  self.history_tree.grab_focus()
                  self.history_tree.set_cursor(path, col, 0)
                  self.open_selected_history_separately(None)
  
          if event.type == Gdk.EventType.BUTTON_PRESS and event.get_button()[1] == 3:
              x = int(event.x)
              y = int(event.y)
              time = event.time
              pthinfo = self.history_tree.get_path_at_pos(x, y)
              if pthinfo is not None:
                  path, col, cellx, celly = pthinfo
                  self.history_tree.grab_focus()
                  self.history_tree.set_cursor(path, col, 0)
  
                  popup_menu = Gtk.Menu()
  
                  model, row = self.history_tree.get_selection().get_selected()
                  history_item = model[row][self.HISTORY_ITEM_STORAGE_ID]
                  if not isinstance(history_item, ScopedDataItem) or history_item.scoped_data is None:
                      return
                  scoped_data = history_item.scoped_data
                  input_output_data = history_item.child_state_input_output_data
                  state_reference = history_item.state_reference
  
                  self.append_string_to_menu(popup_menu, "------------------------")
                  self.append_string_to_menu(popup_menu, "Scoped Data: ")
                  self.append_string_to_menu(popup_menu, "------------------------")
                  for key, data in scoped_data.items():
                      menu_item_string = "    %s (%s - %s):\t%s" % (
                          data.name.replace("_", "__"), key, data.value_type, data.value)
                      self.append_string_to_menu(popup_menu, menu_item_string)
  
                  if input_output_data:
                      if isinstance(history_item, CallItem):
                          self.append_string_to_menu(popup_menu, "------------------------")
                          self.append_string_to_menu(popup_menu, "Input Data:")
                          self.append_string_to_menu(popup_menu, "------------------------")
                      else:
                          self.append_string_to_menu(popup_menu, "------------------------")
                          self.append_string_to_menu(popup_menu, "Output Data:")
                          self.append_string_to_menu(popup_menu, "------------------------")
  
                      for key, data in input_output_data.items():
                          menu_item_string = "    %s :\t%s" % (key.replace("_", "__"), data)
                          self.append_string_to_menu(popup_menu, menu_item_string)
  
                  if state_reference:
                      if history_item.outcome:
                          self.append_string_to_menu(popup_menu, "------------------------")
                          final_outcome_menu_item_string = "Final outcome: " + str(history_item.outcome)
                          self.append_string_to_menu(popup_menu, final_outcome_menu_item_string)
                          self.append_string_to_menu(popup_menu, "------------------------")
  
                  popup_menu.show()
                  popup_menu.popup(None, None, None, None, event.get_button()[1], time)
  
              return True