X-Git-Url: https://gerrit.simantics.org/r/gitweb?a=blobdiff_plain;f=org.simantics.g3d%2Fsrc%2Forg%2Fsimantics%2Fg3d%2Fproperty%2FAnnotatedPropertyTabContributorFactory.java;h=7e3f85333bb88022ce5038e43670bdf0ab792346;hb=daa07327bd3222487742965d433ea2f041e5ae73;hp=e216e5e7ae558e672c47fade33c3dea82b920633;hpb=53d55c24c779745f188bdb18d32f71d20acb61b2;p=simantics%2F3d.git diff --git a/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java b/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java index e216e5e7..7e3f8533 100644 --- a/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java +++ b/org.simantics.g3d/src/org/simantics/g3d/property/AnnotatedPropertyTabContributorFactory.java @@ -18,6 +18,7 @@ import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; +import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.LinkedHashMap; @@ -81,7 +82,6 @@ import org.simantics.g3d.scenegraph.structural.IStructuralNode; import org.simantics.g3d.tools.AdaptationUtils; import org.simantics.selectionview.IPropertyTab; import org.simantics.selectionview.IPropertyTab2; -import org.simantics.utils.datastructures.Callback; import org.simantics.utils.datastructures.MapList; public class AnnotatedPropertyTabContributorFactory implements PropertyTabContributorFactory { @@ -216,6 +216,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri private static Map createManipulators(CompoundPropertyItem item, Object obj) { try { + @SuppressWarnings("unchecked") Map map = (Map)item.getter.invoke(obj); Map result = new HashMap(); for (String key : map.keySet()) { @@ -232,7 +233,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri return result; } catch (Exception e) { e.printStackTrace(); - return Collections.EMPTY_MAP; + return Collections.emptyMap(); } } @@ -250,6 +251,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri private static interface IPropertyItem { public String getTabId(); + public String getName(); } private static class PropertyItem implements IPropertyItem{ @@ -276,6 +278,11 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri public String getTabId() { return tabId; } + + @Override + public String getName() { + return name; + } } private static class CompoundPropertyItem implements IPropertyItem{ @@ -302,6 +309,11 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri public String getTabId() { return tabId; } + + @Override + public String getName() { + return name; + } } private static class AnnotatedPropertyTabContributor implements PropertyTabContributor { @@ -338,8 +350,8 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri private TableViewer viewer; - private IG3DNode node; - private NodeMap nodeMap; + private INode node; + private NodeMap nodeMap; private List valueColumns = new ArrayList(); @@ -389,27 +401,6 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri } }); - int valueCount = 0; - for (IPropertyItem item : contibutedItems) { - if (item instanceof PropertyItem) { - PropertyManipulator manipulator = createManipulator((PropertyItem)item, null); - if (manipulator == null) - continue; - if (valueCount < manipulator.getValueCount()) - valueCount = manipulator.getValueCount(); - } else if (item instanceof CompoundPropertyItem) { - if (valueCount < 1) - valueCount = 1; - } - } - for (int i = 0; i < valueCount; i++) { - TableViewerColumn value = new TableViewerColumn(viewer, SWT.LEFT); - //value.getColumn().setText("Value " + (i+1)); - value.getColumn().setText(""); - value.getColumn().setWidth(200); - valueColumns.add(value); - //value.setEditingSupport(new ) - } viewer.getTable().setHeaderVisible(true); viewer.getTable().setLinesVisible(true); viewer.addSelectionChangedListener(new ISelectionChangedListener() { @@ -547,7 +538,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri @Override public void setInput(ISessionContext context, ISelection selection, boolean force) { - Collection nodes = AdaptationUtils.adaptToCollection(selection, IG3DNode.class); + Collection nodes = AdaptationUtils.adaptToCollection(selection, INode.class); if (nodes.size() != 1) { if (node != null) { node.removeListener(this); @@ -555,7 +546,7 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri } return; } - IG3DNode n = nodes.iterator().next(); + INode n = nodes.iterator().next(); if (node != null) { if (!node.equals(n)) { node.removeListener(this); @@ -568,34 +559,25 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri - private void setInput(IG3DNode node) { + private void setInput(INode node) { this.node = node; this.node.addListener(this); // resolve nodemap - IG3DNode n = node; + INode n = node; while (true) { if (n == null) { nodeMap = null; break; } - if (n instanceof NodeMapProvider) { - nodeMap = ((NodeMapProvider) n).getNodeMap(); + if (n instanceof NodeMapProvider) { + nodeMap = ((NodeMapProvider) n).getNodeMap(); if (nodeMap != null) break; } n = (IG3DNode)n.getParent(); } boolean readOnly = (node instanceof IStructuralNode && ((IStructuralNode)node).isPartOfInstantiatedModel() && !((IStructuralNode)node).isInstantiatedModelRoot()); - // create label providers - PropertyValueLabelProvider2 p = new PropertyValueLabelProvider2(this); - int index = 0; - for (TableViewerColumn c : valueColumns) { - c.setLabelProvider(p); - if (!readOnly) { - PropertyEditingSupport support = new PropertyEditingSupport(this, viewer, index++, nodeMap); - c.setEditingSupport(support); - } - } + resolvedItems.clear(); manipulators.clear(); for (IPropertyItem item : contibutedItems) { @@ -613,6 +595,36 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri } } + int valueCount = 0; + for (PropertyManipulator manipulator : manipulators.values()) { + if (valueCount < manipulator.getValueCount()) + valueCount = manipulator.getValueCount(); + } + for (int i = 0; i < valueCount; i++) { + TableViewerColumn value = new TableViewerColumn(viewer, SWT.LEFT); + //value.getColumn().setText("Value " + (i+1)); + value.getColumn().setText(""); + value.getColumn().setWidth(200); + valueColumns.add(value); + //value.setEditingSupport(new ) + } + + // create label providers + PropertyValueLabelProvider2 p = new PropertyValueLabelProvider2(this); + int index = 0; + for (TableViewerColumn c : valueColumns) { + c.setLabelProvider(p); + if (!readOnly) { + PropertyEditingSupport support = new PropertyEditingSupport(this, viewer, index++, nodeMap); + c.setEditingSupport(support); + } + } + Collections.sort(resolvedItems, new Comparator() { + @Override + public int compare(IPropertyItem o1, IPropertyItem o2) { + return o1.getName().compareTo(o2.getName()); + } + }); viewer.getTable().setEnabled(!readOnly); viewer.setInput(resolvedItems); } @@ -733,11 +745,11 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri private static class PropertyEditingSupport extends EditingSupport { AnnotatedPropertyTab tab; int index; - NodeMap nodeMap; + NodeMap nodeMap; TableViewer viewer; CellEditor editor; - public PropertyEditingSupport(AnnotatedPropertyTab tab, TableViewer viewer, int index, NodeMap nodeMap) { + public PropertyEditingSupport(AnnotatedPropertyTab tab, TableViewer viewer, int index, NodeMap nodeMap) { super(viewer); this.tab = tab; this.index = index; @@ -969,9 +981,9 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri if (focusCellManager != null) { try { Method m = focusCellManager.getClass().getSuperclass() - .getDeclaredMethod("init", null); + .getDeclaredMethod("init"); m.setAccessible(true); - m.invoke(focusCellManager, null); + m.invoke(focusCellManager); } catch (SecurityException e) { e.printStackTrace(); } catch (IllegalArgumentException e) { @@ -1039,9 +1051,10 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri if (DEBUG)System.err.println("FOCUS CELL: " + focusCell); Method m = AbstractTableViewer.class.getDeclaredMethod( - "getSelectionFromWidget", null); + "getSelectionFromWidget"); m.setAccessible(true); - List l = (List) m.invoke(getViewer(), null); + @SuppressWarnings("rawtypes") + List l = (List) m.invoke(getViewer()); if (focusCellManager != null) { m = focusCellManager .getClass() @@ -1141,9 +1154,9 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri ViewerColumn column = (ViewerColumn) m.invoke(viewer, new Object[] { new Integer(columnIndex) }); m = ViewerColumn.class.getDeclaredMethod( - "getEditingSupport", null); + "getEditingSupport"); m.setAccessible(true); - EditingSupport es = (EditingSupport) m.invoke(column, null); + EditingSupport es = (EditingSupport) m.invoke(column); if (column != null && es != null) { m = EditingSupport.class.getDeclaredMethod("canEdit", new Class[] { Object.class }); @@ -1247,10 +1260,9 @@ public class AnnotatedPropertyTabContributorFactory implements PropertyTabContri m.setAccessible(true); ViewerColumn column = (ViewerColumn) m.invoke(viewer, new Object[] { new Integer(cell.getColumnIndex()) }); - m = ViewerColumn.class.getDeclaredMethod("getEditingSupport", - null); + m = ViewerColumn.class.getDeclaredMethod("getEditingSupport"); m.setAccessible(true); - EditingSupport es = (EditingSupport) m.invoke(column, null); + EditingSupport es = (EditingSupport) m.invoke(column); if (column != null && es != null) { m = EditingSupport.class.getDeclaredMethod("canEdit", new Class[] { Object.class });