📄 propertysheetviewerex.java
字号:
}
};
}
/**
* Creates a new tree item, sets the given entry or category (node)in
* its user data field, and adds a listener to the node if it is an entry.
*
* @param node
* the entry or category associated with this item
* @param parent
* the parent widget
* @param index
* indicates the position to insert the item into its parent
*/
private void createItem(Object node, Widget parent, int index) {
// create the item
TreeItem item;
if (parent instanceof TreeItem) {
item = new TreeItem((TreeItem) parent, SWT.NONE, index);
} else {
item = new TreeItem((Tree) parent, SWT.NONE, index);
}
// set the user data field
item.setData(node);
// add our listener
if (node instanceof IPropertySheetEntry) {
((IPropertySheetEntry) node)
.addPropertySheetEntryListener(entryListener);
}
// update the visual presentation
if (node instanceof IPropertySheetEntry) {
updateEntry((IPropertySheetEntry) node, item);
} else {
updateCategory((PropertySheetCategory) node, item);
}
}
/**
* Deactivate the currently active cell editor.
*/
/* package */
void deactivateCellEditor() {
treeEditor.setEditor(null, null, columnToEdit);
if (cellEditor != null) {
cellEditor.deactivate();
fireCellEditorDeactivated(cellEditor);
cellEditor.removeListener(editorListener);
cellEditor = null;
}
// clear any error message from the editor
setErrorMessage(null);
}
/**
* Sends out a selection changed event for the entry tree to all registered
* listeners.
*/
private void entrySelectionChanged() {
SelectionChangedEvent changeEvent = new SelectionChangedEvent(this,
getSelection());
fireSelectionChanged(changeEvent);
}
/**
* Return a tree item in the property sheet that has the same entry in
* its user data field as the supplied entry. Return <code>null</code> if
* there is no such item.
*
* @param entry
* the entry to serach for
* @return the TreeItem for the entry or <code>null</code> if
* there isn't one.
*/
private TreeItem findItem(IPropertySheetEntry entry) {
// Iterate through treeItems to find item
TreeItem[] items = tree.getItems();
for (int i = 0; i < items.length; i++) {
TreeItem item = items[i];
TreeItem findItem = findItem(entry, item);
if (findItem != null) {
return findItem;
}
}
return null;
}
/**
* Return a tree item in the property sheet that has the same entry in
* its user data field as the supplied entry. Return <code>null</code> if
* there is no such item.
*
* @param entry
* the entry to search for
* @param item
* the item look in
* @return the TreeItem for the entry or <code>null</code> if
* there isn't one.
*/
private TreeItem findItem(IPropertySheetEntry entry, TreeItem item) {
// compare with current item
if (entry == item.getData()) {
return item;
}
// recurse over children
TreeItem[] items = item.getItems();
for (int i = 0; i < items.length; i++) {
TreeItem childItem = items[i];
TreeItem findItem = findItem(entry, childItem);
if (findItem != null) {
return findItem;
}
}
return null;
}
/**
* Notifies all registered cell editor activation listeners of a cell editor
* activation.
*
* @param activatedCellEditor
* the activated cell editor
*/
private void fireCellEditorActivated(CellEditor activatedCellEditor) {
Object[] listeners = activationListeners.getListeners();
for (int i = 0; i < listeners.length; ++i) {
((ICellEditorActivationListener) listeners[i])
.cellEditorActivated(activatedCellEditor);
}
}
/**
* Notifies all registered cell editor activation listeners of a cell editor
* deactivation.
*
* @param activatedCellEditor
* the deactivated cell editor
*/
private void fireCellEditorDeactivated(CellEditor activatedCellEditor) {
Object[] listeners = activationListeners.getListeners();
for (int i = 0; i < listeners.length; ++i) {
((ICellEditorActivationListener) listeners[i])
.cellEditorDeactivated(activatedCellEditor);
}
}
/**
* Returns the active cell editor of this property sheet viewer or
* <code>null</code> if no cell editor is active.
*
* @return the active cell editor
*/
public CellEditor getActiveCellEditor() {
return cellEditor;
}
private TreeItem[] getChildItems(Widget widget) {
if (widget instanceof Tree) {
return ((Tree) widget).getItems();
}
else if (widget instanceof TreeItem) {
return ((TreeItem) widget).getItems();
}
// shouldn't happen
return new TreeItem[0];
}
/**
* Returns the sorted children of the given category or entry
*
* @param node a category or entry
* @return the children of the given category or entry
* (element type <code>IPropertySheetEntry</code> or
* <code>PropertySheetCategory</code>)
*/
private List getChildren(Object node) {
// cast the entry or category
IPropertySheetEntry entry = null;
PropertySheetCategory category = null;
if (node instanceof IPropertySheetEntry) {
entry = (IPropertySheetEntry) node;
} else {
category = (PropertySheetCategory) node;
}
// get the child entries or categories
List children;
if (category == null) {
children = getChildren(entry);
} else {
children = getChildren(category);
}
return children;
}
/**
* Returns the child entries of the given entry
* @param entry The entry to search
*
* @return the children of the given entry (element type
* <code>IPropertySheetEntry</code>)
*/
private List getChildren(IPropertySheetEntry entry) {
// if the entry is the root and we are showing categories, and we have
// more than the
// defualt category, return the categories
if (entry == rootEntry && isShowingCategories) {
if (categories.length > 1
|| (categories.length == 1 && !categories[0]
.getCategoryName().equals(
MISCELLANEOUS_CATEGORY_NAME))) {
return Arrays.asList(categories);
}
}
// return the sorted & filtered child entries
return getSortedEntries(getFilteredEntries(entry.getChildEntries()));
}
/**
* Returns the child entries of the given category
*
* @param category The category to search
*
* @return the children of the given category (element type
* <code>IPropertySheetEntry</code>)
*/
private List getChildren(PropertySheetCategory category) {
return getSortedEntries(getFilteredEntries(category.getChildEntries()));
}
/*
* (non-Javadoc) Method declared on Viewer.
*/
public Control getControl() {
return tree;
}
/**
* Returns the entries which match the current filter.
*
* @param entries the entries to filter
* @return the entries which match the current filter
* (element type <code>IPropertySheetEntry</code>)
*/
private List getFilteredEntries(IPropertySheetEntry[] entries) {
// if no filter just return all entries
if (isShowingExpertProperties) {
return Arrays.asList(entries);
}
// check each entry for the filter
List filteredEntries = new ArrayList(entries.length);
for (int i = 0; i < entries.length; i++) {
IPropertySheetEntry entry = entries[i];
if (entry != null) {
String[] filters = entry.getFilters();
boolean expert = false;
if (filters != null) {
for (int j = 0; j < filters.length; j++) {
if (filters[j].equals(IPropertySheetEntry.FILTER_ID_EXPERT)) {
expert = true;
break;
}
}
}
if (!expert) {
filteredEntries.add(entry);
}
}
}
return filteredEntries;
}
/**
* Returns a sorted list of <code>IPropertySheetEntry</code> entries.
*
* @param unsortedEntries
* unsorted list of <code>IPropertySheetEntry</code>
* @return a sorted list of the specified entries
*/
private List getSortedEntries(List unsortedEntries) {
IPropertySheetEntry[] propertySheetEntries = (IPropertySheetEntry[]) unsortedEntries
.toArray(new IPropertySheetEntry[unsortedEntries.size()]);
sorter.sort(propertySheetEntries);
return Arrays.asList(propertySheetEntries);
}
/**
* The <code>PropertySheetViewer</code> implementation of this method
* declared on <code>IInputProvider</code> returns the objects for which
* the viewer is currently showing properties. It returns an
* <code>Object[]</code> or <code>null</code>.
*/
public Object getInput() {
return input;
}
/**
* Returns the root entry for this property sheet viewer. The root entry is
* not visible in the viewer.
*
* @return the root entry or <code>null</code>.
*/
public IPropertySheetEntry getRootEntry() {
return rootEntry;
}
/**
* The <code>PropertySheetViewer</code> implementation of this
* <code>ISelectionProvider</code> method returns the result as a
* <code>StructuredSelection</code>.
* <p>
* Note that this method only includes <code>IPropertySheetEntry</code> in
* the selection (no categories).
* </p>
*/
public ISelection getSelection() {
if (tree.getSelectionCount() == 0) {
return StructuredSelection.EMPTY;
}
TreeItem[] sel = tree.getSelection();
List entries = new ArrayList(sel.length);
for (int i = 0; i < sel.length; i++) {
TreeItem ti = sel[i];
Object data = ti.getData();
if (data instanceof IPropertySheetEntry) {
entries.add(data);
}
}
return new StructuredSelection(entries);
}
/**
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -