286 lines
8.1 KiB
Markdown
286 lines
8.1 KiB
Markdown
# Dialogues et Notifications GUI
|
|
|
|
Ce module contient les dialogues de correction et les systèmes de notification pour RPA Vision V2.
|
|
|
|
## Composants
|
|
|
|
### 1. CorrectionDialog
|
|
|
|
Dialogue permettant à l'utilisateur de corriger une détection incorrecte en sélectionnant l'élément UI correct.
|
|
|
|
**Fonctionnalités:**
|
|
- Affichage de la détection incorrecte
|
|
- Liste de détections alternatives sélectionnables
|
|
- Saisie manuelle de correction
|
|
- Double-clic pour sélection rapide
|
|
|
|
**Utilisation:**
|
|
```python
|
|
from geniusia2.gui.dialogs import CorrectionDialog
|
|
|
|
# Détection incorrecte
|
|
incorrect = {
|
|
"label": "annuler_button",
|
|
"confidence": 0.75,
|
|
"bbox": (300, 400, 100, 35),
|
|
"action_type": "click"
|
|
}
|
|
|
|
# Alternatives disponibles
|
|
alternatives = [
|
|
{
|
|
"label": "valider_button",
|
|
"confidence": 0.92,
|
|
"bbox": (450, 400, 100, 35),
|
|
"action_type": "click"
|
|
},
|
|
# ... autres alternatives
|
|
]
|
|
|
|
# Afficher le dialogue
|
|
correction = CorrectionDialog.show_correction_dialog(
|
|
incorrect,
|
|
alternatives
|
|
)
|
|
|
|
if correction:
|
|
corrected_element = correction['corrected_element']
|
|
method = correction['correction_method'] # "alternative" ou "manual"
|
|
print(f"Correction: {corrected_element['label']} via {method}")
|
|
```
|
|
|
|
**Exigences satisfaites:** 2.5, 2.6
|
|
|
|
### 2. PostActionNotification
|
|
|
|
Notification post-action affichant le succès (✔️) ou l'échec (❌) d'une action avec possibilité de retour correctif.
|
|
|
|
**Fonctionnalités:**
|
|
- Affichage animé en haut à droite
|
|
- Timeout automatique de 5 secondes
|
|
- Barre de progression visuelle
|
|
- Bouton de correction pour les échecs
|
|
- Fermeture par clic
|
|
|
|
**Utilisation:**
|
|
```python
|
|
from geniusia2.gui.dialogs import PostActionNotification
|
|
|
|
# Notification de succès
|
|
notification = PostActionNotification.show_success(
|
|
action_type="click",
|
|
target_element="valider_button",
|
|
confidence=0.95
|
|
)
|
|
|
|
# Notification d'échec avec correction
|
|
def on_correction(data):
|
|
print(f"Correction demandée pour: {data}")
|
|
|
|
notification = PostActionNotification.show_failure(
|
|
action_type="click",
|
|
target_element="annuler_button",
|
|
error_message="Élément non trouvé à l'écran",
|
|
confidence=0.65,
|
|
allow_correction=True
|
|
)
|
|
notification.allow_corrective_feedback(on_correction)
|
|
|
|
# Écouter les retours
|
|
notification.feedback_provided.connect(
|
|
lambda result: print(f"Retour: {result}")
|
|
)
|
|
```
|
|
|
|
**Exigences satisfaites:** 3.4, 3.5, 3.6
|
|
|
|
### 3. TransitionNotification
|
|
|
|
Notifications pour les transitions de mode et alertes système.
|
|
|
|
**Types de notifications:**
|
|
- `TYPE_AUTOPILOT_PROPOSAL`: Proposition de passage en Autopilot
|
|
- `TYPE_CONFIDENCE_DROP`: Alerte de baisse de confiance
|
|
- `TYPE_WHITELIST_VIOLATION`: Violation de liste blanche
|
|
- `TYPE_UI_CHANGE`: Changement d'interface détecté
|
|
- `TYPE_MODE_TRANSITION`: Transition de mode
|
|
|
|
**Utilisation:**
|
|
```python
|
|
from geniusia2.gui.dialogs import TransitionNotification
|
|
|
|
# Proposition de passage en Autopilot
|
|
notification = TransitionNotification.show_autopilot_proposal(
|
|
task_name="Ouvrir Facture",
|
|
observation_count=25,
|
|
concordance_rate=0.97
|
|
)
|
|
notification.action_taken.connect(
|
|
lambda action: handle_autopilot_decision(action)
|
|
)
|
|
|
|
# Alerte de baisse de confiance
|
|
notification = TransitionNotification.show_confidence_drop(
|
|
task_name="Saisie Données",
|
|
confidence_score=0.85,
|
|
threshold=0.90,
|
|
reason="Changements UI détectés"
|
|
)
|
|
|
|
# Violation de liste blanche
|
|
notification = TransitionNotification.show_whitelist_violation(
|
|
window_title="Application Non Autorisée",
|
|
action_type="click"
|
|
)
|
|
notification.action_taken.connect(
|
|
lambda action: handle_whitelist_decision(action)
|
|
)
|
|
|
|
# Changement d'interface
|
|
notification = TransitionNotification.show_ui_change(
|
|
task_name="Navigation Menu",
|
|
similarity=0.65
|
|
)
|
|
notification.action_taken.connect(
|
|
lambda action: handle_ui_change(action)
|
|
)
|
|
|
|
# Transition de mode
|
|
notification = TransitionNotification.show_mode_transition(
|
|
task_name="Export Données",
|
|
from_mode="auto",
|
|
to_mode="assist",
|
|
reason="low_confidence"
|
|
)
|
|
```
|
|
|
|
**Exigences satisfaites:** 3.1, 4.5, 5.4, 6.2, 6.3, 6.5
|
|
|
|
## Intégration avec MinimalGUI
|
|
|
|
Les dialogues et notifications peuvent être intégrés dans l'interface principale:
|
|
|
|
```python
|
|
from geniusia2.gui.minimal_gui import MinimalGUI
|
|
from geniusia2.gui.dialogs import (
|
|
CorrectionDialog,
|
|
PostActionNotification,
|
|
TransitionNotification
|
|
)
|
|
|
|
class EnhancedGUI(MinimalGUI):
|
|
def __init__(self, orchestrator=None):
|
|
super().__init__(orchestrator)
|
|
|
|
def show_correction_dialog(self, incorrect, alternatives):
|
|
"""Afficher le dialogue de correction"""
|
|
correction = CorrectionDialog.show_correction_dialog(
|
|
incorrect,
|
|
alternatives,
|
|
parent=self
|
|
)
|
|
return correction
|
|
|
|
def show_action_result(self, action_result):
|
|
"""Afficher le résultat d'une action"""
|
|
if action_result['result'] == 'success':
|
|
notification = PostActionNotification.show_success(
|
|
action_result['action_type'],
|
|
action_result['target_element'],
|
|
action_result['confidence'],
|
|
parent=self
|
|
)
|
|
else:
|
|
notification = PostActionNotification.show_failure(
|
|
action_result['action_type'],
|
|
action_result['target_element'],
|
|
action_result.get('error_message', 'Erreur'),
|
|
action_result['confidence'],
|
|
parent=self
|
|
)
|
|
notification.correction_requested.connect(
|
|
self.handle_correction_request
|
|
)
|
|
|
|
def show_autopilot_proposal(self, task_name, obs_count, concordance):
|
|
"""Afficher proposition autopilot"""
|
|
notification = TransitionNotification.show_autopilot_proposal(
|
|
task_name,
|
|
obs_count,
|
|
concordance,
|
|
parent=self
|
|
)
|
|
notification.action_taken.connect(self.handle_autopilot_decision)
|
|
|
|
def handle_correction_request(self, data):
|
|
"""Gérer une demande de correction"""
|
|
# Implémenter la logique de correction
|
|
pass
|
|
|
|
def handle_autopilot_decision(self, action):
|
|
"""Gérer la décision autopilot"""
|
|
if action == "accept":
|
|
# Activer le mode autopilot
|
|
pass
|
|
elif action == "reject":
|
|
# Rester en mode assisté
|
|
pass
|
|
```
|
|
|
|
## Tests
|
|
|
|
Chaque module contient un bloc `if __name__ == "__main__"` avec des tests de démonstration.
|
|
|
|
Pour tester individuellement:
|
|
|
|
```bash
|
|
# Test du dialogue de correction
|
|
python geniusia2/gui/dialogs/correction_dialog.py
|
|
|
|
# Test des notifications post-action
|
|
python geniusia2/gui/dialogs/post_action_notification.py
|
|
|
|
# Test des notifications de transition
|
|
python geniusia2/gui/dialogs/transition_notification.py
|
|
```
|
|
|
|
## Architecture
|
|
|
|
```
|
|
gui/dialogs/
|
|
├── __init__.py # Exports des composants
|
|
├── correction_dialog.py # Dialogue de correction
|
|
├── post_action_notification.py # Notifications post-action
|
|
├── transition_notification.py # Notifications de transition
|
|
└── README.md # Cette documentation
|
|
```
|
|
|
|
## Dépendances
|
|
|
|
- PyQt5 (QWidget, QDialog, QLabel, QPushButton, etc.)
|
|
- numpy (pour les captures d'écran optionnelles)
|
|
- logging (pour la journalisation)
|
|
|
|
## Notes d'Implémentation
|
|
|
|
### Animations
|
|
Toutes les notifications utilisent des animations de glissement depuis la droite avec `QPropertyAnimation`.
|
|
|
|
### Timeouts
|
|
- PostActionNotification: 5 secondes par défaut
|
|
- TransitionNotification: 6-10 secondes selon le type
|
|
- Les notifications nécessitant une action n'ont pas de timeout
|
|
|
|
### Signaux PyQt5
|
|
Tous les composants utilisent des signaux pour la communication asynchrone:
|
|
- `correction_made`: Émis quand une correction est effectuée
|
|
- `feedback_provided`: Émis quand un retour est fourni
|
|
- `action_taken`: Émis quand une action utilisateur est prise
|
|
|
|
### Style
|
|
Les couleurs et styles sont cohérents avec Material Design:
|
|
- Vert (#4CAF50): Succès, validation
|
|
- Rouge (#f44336): Échec, erreur
|
|
- Orange (#FF9800): Avertissement
|
|
- Bleu (#2196F3): Information
|