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;
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 {
private static Map<PropertyItem, PropertyManipulator> createManipulators(CompoundPropertyItem item, Object obj) {
try {
+ @SuppressWarnings("unchecked")
Map<String,Object> map = (Map<String, Object>)item.getter.invoke(obj);
Map<PropertyItem, PropertyManipulator> result = new HashMap<AnnotatedPropertyTabContributorFactory.PropertyItem, PropertyManipulator>();
for (String key : map.keySet()) {
return result;
} catch (Exception e) {
e.printStackTrace();
- return Collections.EMPTY_MAP;
+ return Collections.emptyMap();
}
}
private static interface IPropertyItem {
public String getTabId();
+ public String getName();
}
private static class PropertyItem implements IPropertyItem{
public String getTabId() {
return tabId;
}
+
+ @Override
+ public String getName() {
+ return name;
+ }
}
private static class CompoundPropertyItem implements IPropertyItem{
public String getTabId() {
return tabId;
}
+
+ @Override
+ public String getName() {
+ return name;
+ }
}
private static class AnnotatedPropertyTabContributor implements PropertyTabContributor {
private TableViewer viewer;
- private IG3DNode node;
+ private INode node;
private NodeMap<?,?,?> nodeMap;
private List<TableViewerColumn> valueColumns = new ArrayList<TableViewerColumn>();
}
});
- 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() {
@Override
public void setInput(ISessionContext context, ISelection selection,
boolean force) {
- Collection<IG3DNode> nodes = AdaptationUtils.adaptToCollection(selection, IG3DNode.class);
+ Collection<INode> nodes = AdaptationUtils.adaptToCollection(selection, INode.class);
if (nodes.size() != 1) {
if (node != null) {
node.removeListener(this);
}
return;
}
- IG3DNode n = nodes.iterator().next();
+ INode n = nodes.iterator().next();
if (node != null) {
if (!node.equals(n)) {
node.removeListener(this);
- 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;
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) {
}
}
+ 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<IPropertyItem>() {
+ @Override
+ public int compare(IPropertyItem o1, IPropertyItem o2) {
+ return o1.getName().compareTo(o2.getName());
+ }
+ });
viewer.getTable().setEnabled(!readOnly);
viewer.setInput(resolvedItems);
}
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) {
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()
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 });
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 });