package name.abuchen.portfolio.ui.util.viewers; import java.util.Comparator; import java.util.List; import org.eclipse.jface.viewers.CellLabelProvider; import org.eclipse.swt.widgets.Shell; public class Column { public interface Options<E> { List<E> getOptions(); /** * Converts serialized option back into option instance. */ E valueOf(String s); /** * Converts an option instance into a string (to store column * configuration). */ String toString(E option); String getColumnLabel(E option); String getMenuLabel(E option); String getDescription(E option); boolean canCreateNewOptions(); E createNewOption(Shell shell); } /** * Uniquely identifies a column to store/load a configuration */ private String id; private String label; private int style; private int defaultWidth; private boolean isVisible = true; private boolean isRemovable = true; private ColumnViewerSorter sorter; private Integer defaultSortDirection; private CellLabelProvider labelProvider; private Options<Object> options; private String groupLabel; private String menuLabel; private String description; private ColumnEditingSupport editingSupport; public Column(String label, int style, int defaultWidth) { this(null, label, style, defaultWidth); } public Column(String id, String label, int style, int defaultWidth) { this.id = id; this.label = label; this.style = style; this.defaultWidth = defaultWidth; } /* package */String getId() { return id; } /* package */void setId(String id) { this.id = id; } public void setVisible(boolean isVisible) { this.isVisible = isVisible; } public void setRemovable(boolean isRemovable) { this.isRemovable = isRemovable; } public void setSorter(ColumnViewerSorter sorter) { this.sorter = sorter; } public void setComparator(Comparator<Object> comparator) { this.sorter = ColumnViewerSorter.create(comparator); } public void setSorter(ColumnViewerSorter sorter, int direction) { setSorter(sorter); this.defaultSortDirection = direction; } public void setLabelProvider(CellLabelProvider labelProvider) { this.labelProvider = labelProvider; } @SuppressWarnings("unchecked") public void setOptions(Options<?> options) { this.options = (Options<Object>) options; } public void setGroupLabel(String groupLabel) { this.groupLabel = groupLabel; } public void setMenuLabel(String menuLabel) { this.menuLabel = menuLabel; } public void setDescription(String description) { this.description = description; } public void setEditingSupport(ColumnEditingSupport editingSupport) { this.editingSupport = editingSupport; } /* package */String getLabel() { return label; } /* package */String getMenuLabel() { return menuLabel != null ? menuLabel : label; } /* package */String getDescription() { return description; } /* package */int getStyle() { return style; } /* package */int getDefaultWidth() { return defaultWidth; } /* package */boolean isVisible() { return isVisible; } /* package */boolean isRemovable() { return isRemovable; } public ColumnViewerSorter getSorter() { return sorter; } /* package */Integer getDefaultSortDirection() { return defaultSortDirection; } /* package */CellLabelProvider getLabelProvider() { return labelProvider; } /* package */boolean hasOptions() { return options != null; } /* package */Options<Object> getOptions() { return options; } /* package */String getGroupLabel() { return groupLabel; } public ColumnEditingSupport getEditingSupport() { return editingSupport; } /* package */String getToolTipText() { if (description != null) return description; else if (menuLabel != null) return menuLabel; else return null; } }