@Override
  public ArrayList<Class<? extends Player>> getProfiles() {
    ArrayList<Class<? extends Player>> a = new ArrayList<>();
    if (type == AUDIO) {
      PMS r = PMS.get();
      for (String engine : configuration.getEnginesAsList(r.getRegistry())) {
        switch (engine) {
          case MPlayerWebAudio.ID:
            a.add(MPlayerWebAudio.class);
            break;
          case VideoLanAudioStreaming.ID:
            a.add(VideoLanAudioStreaming.class);
            break;
        }
      }
    } else {
      PMS r = PMS.get();
      for (String engine : configuration.getEnginesAsList(r.getRegistry())) {
        switch (engine) {
          case FFmpegWebVideo.ID:
            a.add(FFmpegWebVideo.class);
            break;
          case MEncoderWebVideo.ID:
            a.add(MEncoderWebVideo.class);
            break;
          case VideoLanVideoStreaming.ID:
            a.add(VideoLanVideoStreaming.class);
            break;
          case MPlayerWebVideoDump.ID:
            a.add(MPlayerWebVideoDump.class);
            break;
        }
      }
    }

    return a;
  }
  public void addEngines() {
    ArrayList<Player> disPlayers = new ArrayList<Player>();
    ArrayList<Player> ordPlayers = new ArrayList<Player>();
    PMS r = PMS.get();

    for (String id : configuration.getEnginesAsList(r.getRegistry())) {
      // boolean matched = false;
      for (Player p : PlayerFactory.getAllPlayers()) {
        if (p.id().equals(id)) {
          ordPlayers.add(p);
          // matched = true;
        }
      }
    }

    for (Player p : PlayerFactory.getAllPlayers()) {
      if (!ordPlayers.contains(p)) {
        ordPlayers.add(p);
        disPlayers.add(p);
      }
    }

    for (Player p : ordPlayers) {
      TreeNodeSettings en = new TreeNodeSettings(p.name(), p, null);
      if (disPlayers.contains(p)) {
        en.setEnable(false);
      }
      JComponent jc = en.getConfigPanel();
      if (jc == null) {
        jc = buildEmpty();
      }
      jc.addComponentListener(
          new ComponentAdapter() {
            @Override
            public void componentShown(ComponentEvent e) {
              handleCardComponentChange(e.getComponent());
            }
          });
      tabbedPane.add(en.id(), jc);
      parent[p.purpose()].add(en);
    }

    for (int i = 0; i < tree.getRowCount(); i++) {
      tree.expandRow(i);
    }

    tree.setSelectionRow(0);
  }