// Get row's index by a specified row object
  private int getRowIndexByObject(T object) {
    for (int row = 0; row < dataDisplay.getRowCount(); row++) {
      if (dataDisplay.getVisibleItems().get(row).equals(object)) {
        return row;
      }
    }

    return -1;
  }
  // Select a row with regarding a specified shift
  private void selectRow(int shift) {
    if (selectedSet.isEmpty() || dataDisplay == null) {
      return;
    }

    int shiftSelectedRow = lastSelectedRow + shift;
    int nextRow =
        shiftSelectedRow >= 0
            ? shiftSelectedRow % dataDisplay.getRowCount()
            : shiftSelectedRow + dataDisplay.getRowCount();

    if (disabledRows.contains(nextRow)) {
      selectRow(shift > 0 ? shift + 1 : shift - 1);
      return;
    }

    setSelected(dataDisplay.getVisibleItems().get(nextRow), true);
  }