Package org.dyno.visual.swing.types.editor.spinnermodels

Source Code of org.dyno.visual.swing.types.editor.spinnermodels.NumberAccessible

/************************************************************************************
* Copyright (c) 2008 William Chen.                                                 *
*                                                                                  *
* 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 *
*                                                                                  *
* Use is subject to the terms of Eclipse Public License v1.0.                      *
*                                                                                  *
* Contributors:                                                                    *
*     William Chen - initial API and implementation.                               *
************************************************************************************/

package org.dyno.visual.swing.types.editor.spinnermodels;

import javax.swing.SpinnerNumberModel;

import org.dyno.visual.swing.types.editor.spinnermodels.types.NumberType;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
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.Spinner;

@SuppressWarnings("unchecked")
class NumberAccessible implements AccessibleUI {
  private Button btnDefault;
  private Composite pane;
  private ComboViewer viewer;
  private Combo cmbType;
  private Spinner spInit;
  private Button btnMin;
  private Spinner spMin;
  private Button btnMax;
  private Spinner spMax;
  private Spinner spStep;
  private Label lblType;
  private Label lblInit;
  private Label lblStep;

 
  public void setValue(Object value) {
    SpinnerNumberModel model = (SpinnerNumberModel) value;
    Comparable max = model.getMaximum();
    Comparable min = model.getMinimum();
    Number number = model.getNumber();
    Number size = model.getStepSize();
    if (max == null && min == null && number instanceof Integer && size instanceof Integer && number.intValue() == 0 && size.intValue() == 1)
      btnDefault.setSelection(true);
    else {
      btnDefault.setSelection(false);
      int index = NumberType.getNumberTypeIndex(number);
      cmbType.select(index);
      spInit.setSelection(number.intValue());
      btnMin.setSelection(min!=null);
      if(min!=null)
        spMin.setSelection(((Number)min).intValue());
      btnMax.setSelection(max!=null);
      if(max!=null)
        spMax.setSelection(((Number)max).intValue());
      spStep.setSelection(size.intValue());
      btnDefaultSelected();
      cmbTypeSelected();
      btnMinSelected();
      btnMaxSelected();
    }
  }

 
  public Object getValue() {
    if (btnDefault.getSelection())
      return new SpinnerNumberModel();
    else {
      int index = cmbType.getSelectionIndex();
      NumberType type = NumberType.getTypes()[index];
      Number init = type.valueOf(spInit.getSelection());
      Number min = null;
      if (btnMin.getSelection()) {
        min = type.valueOf(spMin.getSelection());
      }
      Number max = null;
      if (btnMax.getSelection()) {
        max = type.valueOf(spMax.getSelection());
      }
      Number size = type.valueOf(spStep.getSelection());
      return new SpinnerNumberModel(init, (Comparable) min, (Comparable) max, size);
    }
  }

  private void cmbTypeSelected() {
    int index = cmbType.getSelectionIndex();
    NumberType type = NumberType.getTypes()[index];
    spInit.setMaximum(type.getMaximum());
    spMin.setMaximum(type.getMaximum());
    spMax.setMaximum(type.getMaximum());
    spStep.setMaximum(type.getMaximum());

  }

  private void btnDefaultSelected() {
    if (btnDefault.getSelection()) {
      cmbType.setEnabled(false);
      spInit.setEnabled(false);
      btnMin.setEnabled(false);
      btnMax.setEnabled(false);
      spMin.setEnabled(false);
      spMax.setEnabled(false);
      spStep.setEnabled(false);
      lblType.setEnabled(false);
      lblInit.setEnabled(false);
      lblStep.setEnabled(false);
    } else {
      cmbType.setEnabled(true);
      spInit.setEnabled(true);
      btnMin.setEnabled(true);
      btnMax.setEnabled(true);
      spStep.setEnabled(true);
      lblType.setEnabled(true);
      lblInit.setEnabled(true);
      lblStep.setEnabled(true);
      btnMinSelected();
      btnMinSelected();
    }
  }

  private void btnMinSelected() {
    spMin.setEnabled(btnMin.getSelection());
  }

  private void btnMaxSelected() {
    spMax.setEnabled(btnMax.getSelection());
  }

