• Ceux qui ne sont pas allés voir de plus près la candidature peuvent se demander ce qui va être fait durant ce projet. En réalité, il y a beaucoup de petites améliorations possibles qui, regroupées, amélioreraient grandement l’ergonomie de Scribus. Pendant tout cet été, je vais me concentrer sur ce qui est #Undo/redo (ctrl-z si ça vous parle plus).
    Bien sur, je pourrais me contenter de mettre sur ce blog ce qui est fait et comment c’est réalisé mais je pense que toute la démarche pour arriver à la mise en place du Undo/Redo correspondant est intéressant et je vous passe le temps de recherche dans le code.

    Je vais prendre ici l’exemple du premier Undo/redo sur lequel j’ai travaillé. En réalité, j’ai fait ça la semaine dernière, avant l’annonce officielle de Google.

    Lorsque l’on #crée_une_forme, on peut ensuite double cliquer dessus pour voir apparaître une fenêtre « Points ». Dans cette fenêtre, il y a ,entre autres, des boutons pour faire tourner ou redimensionner la forme. Malheureusement, le Undo ne marche pas très bien (Heureusement pour moi, ça me fait du boulot :-)).
    Pour faire le undo, il faut 4 étapes ce qui remplit la file de undo qui est limitée plutôt rapidement. Donc c’est pas bon.
    La première idée a donc été de regrouper toutes ces actions en une seule. Mais en faisant des tests, je me suis rendu compte que certaines actions enregistrées en undo étaient en trop puisque la forme n’était pas à la même place à la fin du undo. Retour à la case départ ...
    Pour comprendre un peu mieux, j’ai cherché qu’est ce qui créait les undo. Finalement, j’ai répertorié deux actions sur les « PoLine » et un « moveItem ». Ces actions étaient donc en trop.
    Pour corriger ça, j’ai encapsulé toute la fonction (jusqu’au undo créé spécialement pour cette action) en désactivant le undo et en l’activant à la fin. Cette fois, tout fonctionne. Mais je me dit : « le undo doit être activé pour que la suite fonctionne or, je l’active à tous les coups juste avant en mettant la valeur de undoEnable sur true ». J’essaie donc de sauvegarder la valeur de undo au début de la fonction puis de mettre la valeur du « undoEnable » sur cette valeur à la fin de la fonction. Cette fois, ça ne marche plus ...
    En cherchant un peu, je comprends que si on met la valeur de « undoEnable » deux fois sur false, il faut le mettre deux fois sur true pour qu’il soit de nouveau activé. Je peux donc revenir à ma solution précédente.
    Au final, ce changement m’aura pris quelques heures pour trois pauvres petites lignes. Ça m’a au moins permis de comprendre certains principes utilisés dans le undo pour la suite. Il fallait bien commencer quelque part et heureusement que celui ci était plutôt facile.
    Merci d’avoir lu et n’hésitez pas à me dire si certains passages vous parraissent un peu flou.