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 :

[RCP] Updating Treeviewer


Sujet :

Eclipse Platform

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 20
    Par défaut [RCP] Updating Treeviewer
    Bonjour tout le monde,

    J'ai un problème et j'espère que vous pourrez m'aider.
    Je développe actuellement une application RCP ressemblant à ceci :
    - à gauche : une "View" affichant un arbre à partir d'objets métiers décrits plus bas.
    - à droite : une zone servant à afficher des "Editor".

    Dans mon arbre :
    - chaque noeud correspond à un objet java de type "Genre" qui possède une liste d'objet "Livre" en attribut.
    - chaque feuille correspond à un objet java de type "Livre" dont le noeud parent est le "Genre" qui lui correspond.

    Pour créer mon "Tree", j'ai donc utilisé un "TreeViewer". Il en résulte que chaque objet "Genre" est transformé en objet "TreeParent" et chaque objet "Livre" en "TreeObject"; tout cela pour représenter la hiérarchie de mes différents objets.

    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
     
    private TreeObject createModel() {
     
        root = new TreeParent("Bibliothèque");
     
        List<Genre> listeDesGenres = getAllGenres();
     
        for (Genre genre : listeDesGenres) {
            String nomDuGenre = genre.getName();
     
            TreeParent genreNode = new TreeParent(nomDuGenre);
     
            root.addChild(genreNode);
     
            List<Livre> listeDesLivres = genre.getAllLivres()
     
            for (Livre livre : listeDesLivres) {
                TreeObject livreNode = new TreeObject(livre.getName());
                genreNode.addChild(livreNode);
            }
        }
        return root;
    }
    Remarque : TreeParent hérite de TreeObject

    Mon TreeViewer utilise donc le "root" fourni par cette méthode comme input :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    treeViewer.setInput(createModel());
    La méthode getElements() de son ContentProvider renvoie ainsi tout les éléments à partir de "root" (en parcourant son arborescence).
    Le LabelProvider lui ne fait que renvoyer le nom des TreeObjects.

    Grâce à un éditeur "Editor" je peux créer de nouveaux "Livre" à un "Genre" particulier. Cela se traduit dans mon métier par l'ajout de ces nouveaux "Livre" dans la liste des livres de l'objet "Genre".
    Cependant mes nouveaux "Livre" une fois crées n'apparaissent pas dans mon arbre, il faut que je redémarre mon application pour cela.

    J'aimerais que mon arbre affiche automatiquement le nouveau livre crée dans mon arbre et au bon endroit.

    Pour cela, j'ai regardé du côté de "inputChanged" mais n'ai pas vraiment compris comment cela fonctionne.

    Quelqu'un pourrait il m'aider svp?

    Merci beaucoup.

  2. #2
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    bonjour orochimaru13

    essaye avec

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        treeViewer.refresh();
        treeViewer.getTree().update();
    Cordialement
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    20
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 20
    Par défaut
    Bonjour briand patrick,

    Je vous remercie pour voter réponse, malheureusement cela ne fonctionne pas .

    Peut être est ce du au fait que ma méthode "inputChanged" de mon ContentProvider est vide?
    Cependant je ne vois pas quoi mettre dedans.

  4. #4
    Membre émérite
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    511
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Eure (Haute Normandie)

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 511
    Par défaut
    Ma fonction inputChanged est vide, et quand je change le contenu de l'arbre, cela est visible immediatement.

    Comme toi j'ai trois classes :
    la classe générale

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
     
    public class FileSelectorView extends ViewPart {
     
      private TreeViewer treeViewer;
      private ConfigurationContainer configurationContainer;
      private RootTreeObject root;  
      public BasicTreeObject currentTreeObject = null;
     
      public FileSelectorView() {
        Activator.selectorView = this;
        configurationContainer = new ConfigurationContainer(ConfigurationContainer.NEW_FILE);
      }
     
      @Override
      public void createPartControl(Composite parent) {
        treeViewer = new TreeViewer(parent);
        treeViewer.setContentProvider(new FileSelectorProvider());
        treeViewer.setLabelProvider(new FileLabelProvider());
        treeViewer.setInput(updateFromConfigurationContainer());
        treeViewer.expandAll();
        treeViewer.getTree().addMouseListener(this);
      }
     
      public void newConfiguration() {
        configurationContainer = new ConfigurationContainer(ConfigurationContainer.NEW_FILE);
        treeViewer.setInput(updateFromConfigurationContainer());
      }
     
      public void refresh() {
        treeViewer.refresh();
        treeViewer.getTree().update();
      }
     
      private RootTreeObject updateFromConfigurationContainer() {
        root = configurationContainer.createTreeConfiguration();
        return root;
      }
     
      public RootTreeObject getRootElement() {
        return root;
      }
     
      public void setRootElement(RootTreeObject root) {
        this.root = root;
        treeViewer.setInput(root);
        refresh();
      }
     
      public void addNewProject() {
       InputDialog dlg = new InputDialog(Display.getCurrent().getActiveShell(), "Nom de projet","Donner le nom du projet", "projet", null);
       if (dlg.open() == InputDialog.OK) {
          ProjectTreeObject projectRoot = new ProjectTreeObject(dlg.getValue());
          root.add(projectRoot);
       }
      }
     
      public ConfigurationContainer getConfigurationContainer() {
        return configurationContainer;
      }
     
      @Override
      public void setFocus() {
        // Nothing to do here
      }
    }
    ma classe provider

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
    public class FileSelectorProvider implements ITreeContentProvider {
     
      public Object[] getChildren(Object parentElement) {
        if (parentElement instanceof BasicTreeObject) {
          BasicTreeObject treeObject = (BasicTreeObject) parentElement;
          return treeObject.getChildren();
        }
        return null;
      }
     
      public Object getParent(Object element) {
        // TODO Auto-generated method stub
        return null;
      }
     
      public boolean hasChildren(Object element) {
        if (element instanceof BasicTreeObject) {
          BasicTreeObject treeObject = (BasicTreeObject) element;
          return (treeObject.getChildren().length>0);
        }
        return false;
      }
     
      public Object[] getElements(Object inputElement) {
        if (inputElement instanceof BasicTreeObject) {
          BasicTreeObject treeObject = (BasicTreeObject) inputElement;
          return treeObject.getChildren();
        }
        return null;
      }
     
      public void dispose() {
        // TODO Auto-generated method stub
      }
     
      public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
        // TODO Auto-generated method stub
      }
     
    }
    A chaque fois que j'ajoute un élément dans l'arbre j'appelle alors ma méthode refresh().

    peut être que cela vient de ta structure de donnée de ton arbre !
    Page sur Developpez : http://pbriand.developpez.com

Discussions similaires

  1. [RCP] Problème avec Update Manager
    Par Robiwan59 dans le forum Eclipse Platform
    Réponses: 6
    Dernier message: 07/03/2007, 16h23
  2. [RCP] Treeviewer non thread-safe ?
    Par Guildux dans le forum Eclipse Platform
    Réponses: 4
    Dernier message: 09/01/2007, 13h00
  3. [RCP]TreeViewer getExpandedState ?
    Par Robiwan59 dans le forum Eclipse Platform
    Réponses: 3
    Dernier message: 25/10/2006, 14h27
  4. [RCP] Intégrer un update manager à une appli
    Par alexixlebaulois dans le forum Eclipse Platform
    Réponses: 2
    Dernier message: 20/01/2006, 11h15
  5. [RCP]IAdapterFactory pour peuplé treeviewer
    Par david06600 dans le forum Eclipse Java
    Réponses: 3
    Dernier message: 09/01/2006, 13h23

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