Package de.hwrberlin.it11.tsp.gui.components

Source Code of de.hwrberlin.it11.tsp.gui.components.InputComposite

/**
* Copyright (c) 2012 mops� Productions
*/
package de.hwrberlin.it11.tsp.gui.components;

import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.ArrayList;
import java.util.List;

import net.miginfocom.swt.MigLayout;

import org.eclipse.core.databinding.DataBindingContext;
import org.eclipse.core.databinding.beans.BeansObservables;
import org.eclipse.core.databinding.observable.Realm;
import org.eclipse.jface.databinding.swt.SWTObservables;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;

import de.hwrberlin.it11.tsp.constant.IterationMode;
import de.hwrberlin.it11.tsp.constant.PropertyChangeTypes;
import de.hwrberlin.it11.tsp.controller.AntController;
import de.hwrberlin.it11.tsp.gui.widgets.AntText;
import de.hwrberlin.it11.tsp.interfaces.AlgorithmListener;
import de.hwrberlin.it11.tsp.interfaces.AllInputValidListener;
import de.hwrberlin.it11.tsp.interfaces.AllInputValidValidator;
import de.hwrberlin.it11.tsp.model.Parameter;

/**
* Das InputComposite regelt die Darstellung der Parameter.
*/
public class InputComposite extends ADataBindableComposite implements PropertyChangeListener, AlgorithmListener {

  /** Textfeld zum Ver�ndern der Anzahl der Ameisen */
  private AntText _tAntCount;

  /** Textfeld zum Ver�ndern des Pheromonenparameters */
  private AntText _tPheromonParameter;

  /** Textfeld zum Ver�ndern des Parameters der lokalen Information */
  private AntText _tLocalInformation;

  /** Textfeld zum Ver�ndern des Verdunstungsparameters */
  private AntText _tEvaporationParameter;

  /** Textfeld zum Ver�ndern des initialen Pheromonenwertes */
  private AntText _tInitialPheromonParameter;

  /** Textfeld zum Ver�ndern des Pheromonupdateparameters */
  private AntText _tPheromonUpdateParameter;

  private List<AllInputValidListener> _allInputValidListenerList;



  /**
   * Erzeugt ein neues InputComposite.
   *
   * @param pParent
   *            das Eltern-Composite
   * @param pStyle
   *            der Style des Composite
   * @param pController
   *            der Controller dieses DrawComposite
   */
  public InputComposite(Composite pParent, int pStyle, AntController pController) {
    super(pParent, pStyle, pController);

    getController().getProject().addPropertyChangeListener(this);
    getController().addAlgorithmListener(this);

    Composite comp = new Composite(this, SWT.NONE);
    comp.setLayout(new MigLayout("fill, wrap 2, ins 0", "[pref!][]"));
    comp.setLayoutData("hmin pref, wmin pref, growx, pushx");

    Label lAntCount = new Label(comp, SWT.NONE);
    lAntCount.setLayoutData("hmin 0, wmin 0");
    lAntCount.setText("Anzahl der Ameisen:");

    _tAntCount = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tAntCount.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tAntCount.setTooltipText("Hier k�nnen Sie einstellen, wie viele Ameisen pro Iterationen den Weg suchen sollen. (X > 0)");
    _tAntCount.setInputMode(AntText.INTEGER_ONLY);
    _tAntCount.setNumberRange(1, Double.POSITIVE_INFINITY, true, true);

    Label lPheromonParameter = new Label(comp, SWT.NONE);
    lPheromonParameter.setLayoutData("hmin 0, wmin 0");
    lPheromonParameter.setText("Pheromonparameter:");

    _tPheromonParameter = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tPheromonParameter.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tPheromonParameter
        .setTooltipText("Hier k�nnen Sie einstellen, wie wichtig das Pheromon auf einer Kante bei der Auswahl des Weges ist. (0 < X <= 5)");
    _tPheromonParameter.setInputMode(AntText.DOUBLE_ONLY);
    _tPheromonParameter.setNumberRange(0, 5, false, true);

    Label lLocalInformation = new Label(comp, SWT.NONE);
    lLocalInformation.setLayoutData("hmin 0, wmin 0");
    lLocalInformation.setText("Lokale Information:");

    _tLocalInformation = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tLocalInformation.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tLocalInformation.setTooltipText("Hier k�nnen Sie einstellen, wie wichtig k�rzere Wege bei der Auswahl des Weges sind. (0 < X <= 5)");
    _tLocalInformation.setInputMode(AntText.DOUBLE_ONLY);
    _tLocalInformation.setNumberRange(0, 5, false, true);

    Label lEvaporationParameter = new Label(comp, SWT.NONE);
    lEvaporationParameter.setLayoutData("hmin 0, wmin 0");
    lEvaporationParameter.setText("Verdunstungsparameter:");

    _tEvaporationParameter = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tEvaporationParameter.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tEvaporationParameter.setTooltipText("Hier k�nnen Sie einstellen, wie viele Pheromone nach einer Iteration verdunsten sollen. (0 < X <= 1)");
    _tEvaporationParameter.setInputMode(AntText.DOUBLE_ONLY);
    _tEvaporationParameter.setNumberRange(0, 1, false, true);

    Label lInitialPheromonParameter = new Label(comp, SWT.NONE);
    lInitialPheromonParameter.setLayoutData("hmin 0, wmin 0");
    lInitialPheromonParameter.setText("Initialpheromonwert:");

    _tInitialPheromonParameter = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tInitialPheromonParameter.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tInitialPheromonParameter
        .setTooltipText("Hier k�nnen Sie einstellen, wie viele Pheromone auf den Kanten beim Start des Suchvorganges liegen sollen. (X > 0)");
    _tInitialPheromonParameter.setInputMode(AntText.DOUBLE_ONLY);
    _tInitialPheromonParameter.setNumberRange(0, Double.POSITIVE_INFINITY, false, true);

    Label lPheromonUpdateParameter = new Label(comp, SWT.NONE);
    lPheromonUpdateParameter.setLayoutData("hmin 0, wmin 0");
    lPheromonUpdateParameter.setText("Pheromonupdateparameter:");

    _tPheromonUpdateParameter = new AntText(new Text(comp, SWT.BORDER), getController().getProject());
    _tPheromonUpdateParameter.getText().setLayoutData("hmin pref, wmin 50, growx");
    _tPheromonUpdateParameter
        .setTooltipText("Hier k�nnen Sie einstellen, wie viele Pheromone eine Ameise auf eine Kante legt, wenn sie dar�ber gelaufen ist. (X > 0)");
    _tPheromonUpdateParameter.setInputMode(AntText.DOUBLE_ONLY);
    _tPheromonUpdateParameter.setNumberRange(0, Double.POSITIVE_INFINITY, false, true);

    _allInputValidListenerList = new ArrayList<AllInputValidListener>();

    new AllInputValidValidator(_allInputValidListenerList, _tAntCount, _tEvaporationParameter, _tInitialPheromonParameter, _tLocalInformation,
        _tPheromonParameter, _tPheromonUpdateParameter);

    resetBinding();
  }



