# Chapitre 4 : Tutoriel : Créer sa première application (Calculatrice)

> ![Mockup de la calculatrice GrimOS](images/grimos_calculatrice.png)

Dans le chapitre précédent, nous avons vu que GrimOS ne possède pas de "bureau" au sens Unix du terme. Chaque fenêtre n'est en fait qu'un petit composant (un `Frame` Tkinter) dessiné à l'intérieur de l'application principale.

Maintenant que vous avez compris l'architecture de GrimOS (Chapitre 4) et que votre environnement de développement à distance est prêt (Chapitre 3), il est temps de mettre les mains dans le code ! 

Dans ce chapitre, nous allons créer ensemble une application de A à Z : une petite **Calculatrice**.

## 1. Créer le dossier de l'application

Toutes les applications de GrimOS vivent de manière indépendante dans le dossier `apps/`.
Pour commencer, créez un nouveau dossier nommé `calculatrice` dans ce répertoire.

> 💻 **Terminal :**
```bash
cd grimos_build/apps/
mkdir calculatrice
```

À l'intérieur de ce dossier, créez un fichier Python nommé obligatoirement `app.py`. C'est le point d'entrée que le moteur de GrimOS cherchera à lancer.

## 2. Le code minimal (Le contrat GrimOS)

Ouvrez le fichier `app.py`. Pour qu'une application soit reconnue par le système, elle **doit** posséder une fonction nommée `start(window, app_manager=None, **kwargs)`. 

L'argument `window` correspond au "panneau intérieur" de la fenêtre. C'est un simple cadre (Frame) Tkinter dans lequel nous avons le droit de dessiner.

Copiez le code suivant :

```python
import tkinter as tk
from tkinter import messagebox

def start(window, app_manager=None, **kwargs):
    # Changement de la couleur de fond du panneau
    window.configure(bg="#f0f0f0")
    
    # Titre de l'application
    titre = tk.Label(window, text="Calculatrice GrimOS", font=("Arial", 16, "bold"), bg="#f0f0f0")
    titre.pack(pady=10)
    
    # Un champ de texte pour taper le calcul
    entree = tk.Entry(window, font=("Arial", 14), width=20)
    entree.pack(pady=10)
    
    # Fonction qui sera appelée quand on clique sur le bouton
    def calculer():
        expression = entree.get()
        try:
            # Évaluation mathématique simple
            resultat = eval(expression)
            messagebox.showinfo("Résultat", f"Le résultat est : {resultat}")
        except Exception as e:
            messagebox.showerror("Erreur", "Calcul invalide !")
            
    # Le bouton d'action
    btn = tk.Button(window, text="Calculer", font=("Arial", 12), command=calculer)
    btn.pack(pady=10)
```

**Explications :**

1. Nous importons `tkinter` pour dessiner nos boutons et nos champs de texte.
2. Nous utilisons `window` comme "parent" pour tous nos composants (Label, Entry, Button). C'est ce qui permet à l'application d'être proprement contenue dans la fenêtre générée par GrimOS.
3. La fonction `eval()` est utilisée ici pour la simplicité de l'exemple afin de calculer mathématiquement le texte tapé par l'utilisateur.

## 3. Déclarer l'application au système

Si vous lancez GrimOS maintenant, votre application existe bien sur le disque dur, mais le système ne la connaît pas encore. Il faut l'inscrire dans le grand registre : le fichier `config/applications.json`.

Ouvrez ce fichier et ajoutez un nouveau bloc à la fin de la liste (n'oubliez pas la virgule après le bloc précédent !) :

```json
  {
    "name": "Calculatrice",
    "module": "apps.calculatrice.app",
    "icon": "icons/terminal.png",
    "category": "Bureautique"
  }
```

*Note : Pour l'icône, nous utilisons ici temporairement l'icône du terminal (`icons/terminal.png`). Vous pourrez par la suite ajouter votre propre fichier `calculatrice.png` dans le dossier `icons/`.*

## 4. Tester l'application

C'est l'heure de vérité. Relancez GrimOS (ou cliquez sur "Redémarrer GrimOS" dans le menu Démarrer si vous êtes déjà connecté).

1. Ouvrez le menu **Démarrer**.
2. Allez dans la catégorie **Bureautique**.
3. Cliquez sur **Calculatrice**.

Une magnifique fenêtre s'ouvre ! Vous pouvez la déplacer en cliquant sur sa barre de titre bleue, la redimensionner (si autorisé) et la fermer avec la croix rouge. Tout ce "simulacre de fenêtre" a été généré automatiquement par `core/window.py` sans que vous n'ayez eu à écrire une seule ligne de code pour le gérer.

Tapez `5 + 5 * 2` dans le champ et cliquez sur Calculer. Une petite fenêtre d'alerte s'ouvrira pour vous afficher le résultat : `15`.

## Conclusion

Félicitations, vous venez de créer votre première application native pour GrimOS ! 

L'architecture est volontairement d'une simplicité enfantine. Que vous vouliez développer un simple lecteur de musique, un jeu de démineur ou un outil de surveillance réseau, le principe sera exactement le même : un dossier dans `apps/`, une fonction `start()`, et une déclaration JSON. 

La seule limite est votre imagination et vos connaissances en Python !
