View | Details | Raw Unified | Return to bug 231081 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/ui/internal/views/markers/ExtendedMarkersView.java (-21 / +30 lines)
Lines 289-303 Link Here
289
			if (memento != null){
289
			if (memento != null){
290
				columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
290
				columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
291
			}
291
			}
292
			int columnWidth = -1;
292
			
293
			if(i < widths.length){
293
			//adjust the column width
294
				columnWidth = widths[i];
294
			int columnWidth = i < widths.length ? widths[i] : -1;
295
			}else{
295
			columnWidth = getFieldWidth(markerField, columnWidth, false);
296
				columnWidth = getFieldWidth(markerField, columnWidth);
297
			}
298
			if (columnWidths != null) {
296
			if (columnWidths != null) {
299
				//save it
297
				// save it
300
				columnWidths.putInteger(markerField.getConfigurationElement().getAttribute(
298
				columnWidths.putInteger(
299
						markerField.getConfigurationElement().getAttribute(
301
						MarkerSupportInternalUtilities.ATTRIBUTE_ID), columnWidth);
300
						MarkerSupportInternalUtilities.ATTRIBUTE_ID), columnWidth);
302
			}
301
			}
303
			// Take trim into account if we are using the default value, but not
302
			// Take trim into account if we are using the default value, but not
Lines 307-313 Link Here
307
						.getDefaultColumnWidth(tree), true, true));
306
						.getDefaultColumnWidth(tree), true, true));
308
			else
307
			else
309
				layout.addColumnData(new ColumnPixelData(columnWidth, true));
308
				layout.addColumnData(new ColumnPixelData(columnWidth, true));
310
311
		}
309
		}
312
310
313
		// Remove extra columns
311
		// Remove extra columns
Lines 323-333 Link Here
323
		tree.layout(true);
321
		tree.layout(true);
324
322
325
	}
323
	}
326
	
324
327
	int getFieldWidth(MarkerField markerField, int columnWidth) {
325
	/**
326
	 * 
327
	 * @param markerField
328
	 * @param preferredWidth
329
	 * @param considerUIWidths
330
	 * @return desired width for the column representing markerField
331
	 */
332
	int getFieldWidth(MarkerField markerField, int preferredWidth,
333
			boolean considerUIWidths) {
328
		Tree tree = getViewer().getTree();
334
		Tree tree = getViewer().getTree();
329
335
330
		if (columnWidth < 0 && memento != null) {
336
		if (preferredWidth < 0 && memento != null) {
331
			IMemento columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
337
			IMemento columnWidths = memento.getChild(TAG_COLUMN_WIDTHS);
332
			if (columnWidths != null) {
338
			if (columnWidths != null) {
333
				Integer value = columnWidths.getInteger(markerField
339
				Integer value = columnWidths.getInteger(markerField
Lines 335-360 Link Here
335
								MarkerSupportInternalUtilities.ATTRIBUTE_ID));
341
								MarkerSupportInternalUtilities.ATTRIBUTE_ID));
336
				// Make sure we get a useful value
342
				// Make sure we get a useful value
337
				if (value != null && value.intValue() > 0)
343
				if (value != null && value.intValue() > 0)
338
					columnWidth = value.intValue();
344
					preferredWidth = value.intValue();
339
			}
345
			}
340
		}
346
		}
341
		if (columnWidth <= 0) {
347
		if (preferredWidth <= 0) {
342
			// Compute and store a font metric
348
			// Compute and store a font metric
343
			GC gc = new GC(tree);
349
			GC gc = new GC(tree);
344
			gc.setFont(tree.getFont());
350
			gc.setFont(tree.getFont());
345
			FontMetrics fontMetrics = gc.getFontMetrics();
351
			FontMetrics fontMetrics = gc.getFontMetrics();
346
			gc.dispose();
352
			gc.dispose();
347
			columnWidth = Math.max(markerField.getDefaultColumnWidth(tree),
353
			preferredWidth = Math.max(markerField.getDefaultColumnWidth(tree),
348
					fontMetrics.getAverageCharWidth() * 5);
354
					fontMetrics.getAverageCharWidth() * 5);
349
		}
355
		}
