blob: 815fd85680c26b06590b3e0a7b8f75c857ffbe64 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2006, 2013 IBM Corporation and others.
*
* This program and the accompanying materials
* are made available under the terms of the Eclipse Public License 2.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/legal/epl-2.0/
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.debug.internal.ui.actions;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.eclipse.debug.internal.ui.DebugUIPlugin;
import org.eclipse.debug.internal.ui.IDebugHelpContextIds;
import org.eclipse.debug.internal.ui.viewers.model.provisional.IColumnPresentation;
import org.eclipse.debug.internal.ui.viewers.model.provisional.TreeModelViewer;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.LabelProvider;
import org.eclipse.jface.viewers.Viewer;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.graphics.Image;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.eclipse.ui.texteditor.IUpdate;
/**
* Configures visible columns in an asynch tree viewer/
*
* @since 3.2
*/
public class ConfigureColumnsAction extends Action implements IUpdate {
private TreeModelViewer fViewer;
class ColumnContentProvider implements IStructuredContentProvider {
@Override
public Object[] getElements(Object inputElement) {
return ((IColumnPresentation)inputElement).getAvailableColumns();
}
@Override
public void dispose() {
}
@Override
public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {
}
}
class ColumnLabelProvider extends LabelProvider {
private Map<ImageDescriptor, Image> fImages = new HashMap<>();
@Override
public Image getImage(Object element) {
ImageDescriptor imageDescriptor = fViewer.getColumnPresentation().getImageDescriptor((String)element);
if (imageDescriptor != null) {
Image image = fImages.get(imageDescriptor);
if (image == null) {
image = imageDescriptor.createImage();
fImages.put(imageDescriptor, image);
}
return image;
}
return null;
}
@Override
public String getText(Object element) {
return fViewer.getColumnPresentation().getHeader((String)element);
}
@Override
public void dispose() {
super.dispose();
for (Image image : fImages.values()) {
image.dispose();
}
fImages.clear();
}
}
public ConfigureColumnsAction(TreeModelViewer viewer) {
setText(ActionMessages.ConfigureColumnsAction_0);
setId(DebugUIPlugin.getUniqueIdentifier() + ".ConfigureColumnsAction"); //$NON-NLS-1$
PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IDebugHelpContextIds.CONFIGURE_COLUMNS_ACTION);
fViewer = viewer;
}
@Override
public void update() {
setEnabled(fViewer.isShowColumns());
}
@Override
public void run() {
ListSelectionDialog dialog = new ListSelectionDialog(
fViewer.getControl().getShell(),
fViewer.getColumnPresentation(),
new ColumnContentProvider(),
new ColumnLabelProvider(),
ActionMessages.ConfigureColumnsAction_1);
PlatformUI.getWorkbench().getHelpSystem().setHelp(this, IDebugHelpContextIds.CONFIGURE_COLUMNS_DIALOG);
String[] visibleColumns = fViewer.getVisibleColumns();
List<String> initialSelection = new ArrayList<>(visibleColumns.length);
for (int i = 0; i < visibleColumns.length; i++) {
initialSelection.add(visibleColumns[i]);
}
dialog.setTitle(ActionMessages.ConfigureColumnsAction_2);
dialog.setInitialElementSelections(initialSelection);
if (dialog.open() == Window.OK) {
Object[] result = dialog.getResult();
if (result.length == 0) {
fViewer.setShowColumns(false);
} else {
String[] ids = new String[result.length];
System.arraycopy(result, 0, ids, 0, result.length);
fViewer.resetColumnSizes(ids);
fViewer.setVisibleColumns(ids);
}
}
}
}