IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Eclipse Platform Discussion :

Intercepter la fermeture d'une vue


Sujet :

Eclipse Platform

  1. #1
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut Intercepter la fermeture d'une vue
    Bonjour à tous,
    je souhaite intercepter la fermeture d'une vue de mon application, pour demander une confirmation (du style : "êtes vous sur de vouloir fermer cette vue ?")

    Pour cela, lors de la création de ma vue, j'ajoute un listener :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    protected void initPartListener() {
            // le listener est un attribut de la classe
            this.listener = new IPartListener2() {
                public void partClosed(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partDeactivated(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partActivated(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partBroughtToTop(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partHidden(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partInputChanged(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partOpened(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
                public void partVisible(IWorkbenchPartReference partRef) {
                    // TODO Auto-generated method stub
                }
            };
     
            getSite().getPage().addPartListener(this.listener);
        }
    J'ai mis des traces pour voir par où il passe, et lors de la fermeture d'une vue, il passe par :
    partDeactivated,
    partHidden et
    partClosed.

    Seulement, comment puis-je faire pour lui dire de ne mas fermer la vue ?
    Dans la fonction partDeactivated, j'ai l'impression qu'il est déjà trop tard ?

    Savez-vous comment faire ?
    D'avance merci,
    nako

  2. #2
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut
    Salut,

    Je ne sais pas comment faire sur une vue mais pour te donner une piste de recherche, je sais le faire sur un éditeur.

    Dans le doSave, on obtient un IProgressMonitor sur lequel on peut appeler la méthode setCanceled(true).

    Je sais que ça ne te donne pas la réponse mais si tu arrives à obtenir une instance de IProgressMonitor ou un dérivé sur ta vue, tu pourras empêcher la fermeture.

  3. #3
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut
    Bon, au final, j'ai une autre piste.

    Si ta vue implémente ISaveablePart, tu obtiendras la méthode doSave(IProgressMonitor).
    Tu forces isDirty et isSaveOnCloseNeeded à true.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    public class MaView extends ViewPart implements ISaveablePart{
             public void doSave(IProgressMonitor monitor) {
    		System.out.println("empeche la fermeture");
    		monitor.setCanceled(true);
     
    	}
     
    	public void doSaveAs() {
    		// TODO Auto-generated method stub
     
    	}
     
    	public boolean isDirty() {
    		return true;
    	}
     
    	public boolean isSaveAsAllowed() {
    		return false;
    	}
     
    	public boolean isSaveOnCloseNeeded() {
    		return true;
    	}
    }

  4. #4
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Merci Robiwan59 pour cette piste ...
    ... que je vais m'empresser de suivre.

    Je ne connaissais pas cette interface ! ISaveablePart : excellent. Ca pourrait bien résoudre mon problème.
    Je te tiens au courant.
    Merci,
    a+,
    nako

  5. #5
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut
    Normalement, c'est l'interface utilisée par les éditeurs.
    Il te reste à voir pour la boite de dialogue qui s'ouvre automatiquement.

  6. #6
    Membre habitué Avatar de Tazmanian Devil
    Profil pro
    Inscrit en
    Février 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Février 2007
    Messages : 119
    Points : 149
    Points
    149
    Par défaut
    Sinon tu met juste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    getSite().getPage().showView(ID_DE_TA_VUE);
    dans le partClosed de ton listener (tu peux bien sur poser la question aussi)

  7. #7
    Membre régulier
    Inscrit en
    Octobre 2005
    Messages
    103
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Octobre 2005
    Messages : 103
    Points : 81
    Points
    81
    Par défaut
    Alors Nako, où en es tu ?

  8. #8
    Membre éclairé Avatar de nako
    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2003
    Messages
    577
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2003
    Messages : 577
    Points : 663
    Points
    663
    Par défaut
    Et bien j'y suis presque !
    J'ai implémenté ISaveablePart, et j'ai découvert une deuxième interface : ISaveablePart2 : le retour !

    Du coup, j'ai plutôt implémenté celle là.
    J'ai encore quelques problèmes avec isDirty() ... qui si je comprend bien est la fonction qui permet de dire si la vue a été modifiée ou pas.
    Problème : cette fonction elle est appelée assez souvent, et je ne sais pas toujours par qui et pourquoi ...
    Du coup, je n'ai pas le comportement attendu.

Discussions similaires

  1. Associer des actions à la fermeture d'une vue
    Par JM12345 dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 05/08/2009, 15h01
  2. Réponses: 3
    Dernier message: 26/10/2007, 15h49
  3. intercepter la fermeture d'une vue
    Par gargantua dans le forum Eclipse Platform
    Réponses: 21
    Dernier message: 01/08/2007, 09h55
  4. [MFC] Intercepter la fermeture d'une CPropertySheet
    Par Philippe320 dans le forum MFC
    Réponses: 10
    Dernier message: 29/09/2006, 09h14

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo