/******************************************************************************* * Copyright (c) 2008 xored software, Inc. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * xored software, Inc. - initial API and Implementation (Alex Panchenko) *******************************************************************************/ package org.eclipse.dltk.ui.formatter.internal; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.ListenerList; import org.eclipse.dltk.compiler.util.Util; import org.eclipse.dltk.ui.formatter.IFormatterControlManager; import org.eclipse.dltk.ui.preferences.ControlBindingManager; import org.eclipse.dltk.ui.preferences.FieldValidators; import org.eclipse.dltk.ui.preferences.IPreferenceDelegate; import org.eclipse.dltk.ui.util.IStatusChangeListener; import org.eclipse.dltk.ui.util.SWTFactory; 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.Label; import org.eclipse.swt.widgets.Text; public class FormatterControlManager implements IFormatterControlManager, IStatusChangeListener { private final IPreferenceDelegate<String> delegate; private final ControlBindingManager<String> bindingManager; private final IStatusChangeListener listener; public FormatterControlManager(IPreferenceDelegate<String> delegate, IStatusChangeListener listener) { this.delegate = delegate; this.bindingManager = new ControlBindingManager<String>(delegate, this); this.listener = listener; } public Button createCheckbox(Composite parent, String key, String text) { return createCheckbox(parent, key, text, 1); } public Button createCheckbox(Composite parent, String key, String text, int hspan) { Button button = SWTFactory.createCheckButton(parent, text, null, false, hspan); bindingManager.bindControl(button, key, null); return button; } public Combo createCombo(Composite parent, String key, String label, String[] items) { final Label labelControl = SWTFactory.createLabel(parent, label, 1); Combo combo = SWTFactory.createCombo(parent, SWT.READ_ONLY | SWT.BORDER, 1, items); bindingManager.bindControl(combo, key); registerAssociatedLabel(combo, labelControl); return combo; } public Combo createCombo(Composite parent, String key, String label, String[] itemValues, String[] itemLabels) { final Label labelControl = SWTFactory.createLabel(parent, label, 1); Combo combo = SWTFactory.createCombo(parent, SWT.READ_ONLY | SWT.BORDER, 1, itemLabels); bindingManager.bindControl(combo, key, itemValues); registerAssociatedLabel(combo, labelControl); return combo; } public Text createNumber(Composite parent, String key, String label) { final Label labelControl = SWTFactory.createLabel(parent, label, 1); Text text = SWTFactory.createText(parent, SWT.BORDER, 1, Util.EMPTY_STRING); bindingManager.bindControl(text, key, FieldValidators.POSITIVE_NUMBER_VALIDATOR); registerAssociatedLabel(text, labelControl); return text; } private final Map<Control, Label> labelAssociations = new HashMap<Control, Label>(); /** * @param control * @param label */ private void registerAssociatedLabel(Control control, Label label) { labelAssociations.put(control, label); } public void enableControl(Control control, boolean enabled) { control.setEnabled(enabled); final Label label = labelAssociations.get(control); if (label != null) { label.setEnabled(enabled); } } private final ListenerList initListeners = new ListenerList(); public void addInitializeListener(IInitializeListener listener) { initListeners.add(listener); } public void removeInitializeListener(IInitializeListener listener) { initListeners.remove(listener); } private boolean initialization; public void initialize() { initialization = true; try { bindingManager.initialize(); final Object[] listeners = initListeners.getListeners(); for (int i = 0; i < listeners.length; ++i) { ((IInitializeListener) listeners[i]).initialize(); } } finally { initialization = false; } listener.statusChanged(bindingManager.getStatus()); } public void statusChanged(IStatus status) { if (!initialization) { listener.statusChanged(status); } } public boolean getBoolean(String key) { return delegate.getBoolean(key); } public String getString(String key) { return delegate.getString(key); } public void setBoolean(String key, boolean value) { delegate.setBoolean(key, value); } public void setString(String key, String value) { delegate.setString(key, value); } }