X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fui%2FSceneGraphDebugger.java;fp=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fui%2FSceneGraphDebugger.java;h=1eb4b311eac0a70712f644706a2151659492c0e2;hb=87b3241ec277ba3d8e414b26186a032c9cdcaeed;hp=0000000000000000000000000000000000000000;hpb=1f0bcd66274375f2278d2e6c486cb28257a5f7b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/ui/SceneGraphDebugger.java b/org.simantics.g3d/src/org/simantics/g3d/ui/SceneGraphDebugger.java new file mode 100644 index 00000000..1eb4b311 --- /dev/null +++ b/org.simantics.g3d/src/org/simantics/g3d/ui/SceneGraphDebugger.java @@ -0,0 +1,217 @@ +package org.simantics.g3d.ui; + +import org.eclipse.jface.layout.TreeColumnLayout; +import org.eclipse.jface.viewers.CellLabelProvider; +import org.eclipse.jface.viewers.ColumnWeightData; +import org.eclipse.jface.viewers.TreeViewer; +import org.eclipse.jface.viewers.TreeViewerColumn; +import org.eclipse.jface.viewers.ViewerCell; +import org.eclipse.swt.SWT; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.ui.IPartListener2; +import org.eclipse.ui.IPartService; +import org.eclipse.ui.IWorkbenchPage; +import org.eclipse.ui.IWorkbenchPart; +import org.eclipse.ui.IWorkbenchPartReference; +import org.eclipse.ui.IWorkbenchWindow; +import org.eclipse.ui.part.ViewPart; +import org.simantics.g3d.scenegraph.base.INode; +import org.simantics.objmap.graph.IMapping; +import org.simantics.objmap.structural.IStructuralObject; + +public class SceneGraphDebugger extends ViewPart { + + private TreeViewer viewer; + + private boolean linkToPart = true; + + IWorkbenchPart lastPart; + + private IMapping mapping; + + public SceneGraphDebugger() { + // TODO Auto-generated constructor stub + } + + @Override + public void createPartControl(Composite parent) { + + viewer = new TreeViewer(parent,SWT.SINGLE|SWT.FULL_SELECTION); + + TreeColumnLayout layout = new TreeColumnLayout(); + parent.setLayout(layout); + + viewer.setContentProvider(new ScenegraphOutlinePage.ScenegraphContentProvider()); + viewer.getTree().setHeaderVisible(true); + + TreeViewerColumn nameColumn = new TreeViewerColumn(viewer, SWT.LEFT); + nameColumn.setLabelProvider(new CellLabelProvider() { + + @Override + public void update(ViewerCell cell) { + cell.setText(cell.getElement().toString()); + } + }); + + TreeViewerColumn typeColumn = new TreeViewerColumn(viewer, SWT.LEFT); + typeColumn.setLabelProvider(new CellLabelProvider() { + + @Override + public void update(ViewerCell cell) { + cell.setText(cell.getElement().getClass().getSimpleName()); + } + }); + + TreeViewerColumn contextColumn = new TreeViewerColumn(viewer, SWT.LEFT); + contextColumn.setLabelProvider(new CellLabelProvider() { + + @Override + public void update(ViewerCell cell) { + if (!(cell.getElement() instanceof IStructuralObject)) + cell.setText("N/A"); + else { + IStructuralObject o = (IStructuralObject)cell.getElement(); + if (o.getContext() != null) { + cell.setText(o.getContext().toString()); + } else { + cell.setText("none"); + } + + } + + } + }); + + TreeViewerColumn mappingColumn = new TreeViewerColumn(viewer, SWT.LEFT); + mappingColumn.setLabelProvider(new CellLabelProvider() { + + @Override + public void update(ViewerCell cell) { + if (mapping == null) + cell.setText("N/A"); + else { + Object o = mapping.inverseGet(cell.getElement()); + if (o != null) { + cell.setText(o.toString()); + } else { + cell.setText("none"); + } + + } + + } + }); + + nameColumn.getColumn().setText("Name"); + typeColumn.getColumn().setText("Type"); + contextColumn.getColumn().setText("Context"); + mappingColumn.getColumn().setText("Mapping"); + + layout.setColumnData(nameColumn.getColumn(), new ColumnWeightData(10, true)); + layout.setColumnData(typeColumn.getColumn(), new ColumnWeightData(10, true)); + layout.setColumnData(contextColumn.getColumn(), new ColumnWeightData(10, true)); + layout.setColumnData(mappingColumn.getColumn(), new ColumnWeightData(10, true)); + + IPartService partService = (IPartService) getSite().getService(IPartService.class); + partService.addPartListener(partListener); + + } + + @Override + public void setFocus() { + viewer.getTree().setFocus(); + } + + protected void refresh() { + IWorkbenchPart part = null; + try { + IWorkbenchWindow window = getSite().getWorkbenchWindow(); + if (window == null) + return; + IWorkbenchPage page = window.getActivePage(); + if (page == null) + return; + part = page.getActiveEditor(); + if (part == null) + return; + } finally { + if (part == null) { + setContentDescription("No scene graph nodes available."); + // TODO: Show info page instead of tree view. + } + } + + refresh(part); + } + + @SuppressWarnings({ "unchecked", "rawtypes" }) + protected boolean refresh(IWorkbenchPart part) { + if (viewer.getTree().isDisposed()) { + IPartService partService = (IPartService) getSite().getService(IPartService.class); + partService.removePartListener(partListener); + return false; + } + boolean foundInput = false; + try { + Object obj = null; + if (part != null) { + obj = part.getAdapter(INode.class); + } + + if (obj != null) { + mapping = (IMapping)part.getAdapter(IMapping.class); + if (!viewer.getTree().isDisposed()) + viewer.setInput(obj); + foundInput = true; + } + lastPart = part; + return foundInput; + } finally { + if (!foundInput) { + setContentDescription("No scene graph nodes available."); + // TODO: Show info page instead of tree view. + } + } + } + + IPartListener2 partListener = new IPartListener2() { + @Override + public void partVisible(IWorkbenchPartReference partRef) { + } + @Override + public void partOpened(IWorkbenchPartReference partRef) { + } + @Override + public void partInputChanged(IWorkbenchPartReference partRef) { + } + @Override + public void partHidden(IWorkbenchPartReference partRef) { + } + @Override + public void partDeactivated(IWorkbenchPartReference partRef) { + } + @Override + public void partClosed(IWorkbenchPartReference partRef) { + if (linkToPart) { + IWorkbenchPart part = partRef.getPart(false); + if (part != null) + refresh(null); + } + } + @Override + public void partBroughtToTop(IWorkbenchPartReference partRef) { + } + @Override + public void partActivated(IWorkbenchPartReference partRef) { + if (linkToPart) { + IWorkbenchPart part = partRef.getPart(false); + if (part != null) { + if (part != lastPart) { + refresh(part); + } + } + } + } + }; + +}