Package de.chris_soft.fyllgen.menu.edit

Source Code of de.chris_soft.fyllgen.menu.edit.InsertChildPerson

/**
* FyLLGen - A Java based tool for collecting and distributing family data
*
* Copyright (C) 2007-2011 Christian Packenius
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program.  If not, see <http://www.gnu.org/licenses/>.
*/
package de.chris_soft.fyllgen.menu.edit;

import java.util.List;

import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;

import de.chris_soft.fyllgen.GUI;
import de.chris_soft.fyllgen.data.Family;
import de.chris_soft.fyllgen.data.OptionData;
import de.chris_soft.fyllgen.data.Person;
import de.chris_soft.fyllgen.widget.dialog.MultiPersonChoiceShell;
import de.chris_soft.fyllgen.widget.dialog.PersonChoiceShell;

/**
* Selection-Listener f�r das Erzeugen eines Kindes der aktuellen Person.
* @author Christian Packenius, Juni 2008.
*/
public class InsertChildPerson implements Listener {
  /**
   * Event-Handler f�r Erzeugung eines neuen Kindes.
   * @see org.eclipse.swt.widgets.Listener#handleEvent(org.eclipse.swt.widgets.Event)
   */
  public void handleEvent(Event event) {
    // Vorneweg aktuelle Person merken.
    Person current = Family.instance.getCurrentPerson();

    // Dialog vorbereiten.
    PersonChoiceShell pcs = new PersonChoiceShell(GUI.instance.shell, "Kind hinzuf�gen", "Als Kind eintragen",
        "Neues Kind erzeugen", 2, false, null, false);

    // Die Person selbst kann sich nicht als Kind haben, auch die Eltern nicht
    // (und die vorhandenen Kinder sind es ohnehin
    // schon).
    pcs.removePerson(current);
    for (Person person : current.getChildren()) {
      pcs.removePerson(person);
    }
    for (Person person : current.getParents()) {
      pcs.removePerson(person);
    }

    // Zu junge/alte Personen l�schen.
    if (!current.getValueView(Person.BIRTHDAY).endsWith("?")) {
      // Alle Person, die �lter als diese Person hier sind, l�schen.
      String currBirth = current.getValueView(Person.BIRTHDAY);
      if (currBirth.endsWith(".?")) {
        // Versuchen, das Geburtsjahr zu erraten.
        int year = current.getBirthYear(true);
        if (year != Integer.MIN_VALUE) {
          currBirth = currBirth.substring(0, currBirth.length() - 1) + year;
        }
      }
      int minParentAge = OptionData.instance.getInt(OptionData.MIN_PARENT_AGE);
      pcs.removePersonsBetweenDates(Person.BIRTHDAY, "0.0.0", currBirth, new int[] { 0, 0, -minParentAge });

      // Alle Personen, die mindestens 90 Jahre nach der Geburt dieser Person
      // geboren wurden entfernen.
      int maxParentAge = OptionData.instance.getInt(OptionData.MAX_PARENT_AGE);
      pcs.removePersonsBetweenDates(Person.BIRTHDAY, currBirth, "99.99.9999", new int[] { 0, 0, -maxParentAge });
    }

    // Alle Personen, die nach dem Todestag dieser Person geboren wurden,
    // l�schen.
    // Zehn Monate abziehen, weil der Vater ja vor der Geburt gestorben sein
    // kann.
    if (!current.getValueView(Person.DEATHDAY).endsWith("?")) {
      pcs.removePersonsBetweenDates(Person.BIRTHDAY, current.getValueView(Person.DEATHDAY), "99.99.9999", new int[] {
          0, -10, 0 });
    }

    // Dialog �ffnen.
    pcs.open();

    // Hier wird eventuell ein zugeordnetes Kind gespeichert.
    Person child;

    if (pcs.personChoice != null) {
      Family.instance.getCurrentPerson().addChild(pcs.personChoice);
      Family.instance.review();
      child = pcs.personChoice;
    }
    else if (pcs.newPersonName != null) {
      child = new Person();
      child.setValue(Person.NAME, pcs.newPersonName);
      Family.instance.addNewPerson(child);
      Family.instance.getCurrentPerson().addChild(child);
      Family.instance.setCurrentPerson(child, 2);
    }
    else {
      return;
    }

    // Da nun ein Kind eingetragen wurde, auch f�r jeden Partner einzeln
    // nachfragen, ob es dessen Kind ist.
    String msgText = "Bei welchen der folgenden Personen soll <" + child.getValueView(Person.NAME)
        + "> noch zus�tzlich als Kind eingetragen werden?";
    MultiPersonChoiceShell mpcs = new MultiPersonChoiceShell(GUI.instance.shell, "Kind hinzuf�gen", msgText);

    // Alle Partner der aktuellen Person angeben.
    Person[] partners = current.getPartner();
    boolean bOnlyOnePartner = partners.length == 1;
    for (Person person : partners) {
      if (!person.hasChild(child)) {
        mpcs.add(person, null, true, bOnlyOnePartner);
      }
    }

    // Dialog �ffnen.
    mpcs.open();

    // Hat der User den Dialog �ber den OK-Button verlassen?
    if (mpcs.bPressedOkay) {
      // Ja, also hier bei allen angeklickten Personen ebenfalls
      // parent-child-Beziehung eintragen.
      List<Person> list = mpcs.getCheckedPersons();
      for (Person person : list) {
        person.addChild(child);
      }
      Family.instance.review();
    }
  }
}
TOP

Related Classes of de.chris_soft.fyllgen.menu.edit.InsertChildPerson

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.