350
		TreeColumn[] columns = tree.getColumns();
356
		if (considerUIWidths) {
351
		for (int i = 0; i < columns.length; i++) {
357
			TreeColumn[] columns = tree.getColumns();
352
			if (MARKER_FIELD.equals(columns[i].getData(MARKER_FIELD))) {
358
			for (int i = 0; i < columns.length; i++) {
353
				columnWidth = Math.max(columnWidth, columns[i].getWidth());
359
				if (markerField.equals(columns[i].getData(MARKER_FIELD))) {
354
				return columnWidth;
360
					preferredWidth = Math.max(preferredWidth,
361
							columns[i].getWidth());
362
					return preferredWidth;
363
				}
355
			}
364
			}
356
		}
365
		}
357
		return columnWidth;
366
		return preferredWidth;
358
	}
367
	}
359
368
360
	/*
369
	/*
(-)src/org/eclipse/ui/internal/views/markers/MarkersViewSettingDialog.java (-78 / +45 lines)
Lines 47-55 Link Here
47
	public MarkersViewSettingDialog(ExtendedMarkersView view) {
47
	public MarkersViewSettingDialog(ExtendedMarkersView view) {
48
		super(view.getSite().getShell());
48
		super(view.getSite().getShell());
49
		this.extendedView = view;
49
		this.extendedView = view;
50
		initialize(convert(extendedView.getBuilder().getGenerator()
50
		initialize(false);
51
				.getVisibleFields()), convert(extendedView.getBuilder()
52
				.getGenerator().getAllFields()), false);
53
		setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
51
		setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
54
				.getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
52
				.getInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
55
	}
53
	}
Lines 111-120 Link Here
111
		int i = 0;
109
		int i = 0;
112
		Iterator iterator = visible.iterator();
110
		Iterator iterator = visible.iterator();
113
		while (iterator.hasNext()) {
111
		while (iterator.hasNext()) {
114
			widths[i++] = ((FieldEntry) iterator.next()).width;
112
			widths[i] = ((FieldEntry) iterator.next()).width;
113
			i++;
115
		}
114
		}
116
		return widths;
115
		return widths;
117
118
	}
116
	}
119
117
120
	private Collection getVisibleFields() {
118
	private Collection getVisibleFields() {
Lines 133-172 Link Here
133
	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
131
	 * @see org.eclipse.ui.preferences.ViewSettingsDialog#performDefaults()
134
	 */
132
	 */
135
	protected void performDefaults() {
133
	protected void performDefaults() {
136
		initialize(convert(extendedView.getBuilder().getGenerator()
134
		initialize(true);
137
				.getInitialVisible()), convert(extendedView.getBuilder()
138
				.getGenerator().getAllFields()), true);
139
		setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
135
		setLimitValue(IDEWorkbenchPlugin.getDefault().getPreferenceStore()
140
				.getDefaultInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
136
				.getDefaultInt(IDEInternalPreferences.MARKER_LIMITS_VALUE));
141
		super.performDefaults();
137
		super.performDefaults();
142
	}
138
	}
143
139
144
	/**
140
	/**
145
	 * @param visibleFields
146
	 * @param allFields
147
	 */
141
	 */