  @Override
  protected void bindValues(DataBindingContext pDBC, Realm pRealm) {
    Parameter parameter = getController().getProject().getParameter();

    // Anzahl der Ameisen
    pDBC.bindValue(SWTObservables.observeText(_tAntCount.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_ANTCOUNT));
    // Pheromonparameter
    pDBC.bindValue(SWTObservables.observeText(_tPheromonParameter.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_PHEROMONPARAMETER));
    // Lokale Information
    pDBC.bindValue(SWTObservables.observeText(_tLocalInformation.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_LOCALINFORMATION));
    // Verdunstungsparameter
    pDBC.bindValue(SWTObservables.observeText(_tEvaporationParameter.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_EVAPORATIONPARAMETER));
    // Initialer Pheromonwert
    pDBC.bindValue(SWTObservables.observeText(_tInitialPheromonParameter.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_INITIALPHEROMONPARAMETER));
    // Pheromonupdateparameter
    pDBC.bindValue(SWTObservables.observeText(_tPheromonUpdateParameter.getText(), SWT.Modify),
        BeansObservables.observeValue(pRealm, parameter, PropertyChangeTypes.PARAMETER_PHEROMONUPDATEPARAMETER));
  }



  @Override
  public void propertyChange(PropertyChangeEvent pEvt) {
    if (pEvt != null) {
      String propertyName = pEvt.getPropertyName();

      // Auf folgende Events das Databinding erneuern:
      if (PropertyChangeTypes.PROJECT_PARAMETER.equals(propertyName)) { // Parameter des Projektes wurden neu gesetzt
        resetBinding();
      }
    }
  }



  /**
   * F�gt einen einen AllInputValidListener der Kollektion an Listenern hinzu, der den Validierungszustand aller AntText dieses Composites
   * �berwacht.
   *
   * @param pListener
   *            der hinzuzuf�gende AllInputValidListener
   */
  public void addAllInputValidListener(AllInputValidListener pListener) {
    _allInputValidListenerList.add(pListener);
  }



  /**
   * Entfernt den angegebenen AllInputValidListener aus der Kollektion der Listener.
   *
   * @param pListener
   *            der zu entfernende AllInputValidListener
   */
  public void removeAllInputValidListener(AllInputValidListener pListener) {
    _allInputValidListenerList.remove(pListener);
  }



  @Override
  public void algorithmStarted() {
    _tAntCount.getText().setEnabled(false);
    _tEvaporationParameter.getText().setEnabled(false);
    _tInitialPheromonParameter.getText().setEnabled(false);
    _tLocalInformation.getText().setEnabled(false);
    _tPheromonParameter.getText().setEnabled(false);
    _tPheromonUpdateParameter.getText().setEnabled(false);
  }



  @Override
  public void algorithmStopped() {
    // Dieses Event kommt unter Umst�nden nicht aus dem UI-Thread, deswegen m�ssen Operationen am Widget mit Display.syncExec() ausgef�hrt werden
    Display.getDefault().syncExec(new Runnable() {

      @Override
      public void run() {
        _tAntCount.getText().setEnabled(true);
        _tEvaporationParameter.getText().setEnabled(true);
        _tInitialPheromonParameter.getText().setEnabled(true);
        _tLocalInformation.getText().setEnabled(true);
        _tPheromonParameter.getText().setEnabled(true);
        _tPheromonUpdateParameter.getText().setEnabled(true);
      }
    });
  }



  @Override
  public void algorithmPaused() {
    // NO-OP
  }



  @Override
  public void algorithmResumed() {
    // NO-OP
  }



  @Override
  public void iterationModeChanged(IterationMode pMode) {
    // NO-OP
  }

}
TOP

Related Classes of de.hwrberlin.it11.tsp.gui.components.InputComposite

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.