From 64d53fb8d9e34551450d1442efb14e8c60293f9b Mon Sep 17 00:00:00 2001 From: Oleg Krasilnikov Date: Tue, 13 Mar 2007 10:59:37 +0000 Subject: [PATCH] functionality update --- .../cdt/ui/newui/StructureTreeTab.java | 374 +++++++++--------- 1 file changed, 183 insertions(+), 191 deletions(-) diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StructureTreeTab.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StructureTreeTab.java index 6785a4bd459..39aef39ce13 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StructureTreeTab.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/ui/newui/StructureTreeTab.java @@ -10,9 +10,9 @@ *******************************************************************************/ package org.eclipse.cdt.ui.newui; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; import java.net.URI; +import java.util.Iterator; +import java.util.Map; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; @@ -24,6 +24,8 @@ import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourceAttributes; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; @@ -33,6 +35,9 @@ import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Control; +import org.eclipse.swt.widgets.Label; +import org.eclipse.swt.widgets.Spinner; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; @@ -56,6 +61,7 @@ import org.eclipse.cdt.core.settings.model.extension.CFolderData; import org.eclipse.cdt.core.settings.model.extension.CLanguageData; import org.eclipse.cdt.core.settings.model.extension.CResourceData; import org.eclipse.cdt.core.settings.model.extension.CTargetPlatformData; +import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.internal.ui.CPluginImages; @@ -69,22 +75,50 @@ import org.eclipse.cdt.internal.ui.CPluginImages; * 1. All strings in the file remain unlocalized * since they represent method names. * 2. It is experimental functionality. Work is in progress. - * 3. Tree depth is limited by 12. Deeper branches are truncated. - * In future, more flexible mechanism will be applied instead. - * 4. Tree creation process is long enough now. To be optimized. + * 3. Tree depth is limited by 16. Deeper branches are truncated. + * But it seems to be very rare situation. */ public class StructureTreeTab extends AbstractCPropertyTab { - private static final Class[] NOCLASS = new Class[0]; + protected class LevelDialog extends Dialog { + Spinner sp; + + protected LevelDialog() { + super(CUIPlugin.getActiveWorkbenchShell()); + } + + protected Control createDialogArea(Composite parent) { + Composite c = new Composite(parent, 0); + c.setLayoutData(new GridData(GridData.FILL_BOTH)); + c.setLayout(new GridLayout(2, false)); + Label l = new Label(c, 0); + l.setText("Level : "); + c.setLayoutData(new GridData(GridData.BEGINNING)); + sp = new Spinner(c, SWT.BORDER); + sp.setMaximum(NESTING_MAX); + sp.setMinimum(0); + sp.setSelection(currentLevel); + sp.addSelectionListener(new SelectionAdapter () { + public void widgetSelected(SelectionEvent e) { + currentLevel = sp.getSelection(); + } + }); + return c; + } + } + private static final String BL = "["; //$NON-NLS-1$ + private static final String BR = "]"; //$NON-NLS-1$ + private static final int BUTTON_SIZE = 200; private static final Image IMG = CPluginImages.get(CPluginImages.IMG_OBJS_REFACTORING_ERROR); - private static final String LB = "["; - private static final int NESTING_MAX = 12; - private static final int NESTING_CFG = 2; - private static final String RB = "]"; - + private static final int NESTING_CFG = 5; + private static final int NESTING_MAX = 16; +// private static final Class[] NOCLASS = new Class[0]; + private int currentLevel = 4; // default + private int minCnt = 20; protected Button r_cfg; protected Button r_prj; protected Button r_res; + protected Tree tree; private boolean check(TreeItem ti, Object obj) { @@ -100,15 +134,6 @@ public class StructureTreeTab extends AbstractCPropertyTab { return false; } - private int getDepth(TreeItem ti) { - int x = 0; - while (ti != null) { - ti = ti.getParentItem(); - x++; - } - return x; - } - private TreeItem create(TreeItem ti0, String text, boolean val) { TreeItem t = create(ti0, text, String.valueOf(val)); t.setText(2, EMPTY_STR); @@ -148,11 +173,13 @@ public class StructureTreeTab extends AbstractCPropertyTab { }}); Button b1 = new Button(usercomp, SWT.PUSH); - b1.setLayoutData(new GridData(GridData.END)); + GridData gd = new GridData(GridData.END); + gd.widthHint = BUTTON_SIZE; + b1.setLayoutData(gd); b1.setText("Expand all"); b1.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - expandAll(tree.getItem(0), true); + expandAll(tree.getItem(0), true, -1); }}); r_cfg = new Button(usercomp, SWT.RADIO); @@ -164,10 +191,16 @@ public class StructureTreeTab extends AbstractCPropertyTab { }}); Button b2 = new Button(usercomp, SWT.PUSH); - b2.setLayoutData(new GridData(GridData.END)); + gd = new GridData(GridData.END); + gd.widthHint = BUTTON_SIZE; + b2.setLayoutData(gd); b2.setText("Expand level..."); b2.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { + LevelDialog ld = new LevelDialog(); + if (ld.open() == Window.OK) { + expandAll(tree.getItem(0), true, 0); + } }}); r_res = new Button(usercomp, SWT.RADIO); @@ -179,15 +212,17 @@ public class StructureTreeTab extends AbstractCPropertyTab { }}); Button b3 = new Button(usercomp, SWT.PUSH); - b3.setLayoutData(new GridData(GridData.END)); + gd = new GridData(GridData.END); + gd.widthHint = BUTTON_SIZE; + b3.setLayoutData(gd); b3.setText("Collapse all"); b3.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { - expandAll(tree.getItem(0), false); + expandAll(tree.getItem(0), false, -1); }}); tree = new Tree(usercomp, SWT.BORDER); - GridData gd = new GridData(GridData.FILL_BOTH); + gd = new GridData(GridData.FILL_BOTH); gd.horizontalSpan = 2; tree.setLayoutData(gd); @@ -212,98 +247,61 @@ public class StructureTreeTab extends AbstractCPropertyTab { } private TreeItem createObj(TreeItem ti0, String text, Object obj) { - String s = EMPTY_STR; - if (obj != null) try { - Class c = obj.getClass(); - Method m = c.getMethod("getName", NOCLASS); - s = (String)m.invoke(obj, null); - } catch (NoSuchMethodException e) {} - catch(IllegalAccessException e) {} - catch(IllegalArgumentException e) {} - catch(InvocationTargetException e) {} - catch(ClassCastException e) {} - - TreeItem t = create(ti0, text, s); +// String s = EMPTY_STR; +// if (obj != null) try { +// Class c = obj.getClass(); +// Method m = c.getMethod("getName", NOCLASS); +// s = (String)m.invoke(obj, null); +// } catch (NoSuchMethodException e) {} +// catch(IllegalAccessException e) {} +// catch(IllegalArgumentException e) {} +// catch(InvocationTargetException e) {} +// catch(ClassCastException e) {} +// + TreeItem t = create(ti0, text, EMPTY_STR); if (obj != null) t.setText(2, obj.getClass().getName()); return t; } - private void expand(TreeItem ti0, String text, CLanguageData[] lds) { - TreeItem ti = create(ti0, text, lds == null ? 0 : lds.length); - if (!check(ti, lds)) return; - for (int i=0; i NESTING_CFG) return ti; expand(ti, "getChildSettings()", c.getChildSettings()); return ti; - } - + } + private TreeItem update(TreeItem ti0, String text, ICSettingObject obj) { TreeItem ti = createObj(ti0, text, obj); if (!check(ti, obj)) return ti; - if (obj instanceof ICTargetPlatformSetting) { + if (obj instanceof ICTargetPlatformSetting) expand(ti, "getBinaryParserIds()", ((ICTargetPlatformSetting)obj).getBinaryParserIds()); -// update(ti, "getParent()", obj.getParent()); -// } else { // do not expand configuration descr to avoid dead loop - } - createObj(ti, "getParent()", obj.getParent()); update(ti, "getConfiguration()", obj.getConfiguration()); create(ti, "getId()", obj.getId()); create(ti, "getName()", obj.getName()); + createObj(ti, "getParent()", obj.getParent()); create(ti, "getType()", obj.getType()); create(ti,"isReadOnly()", obj.isReadOnly()); create(ti,"isValid()",obj.isValid()); return ti; - } + } + private TreeItem update(TreeItem ti0, String text, ICTargetPlatformSetting obj) { TreeItem ti = createObj(ti0, text, obj); if (!check(ti, obj)) return ti; @@ -616,8 +594,8 @@ public class StructureTreeTab extends AbstractCPropertyTab { create(ti,"isReadOnly()", obj.isReadOnly()); create(ti,"isValid()",obj.isValid()); return ti; - } - + } + private TreeItem update(TreeItem ti0, String text, IPath p) { TreeItem ti = createObj(ti0, text, p); if (!check(ti, p)) return ti; @@ -635,7 +613,6 @@ public class StructureTreeTab extends AbstractCPropertyTab { create(ti, "toPortableString()", p.toPortableString()); return ti; } - private TreeItem update(TreeItem ti0, String text, IProject prj) { TreeItem ti = createObj(ti0, text, prj); if (!check(ti, prj)) return ti; @@ -651,14 +628,14 @@ public class StructureTreeTab extends AbstractCPropertyTab { IProject[] ps = prj.getReferencedProjects(); TreeItem ti1 = create(ti, "getReferencedProjects()", ps == null ? 0 : ps.length); if (ps != null) - for (int i=0; i NESTING_CFG) return ti; + if (c instanceof IContainer) try { create(ti, "getDefaultCharset()", ((IContainer)c).getDefaultCharset()); @@ -710,12 +690,10 @@ public class StructureTreeTab extends AbstractCPropertyTab { } catch (CoreException e) {} return ti; } - + private TreeItem update(TreeItem ti0, String text, IWorkspace w) { TreeItem ti = createObj(ti0, text, w); if (!check(ti, w)) return ti; - // TODO: - w.getDanglingReferences(); update(ti, "getDescription()", w.getDescription()); expand(ti, "getNatureDescriptors()", w.getNatureDescriptors()); createObj(ti, "getPathVariableManager()", w.getPathVariableManager()); @@ -739,6 +717,26 @@ public class StructureTreeTab extends AbstractCPropertyTab { return ti; } + /* + * Default method to display unknown classes + */ + private TreeItem update(TreeItem ti0, String text, Object ob) { + TreeItem ti = createObj(ti0, BL+text+BR, ob); + check(ti, ob); + return ti; + } + + private TreeItem update(TreeItem ti0, String text, Map m) { + TreeItem ti = createObj(ti0, text, m); + if (!check(ti, m)) return ti; + Iterator it = m.keySet().iterator(); + while (it.hasNext()) { + String s = (String)it.next(); + create(ti, s + " =", (String)m.get(s)); + } + return ti; + } + private TreeItem update(TreeItem ti0, String text, ResourceAttributes ra) { TreeItem ti = createObj(ti0, text, ra); if (!check(ti, ra)) return ti; @@ -758,6 +756,7 @@ public class StructureTreeTab extends AbstractCPropertyTab { create(ti, "getPath()", uri.getPath()); create(ti, "getPort()", uri.getPort()); create(ti, "getQuery()", uri.getQuery()); +/* create(ti, "getRawAuthority()", uri.getRawAuthority()); create(ti, "getRawFragment()", uri.getRawFragment()); create(ti, "getRawHost()", uri.getRawHost()); @@ -765,20 +764,13 @@ public class StructureTreeTab extends AbstractCPropertyTab { create(ti, "getRawQuery()", uri.getRawQuery()); create(ti, "getRawSchemeSpecificPart()", uri.getRawSchemeSpecificPart()); create(ti, "getRawUserInfo()", uri.getRawUserInfo()); +*/ create(ti, "isAbsolute()", uri.isAbsolute()); create(ti, "isOpaque()", uri.isOpaque()); create(ti, "toASCIIString()", uri.toASCIIString()); - create(ti, "uri.toIRIString()", uri.toIRIString()); +// create(ti, "uri.toIRIString()", uri.toIRIString()); return ti; } - - private void expandAll(TreeItem ti, boolean b) { - ti.setExpanded(b); - TreeItem[] tis = ti.getItems(); - if (tis == null) return; - for (int i=0; i