148
	void initialize(FieldEntry[] visibleFields, FieldEntry[] allFields,
142
	void initialize(boolean defaultWidths) {
149
			boolean defaultWidths) {
143
		MarkerField[] allFields = extendedView.getBuilder().getGenerator()
144
				.getAllFields();
145
		MarkerField[] visibleFields = extendedView.getBuilder().getGenerator()
146
				.getVisibleFields();
147
150
		List visible = getVisible();
148
		List visible = getVisible();
151
		List nonVisible = getNonVisible();
149
		List nonVisible = getNonVisible();
152
		visible.clear();
150
		visible.clear();
153
		nonVisible.clear();
151
		nonVisible.clear();
152
153
		FieldEntry entry = null;
154
		for (int i = 0; i < allFields.length; i++) {
154
		for (int i = 0; i < allFields.length; i++) {
155
			nonVisible.add(allFields[i]);
155
			if (!contains(visibleFields, allFields[i])) {
156
				entry = new FieldEntry(allFields[i], -1);
157
				if (defaultWidths) {
158
					entry.width = extendedView.getFieldWidth(entry.field, 0,
159
							true);
160
				} else {
161
					entry.width = extendedView.getFieldWidth(entry.field, -1,
162
							true);
163
				}
164
				entry.visible = false;
165
				nonVisible.add(entry);
166
			}
156
		}
167
		}
157
		for (int i = 0; i < visibleFields.length; i++) {
168
		for (int i = 0; i < visibleFields.length; i++) {
158
			nonVisible.remove(visibleFields[i]);
169
			entry = new FieldEntry(visibleFields[i], -1);
159
			visible.add(visibleFields[i]);
160
			visibleFields[i].visible = true;
161
			if (defaultWidths) {
170
			if (defaultWidths) {
162
				visibleFields[i].width = extendedView.getFieldWidth(
171
				entry.width = extendedView.getFieldWidth(entry.field, 0, true);
163
						visibleFields[i].field, 0);
164
			} else {
172
			} else {
165
				// from a persistent store
173
				entry.width = extendedView.getFieldWidth(entry.field, -1, true);
166
				visibleFields[i].width = extendedView.getFieldWidth(
174
			}
167
						visibleFields[i].field, -1);
175
			entry.visible = true;
176
			visible.add(entry);
177
		}
178
179
	}
180
181
	/**
182
	 * @param visibleFields
183
	 * @param field
184
	 */
185
	private boolean contains(MarkerField[] visibleFields, MarkerField field) {
186
		for (int i = 0; i < visibleFields.length; i++) {
187
			if (visibleFields[i].equals(field)) {
188
				return true;
168
			}
189
			}
169
		}
190
		}
191
		return false;
170
	}
192
	}
171
193
172
	/*
194
	/*
Lines 199-205 Link Here
199
221
200
			public int getColumnWidth(Object columnObj) {
222
			public int getColumnWidth(Object columnObj) {
201
				FieldEntry field = (FieldEntry) columnObj;
223
				FieldEntry field = (FieldEntry) columnObj;
202
				return extendedView.getFieldWidth(field.field, field.width);
224
				return extendedView.getFieldWidth(field.field, field.width,
225
						true);
203
			}
226
			}
204
227
205
			public boolean isColumnVisible(Object columnObj) {
228
			public boolean isColumnVisible(Object columnObj) {
Lines 248-261 Link Here
248
		};
271
		};
249
	}
272
	}
250
273
251
	private static FieldEntry[] convert(Object[] fields) {
252
		FieldEntry[] entries = new FieldEntry[fields.length];
253
		for (int i = 0; i < entries.length; i++) {
254
			entries[i] = new FieldEntry((MarkerField) fields[i], -1);
255
		}
256
		return entries;
257
	}
258
259
	static class FieldEntry {
274
	static class FieldEntry {
260
		final MarkerField field;
275
		final MarkerField field;
261
		int width;
276
		int width;
Lines 266-318 Link Here
266
			this.width = width;
281
			this.width = width;
267
			visible = false;
282
			visible = false;
268
		}
283
		}
269
270
		/*
271
		 * (non-Javadoc)
272
		 * 
273
		 * @see java.lang.Object#toString()
274
		 */
275
		public String toString() {
276
			// TODO Auto-generated method stub
277
			return super.toString();
278
		}
279
280
		/*
281
		 * (non-Javadoc)
282
		 * 
283
		 * @see java.lang.Object#hashCode()
284
		 */
285
		public int hashCode() {
286
			final int prime = 31;
287
			int result = 1;
288
			result = prime * result + ((field == null) ? 0 : field.hashCode());
289
			return result;
290
		}
291
292
		/*
293
		 * (non-Javadoc)
294
		 * 
295
		 * @see java.lang.Object#equals(java.lang.Object)
296
		 */
