Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
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.java155
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

Back to the top