package net.sourceforge.pmd.eclipse.ui.preferences.editors;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import net.sourceforge.pmd.eclipse.plugin.PMDPlugin;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
/**
*
* @author Brian Remedios
*/
public class SWTUtil {
private static PMDPlugin plugin = PMDPlugin.getDefault();
private static final String TOOLTIP_SUFFIX = ".tooltip";
private SWTUtil() {}
public static void logInfo(String message) {
plugin.logInformation(message);
}
public static void logError(String message, Throwable error) {
plugin.logError(message, error);
}
/**
* Let the buttons operate as a radio group, with only one button
* selected at a time.
*
* @param buttons
*/
public static void asRadioButtons(final Collection<Button> buttons) {
Listener listener = new Listener() {
public void handleEvent(Event e) {
for (Button button : buttons) {
if (e.widget != button) {
button.setSelection (false);
}
}
((Button) e.widget).setSelection (true);
}
};
for (Button button : buttons) button.addListener(SWT.Selection, listener);
}
// TODO move this to to Collections utility
public static Set<String> asStringSet(String input, char separator) {
List<String> values = Arrays.asList(input.split(""+separator));
return new HashSet<String>(values);
}
// TODO move this to to Collections utility
public static String asString(Collection<String> values, char separator) {
if (values == null || values.isEmpty()) return "";
String[] strings = values.toArray(new String[values.size()]);
StringBuilder sb = new StringBuilder(strings[0]);
for (int i=1; i<strings.length; i++) {
sb.append(separator).append(strings[i]);
}
return sb.toString();
}
public static void setEnabled(Control control, boolean flag) {
if (control == null || control.isDisposed()) return;
control.setEnabled(flag);
}
public static void setEnabled(Control[] controls, boolean state) {
for (Control control : controls) {
setEnabled(control, state);
}
}
public static void setEnabled(Collection<Control> controls, boolean flag) {
for (Control control : controls) setEnabled(control, flag);
}
public static void setEnabledRecursive(Control[] controls, boolean state) {
for (Control control : controls) {
if (control instanceof Composite) {
setEnabledRecursive(((Composite)control).getChildren(), state);
}
setEnabled(control, state);
}
}
public static String stringFor(String key) {
return plugin.getStringTable().getString(key);
}
public static String tooltipFor(String key) {
String ttKey = key + TOOLTIP_SUFFIX;
String tooltip = stringFor(ttKey);
return ttKey.equals(tooltip) ? stringFor(key) : tooltip;
}
public static void releaseListeners(Control control, int listenerType) {
Listener[] listeners = control.getListeners(listenerType);
for (Listener listener : listeners) control.removeListener(listenerType, listener);
}
public static String[] labelsIn(Object[][] items, int columnIndex) {
String[] labels = new String[items.length];
for (int i=0; i<labels.length; i++) labels[i] = items[i][columnIndex].toString();
return labels;
}
public static void deselectAll(Combo combo) {
int count = combo.getItems().length;
for (int i=0; i<count; i++) combo.deselect(i);
}
public static String[] i18lLabelsIn(Object[][] items, int columnIndex) {
String[] labels = labelsIn(items, columnIndex);
String xlation;
for (int i=0; i<labels.length; i++) {
xlation = stringFor(labels[i]);
labels[i] = xlation == null ? labels[i] : xlation;
}
return labels;
}
}