297
		public boolean equals(Object obj) {
298
			if (this == obj) {
299
				return true;
300
			}
301
			if (obj == null) {
302
				return false;
303
			}
304
			if (!(obj instanceof FieldEntry)) {
305
				return false;
306
			}
307
			FieldEntry other = (FieldEntry) obj;
308
			if (field == null) {
309
				if (other.field != null) {
310
					return false;
311
				}
312
			} else if (!field.equals(other.field)) {
313
				return false;
314
			}
315
			return true;
316
		}
317
	}
284
	}
318
}
285
}
(-)src/org/eclipse/ui/internal/views/markers/ViewerColumnsDialog.java (-6 / +15 lines)
Lines 52-61 Link Here
52
import org.eclipse.ui.views.markers.internal.MarkerMessages;
52
import org.eclipse.ui.views.markers.internal.MarkerMessages;
53
53
54
/**
54
/**
55
 * This was introduced as a fix to Bug 231081 and related, as an effort to combine the columns and
55
 * This was introduced as a fix to Bug 231081 and related, as an effort to
56
 * preference dialogs into one. It should be noted that the class can be re-used
56
 * combine the columns and preference dialogs into one. It should be noted that
57
 * or turned into a tool for column viewers in general, but with some
57
 * the class can be re-used or turned into a tool for column viewers in general,
58
 * modifications. See example attached at the end of this class
58
 * but with some modifications. See example attached at the end of this class
59
 * 
59
 * 
60
 * @since 3.7
60
 * @since 3.7
61
 * 
61
 * 
Lines 604-609 Link Here
604
	void handleNonVisibleSelection(ISelection selection) {
604
	void handleNonVisibleSelection(ISelection selection) {
605
		Object[] nvKeys = ((IStructuredSelection) selection).toArray();
605
		Object[] nvKeys = ((IStructuredSelection) selection).toArray();
606
		toVisibleBtt.setEnabled(nvKeys.length > 0);
606
		toVisibleBtt.setEnabled(nvKeys.length > 0);
607
608
		if (visibleViewer.getControl().isFocusControl()
609
				&& getVisible().size() <= 1) {
610
			handleStatusUdpate(IStatus.INFO,
611
					MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
612
		} else {
613
			handleStatusUdpate(IStatus.INFO, getDefaultMessage());
614
		}
607
	}
615
	}
608
616
609
	/**
617
	/**
Lines 729-734 Link Here
729
		nonVisibleViewer.refresh();
737
		nonVisibleViewer.refresh();
730
		handleVisibleSelection(selection);
738
		handleVisibleSelection(selection);
731
		handleNonVisibleSelection(nonVisibleViewer.getSelection());
739
		handleNonVisibleSelection(nonVisibleViewer.getSelection());
740
732
	}
741
	}
733
742
734
	/**
743
	/**
Lines 738-744 Link Here
738
	 *            event from the button click
747
	 *            event from the button click
739
	 */
748
	 */
740
	protected void handleToNonVisibleButton(Event e) {
749
	protected void handleToNonVisibleButton(Event e) {
741
		if (getVisible().size() <= 1) {
750
		if (visibleViewer.getControl().isFocusControl()
751
				&& getVisible().size() <= 1) {
742
			handleStatusUdpate(IStatus.INFO,
752
			handleStatusUdpate(IStatus.INFO,
743
					MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
753
					MarkerMessages.MarkerPreferences_AtLeastOneVisibleColumn);
744
			return;
754
			return;
Lines 758-764 Link Here
758
		visibleViewer.refresh();
768
		visibleViewer.refresh();
759
		handleVisibleSelection(visibleViewer.getSelection());
769
		handleVisibleSelection(visibleViewer.getSelection());
760
		handleNonVisibleSelection(nonVisibleViewer.getSelection());
770
		handleNonVisibleSelection(nonVisibleViewer.getSelection());
761
		handleStatusUdpate(IStatus.INFO, getDefaultMessage());
762
	}
771
	}
763
772
764
	void updateIndices(List list) {
773
	void updateIndices(List list) {

Return to bug 231081