1 11 package org.eclipse.debug.internal.ui.views.registers; 12 13 import org.eclipse.core.runtime.IPath; 14 import org.eclipse.core.runtime.Path; 15 import org.eclipse.debug.core.DebugException; 16 import org.eclipse.debug.core.model.IRegisterGroup; 17 import org.eclipse.debug.core.model.IVariable; 18 import org.eclipse.debug.internal.ui.views.AbstractViewerState; 19 import org.eclipse.debug.internal.ui.views.RemoteTreeViewer; 20 import org.eclipse.jface.viewers.ITreeContentProvider; 21 import org.eclipse.jface.viewers.TreeViewer; 22 import org.eclipse.swt.widgets.TreeItem; 23 24 28 public class RegistersViewerState extends AbstractViewerState { 29 30 public RegistersViewerState( TreeViewer viewer ) { 31 super( viewer ); 32 } 33 34 37 public IPath encodeElement( TreeItem item ) throws DebugException { 38 Object obj = item.getData(); 39 String name = ( obj instanceof IRegisterGroup ) ? 40 ((IRegisterGroup)obj).getName() : ((IVariable)obj).getName(); 41 IPath path = new Path( name ); 42 TreeItem parent = item.getParentItem(); 43 while( parent != null ) { 44 obj = parent.getData(); 45 name = ( obj instanceof IRegisterGroup ) ? 46 ((IRegisterGroup)obj).getName() : ((IVariable)obj).getName(); 47 path = new Path( name ).append( path ); 48 parent = parent.getParentItem(); 49 } 50 return path; 51 } 52 53 56 public Object decodePath( IPath path, TreeViewer viewer ) throws DebugException { 57 ITreeContentProvider contentProvider = (ITreeContentProvider)viewer.getContentProvider(); 58 String [] names = path.segments(); 59 Object parent = viewer.getInput(); 60 Object element = null; 61 for( int i = 0; i < names.length; i++ ) { 62 element = null; 63 Object [] children = null; 64 if (viewer instanceof RemoteTreeViewer) { 65 children = ((RemoteTreeViewer) viewer).getCurrentChildren(parent); 66 } else { 67 children = contentProvider.getChildren(parent); 68 } 69 String name = names[i]; 70 for( int j = 0; j < children.length; j++ ) { 71 if ( children[j] instanceof IRegisterGroup ) { 72 if ( name.equals( ((IRegisterGroup)children[j]).getName() ) ) { 73 element = children[j]; 74 break; 75 } 76 } 77 else if ( children[j] instanceof IVariable ) { 78 if ( name.equals( ((IVariable)children[j]).getName() ) ) { 79 element = children[j]; 80 break; 81 } 82 } 83 } 84 if ( element == null ) { 85 return null; 86 } 87 parent = element; 88 } 89 return element; 90 } 91 } 92 | Popular Tags |