s🤘ag, un système de présentation libre en QML
L’objectif de ce projet est de réaliser un outil permettant de créer facilement des présentations (comme Powerpoint, Prezi ou Slide.io) en combinant des composants codés en QML.
Comme Swag n’est guère plus qu’un interpréteur de documents QML, les applications possibles ne sont pas limitées à la création de présentations.
Il y a déjà une foule de projets similaires, pourquoi en créer un de plus ?
Et bien… :
- parce-que c’est fun ! Swag est le genre de projet qui couvre pas mal de domaines différents : de la 3D au multimédia en passant par le rendu PDF…difficile de se lasser !
- parce-que c’est libre ! La plupart des solutions existantes un peu mature que je connais visent une captivité d’une manière ou d’un autre : que ce soit à cause des licences propriétaires ou du modèle SaaS. C’est pourquoi Swag est GPL, cela garantit que ses utilisateurs resteront libres de l’utiliser, l’étudier, le modifier et le redistribuer !
- parce-que le mouvement Low Tech importe (en tout cas m’importe) ! On utilise des services SaaS de plus en plus et à toutes les sauces alors que cette solution repose sur des datacenters très energivores et massivement producteurs de CO2. Je suis convaincu que ce modèle ne sera que transitoire car intenable et que nous évolueront vers d’autres modèles à court terme. Swag se veut donc une solution Desktop autonome et bien que certaines fonctions nécessiteront forcément de communiquer avec un serveur, elles resteront optionnelles et mesurées.
Historique du projet
Depuis plusieurs années, je suis emballé par les speakers qui utilisent leur propre systèmes de présentation.
Pour l’animation du Meetup Qt de Nantes, j’ai d’ailleurs souvent hésité à utiliser l’un des projets en Qt de système de présentation (comme par exemple l’excellent https://github.com/qt-labs/qml-presentation-system qui a ouvert la voie).
Très récemment lors du FOSDEM de février 2020 j’ai eu le plaisir d’assister à une présentation géniale de Christophe de Dinechin réalisée à partir de son système TAO lui-même écrit en XL, et cette fois-ci cela a fini par me décider à ce que mes prochaines présentations soient réalisées à partir d’un système similaire. Le premier besoin était très simple et classique : pouvoir créer un support de formation qui permettrait de montrer du code QML et de le rendre dynamiquement.
Suite à la pandémie du Covid-19 et au confinement décidé en mars, je me suis retrouvé sans activité et avec beaucoup de temps disponible à consacrer afin de réaliser une première version basique…
Travailler sur ce projet n’a fait que renforcer mon intuition qu’un tel outil pouvait permettre de révolutionner les présentations mais aussi servir à tout un tas d’autres applications !
Et pourquoi « Swag » ?
Déjà parce qu’en français le « swag » c’est plutôt cool.
J’ai aussi découvert que cela voulait dire « Sophisticated Wild Ass Guess » qui est une estimation à l’arrache mais basée sur l’expérience acquise…et je n’ai pas détesté la symbolique pragmatique.
On pourrait trouver un tas d’acronymes sympa autour de Swag :
- Serendipity Without A Glitch : « un heureux hasard sans pépin »
- Software With Awesome Generator : « un soft avec un générateur fabuleux »
- Some Would Argue Genius : « Certains diraient le génie… »
Comment ça marche ?
Depuis la page d’accueil, on peut créer un Swag ou ouvrir un document existant.
Pour le moment, un Swag est un répertoire contenant ses données, donc vous devrez sélectionner le répertoire parent ( il est possible que ce pont change rapidement).
Quand un Swag est ouvert, il est possible de créer un nouveau slide ou de cloner un slide existant à partir du tiroir affichant les vignettes.
Activer le mode Edit (avec Ctrl+D ou à partir du menu Edit) pour afficher la boite à outils (partie droite de l’écran) des types de composants que vous pouvez intégrer à votre slide : comme un texte, une image ou un graphique par exemple…

Lorsque le mode d’édition est activé, on peut voir les fonctions lorsque la souris survole un composant (repositionner l’élément, changer ses propriétés ou supprimer l’élément).
A n’importe quel moment, on peut déclencher le mode « Show code » pour voir comment la slide courante est conçue, modifier son code et la recharger instantanément.

Depuis les paramètres du document, il est enfin possible de sélectionner un des modes de présentations :
- Loader : une slide est affichée à la fois
- ListView : on peut swiper d’une slide à une autre
- FlatView : on navigue d’un élément à un autre avec des animations un peu à la Prezi.

La boîte à outils :
- un élément Text (limité à quelques propriétés basique pour le moment)
- a élément Code : montrer du code (avec une coloration syntaxique basée sur highlight.js) et pouvoir l’interpréter
- GotoButton : un bouton pour aller à une slide donnée
- Webview : un navigateur web
- Image
- Map : affiche une carte
- MCQ : un QCM où tous les choix peuvent être composés d’une image et/ou d’un texte.
- Chart : graphique
- Dataviz : datavisualisation, par exemple montrer un nuage de point
- Video : permet de lire une vidéo ou de montrer la camera
- Entity3D : permet de montrer un objet mesh en 3D
- PDF : un lecteur pdf
On peut voir ces éléments en action dans le swag « Gallery ».
Installation
Il est recommandé d’utiliser la dernière release de Qt( la 5.14.1 à la date de démarrage du projet).
- Faire un git clone du projet et initialiser les sous-modules
git clone https://github.com/a-team-fr/swag.git
git submodule update --init
- Ouvrir le projet avec QtCreator
- Compiler & exécuter
La feuille de route
Le projet est piloté en Kanban, la feuille de route est visible here.
Ce qui suit est une synthèse succincte et permet de montrer l’avancement.
Version 0.0.1 (sortie en April 2020)
Objectif : A draft with a limited feature set, incomplete and buggy.
Just good enough to show to experienced (and imaginative) developers what s🤘ag could become.
Principales fonctionnalités :
- [x] navigation et fonctions élémentaires (créer, ouvrir, fermer) une présentation ou un slide
- [x] un jeu limité d’éléments
- [x] quelques modes d’affichage
- [x] projet publié sur publish to github
- [ ] site internet swagsoftware.net (mais je galère bien avec WordPress)
- [ ] publié avec les binaires pour MacOs et Windows pour pouvoir utiliser Swag sans avoir à installer SDK de Qt – ce serait bien de pouvoir mettre en route l’IC de Github avec GitHub actions (toute aide serait la bienvenue)
Version 0.1
Objectif : Solution opérationnelle mais limitée aux cas d’usage des présentations.
Principales fonctionnalités :
- [ ] interface utilisateur sympa et UX sublimée (toute aide serait la bienvenue là encore !)
- [ ] export PDF et HTML (en cours)
- [ ] authentification, ouverture et sauvegarde sur swagsoftware.net
- [ ] mode présentateur (double écrans, commentaires, timer)
Version 1.0
Objectif :
Première version officielle qui tue 🙂
Principales fonctionnalités :
- [ ] version mobile (iOS & Android) disponible permettant d’intéragir avec une présentation en cours pour permettre des fonctions de sondages en temps réel
- [ ] export to mpeg
- [ ] sWaggies : des générateurs de swag pour des cas d’usage spécifique (par exemple généré des swags pour documenter des projets logiciel en parcourant le code et les commentaires Doxygen )
- [ ] transformer Swag en lecteur autonome avec le chemin d’un fichier en paramètre et un modèle de swag