Précédent   Forum du club des développeurs et IT Pro > Environnements de développement > Eclipse > Eclipse Platform
Eclipse Platform Développement de plugins Eclipse et d'applications Eclipse RCP (Rich Client Platform). Avant de poster -> Tutoriels sur le développement de plugins Eclipse
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/11/2012, 14h33   #1
asusx77vn
Invité de passage
 
Homme
Étudiant
Inscription : novembre 2012
Messages : 1
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Doubs (Franche Comté)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : novembre 2012
Messages : 1
Points : 0
Points : 0
Par défaut Mauvaise affichage dans un TreeViewer

Bonjour,

Je suis étudiant et nouveau avec la programmation Eclipse RCP et je rencontre un petit problème avec un logiciel que nous devons développer dans le cadre d'un projet.

Voilà, j'ai un gestionnaire de fichiers que je développe. Dans ce gestionnaire, je devrais pouvoir effacer un répertoire ou un fichier, les renommer, etc..

Mon problème est avec le renommage des fichiers. J'ai un menu contextuel où j'ai une option pour renommer un fichier ou un répertoire. Par la suite, j'ai mis en place, un EditingSupport où je peux éditer le nom des mes fichiers ou répertoires directement dans le TreeViewer, sans ouvrir un dialog box qui me demande le nouveau nom et ensuite aller renommer l'objet.

Avant de pouvoir mettre en place ce mécanisme de renommage directe, mon TreeViewer s'affichait correctement mais depuis, je ne vois que les noeuds parents et lorsque je fait défiler ces noeuds parents, je ne vois plus les noms.

Par exemple :

REPERTOIRE
---SUBREPERTOIRE
---SUBFICHIER

Le programme actuel n'affiche pas les noms des éléments SUBREPERTOIRE et SUBFICHIER. Je vois le petit icône pour pouvoir éclater SUBREPERTOIRE et lors de l'éclatement, je ne vois une fois de plus pas les noms des fichiers et répertoires que contient SUBREPERTOIRE.

Voici mon code source :
NavigationView.java
Code :
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
package test;
 
import java.awt.Color;
import java.io.File;
import java.util.ArrayList;
 
import org.eclipse.jface.action.MenuManager;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CellLabelProvider;
import org.eclipse.jface.viewers.ColumnLabelProvider;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.ITreeContentProvider;
import org.eclipse.jface.viewers.ITreeViewerListener;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.StyledCellLabelProvider;
import org.eclipse.jface.viewers.StyledString;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeExpansionEvent;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.TreeViewerEditor;
import org.eclipse.jface.viewers.TreeViewerFocusCellManager;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.viewers.ViewerCell;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.StyleRange;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.ProgressBar;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.part.ViewPart;
 
public class NavigationView extends ViewPart {
    public static final String ID = "Test.navigationView";
    private static TreeViewer viewer;
    private File racine;
    private TreeParent root;
    private Display display = PlatformUI.getWorkbench().getDisplay();
    private ProgressBar progressBar;
 
    public static TreeViewer getViewer(){
        return viewer;
    }
 
    class TreeObject {
        private String name;
        private TreeParent parent;
 
        public TreeObject(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }
        public void setParent(TreeParent parent) {
            this.parent = parent;
        }
        public TreeParent getParent() {
            return parent;
        }
        public String toString() {
            return getName();
        }
 
        public String getPath(){
            String retour = this.name;
            if (parent != null){
                retour = parent.getPath() + File.separator + retour;
            }
            return retour;
        }
 
        public String toString(String indent){
            String retour = "";
 
            retour += indent + this.name;
 
            return retour;
        }
    }
 
    class TreeParent extends TreeObject {
        private ArrayList<TreeObject> children;
        public TreeParent(String name) {
            super(name);
            children = new ArrayList<TreeObject>();
        }
        public void addChild(TreeObject child) {
            children.add(child);
            child.setParent(this);
        }
        public void removeChild(TreeObject child) {
            children.remove(child);
            child.setParent(null);
        }
 
        public void removeAllChild(){
            while (this.hasChildren()){
                removeChild(this.children.get(0));
            }
        }
        public TreeObject[] getChildren() {
            return (TreeObject[]) children.toArray(new TreeObject[children.size()]);
        }
        public boolean hasChildren() {
            return children.size()>0;
        }
 
