### Eclipse Workspace Patch 1.0
#P org.eclipse.ui.ide
Index: plugin.xml
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/plugin.xml,v
retrieving revision 1.309
diff -u -r1.309 plugin.xml
--- plugin.xml 26 Oct 2010 14:33:00 -0000 1.309
+++ plugin.xml 19 Nov 2010 14:37:53 -0000
@@ -1850,16 +1850,6 @@
mnemonic="%command.configureColumns.mnemonic"
style="push">
-
-
-
-
@@ -1913,16 +1903,6 @@
mnemonic="%command.configureColumns.mnemonic"
style="push">
-
-
-
-
@@ -1986,16 +1966,6 @@
mnemonic="%command.configureColumns.mnemonic"
style="push">
-
-
-
-
@@ -2049,16 +2019,6 @@
mnemonic="%command.configureColumns.mnemonic"
style="push">
-
-
-
-
-
-
-
-
-
-
-
-
Index: src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java,v
retrieving revision 1.3
diff -u -r1.3 ConfigureColumnsHandler.java
--- src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java 25 May 2009 20:52:03 -0000 1.3
+++ src/org/eclipse/ui/internal/views/markers/ConfigureColumnsHandler.java 19 Nov 2010 14:37:53 -0000
@@ -12,7 +12,6 @@
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.IHandler;
-import org.eclipse.jface.util.ConfigureColumns;
import org.eclipse.ui.views.markers.MarkerViewHandler;
/**
@@ -33,7 +32,7 @@
ExtendedMarkersView view = getView(event);
if (view == null)
return this;
- ConfigureColumns.forTree(view.getViewer().getTree(), view.getSite());
+ new MarkersViewSettingDialog(view).open();
return this;
}
Index: src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java,v
retrieving revision 1.50
diff -u -r1.50 ExtendedMarkersView.java
--- src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java 15 Oct 2010 10:34:52 -0000 1.50
+++ src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java 19 Nov 2010 14:37:57 -0000
@@ -117,11 +117,11 @@
*/
public final Object MARKERSVIEW_UPDATE_JOB_FAMILY = new Object();
+ static final String MARKER_FIELD = "MARKER_FIELD"; //$NON-NLS-1$
+
private static int instanceCount = 1;
private static final String TAG_GENERATOR = "markerContentGenerator"; //$NON-NLS-1$
- private static final String MARKER_FIELD = "MARKER_FIELD"; //$NON-NLS-1$
-
private static final String TAG_EXPANDED = "expanded"; //$NON-NLS-1$
private static final String TAG_CATEGORY = "category"; //$NON-NLS-1$
@@ -240,7 +240,7 @@
/*| SWT.VIRTUAL */| SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION));
viewer.getTree().setLinesVisible(true);
viewer.setUseHashlookup(true);
- createColumns(new TreeColumn[0]);
+ createColumns(new TreeColumn[0], new int[0]);
viewer.setContentProvider(getContentProvider());
}
@@ -249,22 +249,18 @@
*
* @param currentColumns
* the columns to refresh
+ * @param widths
*/
- private void createColumns(TreeColumn[] currentColumns) {
+ private void createColumns(TreeColumn[] currentColumns, int[] widths) {
Tree tree = viewer.getTree();
TableLayout layout = new TableLayout();
MarkerField[] fields = generator.getVisibleFields();
- IMemento columnWidths = null;
- if (memento != null)
- columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
-
for (int i = 0; i < fields.length; i++) {
MarkerField markerField = fields[i];
-
- TreeViewerColumn column;
+ TreeViewerColumn column = null;
if (i < currentColumns.length)
column = new TreeViewerColumn(viewer, currentColumns[i]);
else {
@@ -289,27 +285,21 @@
if (builder.getPrimarySortField().equals(markerField))
updateDirectionIndicator(column.getColumn(), markerField);
- int columnWidth = -1;
-
- if (i == 0) {
- // Compute and store a font metric
- GC gc = new GC(tree);
- gc.setFont(tree.getFont());
- FontMetrics fontMetrics = gc.getFontMetrics();
- gc.dispose();
- columnWidth = Math.max(markerField.getDefaultColumnWidth(tree),
- fontMetrics.getAverageCharWidth() * 5);
+ IMemento columnWidths = null;
+ if (memento != null){
+ columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
}
-
- if (columnWidths != null) {
- Integer value = columnWidths.getInteger(getFieldId(column
- .getColumn()));
-
- // Make sure we get a useful value
- if (value != null && value.intValue() > 0)
- columnWidth = value.intValue();
+ int columnWidth = -1;
+ if(i < widths.length){
+ columnWidth = widths[i];
+ if (columnWidths != null) {
+ //save it
+ columnWidths.putInteger(markerField.getConfigurationElement().getAttribute(
+ MarkerSupportInternalUtilities.ATTRIBUTE_ID), columnWidth);
+ }
+ }else{
+ columnWidth = getFieldWidth(markerField, columnWidth);
}
-
// Take trim into account if we are using the default value, but not
// if it is restored.
if (columnWidth < 0)
@@ -324,7 +314,6 @@
if (currentColumns.length > fields.length) {
for (int i = fields.length; i < currentColumns.length; i++) {
currentColumns[i].dispose();
-
}
}
@@ -334,6 +323,39 @@
tree.layout(true);
}
+
+ int getFieldWidth(MarkerField markerField, int columnWidth) {
+ Tree tree = getViewer().getTree();
+
+ if (columnWidth < 0 && memento != null) {
+ IMemento columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
+ if (columnWidths != null) {
+ Integer value = columnWidths.getInteger(markerField
+ .getConfigurationElement().getAttribute(
+ MarkerSupportInternalUtilities.ATTRIBUTE_ID));
+ // Make sure we get a useful value
+ if (value != null && value.intValue() > 0)
+ columnWidth = value.intValue();
+ }
+ }
+ if (columnWidth <= 0) {
+ // Compute and store a font metric
+ GC gc = new GC(tree);
+ gc.setFont(tree.getFont());
+ FontMetrics fontMetrics = gc.getFontMetrics();
+ gc.dispose();
+ columnWidth = Math.max(markerField.getDefaultColumnWidth(tree),
+ fontMetrics.getAverageCharWidth() * 5);
+ }
+ TreeColumn[] columns = tree.getColumns();
+ for (int i = 0; i < columns.length; i++) {
+ if (MARKER_FIELD.equals(columns[i].getData(MARKER_FIELD))) {
+ columnWidth = Math.max(columnWidth, columns[i].getWidth());
+ return columnWidth;
+ }
+ }
+ return columnWidth;
+ }
/*
* (non-Javadoc)
@@ -1460,11 +1482,11 @@
/**
* @param visible
*/
- void setVisibleFields(Collection visible) {
+ void setVisibleFields(Collection visible,int[] widths) {
generator.setVisibleFields(visible);
//viewer.setSelection(new StructuredSelection());
//viewer.removeAndClearAll();
- createColumns(viewer.getTree().getColumns());
+ createColumns(viewer.getTree().getColumns(), widths);
scheduleUpdate(0L);
}
Index: src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java
===================================================================
RCS file: src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java
diff -N src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java
--- src/org/eclipse/ui/internal/views/markers/MarkerPreferencesDialog.java 8 Sep 2009 18:00:36 -0000 1.8
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,483 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2008, 2009 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
- ******************************************************************************/
-
-package org.eclipse.ui.internal.views.markers;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.eclipse.jface.dialogs.IDialogConstants;
-import org.eclipse.jface.preference.IntegerFieldEditor;
-import org.eclipse.jface.resource.JFaceColors;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.IStructuredSelection;
-import org.eclipse.jface.viewers.LabelProvider;
-import org.eclipse.jface.viewers.ListViewer;
-import org.eclipse.jface.viewers.Viewer;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.events.SelectionAdapter;
-import org.eclipse.swt.events.SelectionEvent;
-import org.eclipse.swt.layout.FormAttachment;
-import org.eclipse.swt.layout.FormData;
-import org.eclipse.swt.layout.FormLayout;
-import org.eclipse.swt.layout.GridData;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Button;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Control;
-import org.eclipse.swt.widgets.Group;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.internal.ide.IDEInternalPreferences;
-import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
-import org.eclipse.ui.preferences.ViewSettingsDialog;
-import org.eclipse.ui.views.markers.MarkerField;
-import org.eclipse.ui.views.markers.internal.MarkerMessages;
-
-/**
- * MarkerPreferencesDialog is the dialog for showing marker preferences.
- *
- * @since 3.4
- *
- */
-public class MarkerPreferencesDialog extends ViewSettingsDialog {
-
- private IntegerFieldEditor limitEditor;
-
- private Button enablementButton;
-
- private Composite editArea;
-
- private Label messageLabel;
-
- private ExtendedMarkersView extendedView;
-
- private ArrayList visible;
-
- private ArrayList hidden;
-
- private ListViewer visibleViewer;
-
- private ListViewer nonVisibleViewer;
-
- /**
- * Create a new instance of the receiver.
- *
- * @param view -
- * the view this is being launched from
- */
- public MarkerPreferencesDialog(ExtendedMarkersView view) {
- super(view.getSite().getShell());
- this.extendedView = view;
-
- Object[] visibleFields = view.getVisibleFields();
- Object[] hiddenFields = view.getHiddenFields();
-
- visible = new ArrayList();
- hidden = new ArrayList();
-
- for (int i = 0; i < visibleFields.length; i++) {
- visible.add(visibleFields[i]);
- }
-
- for (int i = 0; i < hiddenFields.length; i++) {
- hidden.add(hiddenFields[i]);
- }
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell)
- */
- protected void configureShell(Shell newShell) {
- super.configureShell(newShell);
- newShell.setText(MarkerMessages.MarkerPreferences_DialogTitle);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.window.Window#getShellStyle()
- */
- protected int getShellStyle() {
- return super.getShellStyle() | SWT.RESIZE;
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite)
- */
- protected Control createDialogArea(Composite parent) {
-
- Composite dialogArea = (Composite) super.createDialogArea(parent);
-
- boolean checked = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
- .getBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
- enablementButton = new Button(dialogArea, SWT.CHECK);
- enablementButton.setText(MarkerMessages.MarkerPreferences_MarkerLimits);
- enablementButton.setSelection(checked);
-
- editArea = new Composite(dialogArea, SWT.NONE);
- editArea.setLayout(new GridLayout());
- GridData editData = new GridData(GridData.FILL_BOTH
- | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
- editData.horizontalIndent = 10;
- editArea.setLayoutData(editData);
-
- limitEditor = new IntegerFieldEditor(
- "limit", MarkerMessages.MarkerPreferences_VisibleItems, editArea) { //$NON-NLS-1$
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.preference.IntegerFieldEditor#checkState()
- */
- protected boolean checkState() {
- boolean state = super.checkState();
- setValid(state, getErrorMessage());
- return state;
- }
- };
- limitEditor.setPreferenceStore(IDEWorkbenchPlugin.getDefault()
- .getPreferenceStore());
- limitEditor
- .setPreferenceName(IDEInternalPreferences.MARKER_LIMITS_VALUE);
- limitEditor.load();
-
- GridData checkedData = new GridData(SWT.FILL, SWT.NONE, true, false);
- checkedData.horizontalSpan = limitEditor.getNumberOfControls();
- enablementButton.setLayoutData(checkedData);
-
- enablementButton.addSelectionListener(new SelectionAdapter() {
- public void widgetSelected(SelectionEvent e) {
- setLimitEditorEnablement(editArea, enablementButton
- .getSelection());
- }
- });
-
- setLimitEditorEnablement(editArea, checked);
-
- messageLabel = new Label(dialogArea, SWT.NONE);
-
- messageLabel.setBackground(JFaceColors.getErrorBackground(dialogArea
- .getDisplay()));
- messageLabel.setForeground(JFaceColors.getErrorText(dialogArea
- .getDisplay()));
- messageLabel
- .setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
-
- createColumnsArea(dialogArea);
-
- applyDialogFont(dialogArea);
- return dialogArea;
- }
-
- /**
- * Create an area for the selected columns
- *
- * @param dialogArea
- */
- private void createColumnsArea(Composite dialogArea) {
-
- initializeDialogUnits(dialogArea);
- Group columnsComposite = new Group(dialogArea, SWT.NONE);
- columnsComposite.setText(MarkerMessages.MarkerPreferences_ColumnGroupTitle);
- FormLayout layout = new FormLayout();
- columnsComposite.setLayout(layout);
-
- columnsComposite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true,
- true));
- Label visibleItemsLabel = new Label(columnsComposite, SWT.NONE);
- visibleItemsLabel.setText(MarkerMessages.MarkerPreferences_VisibleColumnsTitle);
- FormData visibleLabelData = new FormData();
- visibleLabelData.right = new FormAttachment(45, 0);
- visibleLabelData.left = new FormAttachment(
- IDialogConstants.BUTTON_MARGIN);
- visibleLabelData.top = new FormAttachment(0);
- visibleItemsLabel.setLayoutData(visibleLabelData);
-
- int rightMargin = IDialogConstants.BUTTON_MARGIN * -1;
-
- Label nonVisibleLabel = new Label(columnsComposite, SWT.NONE);
- nonVisibleLabel.setText(MarkerMessages.MarkerPreferences_HiddenColumnsTitle);
- FormData nonVisibleLabelData = new FormData();
- nonVisibleLabelData.right = new FormAttachment(100);
- nonVisibleLabelData.left = new FormAttachment(55, 0);
- nonVisibleLabelData.top = new FormAttachment(0);
- nonVisibleLabel.setLayoutData(nonVisibleLabelData);
-
- visibleViewer = new ListViewer(columnsComposite,
- SWT.BORDER);
-
- FormData visibleViewerData = new FormData();
- visibleViewerData.right = new FormAttachment(visibleItemsLabel, 0,
- SWT.RIGHT);
- visibleViewerData.left = new FormAttachment(visibleItemsLabel, 0,
- SWT.LEFT);
- visibleViewerData.top = new FormAttachment(visibleItemsLabel,
- IDialogConstants.BUTTON_MARGIN);
- visibleViewerData.bottom = new FormAttachment(100, rightMargin);
- visibleViewerData.height = convertHeightInCharsToPixels(15);
- visibleViewerData.width = convertWidthInCharsToPixels(25);
-
- visibleViewer.getControl().setLayoutData(visibleViewerData);
-
- visibleViewer.setContentProvider(new IStructuredContentProvider() {
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
- */
- public Object[] getElements(Object inputElement) {
- return visible.toArray();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IContentProvider#dispose()
- */
- public void dispose() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
- * java.lang.Object, java.lang.Object)
- */
- public void inputChanged(Viewer viewer, Object oldInput,
- Object newInput) {
- }
-
- });
-
- visibleViewer.setLabelProvider(markerFieldLabelProvider());
-
- visibleViewer.setInput(this);
-
- nonVisibleViewer = new ListViewer(columnsComposite,
- SWT.BORDER);
-
- nonVisibleViewer.setLabelProvider(markerFieldLabelProvider());
-
- nonVisibleViewer.setContentProvider(new IStructuredContentProvider() {
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IStructuredContentProvider#getElements(java.lang.Object)
- */
- public Object[] getElements(Object inputElement) {
- return hidden.toArray();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IContentProvider#dispose()
- */
- public void dispose() {
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer,
- * java.lang.Object, java.lang.Object)
- */
- public void inputChanged(Viewer viewer, Object oldInput,
- Object newInput) {
- }
-
- });
- nonVisibleViewer.setInput(this);
-
- FormData nonVisibleViewerData = new FormData();
- nonVisibleViewerData.right = new FormAttachment(nonVisibleLabel, 0,
- SWT.RIGHT);
- nonVisibleViewerData.left = new FormAttachment(nonVisibleLabel, 0,
- SWT.LEFT);
- nonVisibleViewerData.top = new FormAttachment(nonVisibleLabel,
- IDialogConstants.BUTTON_MARGIN);
- nonVisibleViewerData.bottom = new FormAttachment(100, rightMargin);
- nonVisibleViewerData.height = convertHeightInCharsToPixels(15);
- nonVisibleViewerData.width = convertWidthInCharsToPixels(25);
-
- nonVisibleViewer.getControl().setLayoutData(nonVisibleViewerData);
-
- Button toNonVisibleButton = new Button(columnsComposite, SWT.PUSH);
- toNonVisibleButton
- .setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveLeft
- : MarkerMessages.MarkerPreferences_MoveRight);
-
- FormData toNonVisibleButtonData = new FormData();
-
- toNonVisibleButtonData.top = new FormAttachment(visibleViewer
- .getControl(), IDialogConstants.BUTTON_BAR_HEIGHT, SWT.TOP);
- toNonVisibleButtonData.left = new FormAttachment(visibleViewer
- .getControl(), IDialogConstants.BUTTON_MARGIN);
- toNonVisibleButtonData.right = new FormAttachment(nonVisibleViewer
- .getControl(), rightMargin);
- toNonVisibleButton.setLayoutData(toNonVisibleButtonData);
-
- toNonVisibleButton.addSelectionListener(new SelectionAdapter() {
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- public void widgetSelected(SelectionEvent e) {
- List selection = ((IStructuredSelection) visibleViewer
- .getSelection()).toList();
- hidden.addAll(selection);
- visible.removeAll(selection);
- visibleViewer.refresh();
- nonVisibleViewer.refresh();
- setValid(
- visible.size() > 0,
- MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
- }
- });
-
- Button toVisibleButton = new Button(columnsComposite, SWT.PUSH);
- toVisibleButton
- .setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveRight
- : MarkerMessages.MarkerPreferences_MoveLeft);
-
- FormData toVisibleButtonData = new FormData();
-
- toVisibleButtonData.top = new FormAttachment(toNonVisibleButton,
- IDialogConstants.BUTTON_MARGIN);
- toVisibleButtonData.left = new FormAttachment(visibleViewer
- .getControl(), IDialogConstants.BUTTON_MARGIN);
- toVisibleButtonData.right = new FormAttachment(nonVisibleViewer
- .getControl(), rightMargin);
- toVisibleButton.setLayoutData(toVisibleButtonData);
-
- toVisibleButton.addSelectionListener(new SelectionAdapter() {
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.swt.events.SelectionAdapter#widgetSelected(org.eclipse.swt.events.SelectionEvent)
- */
- public void widgetSelected(SelectionEvent e) {
- List selection = ((IStructuredSelection) nonVisibleViewer
- .getSelection()).toList();
- hidden.removeAll(selection);
- visible.addAll(selection);
- visibleViewer.refresh();
- nonVisibleViewer.refresh();
- setValid(
- visible.size() > 0,
- MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
- }
- });
-
- }
-
- /**
- * Return a label provider for fields.
- * @return LabelProvider
- */
- private LabelProvider markerFieldLabelProvider() {
- return new LabelProvider() {
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.viewers.LabelProvider#getText(java.lang.Object)
- */
- public String getText(Object element) {
- return ((MarkerField) element).getName();
- }
- };
- }
-
- /**
- * Set the enabled state of the OK button by state.
- *
- * @param state
- */
- protected void setValid(boolean state, String errorMessage) {
- Button okButton = getButton(IDialogConstants.OK_ID);
-
- if (okButton == null)
- return;
-
- if (state)
- messageLabel.setText(MarkerSupportInternalUtilities.EMPTY_STRING);
- else
- messageLabel.setText(errorMessage);
-
- okButton.setEnabled(state);
-
- }
-
- /**
- * Enable the limitEditor based on checked.
- *
- * @param control
- * The parent of the editor
- * @param checked
- */
- private void setLimitEditorEnablement(Composite control, boolean checked) {
- limitEditor.setEnabled(checked, control);
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.jface.dialogs.Dialog#okPressed()
- */
- protected void okPressed() {
-
- limitEditor.store();
- IDEWorkbenchPlugin.getDefault().getPreferenceStore().setValue(
- IDEInternalPreferences.USE_MARKER_LIMITS,
- enablementButton.getSelection());
- IDEWorkbenchPlugin.getDefault().savePluginPreferences();
-
- extendedView.setVisibleFields(visible);
-
- super.okPressed();
- }
-
- /*
- * (non-Javadoc)
- *
- * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
- */
- protected void performDefaults() {
- super.performDefaults();
- limitEditor.loadDefault();
- boolean checked = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
- .getDefaultBoolean(IDEInternalPreferences.USE_MARKER_LIMITS);
- enablementButton.setSelection(checked);
- setLimitEditorEnablement(editArea, checked);
-
- Object[] visibleFields=extendedView.getBuilder().getGenerator().getInitialVisible();
- Object[] allFields=extendedView.getBuilder().getGenerator().getAllFields();
- visible.clear();
- hidden.clear();
- for (int i = 0; i < allFields.length; i++) {
- hidden.add(allFields[i]);
- }
- for (int i = 0; i < visibleFields.length; i++) {
- hidden.remove(visibleFields[i]);
- visible.add(visibleFields[i]);
- }
- visibleViewer.refresh();
- nonVisibleViewer.refresh();
- }
-
-}
Index: src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java
===================================================================
RCS file: src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java
diff -N src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java
--- src/org/eclipse/ui/internal/views/markers/MarkerPreferencesHandler.java 25 Apr 2008 12:53:22 -0000 1.3
+++ /dev/null 1 Jan 1970 00:00:00 -0000
@@ -1,38 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2005, 2008 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
- *******************************************************************************/
-package org.eclipse.ui.internal.views.markers;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.core.commands.IHandler;
-import org.eclipse.ui.views.markers.MarkerViewHandler;
-
-/**
- * MarkerPreferencesHandler is the handler for opening the marker preferences dialog.
- * @since 3.4
- *
- */
-public class MarkerPreferencesHandler extends MarkerViewHandler implements
- IHandler {
-
- /* (non-Javadoc)
- * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent)
- */
- public Object execute(ExecutionEvent event) {
-
- ExtendedMarkersView view = getView(event);
- if(view == null)
- return this;
-
- new MarkerPreferencesDialog(view).open();
- return this;
- }
-
-}
Index: src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java,v
retrieving revision 1.11
diff -u -r1.11 MarkerSupportInternalUtilities.java
--- src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java 22 Jul 2010 10:34:52 -0000 1.11
+++ src/org/eclipse/ui/internal/views/markers/MarkerSupportInternalUtilities.java 19 Nov 2010 14:37:57 -0000
@@ -317,15 +317,12 @@
*/
static int getMarkerLimit() {
- // If limits are enabled return it. Otherwise return -1
- if (IDEWorkbenchPlugin.getDefault().getPreferenceStore().getBoolean(
- IDEInternalPreferences.USE_MARKER_LIMITS)) {
- return IDEWorkbenchPlugin.getDefault().getPreferenceStore().getInt(
- IDEInternalPreferences.MARKER_LIMITS_VALUE);
-
+ int value = IDEWorkbenchPlugin.getDefault().getPreferenceStore()
+ .getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE);
+ if (value <= 0) {
+ return -1;
}
- return -1;
-
+ return value;
}
/**
Index: src/org/eclipse/ui/internal/views/markers/Markers.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/Markers.java,v
retrieving revision 1.5
diff -u -r1.5 Markers.java
--- src/org/eclipse/ui/internal/views/markers/Markers.java 30 Nov 2009 19:32:35 -0000 1.5
+++ src/org/eclipse/ui/internal/views/markers/Markers.java 19 Nov 2010 14:37:57 -0000
@@ -29,8 +29,9 @@
import org.eclipse.ui.views.markers.internal.MarkerMessages;
/**
- * The Markers object contains the MarkerEntry(s) collected and updated by the system,
- * also maintains the categories that markers are grouped into.
+ * The Markers object contains the MarkerEntry(s) collected and updated by the
+ * system, also maintains the categories that markers are grouped into.
+ *
* @since 3.6
*
*/
@@ -39,41 +40,39 @@
static final MarkerCategory[] EMPTY_CATEGORY_ARRAY = new MarkerCategory[0];
static final MarkerEntry[] EMPTY_ENTRY_ARRAY = new MarkerEntry[0];
- //the marker entries
+ // the marker entries
private MarkerEntry[] markerEntryArray = EMPTY_ENTRY_ARRAY;
- //the categories
+ // the categories
private MarkerCategory[] categories = EMPTY_CATEGORY_ARRAY;
-
private CachedMarkerBuilder builder;
-
- private boolean inChange=false;
+
+ private boolean inChange = false;
// markerToEntryMap is a lazily created map from the markers to thier
// corresponding entry
private Map markerToEntryMap = null;
private Integer[] markerCounts;
-
Markers(CachedMarkerBuilder builder) {
this.builder = builder;
- inChange=false;
+ inChange = false;
}
/**
* Update with newly collected markers
*
* @param markerEntries
- * the new marker entries
+ * the new marker entries
* @param sortAndGroup
- * true sort and group them
+ * true sort and group them
* @param monitor
*/
synchronized boolean updateWithNewMarkers(Collection markerEntries,
boolean sortAndGroup, IProgressMonitor monitor) {
- boolean initialVal=inChange;
+ boolean initialVal = inChange;
try {
- inChange=true;
+ inChange = true;
if (markerToEntryMap != null) {
markerToEntryMap.clear();
markerToEntryMap = null;
@@ -103,7 +102,7 @@
}
return true;
} finally {
- inChange=initialVal;
+ inChange = initialVal;
}
}
@@ -113,9 +112,9 @@
* @param monitor
*/
synchronized boolean sortAndMakeCategories(IProgressMonitor monitor) {
- boolean initialVal=inChange;
+ boolean initialVal = inChange;
try {
- inChange=true;
+ inChange = true;
// Sort by Category first
if (builder.isShowingHierarchy()) {
MarkerCategory[] markerCategories = groupIntoCategories(
@@ -132,7 +131,7 @@
return sortMarkerEntries(monitor);
} finally {
- inChange=initialVal;
+ inChange = initialVal;
}
}
@@ -143,9 +142,9 @@
if (monitor.isCanceled()) {
return false;
}
- boolean initialVal=inChange;
+ boolean initialVal = inChange;
try {
- inChange=true;
+ inChange = true;
if (builder.isShowingHierarchy()) {
Comparator comparator = builder.getComparator()
.getFieldsComparator();
@@ -168,8 +167,8 @@
}
int avaialble = markerEntryArray.length - 1;
int effLimit = getShowingLimit(avaialble);
- MarkerSortUtil.sortStartingKElement(markerEntryArray, builder
- .getComparator(), effLimit, monitor);
+ MarkerSortUtil.sortStartingKElement(markerEntryArray,
+ builder.getComparator(), effLimit, monitor);
}
if (monitor.isCanceled()) {
return false;
@@ -177,18 +176,19 @@
monitor.worked(50);
return true;
} finally {
- inChange=initialVal;
+ inChange = initialVal;
}
}
/**
* get marker limit to show, if any.
+ *
* @param avaliable
*/
private int getShowingLimit(int avaliable) {
int limit = MarkerSupportInternalUtilities.getMarkerLimit();
int effLimit = limit;
- if (avaliable < effLimit || limit == -1) {
+ if (avaliable < effLimit || limit <= 0) {
effLimit = avaliable;
}
return effLimit;
@@ -203,8 +203,8 @@
*/
MarkerCategory[] groupIntoCategories(IProgressMonitor monitor,
MarkerEntry[] newMarkers) {
- Map boundaryInfoMap = groupMarkerEntries(newMarkers, builder
- .getCategoryGroup(), newMarkers.length - 1, monitor);
+ Map boundaryInfoMap = groupMarkerEntries(newMarkers,
+ builder.getCategoryGroup(), newMarkers.length - 1, monitor);
Iterator iterator = boundaryInfoMap.keySet().iterator();
int start = 0;
MarkerCategory[] markerCategories = new MarkerCategory[boundaryInfoMap
@@ -215,8 +215,8 @@
Object key = iterator.next();
end = ((Integer) boundaryInfoMap.get(key)).intValue();
markerCategories[i++] = new MarkerCategory(this, start, end,
- builder.getCategoryGroup().getMarkerField().getValue(
- newMarkers[start]));
+ builder.getCategoryGroup().getMarkerField()
+ .getValue(newMarkers[start]));
start = end + 1;
}
return markerCategories;
@@ -234,21 +234,21 @@
* @return {@link Map}
*
*/
- private Map groupMarkerEntries(MarkerEntry[] entries, MarkerGroup group, int k,
- IProgressMonitor monitor) {
+ private Map groupMarkerEntries(MarkerEntry[] entries, MarkerGroup group,
+ int k, IProgressMonitor monitor) {
TreeMap map = new TreeMap(group.getEntriesComparator());
for (int i = 0; i <= k; i++) {
IMarker marker = entries[i].getMarker();
if (marker == null) {
continue;// skip stale markers
}
- if(monitor.isCanceled()){
+ if (monitor.isCanceled()) {
map.clear();
return map;
}
try {
- MarkerGroupingEntry groupingEntry = group.findGroupValue(marker
- .getType(), marker);
+ MarkerGroupingEntry groupingEntry = group.findGroupValue(
+ marker.getType(), marker);
List list = (List) map.get(groupingEntry);
if (list == null) {
list = new ArrayList();
@@ -262,7 +262,7 @@
Iterator keys = map.keySet().iterator();
int i = 0;
while (keys.hasNext()) {
- if(monitor.isCanceled()){
+ if (monitor.isCanceled()) {
map.clear();
return map;
}
@@ -287,16 +287,16 @@
*/
Integer[] getMarkerCounts() {
if (markerCounts == null) {
- markerCounts=getMarkerCounts(markerEntryArray);
+ markerCounts = getMarkerCounts(markerEntryArray);
}
return markerCounts;
}
/**
- * Returns an array of marker counts for the given MarkerEntry array
- * , where getMarkerCounts()[severity] is the number of markers in
- * the list with the given severity.
+ * Returns an array of marker counts for the given MarkerEntry array , where
+ * getMarkerCounts()[severity] is the number of markers in the list with the
+ * given severity.
*
* @return an array of {@link Integer} where index indicates
* [errors,warnings,infos,others]
@@ -366,7 +366,7 @@
* @return MarkerSupportItem[]
*/
public MarkerSupportItem[] getElements() {
- if(builder.isShowingHierarchy()){
+ if (builder.isShowingHierarchy()) {
return categories;
}
return markerEntryArray;
@@ -378,10 +378,9 @@
CachedMarkerBuilder getBuilder() {
return builder;
}
-
+
/**
- * Use clone where thread safety is concerned.
- * The method is non-blocking.
+ * Use clone where thread safety is concerned. The method is non-blocking.
*/
Markers getClone() {
Markers markers = new Markers(builder);
@@ -399,7 +398,9 @@
return inChange;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see java.lang.Object#hashCode()
*/
public int hashCode() {
@@ -409,7 +410,9 @@
return result;
}
- /* (non-Javadoc)
+ /*
+ * (non-Javadoc)
+ *
* @see java.lang.Object#equals(java.lang.Object)
*/
public boolean equals(Object obj) {
Index: src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java
===================================================================
RCS file: src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java
diff -N src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,318 @@
+/*******************************************************************************
+ * Copyright (c) 2008, 2009 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
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.views.markers;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.ui.internal.ide.IDEInternalPreferences;
+import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin;
+import org.eclipse.ui.views.markers.MarkerField;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+
+/**
+ * MarkersViewSettingDialog is the dialog for showing marker preferences.
+ *
+ *
+ * @since 3.7
+ * @author Hitesh Soliwal
+ *
+ */
+public class MarkersViewSettingDialog extends ViewerColumnsDialog {
+
+ private ExtendedMarkersView extendedView;
+
+ /**
+ * Create a new instance of the receiver.
+ *
+ * @param view
+ * - the view this is being launched from
+ */
+ public MarkersViewSettingDialog(ExtendedMarkersView view) {
+ super(view.getSite().getShell());
+ this.extendedView = view;
+ initialize(convert(extendedView.getBuilder().getGenerator()
+ .getVisibleFields()), convert(extendedView.getBuilder()
+ .getGenerator().getAllFields()), false);
+ setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
+ .getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
+ * .Shell)
+ */
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText(MarkerMessages.MarkerPreferences_DialogTitle);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.window.Window#getShellStyle()
+ */
+ protected int getShellStyle() {
+ return super.getShellStyle() | SWT.RESIZE;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+ Control control = super.createDialogArea(parent);
+ return control;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ protected void okPressed() {
+ IDEWorkbenchPlugin
+ .getDefault()
+ .getPreferenceStore()
+ .setValue(IDEInternalPreferences.MARKER_LIMITS_VALUE,
+ getLimitValue());
+ IDEWorkbenchPlugin.getDefault().savePluginPreferences();
+ extendedView.setVisibleFields(getVisibleFields(), getNewWidths());
+ super.okPressed();
+ }
+
+ /**
+ */
+ private int[] getNewWidths() {
+ List visible = getVisible();
+ int[] widths = new int[visible.size()];
+ int i = 0;
+ Iterator iterator = visible.iterator();
+ while (iterator.hasNext()) {
+ widths[i++] = ((FieldEntry) iterator.next()).width;
+ }
+ return widths;
+
+ }
+
+ private Collection getVisibleFields() {
+ List visible = getVisible();
+ List list = new ArrayList(visible.size());
+ Iterator iterator = visible.iterator();
+ while (iterator.hasNext()) {
+ list.add(((FieldEntry) iterator.next()).field);
+ }
+ return list;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
+ */
+ protected void performDefaults() {
+ initialize(convert(extendedView.getBuilder().getGenerator()
+ .getInitialVisible()), convert(extendedView.getBuilder()
+ .getGenerator().getAllFields()), true);
+ setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
+ .getDefaultInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
+ super.performDefaults();
+ }
+
+ /**
+ * @param visibleFields
+ * @param allFields
+ */
+ void initialize(FieldEntry[] visibleFields, FieldEntry[] allFields,
+ boolean defaultWidths) {
+ List visible = getVisible();
+ List nonVisible = getNonVisible();
+ visible.clear();
+ nonVisible.clear();
+ for (int i = 0; i < allFields.length; i++) {
+ nonVisible.add(allFields[i]);
+ }
+ for (int i = 0; i < visibleFields.length; i++) {
+ nonVisible.remove(visibleFields[i]);
+ visible.add(visibleFields[i]);
+ visibleFields[i].visible = true;
+ if (defaultWidths) {
+ visibleFields[i].width = extendedView.getFieldWidth(
+ visibleFields[i].field, 0);
+ } else {
+ // from a persistent store
+ visibleFields[i].width = extendedView.getFieldWidth(
+ visibleFields[i].field, -1);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getLabelProvider
+ * ()
+ */
+ protected ITableLabelProvider getLabelProvider() {
+ return new TableLabelProvider() {
+ public String getText(Object element) {
+ return ((FieldEntry) element).field.getName();
+ }
+ };
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#
+ * getColumnInfoProvider()
+ */
+ protected IColumnInfoProvider getColumnInfoProvider() {
+
+ return new IColumnInfoProvider() {
+ public int getColumnIndex(Object columnObj) {
+ return getVisible().indexOf(columnObj);
+ }
+
+ public int getColumnWidth(Object columnObj) {
+ FieldEntry field = (FieldEntry) columnObj;
+ return extendedView.getFieldWidth(field.field, field.width);
+ }
+
+ public boolean isColumnVisible(Object columnObj) {
+ return ((FieldEntry) columnObj).visible;
+ }
+
+ public boolean isColumnMovable(Object columnObj) {
+ return true;
+ }
+
+ public boolean isColumnResizable(Object columnObj) {
+ return true;
+ }
+ };
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.ui.internal.views.markers.ViewerColumnsDialog#getColumnUpdater
+ * ()
+ */
+ protected IColumnUpdater getColumnUpdater() {
+
+ return new IColumnUpdater() {
+ public void setColumnVisible(Object columnObj, boolean visible) {
+ ((FieldEntry) columnObj).visible = visible;
+ }
+
+ public void setColumnMovable(Object columnObj, boolean movable) {
+ // not implemented
+ }
+
+ public void setColumnIndex(Object columnObj, int index) {
+ // ignore
+ }
+
+ public void setColumnResizable(Object columnObj, boolean resizable) {
+ // ignore
+ }
+
+ public void setColumnWidth(Object columnObj, int newWidth) {
+ ((FieldEntry) columnObj).width = newWidth;
+ }
+ };
+ }
+
+ private static FieldEntry[] convert(Object[] fields) {
+ FieldEntry[] entries = new FieldEntry[fields.length];
+ for (int i = 0; i < entries.length; i++) {
+ entries[i] = new FieldEntry((MarkerField) fields[i], -1);
+ }
+ return entries;
+ }
+
+ static class FieldEntry {
+ final MarkerField field;
+ int width;
+ boolean visible;
+
+ FieldEntry(MarkerField field, int width) {
+ this.field = field;
+ this.width = width;
+ visible = false;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ // TODO Auto-generated method stub
+ return super.toString();
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#hashCode()
+ */
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((field == null) ? 0 : field.hashCode());
+ return result;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see java.lang.Object#equals(java.lang.Object)
+ */
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof FieldEntry)) {
+ return false;
+ }
+ FieldEntry other = (FieldEntry) obj;
+ if (field == null) {
+ if (other.field != null) {
+ return false;
+ }
+ } else if (!field.equals(other.field)) {
+ return false;
+ }
+ return true;
+ }
+ }
+}
Index: src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
===================================================================
RCS file: src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
diff -N src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,1208 @@
+/*******************************************************************************
+ * Copyright (c) 2010 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
+ ******************************************************************************/
+
+package org.eclipse.ui.internal.views.markers;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Iterator;
+import java.util.List;
+import java.util.ListIterator;
+import java.util.Random;
+
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.dialogs.Dialog;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.ISelectionChangedListener;
+import org.eclipse.jface.viewers.IStructuredContentProvider;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.ITableLabelProvider;
+import org.eclipse.jface.viewers.LabelProvider;
+import org.eclipse.jface.viewers.SelectionChangedEvent;
+import org.eclipse.jface.viewers.TableViewer;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.custom.CLabel;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Control;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.swt.widgets.Event;
+import org.eclipse.swt.widgets.Group;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Listener;
+import org.eclipse.swt.widgets.Shell;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.TableColumn;
+import org.eclipse.swt.widgets.Text;
+import org.eclipse.ui.preferences.ViewSettingsDialog;
+import org.eclipse.ui.views.markers.internal.MarkerMessages;
+
+/**
+ * This was introduced as a fix to Bug , as an effort to combine the columns and
+ * preference dialogs into one. It should be noted that the class can be re-used
+ * or turned into a tool for column viewers in general, but with some
+ * modifications. See example attached at the end of this class
+ *
+ * @since 3.7
+ *
+ * @author Hitesh Soliwal
+ *
+ * @noextend This class is not intended to be subclassed by clients.
+ *
+ */
+abstract class ViewerColumnsDialog extends ViewSettingsDialog {
+
+ /** The list contains columns that are currently visible in viewer */
+ private List visible;
+
+ /** The list contains columns that are note shown in viewer */
+ private List nonVisible;
+
+ /**
+ * The number of elements to show at Max. A zero value may indicate
+ * disablement of limit
+ */
+ private int limitValue;
+
+ /** The message area */
+ private CLabel messageLabel;
+
+ private TableViewer visibleViewer, nonVisibleViewer;
+
+ private Button upButton, downButton;
+
+ private Button toVisibleBtt, toNonVisibleBtt;
+
+ private Text widthText, limitEditor;
+
+ /**
+ * A listener to validate positive integer numbers only
+ */
+ Listener postivIntTextListener = new Listener() {
+
+ private String intialValue;
+
+ public void handleEvent(Event event) {
+ intialValue = intialValue != null ? intialValue : Integer
+ .toString(0);
+ intialValue = handleIntegerFieldChange(event, intialValue);
+ }
+ };
+
+ /**
+ * Create a new instance of the receiver.
+ *
+ * @param parentShell
+ */
+ ViewerColumnsDialog(Shell parentShell) {
+ super(parentShell);
+ }
+
+ /**
+ * Initialize visible /non-visible columns.
+ *
+ * @param columnObjs
+ */
+ void setColumnsObjs(Object[] columnObjs) {
+ IColumnInfoProvider columnInfo = doGetColumnInfoProvider();
+ IColumnUpdater updater = doGetColumnUpdater();
+ List visible = getVisible();
+ List nonVisible = getNonVisible();
+ visible.clear();
+ nonVisible.clear();
+ Object data = null;
+ for (int i = 0; i < columnObjs.length; i++) {
+ data = columnObjs[i];
+ if (columnInfo.isColumnVisible(data)) {
+ updater.setColumnVisible(data, true);
+ updater.setColumnIndex(data, visible.size());
+ visible.add(data);
+ } else {
+ updater.setColumnVisible(data, false);
+ updater.setColumnIndex(data, nonVisible.size());
+ nonVisible.add(data);
+ }
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets
+ * .Shell)
+ */
+ protected void configureShell(Shell newShell) {
+ super.configureShell(newShell);
+ newShell.setText(JFaceResources
+ .getString("ConfigureColumnsDialog_Title")); //$NON-NLS-1$
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.window.Window#getShellStyle()
+ */
+ protected int getShellStyle() {
+ return super.getShellStyle() | SWT.RESIZE;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see
+ * org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets
+ * .Composite)
+ */
+ protected Control createDialogArea(Composite parent) {
+
+ Composite dialogArea = (Composite) super.createDialogArea(parent);
+
+ dialogArea.setLayout(new GridLayout(1, true));
+
+ initializeDialogUnits(dialogArea);
+
+ createMessageArea(dialogArea);
+
+ createLimitArea(dialogArea);
+
+ createColumnsArea(dialogArea);
+
+ applyDialogFont(dialogArea);
+
+ initializeDlg();
+
+ return dialogArea;
+ }
+
+ /**
+ *
+ */
+ void initializeDlg() {
+ handleStatusUdpate(IStatus.INFO, getDefaultMessage());
+ }
+
+ /**
+ * Create message area.
+ *
+ * @param parent
+ */
+ void createMessageArea(Composite parent) {
+ messageLabel = new CLabel(parent, SWT.NONE);
+ messageLabel.setImage(JFaceResources
+ .getImage(Dialog.DLG_IMG_MESSAGE_INFO));
+ messageLabel
+ .setLayoutData(new GridData(SWT.FILL, SWT.NONE, true, false));
+ }
+
+ /**
+ * Create element limit area.
+ *
+ * @param parent
+ */
+ void createLimitArea(Composite parent) {
+ Composite composite = new Group(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(2, false));
+ composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+
+ CLabel cLabel = new CLabel(composite, SWT.NONE);
+ cLabel.setText(MarkerMessages.MarkerPreferences_VisibleItems);
+ cLabel.setLayoutData(new GridData());
+
+ limitEditor = new Text(composite, SWT.BORDER);
+ limitEditor.setText(Integer.toString(getLimitValue()));
+ limitEditor.setLayoutData(new GridData());
+ limitEditor.addListener(SWT.FocusOut, postivIntTextListener);
+ limitEditor.addListener(SWT.KeyDown, postivIntTextListener);
+ limitEditor.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ int limit = 0;
+ try {
+ limit = Integer.parseInt(limitEditor.getText().trim());
+ } catch (Exception e) {
+ return;// ignore this one
+ }
+ setLimitValue(limit);
+ }
+ });
+ limitEditor.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ }
+
+ /**
+ * Create the controls to configure columns.
+ *
+ * @param dialogArea
+ */
+ void createColumnsArea(Composite dialogArea) {
+ Group columnArea = new Group(dialogArea, SWT.NONE);
+ columnArea.setLayout(new GridLayout(4, false));
+ GridData gData = new GridData(GridData.FILL_BOTH
+ | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
+ columnArea.setLayoutData(gData);
+ columnArea.setText(MarkerMessages.MarkerPreferences_ColumnGroupTitle);
+
+ createInvisibleTable(columnArea);
+ createMoveButtons(columnArea);
+ createVisibleTable(columnArea);
+ createUpDownBtt(columnArea);
+ createWidthArea(columnArea);
+ }
+
+ /**
+ * The Up and Down button to change column ordering.
+ *
+ * @param parent
+ */
+ void createUpDownBtt(Composite parent) {
+ Composite composite = new Composite(parent, SWT.NONE);
+ GridLayout layout = new GridLayout(1, true);
+ layout.horizontalSpacing = 0;
+ layout.marginRight = -1;
+ layout.marginLeft = -1;
+ layout.marginWidth = 0;
+ composite.setLayout(layout);
+ composite.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_FILL
+ | GridData.VERTICAL_ALIGN_END));
+ upButton = new Button(composite, SWT.PUSH);
+ upButton.setText(JFaceResources.getString("ConfigureColumnsDialog_up")); //$NON-NLS-1$
+ upButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ handleUpButton(event);
+ }
+ });
+ upButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ upButton.setEnabled(false);
+
+ downButton = new Button(composite, SWT.PUSH);
+ downButton.setText(JFaceResources
+ .getString("ConfigureColumnsDialog_down")); //$NON-NLS-1$
+ downButton.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ handleDownButton(event);
+ }
+ });
+ downButton.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
+ downButton.setEnabled(false);
+ }
+
+ /**
+ * Create the controls responsible to display/edit column widths.
+ *
+ * @param parent
+ */
+ void createWidthArea(Composite parent) {
+ Label widthLabel = new Label(parent, SWT.NONE);
+ widthLabel.setText(JFaceResources
+ .getString("ConfigureColumnsDialog_WidthOfSelectedColumn")); //$NON-NLS-1$
+ GridData gridData = new GridData(GridData.FILL_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_END);
+ gridData.horizontalSpan = 3;
+ widthLabel.setLayoutData(gridData);
+
+ widthText = new Text(parent, SWT.SINGLE | SWT.BORDER);
+ widthText.setText(Integer.toString(0));
+ gridData = new GridData(GridData.FILL_HORIZONTAL
+ | GridData.HORIZONTAL_ALIGN_CENTER);
+ gridData.widthHint = convertWidthInCharsToPixels(5);
+ widthText.setLayoutData(gridData);
+ widthText.addListener(SWT.KeyDown, postivIntTextListener);
+ widthText.addListener(SWT.FocusOut, postivIntTextListener);
+ widthText.addListener(SWT.Modify, new Listener() {
+ public void handleEvent(Event event) {
+ if (widthText.isEnabled()) {
+ int width = 0;
+ try {
+ width = Integer.parseInt(widthText.getText().trim());
+ } catch (Exception e) {
+ return;// ignore this one
+ }
+ Object data = ((IStructuredSelection) visibleViewer
+ .getSelection()).getFirstElement();
+ if (data != null) {
+ IColumnUpdater updater = getColumnUpdater();
+ updater.setColumnWidth(data, width);
+ }
+ }
+ }
+ });
+ widthText.setText(MarkerSupportInternalUtilities.EMPTY_STRING);
+ widthText.setEditable(false);
+ }
+
+ /**
+ * Adapter to {@link IStructuredContentProvider}
+ */
+ abstract class ContentProviderAdapter implements IStructuredContentProvider {
+
+ public void dispose() {
+ }
+
+ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
+ }
+ }
+
+ /**
+ * Creates the table that lists out visible columns in the viewer
+ *
+ * @param parent
+ */
+ void createVisibleTable(Composite parent) {
+ final Table table = new Table(parent, SWT.BORDER | SWT.MULTI);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.widthHint = convertWidthInCharsToPixels(30);
+ data.heightHint = table.getItemHeight() * 15;
+ table.setLayoutData(data);
+ table.setHeaderVisible(true);
+
+ final TableColumn column = new TableColumn(table, SWT.NONE);
+ column.setText(MarkerMessages.MarkerPreferences_VisibleColumnsTitle);
+ Listener columnResize = new Listener() {
+ public void handleEvent(Event event) {
+ column.setWidth(table.getClientArea().width);
+ }
+ };
+ table.addListener(SWT.Resize, columnResize);
+
+ visibleViewer = new TableViewer(table);
+ visibleViewer.setLabelProvider(doGetLabelProvider());
+ visibleViewer.setContentProvider(new ContentProviderAdapter() {
+ public Object[] getElements(Object inputElement) {
+ return getVisible().toArray();
+ }
+ });
+ visibleViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleVisibleSelection(event.getSelection());
+ }
+ });
+ table.addListener(SWT.MouseDoubleClick, new Listener() {
+ public void handleEvent(Event event) {
+ handleToNonVisibleButton(event);
+ }
+ });
+ visibleViewer.setInput(this);
+ }
+
+ /**
+ * Creates the table that lists out non-visible columns in the viewer
+ *
+ * @param parent
+ */
+ void createInvisibleTable(Composite parent) {
+ final Table table = new Table(parent, SWT.BORDER | SWT.MULTI);
+ GridData data = new GridData(SWT.FILL, SWT.FILL, true, true);
+ data.widthHint = convertWidthInCharsToPixels(30);
+ data.heightHint = table.getItemHeight() * 15;
+ table.setLayoutData(data);
+ table.setHeaderVisible(true);
+
+ final TableColumn column = new TableColumn(table, SWT.NONE);
+ column.setText(MarkerMessages.MarkerPreferences_HiddenColumnsTitle);
+ Listener columnResize = new Listener() {
+ public void handleEvent(Event event) {
+ column.setWidth(table.getClientArea().width);
+ }
+ };
+ table.addListener(SWT.Resize, columnResize);
+
+ nonVisibleViewer = new TableViewer(table);
+ nonVisibleViewer.setLabelProvider(doGetLabelProvider());
+ nonVisibleViewer.setContentProvider(new ContentProviderAdapter() {
+ public Object[] getElements(Object inputElement) {
+ return getNonVisible().toArray();
+ }
+ });
+ nonVisibleViewer
+ .addSelectionChangedListener(new ISelectionChangedListener() {
+ public void selectionChanged(SelectionChangedEvent event) {
+ handleNonVisibleSelection(event.getSelection());
+ }
+ });
+ table.addListener(SWT.MouseDoubleClick, new Listener() {
+ public void handleEvent(Event event) {
+ handleToVisibleButton(event);
+ }
+ });
+ nonVisibleViewer.setInput(this);
+ }
+
+ /**
+ * Creates buttons for moving columns from non-visible to visible and
+ * vice-versa
+ *
+ * @param parent
+ */
+ void createMoveButtons(Composite parent) {
+ Composite bttArea = new Composite(parent, SWT.NONE);
+ bttArea.setLayout(new GridLayout(1, true));
+ bttArea.setLayoutData(new GridData(GridData.FILL_VERTICAL));
+
+ toNonVisibleBtt = new Button(bttArea, SWT.PUSH);
+ toNonVisibleBtt
+ .setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveRight
+ : MarkerMessages.MarkerPreferences_MoveLeft);
+ toNonVisibleBtt.setLayoutData(new GridData());
+
+ toNonVisibleBtt.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ handleToNonVisibleButton(event);
+ }
+ });
+ toNonVisibleBtt.setEnabled(false);
+
+ toVisibleBtt = new Button(bttArea, SWT.PUSH);
+ toVisibleBtt
+ .setText(getDefaultOrientation() == SWT.RIGHT_TO_LEFT ? MarkerMessages.MarkerPreferences_MoveLeft
+ : MarkerMessages.MarkerPreferences_MoveRight);
+ toVisibleBtt.setLayoutData(new GridData());
+ toVisibleBtt.addListener(SWT.Selection, new Listener() {
+ public void handleEvent(Event event) {
+ handleToVisibleButton(event);
+ }
+ });
+ toVisibleBtt.setEnabled(false);
+ }
+
+ /**
+ * Display the error message and an appropriate icon.
+ *
+ * @param messgage
+ * @param severity
+ */
+ protected void handleStatusUdpate(int severity, String messgage) {
+ Image image = null;
+ switch (severity) {
+ case IStatus.ERROR: {
+ if (messgage == null) {
+ messgage = getErrorMessage();
+ }
+ image = getErrorImage();
+ break;
+ }
+ case IStatus.WARNING: {
+ image = getWarningImage();
+ break;
+ }
+ case IStatus.OK:
+ case IStatus.INFO:
+ default:
+ image = getInfoImage();
+ }
+ messageLabel.setImage(image);
+ if (messgage == null) {
+ messgage = getDefaultMessage();
+ }
+ if (messgage == null) {
+ messgage = MarkerSupportInternalUtilities.EMPTY_STRING;
+ }
+ messageLabel.setText(messgage);
+ }
+
+ /**
+ * Return the message to display when dialog is opened.
+ */
+ protected String getDefaultMessage() {
+ return MarkerMessages.MarkerPreferences_ZeroOrBlankValueCanBeUsedToDisableTheLimit;
+ }
+
+ /**
+ * @return Returns the error message to display for a wrong limit value.
+ */
+ protected String getErrorMessage() {
+ return JFaceResources.getString("IntegerFieldEditor.errorMessage"); //$NON-NLS-1$
+ }
+
+ /**
+ */
+ protected Image getInfoImage() {
+ return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_INFO);
+ }
+
+ /**
+ */
+ protected Image getWarningImage() {
+ return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_WARNING);
+ }
+
+ /**
+ */
+ protected Image getErrorImage() {
+ return JFaceResources.getImage(Dialog.DLG_IMG_MESSAGE_ERROR);
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
+ */
+ protected void performDefaults() {
+ refreshViewers();
+ super.performDefaults();
+ }
+
+ /**
+ *
+ * @param event
+ * @param intialvalue
+ * @return new integer value
+ */
+ String handleIntegerFieldChange(Event event, String intialvalue) {
+ Text text = (Text) event.widget;
+ String value = text.getText().trim();
+ switch (event.type) {
+ case SWT.KeyDown:
+ if (!Character.isDigit(event.character)) {
+ if (!Character.isISOControl(event.character)) {
+ handleStatusUdpate(IStatus.ERROR, getErrorMessage());
+ event.doit = false;
+ return intialvalue;
+ }
+ }
+ case SWT.FocusOut:
+ if (value.length() == 0) {
+ value = Integer.toString(0);
+ text.setText(value);
+ text.selectAll();
+ handleStatusUdpate(IStatus.INFO, null);
+ } else {
+ try {
+ Integer.parseInt(value);
+ handleStatusUdpate(IStatus.INFO, null);
+ } catch (Exception e) {
+ value = intialvalue;
+ text.setText(value);
+ text.selectAll();
+ handleStatusUdpate(IStatus.ERROR, getErrorMessage());
+ event.doit = false;
+ }
+ }
+ }
+ return value;
+ }
+
+ /**
+ * Handles a selection change in the viewer that lists out the non-visible
+ * columns
+ *
+ * @param selection
+ */
+ void handleNonVisibleSelection(ISelection selection) {
+ Object[] nvKeys = ((IStructuredSelection) selection).toArray();
+ toVisibleBtt.setEnabled(nvKeys.length > 0);
+ }
+
+ /**
+ * Handles a selection change in the viewer that lists out the visible
+ * columns. Takes care of various enablements.
+ *
+ * @param selection
+ */
+ void handleVisibleSelection(ISelection selection) {
+ List selVCols = ((IStructuredSelection) selection).toList();
+ List allVCols = getVisible();
+ toNonVisibleBtt.setEnabled(selVCols.size() > 0
+ && allVCols.size() > selVCols.size());
+
+ IColumnInfoProvider infoProvider = doGetColumnInfoProvider();
+ boolean moveDown = !selVCols.isEmpty(), moveUp = !selVCols.isEmpty();
+ Iterator iterator = selVCols.iterator();
+ while (iterator.hasNext()) {
+ Object columnObj = iterator.next();
+ if (!infoProvider.isColumnMovable(columnObj)) {
+ moveUp = false;
+ moveDown = false;
+ break;
+ }
+ int i = allVCols.indexOf(columnObj);
+ if (i == 0) {
+ moveUp = false;
+ if (!moveDown) {
+ break;
+ }
+ }
+ if (i == (allVCols.size() - 1)) {
+ moveDown = false;
+ if (!moveUp) {
+ break;
+ }
+ }
+ }
+ upButton.setEnabled(moveUp);
+ downButton.setEnabled(moveDown);
+
+ boolean edit = selVCols.size() == 1 ? infoProvider
+ .isColumnResizable(selVCols.get(0)) : false;
+ if (edit) {
+ widthText.setText(Integer.toString(infoProvider
+ .getColumnWidth(selVCols.get(0))));
+ } else {
+ widthText.setText(Integer.toString(0));
+ }
+ widthText.setEditable(edit);
+ }
+
+ /**
+ * Applies to visible columns, and handles the changes in the order of
+ * columns
+ *
+ * @param e
+ * event from the button click
+ */
+ void handleDownButton(Event e) {
+ IStructuredSelection selection = (IStructuredSelection) visibleViewer
+ .getSelection();
+ Object[] selVCols = selection.toArray();
+ List allVCols = getVisible();
+ IColumnUpdater updater = doGetColumnUpdater();
+ for (int i = selVCols.length - 1; i >= 0; i--) {
+ Object colObj = selVCols[i];
+ int index = allVCols.indexOf(colObj);
+ updater.setColumnIndex(colObj, index + 1);
+ allVCols.remove(index);
+ allVCols.add(index + 1, colObj);
+ }
+ visibleViewer.refresh();
+ handleVisibleSelection(selection);
+ }
+
+ /**
+ * Applies to visible columns, and handles the changes in the order of
+ * columns
+ *
+ * @param e
+ * event from the button click
+ */
+ void handleUpButton(Event e) {
+ IStructuredSelection selection = (IStructuredSelection) visibleViewer
+ .getSelection();
+ Object[] selVCols = selection.toArray();
+ List allVCols = getVisible();
+ IColumnUpdater updater = doGetColumnUpdater();
+ for (int i = 0; i < selVCols.length; i++) {
+ Object colObj = selVCols[i];
+ int index = allVCols.indexOf(colObj);
+ updater.setColumnIndex(colObj, index - 1);
+ allVCols.remove(index);
+ allVCols.add(index - 1, colObj);
+ }
+ visibleViewer.refresh();
+ handleVisibleSelection(selection);
+ }
+
+ /**
+ * Moves selected columns from non-visible to visible state
+ *
+ * @param e
+ * event from the button click
+ */
+ void handleToVisibleButton(Event e) {
+ IStructuredSelection selection = (IStructuredSelection) nonVisibleViewer
+ .getSelection();
+ List selVCols = selection.toList();
+ List nonVisible = getNonVisible();
+ nonVisible.removeAll(selVCols);
+
+ List list = getVisible();
+ list.addAll(selVCols);
+
+ updateVisibility(selVCols, true);
+ updateIndices(getVisible());
+ updateIndices(getNonVisible());
+
+ visibleViewer.refresh();
+ visibleViewer.setSelection(selection);
+ nonVisibleViewer.refresh();
+ handleVisibleSelection(selection);
+ handleNonVisibleSelection(nonVisibleViewer.getSelection());
+ }
+
+ /**
+ * Moves selected columns from visible to non-visible state
+ *
+ * @param e
+ * event from the button click
+ */
+ protected void handleToNonVisibleButton(Event e) {
+ if (getVisible().size() <= 1) {
+ handleStatusUdpate(IStatus.INFO,
+ MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
+ return;
+ }
+ IStructuredSelection selection = (IStructuredSelection) visibleViewer
+ .getSelection();
+ List selVCols = selection.toList();
+ getVisible().removeAll(selVCols);
+ getNonVisible().addAll(selVCols);
+
+ updateVisibility(selVCols, false);
+ updateIndices(getVisible());
+ updateIndices(getNonVisible());
+
+ nonVisibleViewer.refresh();
+ nonVisibleViewer.setSelection(selection);
+ visibleViewer.refresh();
+ handleVisibleSelection(visibleViewer.getSelection());
+ handleNonVisibleSelection(nonVisibleViewer.getSelection());
+ handleStatusUdpate(IStatus.INFO, getDefaultMessage());
+ }
+
+ void updateIndices(List list) {
+ ListIterator iterator = list.listIterator();
+ IColumnUpdater updater = doGetColumnUpdater();
+ while (iterator.hasNext()) {
+ updater.setColumnIndex(iterator.next(), iterator.previousIndex());
+ }
+ }
+
+ void updateVisibility(List list, boolean visibility) {
+ IColumnUpdater updater = doGetColumnUpdater();
+ Iterator iterator = list.iterator();
+ while (iterator.hasNext()) {
+ updater.setColumnVisible(iterator.next(), visibility);
+ }
+ }
+
+ /**
+ * Updates the UI based on values of the variable
+ */
+ void refreshViewers() {
+ if (limitEditor != null) {
+ limitEditor.setText(Integer.toString(getLimitValue()));
+ }
+ if (nonVisibleViewer != null) {
+ nonVisibleViewer.refresh();
+ }
+ if (visibleViewer != null) {
+ visibleViewer.refresh();
+ }
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#isResizable()
+ */
+ protected boolean isResizable() {
+ return true;
+ }
+
+ /*
+ * (non-Javadoc)
+ *
+ * @see org.eclipse.jface.dialogs.Dialog#okPressed()
+ */
+ protected void okPressed() {
+ super.okPressed();
+ }
+
+ /**
+ * @return Returns the limitValue.
+ */
+ public int getLimitValue() {
+ return limitValue;
+ }
+
+ /**
+ * @param limitValue
+ * The limitValue to set.
+ */
+ void setLimitValue(int limitValue) {
+ this.limitValue = limitValue;
+ }
+
+ /**
+ * @return List of visible columns
+ */
+ public List getVisible() {
+ if (visible == null) {
+ visible = new ArrayList();
+ }
+ return visible;
+ }
+
+ /**
+ * @return List of non-visible columns
+ */
+ public List getNonVisible() {
+ if (nonVisible == null) {
+ nonVisible = new ArrayList();
+ }
+ return nonVisible;
+ }
+
+ /**
+ * An adapter class to {@link ITableLabelProvider}
+ *
+ */
+ class TableLabelProvider extends LabelProvider implements
+ ITableLabelProvider {
+ public Image getColumnImage(Object element, int columnIndex) {
+ return null;
+ }
+
+ public String getColumnText(Object element, int columnIndex) {
+ return getText(element);
+ }
+ }
+
+ /**
+ * Internal helper to @see {@link ViewerColumnsDialog#getLabelProvider()}
+ */
+ ITableLabelProvider doGetLabelProvider() {
+ return getLabelProvider();
+ }
+
+ /**
+ * The tables-columns need to be displayed appropriately. The supplied
+ * column objects are adapted to text and image as dictacted by this
+ * {@link ITableLabelProvider}
+ */
+ protected abstract ITableLabelProvider getLabelProvider();
+
+ /**
+ * Internal helper to @see
+ * {@link ViewerColumnsDialog#getColumnInfoProvider()}
+ */
+ IColumnInfoProvider doGetColumnInfoProvider() {
+ return getColumnInfoProvider();
+ }
+
+ /**
+ * To configure the columns we need further information. The supplied column
+ * objects are adapted for its properties via {@link IColumnInfoProvider}
+ */
+ protected abstract IColumnInfoProvider getColumnInfoProvider();
+
+ /**
+ * Internal helper to @see {@link ViewerColumnsDialog#getColumnUpdater()}
+ */
+ IColumnUpdater doGetColumnUpdater() {
+ return getColumnUpdater();
+ }
+
+ /**
+ * To configure properties/order of the columns is achieved via
+ * {@link IColumnUpdater}
+ */
+ protected abstract IColumnUpdater getColumnUpdater();
+
+ /**
+ * Update various aspects of a columns from a viewer such
+ * {@link TableViewer}
+ */
+ public interface IColumnInfoProvider {
+
+ /**
+ * Get corresponding index for the column
+ *
+ * @param columnObj
+ */
+ public int getColumnIndex(Object columnObj);
+
+ /**
+ * Get the width of the column
+ *
+ * @param columnObj
+ */
+ public int getColumnWidth(Object columnObj);
+
+ /**
+ * Returns true if the column represented by parameters is showing in
+ * the viewer
+ *
+ * @param columnObj
+ */
+ public boolean isColumnVisible(Object columnObj);
+
+ /**
+ * Returns true if the column represented by parameters is configured as
+ * movable
+ *
+ * @param columnObj
+ */
+ public boolean isColumnMovable(Object columnObj);
+
+ /**
+ * Returns true if the column represented by parameters is configured as
+ * resizable
+ *
+ * @param columnObj
+ */
+ public boolean isColumnResizable(Object columnObj);
+
+ }
+
+ /**
+ * Update various aspects of a columns from a viewer such
+ * {@link TableViewer}
+ */
+ public interface IColumnUpdater {
+
+ /**
+ * Set the column represented by parameters as visible
+ *
+ * @param columnObj
+ * @param visible
+ */
+ public void setColumnVisible(Object columnObj, boolean visible);
+
+ /**
+ * Dummy method - more a result of symmetry
+ *
+ * @param columnObj
+ * @param movable
+ */
+ public void setColumnMovable(Object columnObj, boolean movable);
+
+ /**
+ * Call back to notify change in the index of the column represented by
+ * columnObj
+ *
+ * @param columnObj
+ * @param index
+ */
+ public void setColumnIndex(Object columnObj, int index);
+
+ /**
+ * Dummy method - more a result of symmetry
+ *
+ * @param columnObj
+ * @param resizable
+ */
+ public void setColumnResizable(Object columnObj, boolean resizable);
+
+ /**
+ * Call back to notify change in the width of the column represented by
+ * columnObj
+ *
+ * @param columnObj
+ * @param newWidth
+ */
+ public void setColumnWidth(Object columnObj, int newWidth);
+
+ }
+
+ // //////////////////////////////////////////////////////////////////////////////////
+ /**
+ * Ignore the class below as it is simply meant to test the above. I intend
+ * to retain this for a while.
+ */
+ static class TestData {
+
+ final Object key;
+
+ final int keyIndex;
+
+ int newIndex, width;
+
+ boolean visibility, movable, resizable;
+
+ TestData(Object key, int currIndex) {
+ this.key = key;
+ this.keyIndex = currIndex;
+ }
+
+ public int hashCode() {
+ final int prime = 31;
+ int result = 1;
+ result = prime * result + ((key == null) ? 0 : key.hashCode());
+ result = prime * result + keyIndex;
+ return result;
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+ if (obj == null) {
+ return false;
+ }
+ if (!(obj instanceof TestData)) {
+ return false;
+ }
+ TestData other = (TestData) obj;
+ if (key == null) {
+ if (other.key != null) {
+ return false;
+ }
+ } else if (!key.equals(other.key)) {
+ return false;
+ }
+ if (keyIndex != other.keyIndex) {
+ return false;
+ }
+ return true;
+ }
+
+ public String toString() {
+ return key.toString();
+ }
+
+ private static ViewerColumnsDialog getColumnsDialog(Shell shell,
+ final TestData[] colums) {
+ ViewerColumnsDialog dialog = new ViewerColumnsDialog(shell) {
+
+ protected IColumnInfoProvider getColumnInfoProvider() {
+ return getInfoProvider(colums);
+ }
+
+ protected ITableLabelProvider getLabelProvider() {
+ return new TableLabelProvider();
+ }
+
+ protected IColumnUpdater getColumnUpdater() {
+ return getUpdater(colums);
+ }
+ };
+ dialog.setColumnsObjs(colums);
+ return dialog;
+ }
+
+ private static IColumnUpdater getUpdater(final TestData[] data) {
+ return new IColumnUpdater() {
+
+ public void setColumnWidth(Object columnObj, int newWidth) {
+ ((TestData) columnObj).width = newWidth;
+ }
+
+ public void setColumnVisible(Object columnObj, boolean visible) {
+ ((TestData) columnObj).visibility = visible;
+ }
+
+ public void setColumnResizable(Object columnObj,
+ boolean resizable) {
+
+ }
+
+ public void setColumnMovable(Object columnObj, boolean movable) {
+ ((TestData) columnObj).movable = movable;
+
+ }
+
+ public void setColumnIndex(Object columnObj, int index) {
+ ((TestData) columnObj).newIndex = index;
+ }
+ };
+ }
+
+ private static IColumnInfoProvider getInfoProvider(
+ final TestData[] colData) {
+ return new IColumnInfoProvider() {
+
+ public boolean isColumnVisible(Object columnObj) {
+ return ((TestData) columnObj).visibility;
+ }
+
+ public boolean isColumnResizable(Object columnObj) {
+ return ((TestData) columnObj).resizable;
+ }
+
+ public boolean isColumnMovable(Object columnObj) {
+ return ((TestData) columnObj).movable;
+ }
+
+ public int getColumnWidth(Object columnObj) {
+ return ((TestData) columnObj).width;
+ }
+
+ public int getColumnIndex(Object columnObj) {
+ return ((TestData) columnObj).newIndex;
+ }
+ };
+ }
+
+ private static TestData[] genData(int count) {
+ String[] cols = new String[count];
+ for (int i = 0; i < cols.length; i++) {
+ cols[i] = new String("Column-" + (i + 1)); //$NON-NLS-1$
+ }
+ Random random = new Random();
+
+ boolean[] visibility = new boolean[cols.length];
+ Arrays.fill(visibility, true);
+ int ranInt = random.nextInt() % cols.length;
+ for (int i = 0; i < ranInt; i++) {
+ visibility[random.nextInt(ranInt)] = false;
+ }
+
+ boolean[] resizable = new boolean[cols.length];
+ Arrays.fill(resizable, true);
+ ranInt = random.nextInt() % cols.length;
+ for (int i = 0; i < ranInt; i++) {
+ resizable[random.nextInt(ranInt)] = false;
+ }
+
+ boolean[] movable = new boolean[cols.length];
+ Arrays.fill(movable, true);
+ ranInt = random.nextInt() % cols.length;
+ for (int i = 0; i < ranInt; i++) {
+ movable[random.nextInt(ranInt)] = false;
+ }
+
+ int[] widths = new int[cols.length];
+ Arrays.fill(widths, 100);
+ return TestData.generateColumnsData(cols, visibility, resizable,
+ movable, widths);
+ }
+
+ public static TestData[] generateColumnsData(Object[] keys,
+ boolean[] visibility, boolean[] resizable, boolean[] movable,
+ int[] widths) {
+ TestData[] colData = new TestData[keys.length];
+ int m = 0, n = 0;
+ for (int i = 0; i < colData.length; i++) {
+ TestData data = new TestData(keys[i], i);
+ data.visibility = visibility[i];
+ data.resizable = resizable[i];
+ data.movable = movable[i];
+ data.width = widths[i];
+ if (data.visibility) {
+ data.newIndex = m++;
+ } else {
+ data.newIndex = n++;
+ }
+ colData[i] = data;
+ }
+ return colData;
+ }
+
+ /**
+ * Demo
+ *
+ * @param args
+ */
+ public static void main(String[] args) {
+ Display display = new Display();
+ final Shell shell = new Shell(display);
+ shell.setLayout(new FillLayout());
+ ViewerColumnsDialog dialog = getColumnsDialog(shell, genData(100));
+ dialog.open();
+ shell.dispose();
+ while (!shell.isDisposed()) {
+ if (!display.readAndDispatch()) {
+ display.sleep();
+ }
+ }
+ display.dispose();
+
+ }
+
+ }
+
+ // //////////////////////////////////////////////////////////////////////////////////
+}
Index: src/org/eclipse/ui/views/markers/MarkerField.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/MarkerField.java,v
retrieving revision 1.11
diff -u -r1.11 MarkerField.java
--- src/org/eclipse/ui/views/markers/MarkerField.java 12 Oct 2010 14:48:48 -0000 1.11
+++ src/org/eclipse/ui/views/markers/MarkerField.java 19 Nov 2010 14:38:04 -0000
@@ -255,7 +255,7 @@
*/
public void update(ViewerCell cell) {
cell.setText(getValue((MarkerItem) cell.getElement()));
-
+ cell.setImage(null);
}
}
Index: src/org/eclipse/ui/views/markers/internal/MarkerMessages.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/MarkerMessages.java,v
retrieving revision 1.70
diff -u -r1.70 MarkerMessages.java
--- src/org/eclipse/ui/views/markers/internal/MarkerMessages.java 13 Oct 2010 15:21:07 -0000 1.70
+++ src/org/eclipse/ui/views/markers/internal/MarkerMessages.java 19 Nov 2010 14:38:04 -0000
@@ -219,6 +219,7 @@
public static String MarkerPreferences_VisibleColumnsTitle;
public static String MarkerPreferences_HiddenColumnsTitle;
public static String MarkerPreferences_AtLeastOneVisibleColumn;
+ public static String MarkerPreferences_ZeroOrBlankValueCanBeUsedToDisableTheLimit;
public static String ProblemFilterDialog_System_Filters_Title;
public static String ProblemFilterDialog_All_Problems;
Index: src/org/eclipse/ui/views/markers/internal/messages.properties
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/views/markers/internal/messages.properties,v
retrieving revision 1.95
diff -u -r1.95 messages.properties
--- src/org/eclipse/ui/views/markers/internal/messages.properties 13 Oct 2010 15:21:07 -0000 1.95
+++ src/org/eclipse/ui/views/markers/internal/messages.properties 19 Nov 2010 14:38:04 -0000
@@ -197,12 +197,13 @@
MarkerPreferences_DialogTitle = Preferences
MarkerPreferences_MarkerLimits = Use marker &limits
MarkerPreferences_VisibleItems = Limit visible &items per group to:
-MarkerPreferences_MoveLeft = <<
-MarkerPreferences_MoveRight = >>
+MarkerPreferences_MoveLeft = &<<
+MarkerPreferences_MoveRight = &>>
MarkerPreferences_ColumnGroupTitle = Hide/Show Columns
MarkerPreferences_VisibleColumnsTitle = &Show
MarkerPreferences_HiddenColumnsTitle = &Hide
MarkerPreferences_AtLeastOneVisibleColumn = There must be at least one visible column.
+MarkerPreferences_ZeroOrBlankValueCanBeUsedToDisableTheLimit = Please enter a positive number (zero or blank can be used to disable the limit).
ProblemFilterDialog_System_Filters_Title = System filte&rs:
ProblemFilterDialog_All_Problems = Enabled for all problems