/**
   * Gets all GUI automations
   *
   * @return An array with all GUI automations
   */
  public GUIAutomation[] getGUIAutomations() {

    TableModel model = configurationTable.getModel();
    int numberOfConfigurations = model.getRowCount();
    GUIAutomation[] guiAutomations = new GUIAutomation[numberOfConfigurations];

    // stop open edits
    if (configurationTable.isEditing()) {
      configurationTable.getCellEditor().stopCellEditing();
    }

    // build GUI automation objects
    for (int i = 0; i < numberOfConfigurations; i++) {

      ScaleableImageIcon image =
          (ScaleableImageIcon) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_IMAGE);

      // check for valid image
      String imagePath = null;
      if (image != null) {
        imagePath = image.getPath();
      }

      String type = (String) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_TYPE);
      String trigger = (String) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_TRIGGER);
      String midiSignature =
          (String) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_MIDI_SIGNATURE);
      long delay = (long) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_MIN_DELAY);
      float minSimilarity =
          (float) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_MIN_SIMILARITY);
      boolean isMovable =
          (boolean) model.getValueAt(i, ConfigurationTableModel.COLUMN_INDEX_MOVABLE);

      GUIAutomation guiAutomation =
          new GUIAutomation(
              imagePath, type, trigger, delay, midiSignature, minSimilarity, isMovable);
      guiAutomations[i] = guiAutomation;
    }

    return guiAutomations;
  }