Package de.hwrberlin.it11.tsp.gui.dialog

Source Code of de.hwrberlin.it11.tsp.gui.dialog.NewNodeDialog

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

import java.text.ParseException;

import net.miginfocom.swt.MigLayout;

import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;

import de.hwrberlin.it11.tsp.constant.Images;
import de.hwrberlin.it11.tsp.constant.Utility;
import de.hwrberlin.it11.tsp.gui.widgets.AntButton;
import de.hwrberlin.it11.tsp.gui.widgets.AntText;
import de.hwrberlin.it11.tsp.model.AntProject;
import de.hwrberlin.it11.tsp.model.Node;

/**
* Dialog zum erstellen einer neuen Node.
*/
public class NewNodeDialog extends AAntDialog {

  /** R�ckgabewert dieses Dialogs */
  private Node _result;

  /** Initiale X Koordinate */
  private double _xCoordinate;

  /** Initiale Y Koordinate */
  private double _yCoordinate;



  /**
   * Erstellt einen neuen NewNodeDialog.
   *
   * @param pParent
   *            die Parent-Shell des Dialoges
   * @param pXCoordinate
   *            die initiale X Koordinate, die dieser Dialog anzeigen soll
   * @param pYCoordinate
   *            die initiale Y Koordinate, die dieser Dialog anzeigen soll
   * @param pProject
   *            das AntProject des zu erstellenden Dialoges
   */
  public NewNodeDialog(Shell pParent, AntProject pProject, double pXCoordinate, double pYCoordinate) {
    super(pParent, pProject);
    _xCoordinate = pXCoordinate;
    _yCoordinate = pYCoordinate;
  }



  /**
   * �ffnet diesen Dialog und bingt ihn in den Vordergrund.
   *
   * @return eine neu erstellte Node, falls der Erstellen-Button geklickt wurde, andernfalls null
   */
  public Node open() {
    Shell parent = getParent();
    final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL);
    shell.setText("Neue Node");
    shell.setImage(Images.ADD);
    shell.setLayout(new MigLayout("fill, wrap 2", "[pref!][100!]"));
    shell.setLayoutData("hmin pref, wmin pref");

    Label lXCoordinate = new Label(shell, SWT.NONE);
    lXCoordinate.setText("X Koordinate:");
    lXCoordinate.setLayoutData("hmin pref, wmin pref");

    final AntText tXCoordinate = new AntText(new Text(shell, SWT.BORDER), getProject());
    tXCoordinate.getText().setText(Utility.FORMAT.format(_xCoordinate));
    tXCoordinate.getText().setLayoutData("hmin pref, wmin 50, growx");
    tXCoordinate.setTooltipText("Die X Koordinate f�r den neuen Knoten. (X >= 0)");
    tXCoordinate.setInputMode(AntText.DOUBLE_ONLY);
    tXCoordinate.setNumberRange(0, Double.POSITIVE_INFINITY, true, true);

    Label lYCoordinate = new Label(shell, SWT.NONE);
    lYCoordinate.setText("Y Koordinate:");
    lYCoordinate.setLayoutData("hmin pref, wmin pref");

    final AntText tYCoordinate = new AntText(new Text(shell, SWT.BORDER), getProject());
    tYCoordinate.getText().setText(Utility.FORMAT.format(_yCoordinate));
    tYCoordinate.getText().setLayoutData("hmin pref, wmin 50, growx");
    tYCoordinate.setTooltipText("Die Y Koordinate f�r den neuen Knoten. (Y >= 0)");
    tYCoordinate.setInputMode(AntText.DOUBLE_ONLY);
    tYCoordinate.setNumberRange(0, Double.POSITIVE_INFINITY, true, true);

    Composite buttonComp = new Composite(shell, SWT.NONE);
    buttonComp.setLayout(new MigLayout("wrap 2, ins 0", "[50%][50%]"));
    buttonComp.setLayoutData("hmin 0, wmin 0, growx, spanx");

    AntButton confirm = new AntButton(new Button(buttonComp, SWT.PUSH), getProject());
    confirm.getButton().setText("Erstellen");
    confirm.getButton().setLayoutData("hmin pref, wmin pref, grow");
    confirm.setTooltipText("Erstellt einen neuen Knoten mit den angegebenen Koordinaten und schlie�t den Dialog.");
    confirm.getButton().addSelectionListener(new SelectionAdapter() {

      @Override
      public void widgetSelected(SelectionEvent pE) {
        if (tXCoordinate.isValidInput() && tYCoordinate.isValidInput()) {
          try {
            _result = new Node(Utility.FORMAT.parse(tXCoordinate.getText().getText()).doubleValue(), Utility.FORMAT.parse(
                tYCoordinate.getText().getText()).doubleValue());
          }
          catch (ParseException e) {
            MessageDialog.openError(shell, "Fehler beim umwandeln der Werte",
                "Beim Umwandeln der Werte von Text in eine Zahl ist ein Fehler aufgetreten.");
          }
          shell.close();
        }
        else {
          MessageDialog
              .openError(shell, "Ung�ltiger Wert",
                  "Eines der Textfelder hat einen ung�ltigen Eingabewert (rot unterlegt). Um fortzufahren geben Sie bitte einen g�ltigen Wert ein.");
        }
      }
    });

    AntButton cancel = new AntButton(new Button(buttonComp, SWT.PUSH), getProject());
    cancel.getButton().setText("Abbrechen");
    cancel.getButton().setLayoutData("hmin pref, wmin pref, grow");
    cancel.setTooltipText("Schlie�t den Dialog ohne Erstellung eines Knotens.");
    cancel.getButton().addSelectionListener(new SelectionAdapter() {

      @Override
      public void widgetSelected(SelectionEvent pE) {
        shell.close();
      }
    });

    shell.pack();
    shell.open();
    Display display = parent.getDisplay();
    while (!shell.isDisposed()) {
      if (!display.readAndDispatch()) {
        display.sleep();
      }
    }
    return _result;
  }

}
TOP

Related Classes of de.hwrberlin.it11.tsp.gui.dialog.NewNodeDialog

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.