Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
View | Details | Raw Unified | Return to bug 157430 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/wst/dtd/ui/views/contentoutline/DTDTreeContentProvider.java (-45 / +59 lines)
Lines 247-260 Link Here
247
			// System.out.println("node changed notified");
247
			// System.out.println("node changed notified");
248
			// System.out.println("selection before = " +
248
			// System.out.println("selection before = " +
249
			// ((StructuredViewer)view).getSelection());
249
			// ((StructuredViewer)view).getSelection());
250
			if (node instanceof AttributeList && isShowLogicalOrder()) {
250
			if (node instanceof AttributeList) {
251
				// in this case, we are showing attributes under the element.
251
				// attributes are shown under elements, refresh the element object instead
252
				// refresh the element object instead
253
				Iterator iter = node.getDTDFile().getNodes().iterator();
252
				Iterator iter = node.getDTDFile().getNodes().iterator();
254
				while (iter.hasNext()) {
253
				while (iter.hasNext()) {
255
					DTDNode currentNode = (DTDNode) iter.next();
254
					final DTDNode currentNode = (DTDNode) iter.next();
256
					if (currentNode.getName().equals(node.getName()) && currentNode instanceof Element) {
255
					if (currentNode.getName().equals(node.getName()) && currentNode instanceof Element) {
257
						((StructuredViewer) fViewer).refresh(currentNode, true);
256
						
257
						//refresh tree
258
						fViewer.getControl().getDisplay().asyncExec(new Runnable() {
259
							public void run() {
260
								((StructuredViewer) fViewer).refresh(currentNode, true);
261
							}
262
						});
258
					}
263
					}
259
				} // end of while ()
264
				} // end of while ()
260
			}
265
			}
Lines 315-359 Link Here
315
				oldSelectedNode = (DTDNode) firstObj;
320
				oldSelectedNode = (DTDNode) firstObj;
316
			}
321
			}
317
322
318
			final AbstractTreeViewer abstractTreeViewer = (AbstractTreeViewer) fViewer;
323
			this.updateTree(event);
319
			for (Iterator it = event.getNodes().iterator(); it.hasNext();) {
320
				Object node = it.next();
321
				final Object parent = getParent(node);
322
				// Bug 111100 - If it is a top level node (ie. parent is a
323
				// DTDFile),
324
				// insert the node directly to improve performance
325
				if (parent instanceof DTDFile) {
326
					Object[] objs = getChildren(parent);
327
					for (int i = 0; i < objs.length; i++) {
328
						if (objs[i] == node) {
329
							abstractTreeViewer.insert(parent, node, i);
330
							break;
331
						}
332
					}
333
				}
334
				// If the parent node is not a DTDFile, just refresh the
335
				// parent for now
336
				else if (parent != null) {
337
					fViewer.getControl().getDisplay().asyncExec(new Runnable() {
338
						public void run() {
339
							if (fViewer.getControl().isDisposed())
340
								return;
341
							abstractTreeViewer.refresh(parent, true);
342
						}
343
					});
344
				}
345
				// You should never reach this block, if you do, just refresh
346
				// the whole tree
347
				else {
348
					fViewer.getControl().getDisplay().asyncExec(new Runnable() {
349
						public void run() {
350
							if (fViewer.getControl().isDisposed())
351
								return;
352
							abstractTreeViewer.refresh(true);
353
						}
354
					});
355
				}
356
			}
357
324
358
			Iterator iter = event.getNodes().iterator();
325
			Iterator iter = event.getNodes().iterator();
359
			List newSelection = new ArrayList();
326
			List newSelection = new ArrayList();
Lines 379-385 Link Here
379
				abstractTreeViewer.remove(iter.next());
346
				abstractTreeViewer.remove(iter.next());
380
			}
347
			}
381
		}
348
		}
382
349
		
350
		this.updateTree(event);
383
	}
351
	}
384
352
385
	/**
353
	/**
Lines 395-398 Link Here
395
			logicalNodeLists = null;
363
			logicalNodeLists = null;
396
		}
364
		}
397
	}
365
	}
366
	
367
	/**
368
	 * <p>Used to update the tree after a node event such as a node added or removed.</p>
369
	 * @param event the {@link NodesEvent} that caused the tree to need updating
370
	 */
371
	private void updateTree(NodesEvent event) {
372
		final AbstractTreeViewer abstractTreeViewer = (AbstractTreeViewer) fViewer;
373
		for (Iterator it = event.getNodes().iterator(); it.hasNext();) {
374
			Object node = it.next();
375
			final Object parent = getParent(node);
376
			// Bug 111100 - If it is a top level node (ie. parent is a
377
			// DTDFile),
378
			// insert the node directly to improve performance
379
			if (parent instanceof DTDFile) {
380
				Object[] objs = getChildren(parent);
381
				for (int i = 0; i < objs.length; i++) {
382
					if (objs[i] == node) {
383
						abstractTreeViewer.insert(parent, node, i);
384
						break;
385
					}
386
				}
387
			}
388
			// If the parent node is not a DTDFile, just refresh the
389
			// parent for now
390
			else if (parent != null) {
391
				fViewer.getControl().getDisplay().asyncExec(new Runnable() {
392
					public void run() {
393
						if (fViewer.getControl().isDisposed())
394
							return;
395
						abstractTreeViewer.refresh(parent, true);
396
					}
397
				});
398
			}
399
			// You should never reach this block, if you do, just refresh
400
			// the whole tree
401
			else {
402
				fViewer.getControl().getDisplay().asyncExec(new Runnable() {
403
					public void run() {
404
						if (fViewer.getControl().isDisposed())
405
							return;
406
						abstractTreeViewer.refresh(true);
407
					}
408
				});
409
			}
410
		}
411
	}
398
}
412
}

Return to bug 157430