| /******************************************************************************* |
| * Copyright (c) 2000, 2006 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| * Tom Schindl <tom.schindl@bestsolution.at> - Fix for |
| * Bug 154289 [Viewers] - NPE in TreeEditorImpl.activateCellEditor |
| *******************************************************************************/ |
| |
| package org.eclipse.ui.views.markers.internal; |
| |
| import java.util.HashMap; |
| import java.util.Map; |
| |
| import org.eclipse.core.commands.ExecutionException; |
| import org.eclipse.core.commands.operations.IUndoContext; |
| import org.eclipse.core.commands.operations.IUndoableOperation; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.core.runtime.CoreException; |
| import org.eclipse.jface.action.IMenuManager; |
| import org.eclipse.jface.dialogs.ErrorDialog; |
| import org.eclipse.jface.dialogs.IDialogSettings; |
| import org.eclipse.jface.viewers.CellEditor; |
| import org.eclipse.jface.viewers.ICellModifier; |
| import org.eclipse.jface.viewers.IStructuredSelection; |
| import org.eclipse.jface.viewers.TextCellEditor; |
| import org.eclipse.jface.viewers.TreeViewer; |
| import org.eclipse.swt.widgets.Composite; |
| import org.eclipse.swt.widgets.Item; |
| import org.eclipse.ui.PlatformUI; |
| import org.eclipse.ui.ide.undo.UpdateMarkersOperation; |
| import org.eclipse.ui.ide.undo.WorkspaceUndoUtil; |
| import org.eclipse.ui.internal.ide.IDEInternalPreferences; |
| import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; |
| import org.eclipse.ui.part.CellEditorActionHandler; |
| |
| /** |
| * The BookmarkView is the marker view for bookmarks. |
| * |
| */ |
| public class BookmarkView extends MarkerView { |
| |
| private final IField[] HIDDEN_FIELDS = { new FieldCreationTime() }; |
| |
| private final static String[] ROOT_TYPES = { IMarker.BOOKMARK }; |
| |
| private final static String[] TABLE_COLUMN_PROPERTIES = {IMarker.MESSAGE, |
| Util.EMPTY_STRING, |
| Util.EMPTY_STRING, |
| Util.EMPTY_STRING |
| }; |
| |
| private final static String TAG_DIALOG_SECTION = "org.eclipse.ui.views.bookmark"; //$NON-NLS-1$ |
| |
| private final IField[] VISIBLE_FIELDS = {new FieldMessage(), |
| new FieldResource(), new FieldFolder(), new FieldLineNumber() }; |
| |
| private ICellModifier cellModifier = new ICellModifier() { |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.viewers.ICellModifier#getValue(java.lang.Object, java.lang.String) |
| */ |
| @Override |
| public Object getValue(Object element, String property) { |
| if (element instanceof ConcreteMarker |
| && IMarker.MESSAGE.equals(property)) { |
| return ((ConcreteMarker) element).getDescription(); |
| } |
| return null; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.viewers.ICellModifier#canModify(java.lang.Object, java.lang.String) |
| */ |
| @Override |
| public boolean canModify(Object element, String property) { |
| return element instanceof ConcreteMarker && IMarker.MESSAGE.equals(property); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.jface.viewers.ICellModifier#modify(java.lang.Object, java.lang.String, java.lang.Object) |
| */ |
| @Override |
| public void modify(Object element, String property, Object value) { |
| if (element instanceof Item) { |
| Item item = (Item) element; |
| Object data = item.getData(); |
| |
| if (data instanceof ConcreteMarker) { |
| IMarker marker = ((ConcreteMarker) data).getMarker(); |
| |
| try { |
| if (!marker.getAttribute(property).equals(value)) { |
| if (IMarker.MESSAGE.equals(property)) { |
| Map attrs = new HashMap(); |
| attrs.put(IMarker.MESSAGE, value); |
| IUndoableOperation op = new UpdateMarkersOperation(marker, attrs, MarkerMessages.modifyBookmark_title, true); |
| PlatformUI.getWorkbench().getOperationSupport().getOperationHistory().execute( |
| op, null, WorkspaceUndoUtil.getUIInfoAdapter(getSite().getShell())); |
| } |
| } |
| } catch (ExecutionException e) { |
| if (e.getCause() instanceof CoreException) { |
| ErrorDialog.openError( |
| getSite().getShell(), |
| MarkerMessages.errorModifyingBookmark, null, ((CoreException)e.getCause()).getStatus()); |
| } else { |
| // something rather unexpected occurred. |
| IDEWorkbenchPlugin.log(MarkerMessages.errorModifyingBookmark, e); |
| } |
| } catch (CoreException e) { |
| ErrorDialog.openError( |
| getSite().getShell(), |
| MarkerMessages.errorModifyingBookmark, null, e.getStatus()); |
| } |
| } |
| } |
| } |
| }; |
| |
| private CellEditorActionHandler cellEditorActionHandler; |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#createPartControl(org.eclipse.swt.widgets.Composite) |
| */ |
| @Override |
| public void createPartControl(Composite parent) { |
| super.createPartControl(parent); |
| |
| TreeViewer treeViewer = getViewer(); |
| CellEditor cellEditors[] = new CellEditor[treeViewer.getTree() |
| .getColumnCount()]; |
| CellEditor descriptionCellEditor = new TextCellEditor(treeViewer |
| .getTree()); |
| cellEditors[0] = descriptionCellEditor; |
| treeViewer.setCellEditors(cellEditors); |
| treeViewer.setCellModifier(cellModifier); |
| treeViewer.setColumnProperties(TABLE_COLUMN_PROPERTIES); |
| |
| cellEditorActionHandler = new CellEditorActionHandler(getViewSite() |
| .getActionBars()); |
| cellEditorActionHandler.addCellEditor(descriptionCellEditor); |
| cellEditorActionHandler.setCopyAction(copyAction); |
| cellEditorActionHandler.setPasteAction(pasteAction); |
| cellEditorActionHandler.setDeleteAction(deleteAction); |
| cellEditorActionHandler.setSelectAllAction(selectAllAction); |
| cellEditorActionHandler.setUndoAction(undoAction); |
| cellEditorActionHandler.setRedoAction(redoAction); |
| } |
| |
| @Override |
| public void dispose() { |
| if (cellEditorActionHandler != null) { |
| cellEditorActionHandler.dispose(); |
| } |
| |
| super.dispose(); |
| } |
| |
| @Override |
| protected IDialogSettings getDialogSettings() { |
| IDialogSettings workbenchSettings = IDEWorkbenchPlugin.getDefault().getDialogSettings(); |
| IDialogSettings settings = workbenchSettings |
| .getSection(TAG_DIALOG_SECTION); |
| |
| if (settings == null) { |
| settings = workbenchSettings.addNewSection(TAG_DIALOG_SECTION); |
| } |
| |
| return settings; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.TableView#getSortingFields() |
| */ |
| @Override |
| protected IField[] getSortingFields() { |
| IField[] all = new IField[VISIBLE_FIELDS.length + HIDDEN_FIELDS.length]; |
| |
| System.arraycopy(VISIBLE_FIELDS, 0, all, 0, VISIBLE_FIELDS.length); |
| System.arraycopy(HIDDEN_FIELDS, 0, all, VISIBLE_FIELDS.length, HIDDEN_FIELDS.length); |
| |
| return all; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.TableView#getAllFields() |
| */ |
| @Override |
| protected IField[] getAllFields() { |
| return getSortingFields(); |
| } |
| |
| @Override |
| protected String[] getRootTypes() { |
| return ROOT_TYPES; |
| } |
| |
| |
| @Override |
| public void setSelection(IStructuredSelection structuredSelection, |
| boolean reveal) { |
| // TODO: added because nick doesn't like public API inherited from |
| // internal classes |
| super.setSelection(structuredSelection, reveal); |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerTypes() |
| */ |
| @Override |
| protected String[] getMarkerTypes() { |
| return new String[] { IMarker.BOOKMARK }; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#createFiltersDialog() |
| */ |
| @Override |
| protected DialogMarkerFilter createFiltersDialog() { |
| |
| MarkerFilter[] filters = getUserFilters(); |
| BookmarkFilter[] bookmarkFilters = new BookmarkFilter[filters.length]; |
| System.arraycopy(filters, 0, bookmarkFilters, 0, filters.length); |
| return new DialogBookmarkFilter(getSite().getShell(), bookmarkFilters); |
| } |
| |
| @Override |
| protected String getStaticContextId() { |
| return PlatformUI.PLUGIN_ID + ".bookmark_view_context"; //$NON-NLS-1$ |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#createFilter(java.lang.String) |
| */ |
| @Override |
| protected MarkerFilter createFilter(String name) { |
| return new BookmarkFilter(name); |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getSectionTag() |
| */ |
| @Override |
| protected String getSectionTag() { |
| return TAG_DIALOG_SECTION; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#fillContextMenuAdditions(org.eclipse.jface.action.IMenuManager) |
| */ |
| @Override |
| void fillContextMenuAdditions(IMenuManager manager) { |
| //Do nothing in this view |
| |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerEnablementPreferenceName() |
| */ |
| @Override |
| String getMarkerEnablementPreferenceName() { |
| return IDEInternalPreferences.LIMIT_BOOKMARKS; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerLimitPreferenceName() |
| */ |
| @Override |
| String getMarkerLimitPreferenceName() { |
| return IDEInternalPreferences.BOOKMARKS_LIMIT; |
| } |
| |
| /* (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getFiltersPreferenceName() |
| */ |
| @Override |
| String getFiltersPreferenceName() { |
| return IDEInternalPreferences.BOOKMARKS_FILTERS; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getMarkerName() |
| */ |
| @Override |
| protected String getMarkerName() { |
| return MarkerMessages.bookmark_title; |
| } |
| |
| /* |
| * (non-Javadoc) |
| * @see org.eclipse.ui.views.markers.internal.MarkerView#getUndoContext() |
| */ |
| @Override |
| protected IUndoContext getUndoContext() { |
| return WorkspaceUndoUtil.getBookmarksUndoContext(); |
| } |
| |
| } |