### Eclipse Workspace Patch 1.0 #P org.eclipse.ui.ide 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.52 diff -u -r1.52 ExtendedMarkersView.java --- src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java 19 Nov 2010 15:21:21 -0000 1.52 +++ src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java 19 Nov 2010 18:31:18 -0000 @@ -289,15 +289,14 @@ if (memento != null){ columnWidths = memento.getChild(TAG_COLUMN_WIDTHS); } - int columnWidth = -1; - if(i < widths.length){ - columnWidth = widths[i]; - }else{ - columnWidth = getFieldWidth(markerField, columnWidth); - } + + //adjust the column width + int columnWidth = i < widths.length ? widths[i] : -1; + columnWidth = getFieldWidth(markerField, columnWidth, false); if (columnWidths != null) { - //save it - columnWidths.putInteger(markerField.getConfigurationElement().getAttribute( + // save it + columnWidths.putInteger( + markerField.getConfigurationElement().getAttribute( MarkerSupportInternalUtilities.ATTRIBUTE_ID), columnWidth); } // Take trim into account if we are using the default value, but not @@ -307,7 +306,6 @@ .getDefaultColumnWidth(tree), true, true)); else layout.addColumnData(new ColumnPixelData(columnWidth, true)); - } // Remove extra columns @@ -323,11 +321,19 @@ tree.layout(true); } - - int getFieldWidth(MarkerField markerField, int columnWidth) { + + /** + * + * @param markerField + * @param preferredWidth + * @param considerUIWidths + * @return desired width for the column representing markerField + */ + int getFieldWidth(MarkerField markerField, int preferredWidth, + boolean considerUIWidths) { Tree tree = getViewer().getTree(); - if (columnWidth < 0 && memento != null) { + if (preferredWidth < 0 && memento != null) { IMemento columnWidths = memento.getChild(TAG_COLUMN_WIDTHS); if (columnWidths != null) { Integer value = columnWidths.getInteger(markerField @@ -335,26 +341,29 @@ MarkerSupportInternalUtilities.ATTRIBUTE_ID)); // Make sure we get a useful value if (value != null && value.intValue() > 0) - columnWidth = value.intValue(); + preferredWidth = value.intValue(); } } - if (columnWidth <= 0) { + if (preferredWidth <= 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), + preferredWidth = 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; + if (considerUIWidths) { + TreeColumn[] columns = tree.getColumns(); + for (int i = 0; i < columns.length; i++) { + if (markerField.equals(columns[i].getData(MARKER_FIELD))) { + preferredWidth = Math.max(preferredWidth, + columns[i].getWidth()); + return preferredWidth; + } } } - return columnWidth; + return preferredWidth; } /* Index: src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java,v retrieving revision 1.1 diff -u -r1.1 MarkersViewSettingDialog.java --- src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java 19 Nov 2010 14:42:41 -0000 1.1 +++ src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java 19 Nov 2010 18:31:22 -0000 @@ -47,9 +47,7 @@ public MarkersViewSettingDialog(ExtendedMarkersView view) { super(view.getSite().getShell()); this.extendedView = view; - initialize(convert(extendedView.getBuilder().getGenerator() - .getVisibleFields()), convert(extendedView.getBuilder() - .getGenerator().getAllFields()), false); + initialize(false); setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore() .getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE)); } @@ -111,10 +109,10 @@ int i = 0; Iterator iterator = visible.iterator(); while (iterator.hasNext()) { - widths[i++] = ((FieldEntry) iterator.next()).width; + widths[i] = ((FieldEntry) iterator.next()).width; + i++; } return widths; - } private Collection getVisibleFields() { @@ -133,40 +131,64 @@ * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults() */ protected void performDefaults() { - initialize(convert(extendedView.getBuilder().getGenerator() - .getInitialVisible()), convert(extendedView.getBuilder() - .getGenerator().getAllFields()), true); + initialize(true); setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore() .getDefaultInt(IDEInternalPreferences.MARKER_LIMITS_VALUE)); super.performDefaults(); } /** - * @param visibleFields - * @param allFields */ - void initialize(FieldEntry[] visibleFields, FieldEntry[] allFields, - boolean defaultWidths) { + void initialize(boolean defaultWidths) { + MarkerField[] allFields = extendedView.getBuilder().getGenerator() + .getAllFields(); + MarkerField[] visibleFields = extendedView.getBuilder().getGenerator() + .getVisibleFields(); + List visible = getVisible(); List nonVisible = getNonVisible(); visible.clear(); nonVisible.clear(); + + FieldEntry entry = null; for (int i = 0; i < allFields.length; i++) { - nonVisible.add(allFields[i]); + if (!contains(visibleFields, allFields[i])) { + entry = new FieldEntry(allFields[i], -1); + if (defaultWidths) { + entry.width = extendedView.getFieldWidth(entry.field, 0, + true); + } else { + entry.width = extendedView.getFieldWidth(entry.field, -1, + true); + } + entry.visible = false; + nonVisible.add(entry); + } } for (int i = 0; i < visibleFields.length; i++) { - nonVisible.remove(visibleFields[i]); - visible.add(visibleFields[i]); - visibleFields[i].visible = true; + entry = new FieldEntry(visibleFields[i], -1); if (defaultWidths) { - visibleFields[i].width = extendedView.getFieldWidth( - visibleFields[i].field, 0); + entry.width = extendedView.getFieldWidth(entry.field, 0, true); } else { - // from a persistent store - visibleFields[i].width = extendedView.getFieldWidth( - visibleFields[i].field, -1); + entry.width = extendedView.getFieldWidth(entry.field, -1, true); + } + entry.visible = true; + visible.add(entry); + } + + } + + /** + * @param visibleFields + * @param field + */ + private boolean contains(MarkerField[] visibleFields, MarkerField field) { + for (int i = 0; i < visibleFields.length; i++) { + if (visibleFields[i].equals(field)) { + return true; } } + return false; } /* @@ -199,7 +221,8 @@ public int getColumnWidth(Object columnObj) { FieldEntry field = (FieldEntry) columnObj; - return extendedView.getFieldWidth(field.field, field.width); + return extendedView.getFieldWidth(field.field, field.width, + true); } public boolean isColumnVisible(Object columnObj) { @@ -248,14 +271,6 @@ }; } - 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; @@ -266,53 +281,5 @@ 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: /cvsroot/eclipse/org.eclipse.ui.ide/src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java,v retrieving revision 1.2 diff -u -r1.2 ViewerColumnsDialog.java --- src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java 19 Nov 2010 14:44:43 -0000 1.2 +++ src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java 19 Nov 2010 18:31:22 -0000 @@ -52,10 +52,10 @@ import org.eclipse.ui.views.markers.internal.MarkerMessages; /** - * This was introduced as a fix to Bug 231081 and related, 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 + * This was introduced as a fix to Bug 231081 and related, 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 * @@ -604,6 +604,14 @@ void handleNonVisibleSelection(ISelection selection) { Object[] nvKeys = ((IStructuredSelection) selection).toArray(); toVisibleBtt.setEnabled(nvKeys.length > 0); + + if (visibleViewer.getControl().isFocusControl() + && getVisible().size() <= 1) { + handleStatusUdpate(IStatus.INFO, + MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn); + } else { + handleStatusUdpate(IStatus.INFO, getDefaultMessage()); + } } /** @@ -729,6 +737,7 @@ nonVisibleViewer.refresh(); handleVisibleSelection(selection); handleNonVisibleSelection(nonVisibleViewer.getSelection()); + } /** @@ -738,7 +747,8 @@ * event from the button click */ protected void handleToNonVisibleButton(Event e) { - if (getVisible().size() <= 1) { + if (visibleViewer.getControl().isFocusControl() + && getVisible().size() <= 1) { handleStatusUdpate(IStatus.INFO, MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn); return; @@ -758,7 +768,6 @@ visibleViewer.refresh(); handleVisibleSelection(visibleViewer.getSelection()); handleNonVisibleSelection(nonVisibleViewer.getSelection()); - handleStatusUdpate(IStatus.INFO, getDefaultMessage()); } void updateIndices(List list) {