J’ai recodé mon écouteur de vidéo afin qu’il soit plus propre. J’ai également recherché des solutions à mon problème d’arrêt de vidéo et d’espace dans les conteneurs. En testant, je me suis rendue compte d’une chose : les deux problèmes étaient liés à la même cause. En effet, lorsque je cliquais sur la première vidéo que je voulais échanger, elle venait bien se placer dans le container de focus, mais elle se stoppait, tandis que la vidéo qui était précédemment en focus continuait bien de tourner, mais elle ne se plaçait que dans la moitié droite du container. En relisant mon code, j’ai compris à quoi était probablement dû le problème : dans un premier temps, j’affectais la vidéo en focus à la sortie vidéo de celle qui venait d’être cliqué, et ensuite je déplaçais cette dernière dans le conteneur de focus. Il y avait donc un moment où les deux flux vidéo étaient joués dans le même container. C’était cela qui stoppait la première vidéo, et cela expliquait l’espace laissé vide dans son container par la suite.
Afin de résoudre le problème, il y a trois solutions : reloader le flux dans le container après l’échange (mais cela est un peu lourd), détruire le container vidéo de la vidéo sur laquelle on a cliqué avant de la recréer (mais cela est également un peu lourd et difficile à mettre en place) ou encore créer un composite invisible qui va servir de “pivot”. Cela signifie que l’on va affecter la vidéo sur laquelle on a cliqué à cette sortie vidéo (qui ne sera pas affiché), et ensuite seulement opérer l’échange, un peu à la manière dont on échange deux valeurs en lignes de code. Certes, cela force à créer un composite en plus, mais cela évite les temps d’attente de chargement de flux ainsi que la création et la destruction inutile d’objets.
Par ailleurs, Nicolas H. m’a expliqué que les différents flux vidéos auraient un nom, et qu’ils seraient donc classés par ordre alphabétique dans la liste des vidéos du bas. Échanger les flux n’est donc pas suffisant, il faut les trier. J’ai donc commencé à implémenter une classe représentant un ScrolledComposite de conteneurs vidéos.