        public String toString(String indent){
            String retour = "";
 
            retour += indent + super.name + "\n";
            for (Object to : children){
                 retour += ((TreeObject)to).toString(indent + " - ") + "\n";
            }
 
            return retour;
        }
    }
 
    class ViewContentProvider implements IStructuredContentProvider, 
                                           ITreeContentProvider {
 
        public void inputChanged(Viewer v, Object oldInput, Object newInput) {
        }
 
        public void dispose() {
        }
 
        public Object[] getElements(Object parent) {
            return getChildren(parent);
        }
 
        public Object getParent(Object child) {
            if (child instanceof TreeObject) {
                return ((TreeObject)child).getParent();
            }
            return null;
        }
 
        public Object[] getChildren(Object parent) {
            if (parent instanceof TreeParent) {
                return ((TreeParent)parent).getChildren();
            }
            return new Object[0];
        }
 
        public boolean hasChildren(Object parent) {
            if (parent instanceof TreeParent)
                return ((TreeParent)parent).hasChildren();
            return false;
        }
    }
 
    class ViewLabelProvider extends LabelProvider {
 
        public String getText(Object obj) {
            return obj.toString();
        }
        public Image getImage(Object obj) {
            String imageKey = ISharedImages.IMG_OBJ_ELEMENT;
            if (obj instanceof TreeParent)
               imageKey = ISharedImages.IMG_OBJ_FOLDER;
            return PlatformUI.getWorkbench().getSharedImages().getImage(imageKey);
        }
    }
 
    /**
     * We will set up a dummy model to initialize tree heararchy. In real
     * code, you will connect to a real model and expose its hierarchy.
     */
    private TreeObject createDummyModel() {
 
        racine = new File(File.separator);
        root = new TreeParent(File.separator);
 
        for (String filDir : racine.list()){
            File f = new File(File.separator + filDir);
            TreeObject to = null;
            if (f.isFile()){
                    to = new TreeObject(filDir);
            }else{
                if (f.isDirectory()){
                    File fTemp = new File(filDir);
 
                    TreeParent tp = new TreeParent(fTemp.getName());
                    if (f.list() != null){
                        tp.addChild(new TreeObject(""));
                    }
                    to = tp;
                }
            }
            if (to != null) root.addChild(to);
        }
        System.out.println(root.toString("-"));
        return root; 
    }
 
    public void exploreDirectory(String filDir, TreeParent tp){
 
        File f = new File(filDir);
        tp.removeAllChild();
 
        if (f.list() != null ){
            for (String filDirTemp : f.list()){
                File fTemp = new File(filDir + File.separator + filDirTemp);
                TreeObject to = null;
                if (fTemp.isFile()){
                    to = new TreeObject(filDirTemp);
                }else{
                    if (fTemp.isDirectory()){
                        to = new TreeParent(filDirTemp);
                        File fTemp2 = new File(filDir + File.separator + filDirTemp);
 
                        if (fTemp2.list() != null){
                            ((TreeParent)(to)).addChild(new TreeObject(""));
                        }
                    }
                }
                if (to != null) {
                    tp.addChild(to);
                }
            }
        }
    } 
 
    /**
     * This is a callback that will allow us to create the viewer and initialize
     * it.
     */
    public void createPartControl(Composite parent) {
        Shell shell = new Shell(display);
        shell.setLayout(new GridLayout());
 
        progressBar = new ProgressBar(shell, SWT.HORIZONTAL | SWT.SMOOTH);
        progressBar.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        progressBar.setMinimum(0);
        progressBar.setMaximum(30);
 
        viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER);
        viewer.setContentProvider(new ViewContentProvider());
        viewer.setLabelProvider(new ViewLabelProvider());
        createDummyModel();
        viewer.setInput(root);
 
