diff options
Diffstat (limited to 'core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java')
-rw-r--r-- | core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java | 155 |
1 files changed, 150 insertions, 5 deletions
diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java index 2e40fdd5c45..77d2b5e6a7e 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/search/PDOMSearchViewPage.java @@ -6,24 +6,36 @@ * http://www.eclipse.org/legal/epl-v10.html * * Contributors: - * QNX - Initial API and implementation - * Ed Swartz (Nokia) + * QNX - Initial API and implementation + * Ed Swartz (Nokia) + * Andrey Eremchenko (LEDAS) *******************************************************************************/ package org.eclipse.cdt.internal.ui.search; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; +import org.eclipse.jface.action.Action; +import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; +import org.eclipse.jface.viewers.TableViewerColumn; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerComparator; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.search.ui.text.AbstractTextSearchViewPage; import org.eclipse.search.ui.text.Match; +import org.eclipse.swt.SWT; +import org.eclipse.swt.events.DisposeEvent; +import org.eclipse.swt.events.DisposeListener; +import org.eclipse.swt.widgets.Composite; +import org.eclipse.swt.widgets.Table; +import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IEditorPart; +import org.eclipse.ui.IMemento; import org.eclipse.ui.PartInitException; +import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.cdt.core.index.IIndexFileLocation; @@ -39,7 +51,37 @@ import org.eclipse.cdt.internal.ui.viewsupport.ColoringLabelProvider; */ public class PDOMSearchViewPage extends AbstractTextSearchViewPage { + public static final int LOCATION_COLUMN_INDEX = 0; + public static final int DEFINITION_COLUMN_INDEX = 1; + public static final int MATCH_COLUMN_INDEX = 2; + + private static final String[] fColumnLabels = new String[] { + CSearchMessages.PDOMSearchViewPageLocationColumn_label, + CSearchMessages.PDOMSearchViewPageDefinitionColumn_label, + CSearchMessages.PDOMSearchViewPageMatchColumn_label + }; + + private static final String KEY_LOCATION_COLUMN_WIDTH = "locationColumnWidth"; //$NON-NLS-1$ + private static final String KEY_DEFINITION_COLUMN_WIDTH = "definitionColumnWidth"; //$NON-NLS-1$ + private static final String KEY_MATCH_COLUMN_WIDTH = "matchColumnWidth"; //$NON-NLS-1$ + private static final String KEY_SHOW_ENCLOSING_DEFINITIONS = "showEnclosingDefinitions"; //$NON-NLS-1$ + private IPDOMSearchContentProvider contentProvider; + private boolean fShowEnclosingDefinitions; + private ShowEnclosingDefinitionsAction fShowEnclosingDefinitionsAction; + private int[] fColumnWidths = { 300, 300, 300 }; + + private class ShowEnclosingDefinitionsAction extends Action { + public ShowEnclosingDefinitionsAction() { + super(CSearchMessages.PDOMSearchViewPage_ShowEnclosingDefinitions_actionLabel, SWT.CHECK); + setChecked(fShowEnclosingDefinitions); + } + + @Override + public void run() { + setShowEnclosingDefinitions(isChecked()); + } + } public PDOMSearchViewPage(int supportedLayouts) { super(supportedLayouts); @@ -50,6 +92,69 @@ public class PDOMSearchViewPage extends AbstractTextSearchViewPage { } @Override + public void init(IPageSite pageSite) { + super.init(pageSite); + fShowEnclosingDefinitionsAction = new ShowEnclosingDefinitionsAction(); + IMenuManager menuManager= pageSite.getActionBars().getMenuManager(); + menuManager.add(fShowEnclosingDefinitionsAction); + menuManager.updateAll(true); + pageSite.getActionBars().updateActionBars(); + } + + @Override + public void restoreState(IMemento memento) { + super.restoreState(memento); + if (memento != null) { + Boolean showEnclosingDefinitions = memento.getBoolean(KEY_SHOW_ENCLOSING_DEFINITIONS); + if (showEnclosingDefinitions != null) + setShowEnclosingDefinitions(showEnclosingDefinitions); + String[] keys = { KEY_LOCATION_COLUMN_WIDTH, KEY_DEFINITION_COLUMN_WIDTH, KEY_MATCH_COLUMN_WIDTH }; + for (int i = 0; i < keys.length; i++) { + Integer width = memento.getInteger(keys[i]); + if (width == null) + continue; + if (width > 0) + fColumnWidths[i] = width; + } + } + } + + @Override + public void saveState(IMemento memento) { + super.saveState(memento); + saveColumnWidths(); + memento.putInteger(KEY_DEFINITION_COLUMN_WIDTH, fColumnWidths[DEFINITION_COLUMN_INDEX]); + memento.putInteger(KEY_LOCATION_COLUMN_WIDTH, fColumnWidths[LOCATION_COLUMN_INDEX]); + memento.putInteger(KEY_MATCH_COLUMN_WIDTH, fColumnWidths[MATCH_COLUMN_INDEX]); + memento.putBoolean(KEY_SHOW_ENCLOSING_DEFINITIONS, fShowEnclosingDefinitions); + } + + public void setShowEnclosingDefinitions(boolean showEnclosingDefinitions) { + fShowEnclosingDefinitions = showEnclosingDefinitions; + if (fShowEnclosingDefinitionsAction.isChecked() != showEnclosingDefinitions) + fShowEnclosingDefinitionsAction.setChecked(showEnclosingDefinitions); + StructuredViewer viewer = getViewer(); + if (viewer instanceof TableViewer) { + TableViewer tableViewer = (TableViewer) viewer; + TableColumn tableColumn = tableViewer.getTable().getColumn(DEFINITION_COLUMN_INDEX); + if (fShowEnclosingDefinitions) { + tableColumn.setWidth(fColumnWidths[DEFINITION_COLUMN_INDEX]); + tableColumn.setResizable(true); + } else { + fColumnWidths[DEFINITION_COLUMN_INDEX] = tableColumn.getWidth(); + tableColumn.setWidth(0); + tableColumn.setResizable(false); + } + } + if (viewer != null) + viewer.refresh(); + } + + public boolean isShowEnclosingDefinitions() { + return fShowEnclosingDefinitions; + } + + @Override protected void elementsChanged(Object[] objects) { if (contentProvider != null) contentProvider.elementsChanged(objects); @@ -156,12 +261,52 @@ public class PDOMSearchViewPage extends AbstractTextSearchViewPage { @Override protected void configureTableViewer(TableViewer viewer) { + createColumns(viewer); contentProvider = new PDOMSearchListContentProvider(this); viewer.setComparator(new SearchViewerComparator()); viewer.setContentProvider((PDOMSearchListContentProvider)contentProvider); - PDOMSearchListLabelProvider innerLabelProvider = new PDOMSearchListLabelProvider(this); - ColoringLabelProvider labelProvider = new ColoringLabelProvider(innerLabelProvider); - viewer.setLabelProvider(labelProvider); + } + + @Override + protected TableViewer createTableViewer(Composite parent) { + TableViewer tableViewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); + tableViewer.getControl().addDisposeListener(new DisposeListener() { + public void widgetDisposed(DisposeEvent e) { + saveColumnWidths(); + } + }); + return tableViewer; + } + + private void saveColumnWidths() { + StructuredViewer viewer = getViewer(); + if (viewer instanceof TableViewer) { + TableViewer tableViewer = (TableViewer) viewer; + for (int i = 0; i < fColumnLabels.length; i++) { + if (i == DEFINITION_COLUMN_INDEX && !fShowEnclosingDefinitions) + continue; + fColumnWidths[i] = tableViewer.getTable().getColumn(i).getWidth(); + } + } + } + + private void createColumns(TableViewer viewer) { + for (int i = 0; i < fColumnLabels.length; i++) { + TableViewerColumn viewerColumn = new TableViewerColumn(viewer, SWT.NONE); + viewerColumn.setLabelProvider(new PDOMSearchListLabelProvider(this, i)); + TableColumn tableColumn = viewerColumn.getColumn(); + tableColumn.setText(fColumnLabels[i]); + tableColumn.setWidth(fColumnWidths[i]); + tableColumn.setResizable(true); + tableColumn.setMoveable(false); + if (i == DEFINITION_COLUMN_INDEX && !fShowEnclosingDefinitions) { + tableColumn.setWidth(0); + tableColumn.setResizable(false); + } + } + Table table = viewer.getTable(); + table.setHeaderVisible(true); + table.setLinesVisible(true); } @Override |