/**
* Copyright (c) 2005-2012 by Appcelerator, Inc. All Rights Reserved.
* Licensed under the terms of the Eclipse Public License (EPL).
* Please see the license.txt included with this distribution for details.
* Any modifications to this file must keep this entire header intact.
*/
package org.python.pydev.shared_interactive_console.console.ui.internal;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.dialogs.SelectionDialog;
import org.python.pydev.shared_interactive_console.console.ScriptConsoleHistory;
import org.python.pydev.shared_interactive_console.console.ui.internal.fromeclipse.HistoryElementListSelectionDialog;
/**
* Helper class to select one element from the history
*
* @author Fabio
*/
public class ScriptConsoleHistorySelector {
/**
* Selects a list of strings from a list of strings
*
* @param history the history that may be selected for execution
* @return null if none was selected or a list of strings with the commands to be executed
*/
public static List<String> select(final ScriptConsoleHistory history) {
//created the HistoryElementListSelectionDialog instead of using the ElementListSelectionDialog directly because:
//1. No sorting should be enabled for choosing the history
//2. The last element should be the one selected by default
//3. The list should be below the commands
//4. The up arrow should be the one used to get focus in the elements
HistoryElementListSelectionDialog dialog = new HistoryElementListSelectionDialog(Display.getDefault()
.getActiveShell(), getLabelProvider()) {
private static final int CLEAR_HISTORY_ID = IDialogConstants.CLIENT_ID + 1;
@Override
protected void createButtonsForButtonBar(Composite parent) {
super.createButtonsForButtonBar(parent);
createButton(parent, CLEAR_HISTORY_ID, "Clear History", false); //$NON-NLS-1$
}
@Override
protected void buttonPressed(int buttonId) {
if (buttonId == CLEAR_HISTORY_ID) {
history.clear();
// After deleting the history, close the dialog with a cancel return code
cancelPressed();
}
super.buttonPressed(buttonId);
}
};
dialog.setTitle("Command history");
final List<String> selectFrom = history.getAsList();
dialog.setElements(selectFrom.toArray(new String[0]));
dialog.setEmptySelectionMessage("No command selected");
dialog.setAllowDuplicates(true);
dialog.setBlockOnOpen(true);
dialog.setSize(100, 25); //in number of chars
dialog.setMessage("Select command(s) to be executed");
dialog.setMultipleSelection(true);
if (dialog.open() == SelectionDialog.OK) {
Object[] result = dialog.getResult();
if (result != null) {
ArrayList<String> list = new ArrayList<String>();
for (Object o : result) {
list.add(o.toString());
}
return list;
}
}
return null;
}
/**
* @return a label provider that'll show the history command as a string
*/
private static ILabelProvider getLabelProvider() {
return new ILabelProvider() {
@Override
public Image getImage(Object element) {
return null;
}
@Override
public String getText(Object element) {
return element.toString();
}
@Override
public void addListener(ILabelProviderListener listener) {
}
@Override
public void dispose() {
}
@Override
public boolean isLabelProperty(Object element, String property) {
return true;
}
@Override
public void removeListener(ILabelProviderListener listener) {
}
};
}
}