        viewer.addTreeListener(new ITreeViewerListener() {
 
            @Override
            public void treeExpanded(TreeExpansionEvent event) {
                TreeParent tp = (TreeParent)event.getElement();
 
                exploreDirectory(tp.getPath(), tp);
 
                display.asyncExec(new Runnable(){
                       public void run(){
                          //LongRunningOperation lp = new LongRunningOperation(display, progressBar);
                          //lp.start();
                          viewer.refresh();
                       }
                });
            }
 
            @Override
            public void treeCollapsed(TreeExpansionEvent event) {}
        });
 
        TreeViewerFocusCellManager focusCellManager = new TreeViewerFocusCellManager(viewer,new FocusCellOwnerDrawHighlighter(viewer));
 
        ColumnViewerEditorActivationStrategy actSupport = new ColumnViewerEditorActivationStrategy(viewer) {
            protected boolean isEditorActivationEvent(ColumnViewerEditorActivationEvent event) {
                return event.eventType == ColumnViewerEditorActivationEvent.PROGRAMMATIC;
            }
        };
 
        TreeViewerEditor.create(viewer, focusCellManager, actSupport, ColumnViewerEditor.TABBING_HORIZONTAL
                | ColumnViewerEditor.TABBING_MOVE_TO_ROW_NEIGHBOR
                | ColumnViewerEditor.TABBING_VERTICAL | ColumnViewerEditor.KEYBOARD_ACTIVATION);
 
        final TextCellEditor textCellEditor = new TextCellEditor(viewer.getTree());
 
        TreeViewerColumn column = new TreeViewerColumn(viewer, SWT.NONE);
 
        column.getColumn().setWidth(200);
 
        column.setLabelProvider(new CellLabelProvider() {
 
            @Override
            public void update(ViewerCell cell) {
                System.out.println(cell.getElement().toString());
            }
        });
 
        column.setEditingSupport(new EditingSupport(viewer) {
 
            @Override
            protected void setValue(Object element, Object value) {
                File fich = new File(element.toString());
                System.out.println(fich.getAbsolutePath());
                System.out.println(value.toString());
                fich.renameTo(new File(value.toString()));
                viewer.update(element, null);
            }
 
            @Override
            protected Object getValue(Object element) {
                // TODO Auto-generated method stub
                //System.out.println(((TreeObject)element).getName().toString());
                return ((TreeObject)element).getName();
            }
 
            @Override
            protected CellEditor getCellEditor(Object element) {
                // TODO Auto-generated method stub
                return textCellEditor;
            }
 
            @Override
            protected boolean canEdit(Object element) {
                // TODO Auto-generated method stub
                return true;
            }
        });
 
        MenuManager menuMgr = new MenuManager("#PopupMenu");
        menuMgr.setRemoveAllWhenShown(true);
        Menu menu = menuMgr.createContextMenu(viewer.getControl());
 
        viewer.getControl().setMenu(menu);
        getSite().registerContextMenu(menuMgr, viewer);
 
        parent.update();
 
    }
 
    class LongRunningOperation extends Thread {
          private Display display;
 
          private ProgressBar progressBar;
 
          public LongRunningOperation(Display display, ProgressBar progressBar) {
            this.display = display;
            this.progressBar = progressBar;
          }
 
          public void run() {
              for (int i = 0; i < 30; i++) {
                  try {
                      Thread.sleep(1000);
                  } catch (InterruptedException e) {}
 
                  display.asyncExec(new Runnable() {
                      public void run() {
                          if (progressBar.isDisposed()) return;
                          progressBar.setSelection(progressBar.getSelection() + 1);
                      }
                  });
              }
          }
    }
 
    /**
     * Passing the focus request to the viewer's control.
     */
    public void setFocus() {
        viewer.getControl().setFocus();
    }
}
ManipFichier.java
Code :
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
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
package test;
 
import java.io.File;
 
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.ColumnViewerEditor;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationEvent;
import org.eclipse.jface.viewers.ColumnViewerEditorActivationStrategy;
import org.eclipse.jface.viewers.EditingSupport;
import org.eclipse.jface.viewers.FocusCellOwnerDrawHighlighter;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.TextCellEditor;
import org.eclipse.jface.viewers.TreeViewer;
import org.eclipse.jface.viewers.TreeViewerColumn;
import org.eclipse.jface.viewers.TreeViewerEditor;
import org.eclipse.jface.viewers.TreeViewerFocusCellManager;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IViewActionDelegate;
import org.eclipse.ui.IViewPart;
import org.eclipse.ui.PlatformUI;
import test.NavigationView.TreeObject;
import test.NavigationView.TreeParent;
 
