# 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