/******************************************************************************* * Copyright (c) 2013 Luigi Sgro. 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: * Luigi Sgro - initial API and implementation ******************************************************************************/ package com.quantcomponents.ui.marketdata; import java.util.ArrayList; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.FillLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import com.quantcomponents.core.model.UnitOfTime; public class PeriodCombo extends Composite implements SelectionListener, ModifyListener { private Combo unitEdit; private Text amountEdit; private List<PeriodComboListener> listeners = new ArrayList<PeriodComboListener>(); public static class PeriodComboEvent { public PeriodComboEvent(Object source, UnitOfTime unit, int amount) { this.source = source; this.unit = unit; this.amount = amount; } public Object source; public UnitOfTime unit; public int amount; } public interface PeriodComboListener { void onPeriodChange(PeriodComboEvent e); } public PeriodCombo(Composite parent, int style) { super(parent, style); createControls(); } @Override public void setEnabled(boolean enabled) { super.setEnabled(enabled); unitEdit.setEnabled(enabled); amountEdit.setEnabled(enabled); } public void select(String amount, int unitIndex) { unitEdit.select(unitIndex); amountEdit.setText(amount); } public void addPeriodComboListener(PeriodComboListener listener) { listeners.add(listener); } public void removeSelectionListener(SelectionListener listener) { listeners.remove(listener); } public UnitOfTime getUnit() { String text = unitEdit.getText(); if (text.length() > 0) return UnitOfTime.valueOf(text); else return null; } public int getAmount() { String text = amountEdit.getText(); if (text.length() > 0) return Integer.valueOf(amountEdit.getText()); else return 0; } private void createControls() { FillLayout layout = new FillLayout(); setLayout(layout); amountEdit = new Text(this, SWT.RIGHT); unitEdit = new Combo(this, SWT.READ_ONLY); String[] units = new String[UnitOfTime.values().length]; for (int i = 0; i < UnitOfTime.values().length; i++) units[i] = UnitOfTime.values()[i].name(); unitEdit.setItems(units); unitEdit.addSelectionListener(this); amountEdit.addModifyListener(this); } private void notifyListeners() { for (PeriodComboListener listener : listeners) { listener.onPeriodChange(new PeriodComboEvent(this, getUnit(), getAmount())); } } @Override public void modifyText(ModifyEvent e) { notifyListeners(); } @Override public void widgetSelected(SelectionEvent e) { notifyListeners(); } @Override public void widgetDefaultSelected(SelectionEvent e) {} }