package com.laboki.eclipse.plugin.smartsave.preferences.ui; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ComboViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Composite; abstract class ResponseComboViewer extends ComboViewer { private final LabelProvider labelProvider = new ResponseLabelProvider(); private final ISelectionChangedListener listener = new ResponseSelectionListener(); private final Response[] responses = new Response[] { new Response(Response.YES), new Response(Response.NO), }; protected ResponseComboViewer(final Composite parent) { super(parent, SWT.READ_ONLY); this.updateProperties(); } private void updateProperties() { this.setContentProvider(ArrayContentProvider.getInstance()); this.setLabelProvider(this.labelProvider); this.setInput(this.responses); } protected void startListening() { this.addSelectionChangedListener(this.listener); } protected void stopListening() { this.removeSelectionChangedListener(this.listener); } protected void handleResponseSelection(final SelectionChangedEvent event) {} protected Response[] getResponses() { return this.responses; } private final static class ResponseLabelProvider extends LabelProvider { public ResponseLabelProvider() {} @Override public String getText(final Object element) { return ((Response) element).string(); } } private final class ResponseSelectionListener implements ISelectionChangedListener { public ResponseSelectionListener() {} @Override public void selectionChanged(final SelectionChangedEvent event) { ResponseComboViewer.this.handleResponseSelection(event); } } protected final static class Response { private boolean value; public static final String YES = "yes"; public static final String NO = "no"; public Response(final String response) { if (response.equals(Response.YES)) this.value = true; } public boolean value() { return this.value; } public String string() { if (this.value) return "Yes"; return "No"; } } }