public class ManipFichiers implements IViewActionDelegate{
    public ISelection mySelection;
    public Display display = PlatformUI.getWorkbench().getDisplay();
    public TreeViewer viewer;
 
    public ManipFichiers(){
        viewer = NavigationView.getViewer();
    }
 
    @Override
    public void run(IAction action) {
        TreeParent tp = ((TreeObject)((IStructuredSelection)mySelection).getFirstElement()).getParent();
        final String fichTemp = ((TreeObject)((IStructuredSelection)mySelection).getFirstElement()).getPath();
        NavigationView nv = new NavigationView();
        File fichier = new File(fichTemp);
 
        String actionEnCours = action.getId().toString();
 
        if (actionEnCours.compareTo("ActPst") == 0){
            System.out.println("Paste");
        }else if (actionEnCours.compareTo("ActCpy") == 0){
            System.out.println("Copy");
        }else if (actionEnCours.compareTo("ActCut") == 0){
            System.out.println("Cut");
        }else if (actionEnCours.compareTo("ActDel") == 0){
            System.out.println("Delete");
 
            deleteFileOrDirectory(fichier.toString());
 
            nv.exploreDirectory(tp.getPath(), tp);
 
            display.asyncExec(new Runnable(){
                   public void run(){
                      viewer.refresh();
                   }
            });
        }else if (actionEnCours.compareTo("ActRen") == 0){
            System.out.println("Rename");
            viewer.editElement(((IStructuredSelection) viewer.getSelection()).getFirstElement(), viewer.getColumnViewerEditor().getFocusCell().getColumnIndex());
        }
    }
 
    @Override
    public void selectionChanged(IAction action, ISelection selection) {
        mySelection = selection;
    }
 
    @Override
    public void init(IViewPart view) {}
 
    public void deleteFileOrDirectory(String fileName){
        File f = new File(fileName);
        f = f.getAbsoluteFile();
        f.setWritable(true);
 
        // Make sure the file or directory exists and isn't write protected
        if (!f.exists()) {
            throw new IllegalArgumentException("Suppression : Fichier inexistant " + fileName);
        }
 
        if (!f.canWrite()) {
            throw new IllegalArgumentException("Suppression : En lecture seule " + fileName);
        }
 
        // If it is a directory
        if (f.isDirectory()) {
            File[] files = f.listFiles();
            for (int i = 0; i < files.length; i++){
                if(files[i].isDirectory()) { 
                    deleteFileOrDirectory(files[i].toString()); 
                }else{ 
                    files[i].delete(); 
                } 
            }
        }
 
        f.delete();
    }
}
Et une capture d'écran du problème


Quelqu'un saurait-il m'aider à élucider ce problème ? Y a t-il un lien avec le fichier plugin.xml ?

Merci d'avance pour votre aide.
Images attachées
Type de fichier : png bug.png (140,5 Ko, 20 affichages)
asusx77vn est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/11/2012, 18h29   #2
Mickael_Istria
Membre émérite

 
Avatar de Mickael_Istria
 
Homme Mickael Istria
Développeur Expert Eclipse RCP
Inscription : juillet 2008
Messages : 482
Détails du profil
Informations personnelles :
Nom : Homme Mickael Istria
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : Développeur Expert Eclipse RCP
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juillet 2008
Messages : 482
Points : 910
Points : 910
Ca ressemble a un LabelProvider qui renvoie null ou "".
Mets un breakpoint sur ViewLabelProvider.getText, demarre en debug, et vois ce qu'il se passe.

Au passage, si tu ne manipules bel et bien des java.io.File derriere, ton modele de TreeObject est superflu. Le contentProvider pourrait renvoyer les File et implementer getParent et getChildren facilement.
__________________
Inscrivez-vous pour la premiere EclipseCon France, le 5 et 6 juin!

Read my blog about Eclipse | Follow me on twitter
My employer, JBoss, by RedHat
Mickael_Istria est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 07h53.


 
 
 
 
Partenaires

Hébergement Web