Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 181802 Details for
Bug 303001
[Markers] Marker views redirect "Preferences" command
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read
this important communication.
[patch]
Mock_Up_V01
patch_ Bug_303001_Draft_3.txt (text/plain), 79.78 KB, created by
Hitesh
on 2010-10-27 03:23:49 EDT
(
hide
)
Description:
Mock_Up_V01
Filename:
MIME Type:
Creator:
Hitesh
Created:
2010-10-27 03:23:49 EDT
Size:
79.78 KB
patch
obsolete
>### 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 27 Oct 2010 07:15:02 -0000 >@@ -1850,16 +1850,6 @@ > mnemonic="%command.configureColumns.mnemonic" > style="push"> > </command> >- <command >- commandId="org.eclipse.ui.window.preferences" >- label="%command.preferences.label" >- mnemonic="%command.preferences.mnemonic" >- style="push"> >- <parameter >- name="preferencePageId" >- value="org.eclipse.ui.ide.markers"> >- </parameter> >- </command> > </menuContribution> > <menuContribution > locationURI="menu:org.eclipse.ui.views.TaskList"> >@@ -1913,16 +1903,6 @@ > mnemonic="%command.configureColumns.mnemonic" > style="push"> > </command> >- <command >- commandId="org.eclipse.ui.window.preferences" >- label="%command.preferences.label" >- mnemonic="%command.preferences.mnemonic" >- style="push"> >- <parameter >- name="preferencePageId" >- value="org.eclipse.ui.ide.markers"> >- </parameter> >- </command> > </menuContribution> > <menuContribution > locationURI="menu:org.eclipse.ui.views.BookmarkView"> >@@ -1986,16 +1966,6 @@ > mnemonic="%command.configureColumns.mnemonic" > style="push"> > </command> >- <command >- commandId="org.eclipse.ui.window.preferences" >- label="%command.preferences.label" >- mnemonic="%command.preferences.mnemonic" >- style="push"> >- <parameter >- name="preferencePageId" >- value="org.eclipse.ui.ide.markers"> >- </parameter> >- </command> > </menuContribution> > <menuContribution > locationURI="menu:org.eclipse.ui.views.AllMarkersView"> >@@ -2049,16 +2019,6 @@ > mnemonic="%command.configureColumns.mnemonic" > style="push"> > </command> >- <command >- commandId="org.eclipse.ui.window.preferences" >- label="%command.preferences.label" >- mnemonic="%command.preferences.mnemonic" >- style="push"> >- <parameter >- name="preferencePageId" >- value="org.eclipse.ui.ide.markers"> >- </parameter> >- </command> > </menuContribution> > </extension> > <extension >@@ -2240,18 +2200,6 @@ > </iterate> > </enabledWhen> > </handler> >- <handler >- class="org.eclipse.ui.internal.views.markers.MarkerPreferencesHandler" >- commandId="org.eclipse.ui.window.preferences"> >- <activeWhen> >- <with >- variable="activePart"> >- <instanceof >- value="org.eclipse.ui.views.markers.MarkerSupportView"> >- </instanceof> >- </with> >- </activeWhen> >- </handler> > </extension> > <extension > point="org.eclipse.core.expressions.propertyTesters"> >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 27 Oct 2010 07:15:02 -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 27 Oct 2010 07:15:04 -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) >@@ -334,6 +324,33 @@ > 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); >+ } >+ >+ return columnWidth; >+ } > > /* > * (non-Javadoc) >@@ -1460,11 +1477,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 27 Oct 2010 07:15:04 -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 27 Oct 2010 07:15:04 -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 = visibleFields[i].field >+ .getDefaultColumnWidth(extendedView.getViewer() >+ .getControl()); >+ } else { >+ 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], i); >+ } >+ 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,1135 @@ >+/******************************************************************************* >+ * 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.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.events.ModifyEvent; >+import org.eclipse.swt.events.ModifyListener; >+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. >+ * >+ * @since 3.7 >+ * >+ * @author Hitesh Soliwal >+ * >+ */ >+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) { >+ String string = isValidNumber(event); >+ if (string != null) { >+ setValid(false, string); >+ if (event.type == SWT.FocusOut) { >+ Text text = (Text) event.widget; >+ text.setText(intialValue != null ? intialValue : Integer >+ .toString(0)); >+ text.setFocus(); >+ text.selectAll(); >+ } else { >+ event.doit = false; >+ } >+ return; >+ } else if (event.type == SWT.FocusOut) { >+ Text text = (Text) event.widget; >+ intialValue = text.getText().trim(); >+ } else if (event.type == SWT.FocusIn) { >+ intialValue = string; >+ } >+ setValid(true, null); >+ } >+ >+ private String isValidNumber(Event event) { >+ Text text = (Text) event.widget; >+ String value = text.getText().trim(); >+ switch (event.type) { >+ case SWT.KeyDown: >+ return ((Character.isISOControl(event.character) && value >+ .length() != 0) || Character.isDigit(event.character)) ? null >+ : errorMessage(); >+ case SWT.FocusOut: >+ if (value.length() == 0) { >+ text.setText(intialValue != null ? intialValue : Integer >+ .toString(0)); >+ text.selectAll(); >+ return null; >+ } >+ try { >+ Integer.parseInt(value); >+ return null; >+ } catch (Exception e) { >+ return e.getLocalizedMessage(); >+ } >+ } >+ return null; >+ } >+ }; >+ >+ /** >+ * 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); >+ >+ return dialogArea; >+ } >+ >+ /** >+ * 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.FocusIn, postivIntTextListener); >+ limitEditor.addListener(SWT.FocusOut, postivIntTextListener); >+ limitEditor.addListener(SWT.KeyDown, postivIntTextListener); >+ limitEditor.addModifyListener(new ModifyListener() { >+ public void modifyText(ModifyEvent e) { >+ setLimitValue(Integer.parseInt(limitEditor.getText().trim())); >+ } >+ }); >+ 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); >+ composite.setLayout(new GridLayout(1, true)); >+ composite.setLayoutData(new GridData(GridData.FILL_VERTICAL)); >+ 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.HORIZONTAL_ALIGN_BEGINNING); >+ gridData.widthHint = convertWidthInCharsToPixels(5); >+ widthText.setLayoutData(gridData); >+ widthText.addListener(SWT.FocusIn, postivIntTextListener); >+ widthText.addListener(SWT.FocusOut, postivIntTextListener); >+ widthText.addListener(SWT.KeyDown, postivIntTextListener); >+ widthText.addModifyListener(new ModifyListener() { >+ public void modifyText(ModifyEvent e) { >+ if (widthText.isEnabled()) { >+ Object data = ((IStructuredSelection) visibleViewer >+ .getSelection()).getFirstElement(); >+ if (data != null) { >+ IColumnUpdater updater = getColumnUpdater(); >+ updater.setColumnWidth(data, >+ Integer.parseInt(widthText.getText().trim())); >+ } >+ } >+ } >+ }); >+ 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 state >+ */ >+ void setValid(boolean state, String errorMessage) { >+ if (state) { >+ messageLabel.setImage(JFaceResources >+ .getImage(Dialog.DLG_IMG_MESSAGE_INFO)); >+ messageLabel >+ .setText(MarkerMessages.MarkerPreferences_Zero_Or_Blank_Value_Indicates_No_Limit); >+ } else { >+ messageLabel.setImage(JFaceResources >+ .getImage(Dialog.DLG_IMG_MESSAGE_ERROR)); >+ messageLabel.setText(errorMessage); >+ } >+ } >+ >+ /* >+ * (non-Javadoc) >+ * >+ * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults() >+ */ >+ protected void performDefaults() { >+ refreshViewers(); >+ super.performDefaults(); >+ } >+ >+ /** >+ * 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) { >+ 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()); >+ } >+ >+ 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; >+ } >+ >+ /** >+ * @return Returns the error message to display for a wrong limit value. >+ */ >+ String errorMessage() { >+ return JFaceResources.getString("IntegerFieldEditor.errorMessage"); //$NON-NLS-1$ >+ } >+ >+ /** >+ * 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/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 27 Oct 2010 07:15:10 -0000 >@@ -219,6 +219,7 @@ > public static String MarkerPreferences_VisibleColumnsTitle; > public static String MarkerPreferences_HiddenColumnsTitle; > public static String MarkerPreferences_AtLeastOneVisibleColumn; >+ public static String MarkerPreferences_Zero_Or_Blank_Value_Indicates_No_Limit; > > 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 27 Oct 2010 07:15:10 -0000 >@@ -203,6 +203,7 @@ > MarkerPreferences_VisibleColumnsTitle = &Show > MarkerPreferences_HiddenColumnsTitle = &Hide > MarkerPreferences_AtLeastOneVisibleColumn = There must be at least one visible column. >+MarkerPreferences_Zero_Or_Blank_Value_Indicates_No_Limit = Please enter a positive integer (a zero or blank can be used to disable the limit). > > ProblemFilterDialog_System_Filters_Title = System filte&rs: > ProblemFilterDialog_All_Problems = Enabled for all problems
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 303001
: 181802