  public NumberAccessible(Composite parent) {
    pane = new Composite(parent, SWT.BORDER);
    GridLayout layout = new GridLayout();
    layout.numColumns = 2;
    layout.marginTop = 5;
    layout.marginWidth = 0;
    layout.marginLeft = 10;
    layout.verticalSpacing = 5;
    pane.setLayout(layout);
    btnDefault = new Button(pane, SWT.CHECK);
    btnDefault.setText(Messages.NumberAccessible_Use_Empty_Cons);
    GridData data = new GridData();
    data.horizontalSpan = 2;
    data.horizontalAlignment = SWT.FILL;
    data.widthHint = 265;
    btnDefault.setLayoutData(data);
    btnDefault.setSelection(true);
    btnDefault.addSelectionListener(new SelectionAdapter() {
     
      public void widgetSelected(SelectionEvent e) {
        btnDefaultSelected();
      }
    });
    lblType = new Label(pane, SWT.NONE);
    lblType.setText(Messages.NumberAccessible_Number_Type);
    data = new GridData();
    data.horizontalIndent = 25;
    lblType.setLayoutData(data);
    cmbType = new Combo(pane, SWT.DROP_DOWN | SWT.READ_ONLY);
    viewer = new ComboViewer(cmbType);
    viewer.setContentProvider(new NumberTypeContentProvider());
    viewer.setInput(NumberType.getTypes());
    cmbType.select(NumberType.getInitialIndex());
    cmbType.addSelectionListener(new SelectionAdapter() {
     
      public void widgetSelected(SelectionEvent e) {
        cmbTypeSelected();
      }
    });
    data = new GridData();
    data.horizontalAlignment = SWT.FILL;
    cmbType.setLayoutData(data);
    lblInit = new Label(pane, SWT.NONE);
    lblInit.setText(Messages.NumberAccessible_Initial_Value);
    data = new GridData();
    data.horizontalIndent = 25;
    lblInit.setLayoutData(data);
    spInit = new Spinner(pane, SWT.BORDER);
    spInit.setMinimum(0);
    spInit.setMaximum(Integer.MAX_VALUE);
    spInit.setSelection(0);
    data = new GridData();
    data.horizontalAlignment = SWT.FILL;
    spInit.setLayoutData(data);
    btnMin = new Button(pane, SWT.CHECK);
    btnMin.setText(Messages.NumberAccessible_Min);
    data = new GridData();
    data.horizontalIndent = 25;
    btnMin.setLayoutData(data);
    btnMin.addSelectionListener(new SelectionAdapter() {
     
      public void widgetSelected(SelectionEvent e) {
        btnMinSelected();
      }
    });
    spMin = new Spinner(pane, SWT.BORDER);
    data = new GridData();
    data.horizontalAlignment = SWT.FILL;
    spMin.setLayoutData(data);
    spMin.setMinimum(0);
    spMin.setMaximum(Integer.MAX_VALUE);
    spMin.setSelection(0);
    btnMax = new Button(pane, SWT.CHECK);
    btnMax.setText(Messages.NumberAccessible_Max);
    data = new GridData();
    data.horizontalIndent = 25;
    btnMax.setLayoutData(data);
    btnMax.addSelectionListener(new SelectionAdapter() {
     
      public void widgetSelected(SelectionEvent e) {
        btnMaxSelected();
      }
    });
    spMax = new Spinner(pane, SWT.BORDER);
    data = new GridData();
    data.horizontalAlignment = SWT.FILL;
    spMax.setLayoutData(data);
    spMax.setMinimum(0);
    spMax.setMaximum(Integer.MAX_VALUE);
    spMax.setSelection(0);
    lblStep = new Label(pane, SWT.NONE);
    lblStep.setText(Messages.NumberAccessible_Step_Size);
    data = new GridData();
    data.horizontalIndent = 25;
    lblStep.setLayoutData(data);
    spStep = new Spinner(pane, SWT.BORDER);
    data = new GridData();
    data.horizontalAlignment = SWT.FILL;
    spStep.setLayoutData(data);
    spStep.setSelection(1);
    spStep.setMinimum(1);
    spStep.setMaximum(Integer.MAX_VALUE);
    spStep.setSelection(0);
    btnDefaultSelected();
  }

 
  public Control getAccessibleUI() {
    return pane;
  }

 
  public String isInputValid() {
    if (!btnDefault.getSelection()) {
      int init = spInit.getSelection();
      int index = cmbType.getSelectionIndex();
      if (index == -1)
        return Messages.NumberAccessible_Value_Type;
      NumberType type = NumberType.getTypes()[index];
      int minTValue = type.getMininum();
      int maxTValue = type.getMaximum();
      if (init < minTValue || init > maxTValue)
        return Messages.NumberAccessible_Between + minTValue + Messages.NumberAccessible_And + maxTValue;
      if (btnMin.getSelection()) {
        int min = spMin.getSelection();
        if (min < minTValue || min > maxTValue)
          return Messages.NumberAccessible_Min_Between + minTValue + Messages.NumberAccessible_And + maxTValue;
        if (init < min)
          return Messages.NumberAccessible_Initial_Between;
      }
      if (btnMax.getSelection()) {
        int max = spMax.getSelection();
        if (max < minTValue || max > maxTValue)
          return Messages.NumberAccessible_Max_Between + minTValue + Messages.NumberAccessible_And + maxTValue;
        if (init > max)
          return Messages.NumberAccessible_Init_Not_GT_Max;
      }
      if (btnMin.getSelection() && btnMax.getSelection()) {
        int min = spMin.getSelection();
        int max = spMax.getSelection();
        if (min > max)
          return Messages.NumberAccessible_Min_Not_GT_Max;
      }
      int size = spStep.getSelection();
      if (size <= 0)
        return Messages.NumberAccessible_Step_Size_GT_0;
      if (size > maxTValue)
        return Messages.NumberAccessible_Step_Size_Not_GT_Max + maxTValue;
    }
    return null;
  }

}

TOP

Related Classes of org.dyno.visual.swing.types.editor.spinnermodels.NumberAccessible

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.