/** * Return the unsorted intersection of all the <code>IPropertyDescriptor</code>s for the objects. * * @return List */ private List computeMergedPropertyDescriptors() { if (values.length == 0) { return new ArrayList(0); } IPropertySource firstSource = getPropertySource(values[0]); if (firstSource == null) { return new ArrayList(0); } if (values.length == 1) { return Arrays.asList(firstSource.getPropertyDescriptors()); } // get all descriptors from each object Map[] propertyDescriptorMaps = new Map[values.length]; for (int i = 0; i < values.length; i++) { Object object = values[i]; IPropertySource source = getPropertySource(object); if (source == null) { // if one of the selected items is not a property source // then we show no properties return new ArrayList(0); } // get the property descriptors keyed by id propertyDescriptorMaps[i] = computePropertyDescriptorsFor(source); } // intersect Map intersection = propertyDescriptorMaps[0]; for (int i = 1; i < propertyDescriptorMaps.length; i++) { // get the current ids Object[] ids = intersection.keySet().toArray(); for (int j = 0; j < ids.length; j++) { Object object = propertyDescriptorMaps[i].get(ids[j]); if (object == null || // see if the descriptors (which have the same id) are // compatible !((IPropertyDescriptor) intersection.get(ids[j])) .isCompatibleWith((IPropertyDescriptor) object)) { intersection.remove(ids[j]); } } } // sorting is handled in the PropertySheetViewer, return unsorted (in // the original order) ArrayList result = new ArrayList(intersection.size()); IPropertyDescriptor[] firstDescs = firstSource.getPropertyDescriptors(); for (int i = 0; i < firstDescs.length; i++) { IPropertyDescriptor desc = firstDescs[i]; if (intersection.containsKey(desc.getId())) { result.add(desc); } } return result; }
public void createControls(Composite parent, TabbedPropertySheetPage tabbedPropertySheetPage) { super.createControls(parent, tabbedPropertySheetPage); parent.setLayout(new GridLayout(2, false)); IPropertyDescriptor pd = getPropertyDesriptor(JRDesignGenericElement.PROPERTY_EVALUATION_TIME); IPropertyDescriptor gpd = getPropertyDesriptor(JRDesignGenericElement.PROPERTY_EVALUATION_GROUP_NAME); getWidgetFactory().createCLabel(parent, pd.getDisplayName()); widgets.put(pd.getId(), new SPEvaluationTime(parent, this, pd, gpd)); createWidget4Property(parent, MGenericElement.PROPERTY_NAME); createWidget4Property(parent, MGenericElement.PROPERTY_NAMESPACE); }
public void resetPropertyValue() { if (parent == null) // root does not have a default value return; // Use our parent's values to reset our values. boolean change = false; Object[] objects = parent.getValues(); for (int i = 0; i < objects.length; i++) { IPropertySource source = getPropertySource(objects[i]); if (source.isPropertySet(descriptor.getId())) { source.resetPropertyValue(descriptor.getId()); change = true; } } if (change) refreshValues(); }
/* * (non-Javadoc) Method declared on IPropertySheetEntry. */ public Image getImage() { ILabelProvider provider = descriptor.getLabelProvider(); if (provider == null) { return null; } return provider.getImage(editValue); }
/** * Update our value objects. We ask our parent for the property values based on our descriptor. */ private void refreshValues() { // get our parent's value objects Object[] sources = parent.getValues(); // loop through the objects getting our property value from each Object[] newValues = new Object[sources.length]; for (int i = 0; i < sources.length; i++) { IPropertySource source = parent.getPropertySource(sources[i]); newValues[i] = source.getPropertyValue(descriptor.getId()); } // set our new values setValues(newValues); } /* (non-Javadoc)
/** * Update our child entries. This implementation tries to reuse child entries if possible (if the * id of the new descriptor matches the descriptor id of the old entry). */ private void refreshChildEntries() { if (childEntries == null) // no children to refresh return; // get the current descriptors List descriptors = computeMergedPropertyDescriptors(); // cache old entries by their descriptor id Map entryCache = new HashMap(childEntries.length * 2 + 1); for (int i = 0; i < childEntries.length; i++) { entryCache.put(childEntries[i].getDescriptor().getId(), childEntries[i]); } // create a list of entries to dispose List entriesToDispose = new ArrayList(Arrays.asList(childEntries)); // rebuild child entries using old when possible childEntries = new PropertySheetEntry[descriptors.size()]; boolean entriesChanged = descriptors.size() != entryCache.size(); for (int i = 0; i < descriptors.size(); i++) { IPropertyDescriptor d = (IPropertyDescriptor) descriptors.get(i); // see if we have an entry matching this descriptor PropertySheetEntry entry = (PropertySheetEntry) entryCache.get(d.getId()); if (entry != null) { // reuse old entry entry.setDescriptor(d); entriesToDispose.remove(entry); } else { // create new entry entry = new PropertySheetEntry(); entry.setDescriptor(d); entry.setParent(this); entry.setPropertySourceProvider(propertySourceProvider); entriesChanged = true; } entry.refreshValues(); childEntries[i] = entry; } if (entriesChanged) fireChildEntriesChanged(); // Dispose of entries which are no longer needed for (int i = 0; i < entriesToDispose.size(); i++) { ((IPropertySheetEntry) entriesToDispose.get(i)).dispose(); } }
/* * (non-Javadoc) Method declared on IPropertySheetEntry. */ public String getValueAsString() { if (editValue == null) { return ""; //$NON-NLS-1$ } ILabelProvider provider = descriptor.getLabelProvider(); if (provider == null) { return editValue.toString(); } String text = provider.getText(editValue); if (text == null) { return ""; //$NON-NLS-1$ } return text; }
/* * (non-Javadoc) * * @see * org.eclipse.ui.views.properties.IPropertySheetEntry#getEditor(org.eclipse * .swt.widgets.Composite) */ public CellEditor getEditor(Composite parent) { if (editor == null || editor.getControl().isDisposed()) { editor = descriptor.createPropertyEditor(parent); if (editor != null) { editor.addListener(cellEditorListener); } } // && !eq(editor.getValue(), editValue) if (editor != null) { editor.setValue(editValue); } return editor; }
public CellEditor getEditor(Composite parent) { if (editor == null) { editor = descriptor.createPropertyEditor(parent); if (editor != null) { editor.addListener(cellEditorListener); } } if (editor != null) { editor.setValue(editValue); setErrorText(editor.getErrorMessage()); } return editor; }
@Override public CellEditor createPropertyEditor(Composite parent) { return mDelegate.createPropertyEditor(parent); }
@Override public String getCategory() { return mDelegate.getCategory(); }
/* * (non-Javadoc) Method declared on IPropertySheetEntry. */ public String getDisplayName() { return descriptor.getDisplayName(); }
public PropertyDescriptorWrapper(IPropertyDescriptor delegate) { super(delegate.getId(), delegate.getDisplayName()); mDelegate = delegate; }
/** * Return the sorted intersection of all the <code>IPropertyDescriptor</code>s for the objects. */ private List computeMergedPropertyDescriptors() { if (values.length == 0) return new ArrayList(0); // get all descriptors from each object Map[] propertyDescriptorMaps = new Map[values.length]; for (int i = 0; i < values.length; i++) { Object object = values[i]; IPropertySource source = getPropertySource(object); if (source == null) { // if one of the selected items is not a property source // then we show no properties return new ArrayList(0); } // get the property descriptors keyed by id propertyDescriptorMaps[i] = computePropertyDescriptorsFor(source); } // intersect Map intersection = propertyDescriptorMaps[0]; for (int i = 1; i < propertyDescriptorMaps.length; i++) { // get the current ids Object[] ids = intersection.keySet().toArray(); for (int j = 0; j < ids.length; j++) { Object object = propertyDescriptorMaps[i].get(ids[j]); if (object == null || // see if the descriptors (which have the same id) are compatible !((IPropertyDescriptor) intersection.get(ids[j])) .isCompatibleWith((IPropertyDescriptor) object)) intersection.remove(ids[j]); } } // Sort the descriptors List descriptors = new ArrayList(intersection.values()); Collections.sort( descriptors, new Comparator() { Collator coll = Collator.getInstance(Locale.getDefault()); public int compare(Object a, Object b) { IPropertyDescriptor d1, d2; String dname1, dname2; d1 = (IPropertyDescriptor) a; dname1 = d1.getDisplayName(); d2 = (IPropertyDescriptor) b; dname2 = d2.getDisplayName(); return coll.compare(dname1, dname2); } }); IPropertyDescriptor idDescriptor = null; for (Iterator iter = descriptors.iterator(); iter.hasNext(); ) { IPropertyDescriptor element = (IPropertyDescriptor) iter.next(); String id = (String) element.getId(); if ("id".equals(id)) { idDescriptor = element; break; } if ("name".equals(id)) { idDescriptor = element; break; } if ("property".equals(id)) { idDescriptor = element; break; } } if (idDescriptor != null) { descriptors.remove(idDescriptor); descriptors.add(0, idDescriptor); } return descriptors; }
/* * (non-Javadoc) Method declared on IPropertySheetEntry. */ public String getFilters()[] { return descriptor.getFilterFlags(); }
public Object getHelpContextIds() { return descriptor.getHelpContextIds(); } /* (non-Javadoc)
@Override public String[] getFilterFlags() { return mDelegate.getFilterFlags(); }
@Override public ILabelProvider getLabelProvider() { return mDelegate.getLabelProvider(); }
@Override protected void createColumns() { int bounds = 100; int column = 0; clearColumns(); List list = propertySources; if (list.isEmpty() && exemplar != null) { list = new ArrayList(); list.add(exemplar); } boolean usePropertySourceProviderIfItHasNicerRenderers = false; if (usePropertySourceProviderIfItHasNicerRenderers) { SortedMap<String, TableViewerColumn> headers = new TreeMap<String, TableViewerColumn>(); for (Object object : list) { final IPropertySource propertySource = PropertySources.asPropertySource(object); IPropertyDescriptor[] descriptors = propertySource.getPropertyDescriptors(); if (descriptors != null) { for (final IPropertyDescriptor descriptor : descriptors) { final Object id = descriptor.getId(); String header = PropertyDescriptors.getReadablePropertyName(descriptor); TableViewerColumn col = headers.get(header); if (col == null) { col = createTableViewerColumn(header, bounds, column++); headers.put(header, col); IPropertySourceProvider propertySourceProvider = new IPropertySourceProvider() { @Override public IPropertySource getPropertySource(Object object) { return PropertySources.asPropertySource(object); } }; col.setLabelProvider(new PropertyColumnLabelProvider(propertySourceProvider, id)); } } } } } else { SortedMap<String, Function1> headers = new TreeMap<String, Function1>(); for (Object object : list) { final IPropertySource propertySource = PropertySources.asPropertySource(object); IPropertyDescriptor[] descriptors = propertySource.getPropertyDescriptors(); if (descriptors != null) { for (final IPropertyDescriptor descriptor : descriptors) { final Object id = descriptor.getId(); String name = PropertyDescriptors.getReadablePropertyName(descriptor); Function1 function = new Function1WithReturnType() { @Override public Object apply(Object object) { IPropertySource property = PropertySources.asPropertySource(object); if (property != null) { return property.getPropertyValue(id); } return null; } @Override public Class<?> getReturnType() { return PropertyDescriptors.getPropertyType(descriptor); } }; headers.put(name, function); } } } int idx = 0; boolean pickedSortColumn = false; Set<Entry<String, Function1>> entrySet = headers.entrySet(); for (Entry<String, Function1> entry : entrySet) { String header = entry.getKey(); if (!pickedSortColumn && isDefaultSortColumn(header)) { setDefaultSortColumnIndex(idx); pickedSortColumn = true; } Function1 function = entry.getValue(); addFunction(function); TableViewerColumn col = createTableViewerColumn(header, bounds, column++); col.setLabelProvider(createColumnLabelProvider(header, function)); idx++; } } }
public String getDisplayName() { return descriptor.getDisplayName(); } /* (non-Javadoc)
public String getDescription() { return descriptor.getDescription(); }
public String getCategory() { return descriptor.getCategory(); } /* (non-Javadoc)
@Override public String getDescription() { return mDelegate.getDescription(); }
public String getValueAsString() { if (editValue == null) return ""; // $NON-NLS-1$ ILabelProvider provider = descriptor.getLabelProvider(); if (provider == null) return editValue.toString(); return provider.getText(editValue); }
@Override public String getDisplayName() { return mDelegate.getDisplayName(); }
/* * (non-Javadoc) Method declared on IPropertySheetEntry. */ public Object getHelpContextIds() { return descriptor.getHelpContextIds(); }
@Override public Object getId() { return mDelegate.getId(); }
public ReadonlyPropertyController(IPropertyDescriptor propertyDescriptor) { super(propertyDescriptor, propertyDescriptor.getId()); }
@Override public boolean isCompatibleWith(IPropertyDescriptor anotherProperty) { return mDelegate.isCompatibleWith(anotherProperty); }
public String getFilters()[] { return descriptor.getFilterFlags(); } /* (non-Javadoc)