/**
* 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.widget;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.Menu;
import org.eclipse.swt.widgets.MenuItem;
import org.eclipse.swt.widgets.Shell;
import de.chris_soft.fyllgen.menu.edit.AddImageToPerson;
import de.chris_soft.fyllgen.menu.edit.CreateNewPerson;
import de.chris_soft.fyllgen.menu.edit.DeleteConnection;
import de.chris_soft.fyllgen.menu.edit.DeleteFamily;
import de.chris_soft.fyllgen.menu.edit.DeletePerson;
import de.chris_soft.fyllgen.menu.edit.InsertChildPerson;
import de.chris_soft.fyllgen.menu.edit.InsertParentPerson;
import de.chris_soft.fyllgen.menu.edit.InsertPartnerPerson;
import de.chris_soft.fyllgen.menu.extra.BigFamilyName;
import de.chris_soft.fyllgen.menu.extra.MergeData;
import de.chris_soft.fyllgen.menu.extra.PersonDataVisibilityChanger;
import de.chris_soft.fyllgen.menu.extra.ShowOptionsDialog;
import de.chris_soft.fyllgen.menu.file.ExitProgram;
import de.chris_soft.fyllgen.menu.file.ExportDataAsFile;
import de.chris_soft.fyllgen.menu.file.OpenFile;
import de.chris_soft.fyllgen.menu.file.SaveFamilyFile;
import de.chris_soft.fyllgen.menu.file.SaveFamilyFileAs;
import de.chris_soft.fyllgen.menu.label.DirectLabelChoice;
import de.chris_soft.fyllgen.menu.label.JumpToLabelPerson;
import de.chris_soft.fyllgen.menu.label.JumpToWithoutLabelPerson;
import de.chris_soft.fyllgen.menu.label.LabelCurrentPerson;
import de.chris_soft.fyllgen.menu.label.LabelCurrentPersonDirect;
import de.chris_soft.fyllgen.menu.label.UnTagPersonDirect;
import de.chris_soft.fyllgen.menu.navigate.GotoAnyChild;
import de.chris_soft.fyllgen.menu.navigate.GotoAnyParent;
import de.chris_soft.fyllgen.menu.navigate.GotoAnyPartner;
import de.chris_soft.fyllgen.menu.navigate.GotoChild;
import de.chris_soft.fyllgen.menu.navigate.GotoNextLeafPerson;
import de.chris_soft.fyllgen.menu.navigate.GotoParent;
import de.chris_soft.fyllgen.menu.navigate.GotoPartner;
import de.chris_soft.fyllgen.menu.search.GetShortestConnection;
import de.chris_soft.fyllgen.menu.search.SearchNextMailPersons;
import de.chris_soft.fyllgen.menu.search.SearchPerson;
import de.chris_soft.fyllgen.menu.search.SearchPersonsWithoutConnectionToCurrentPerson;
import de.chris_soft.fyllgen.menu.views.SetStandardView;
import de.chris_soft.fyllgen.menu.views.SetUniSexView;
import de.chris_soft.fyllgen.utilities.FullValidation;
/**
* Erzeugt das Men� f�r das Hauptfenster.
* @author Christian Packenius, Juni 2008.
*/
public class ShellMenu {
/**
* Hauptfenster, in dem dieses Men� steckt.
*/
private final Shell shell;
/**
* Die Men�bar des Fensters.
*/
public final Menu bar;
/**
* Konstruktor. Erzeugt direkt das gesamte Men�.
* @param shell Fenster, f�r welches das Men� ist.
*/
public ShellMenu(Shell shell) {
this.shell = shell;
bar = new Menu(shell, SWT.BAR);
shell.setMenuBar(bar);
// Datei-Men�.
createFileMenu(bar);
// Bearbeiten-Men�.
createBearbeitenMenu(bar);
// Suchen-Men�.
createSearchMenu(bar);
// Markierung-Men�.
createLabelMenu(bar);
// Ansichten-Men�.
createViewsMenu(bar);
// Navigationsmen�.
createNavigationMenu(bar);
// Extras-Men�.
createExtrasMenu(bar);
}
/**
* Erzeugt das Men� mit den Datei-Funktionen.
*/
private void createFileMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem fileItem = new MenuItem(bar, SWT.CASCADE);
fileItem.setText("&Datei");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
fileItem.setMenu(submenu);
// Familiendatei �ffnen.
MenuItem openFile = new MenuItem(submenu, SWT.PUSH);
openFile.setText("�&ffnen\tCtrl + O");
openFile.setAccelerator(SWT.CONTROL + 'O');
openFile.addListener(SWT.Selection, new OpenFile());
new MenuItem(submenu, SWT.SEPARATOR);
// Familiendatei speichern.
MenuItem saveInKnownFile = new MenuItem(submenu, SWT.PUSH);
saveInKnownFile.setText("&Speichern\tCtrl + S");
saveInKnownFile.setAccelerator(SWT.CONTROL + 'S');
saveInKnownFile.addListener(SWT.Selection, new SaveFamilyFile());
// Familiendatei unter neuem Namen speichern.
MenuItem saveAs = new MenuItem(submenu, SWT.PUSH);
saveAs.setText("Speichern &unter");
saveAs.addListener(SWT.Selection, new SaveFamilyFileAs());
new MenuItem(submenu, SWT.SEPARATOR);
// Export-M�glichkeiten - neue Variante ab Februar 2011.
MenuItem export2 = new MenuItem(submenu, SWT.PUSH);
export2.setText("Exportieren und Mailversand\tCtrl + Y");
export2.setAccelerator(SWT.CONTROL + 'Y');
export2.addListener(SWT.Selection, new ExportDataAsFile());
// // Stammbaum erzeugen.
// MenuItem exportSB = new MenuItem(submenu, SWT.PUSH);
// exportSB.setText("Exportieren als Stamm&baum\tCtrl + B");
// exportSB.setAccelerator(SWT.CONTROL + 'B');
// exportSB.addListener(SWT.Selection, new ExportFamilyTree());
// exportSB.setEnabled(true);
// new MenuItem(submenu, SWT.SEPARATOR);
// // Familienansicht nun drucken.
// MenuItem printDirect = new MenuItem(submenu, SWT.PUSH);
// printDirect.setText("Familienansicht direkt d&rucken");
// printDirect.addListener(SWT.Selection, new
// ImmediatellyPrintingFamilyView());
// printDirect.setEnabled(false);
new MenuItem(submenu, SWT.SEPARATOR);
// Programm verlassen.
MenuItem insertParentItem = new MenuItem(submenu, SWT.PUSH);
insertParentItem.setText("E&xit (Speichern und Programm verlassen)\tCtrl + Q");
insertParentItem.setAccelerator(SWT.CONTROL + 'Q');
insertParentItem.addListener(SWT.Selection, new ExitProgram());
}
/**
* Erzeugt das Men� mit den Bearbeitungs-Funktionen.
*/
private void createBearbeitenMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem personItem = new MenuItem(bar, SWT.CASCADE);
personItem.setText("&Bearbeiten");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
personItem.setMenu(submenu);
// Neue Person erzeugen, ohne Verweise.
MenuItem createNewPerson = new MenuItem(submenu, SWT.PUSH);
createNewPerson.setText("&Neue Person erzeugen\tCtrl + N");
createNewPerson.setAccelerator(SWT.CONTROL + 'N');
createNewPerson.addListener(SWT.Selection, new CreateNewPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// (Neues) Elternteil hinzuf�gen.
MenuItem insertParentItem = new MenuItem(submenu, SWT.PUSH);
insertParentItem.setText("&Elternteil hinzuf�gen\tCtrl + E");
insertParentItem.setAccelerator(SWT.CONTROL + 'E');
insertParentItem.addListener(SWT.Selection, new InsertParentPerson());
// (Neues) Kind hinzuf�gen.
MenuItem insertChildItem = new MenuItem(submenu, SWT.PUSH);
insertChildItem.setText("&Kind hinzuf�gen\tCtrl + K");
insertChildItem.setAccelerator(SWT.CONTROL + 'K');
insertChildItem.addListener(SWT.Selection, new InsertChildPerson());
// (Neuen) Partner hinzuf�gen.
MenuItem insertPartnerItem = new MenuItem(submenu, SWT.PUSH);
insertPartnerItem.setText("&Partner hinzuf�gen\tCtrl + P");
insertPartnerItem.setAccelerator(SWT.CONTROL + 'P');
insertPartnerItem.addListener(SWT.Selection, new InsertPartnerPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// Person suchen.
MenuItem addImage2Person = new MenuItem(submenu, SWT.PUSH);
addImage2Person.setText("Bild einf�gen\tCtrl + I");
addImage2Person.setAccelerator(SWT.CONTROL + 'I');
addImage2Person.addListener(SWT.Selection, new AddImageToPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// Verbindung zwischen Personen l�schen.
MenuItem deleteConnection = new MenuItem(submenu, SWT.PUSH);
deleteConnection.setText("&Verbindung l�schen\tCtrl + L");
deleteConnection.setAccelerator(SWT.CONTROL + 'L');
deleteConnection.addListener(SWT.Selection, new DeleteConnection());
// Person l�schen.
MenuItem deletePerson = new MenuItem(submenu, SWT.PUSH);
deletePerson.setText("Person l&�schen\tCtrl + Entf");
deletePerson.setAccelerator(SWT.CONTROL + SWT.DEL);
deletePerson.addListener(SWT.Selection, new DeletePerson());
// Familie l�schen.
MenuItem deleteFamily = new MenuItem(submenu, SWT.PUSH);
deleteFamily.setText("Familie l�s&chen");
deleteFamily.setAccelerator(SWT.CONTROL + SWT.DEL);
deleteFamily.addListener(SWT.Selection, new DeleteFamily());
}
/**
* Men�punkte, mit denen Personengruppen gesucht werden k�nnen.
*/
private void createSearchMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem searchItem = new MenuItem(bar, SWT.CASCADE);
searchItem.setText("&Suchen");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
searchItem.setMenu(submenu);
// Person "normal" suchen.
MenuItem searchPerson = new MenuItem(submenu, SWT.PUSH);
searchPerson.setText("Person &suchen\tCtrl + F");
searchPerson.setAccelerator(SWT.CONTROL + 'F');
searchPerson.addListener(SWT.Selection, new SearchPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// Aktuelle Person abschlie�en, ohne Verweise.
MenuItem searchPersonsWithoutConnectionToCurrentPerson = new MenuItem(submenu, SWT.PUSH);
searchPersonsWithoutConnectionToCurrentPerson.setText("Personen ohne Verbindung zur aktuellen Person");
searchPersonsWithoutConnectionToCurrentPerson.addListener(SWT.Selection,
new SearchPersonsWithoutConnectionToCurrentPerson());
// N�chstgelegene Personen mit Mailadresse suchen.
MenuItem searchNextMailPersons = new MenuItem(submenu, SWT.PUSH);
searchNextMailPersons.setText("N�chste Personen mit Mailadresse\tCtrl + M");
searchNextMailPersons.setAccelerator(SWT.CONTROL + 'M');
searchNextMailPersons.addListener(SWT.Selection, new SearchNextMailPersons());
// Zur n�chsten Person ohne Nachfahren wechseln.
MenuItem nextLeaf = new MenuItem(submenu, SWT.PUSH);
nextLeaf.setText("N�chste Person ohne Nachfahren\tCtrl + Cursor-Down");
nextLeaf.setAccelerator(SWT.CTRL + SWT.ARROW_DOWN);
nextLeaf.addListener(SWT.Selection, new GotoNextLeafPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// N�chstgelegene Personen mit Mailadresse suchen.
MenuItem getShortestConnection = new MenuItem(submenu, SWT.PUSH);
getShortestConnection.setText("K�rzeste Verbindung (zu einer Person) suchen");
getShortestConnection.addListener(SWT.Selection, new GetShortestConnection());
}
/**
* Men�punkte f�r verschiedene Markierungsfunktionen.
*/
private void createLabelMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem viewItem = new MenuItem(bar, SWT.CASCADE);
viewItem.setText("&Markierungen");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
viewItem.setMenu(submenu);
// Aktuelle Person markieren.
MenuItem labelCurrentPerson = new MenuItem(submenu, SWT.PUSH);
labelCurrentPerson.setText("Aktuelle Person markieren\tCtrl + T");
labelCurrentPerson.setAccelerator(SWT.CONTROL + 'T');
labelCurrentPerson.addListener(SWT.Selection, new LabelCurrentPerson());
new MenuItem(submenu, SWT.SEPARATOR);
// Eine Markierung ausw�hlen, mit dem dann direktes Markieren per Shortcut
// stattfinden kann.
MenuItem directLabelChoice = new MenuItem(submenu, SWT.PUSH);
directLabelChoice.setText("Label f�r direktes Markieren festlegen");
directLabelChoice.addListener(SWT.Selection, new DirectLabelChoice());
// Aktuelle Person direkt markieren.
MenuItem labelCurrentPersonDirect = new MenuItem(submenu, SWT.PUSH);
labelCurrentPersonDirect.setText("Aktuelle Person direkt markieren\tF8");
labelCurrentPersonDirect.setAccelerator(SWT.F8);
labelCurrentPersonDirect.addListener(SWT.Selection, new LabelCurrentPersonDirect());
// Aktuelle Direktmarkierung von einer Person entfernen.
MenuItem unlabelCurrentPersonDirect = new MenuItem(submenu, SWT.PUSH);
unlabelCurrentPersonDirect.setText("Direkte Markierung von aktueller Person entfernen\tShift + F8");
unlabelCurrentPersonDirect.setAccelerator(SWT.F8 | SWT.SHIFT);
unlabelCurrentPersonDirect.addListener(SWT.Selection, new UnTagPersonDirect());
new MenuItem(submenu, SWT.SEPARATOR);
// Zur n�chsten Person mit der Direktmarkierung springen.
MenuItem jumpToLabelPerson = new MenuItem(submenu, SWT.PUSH);
jumpToLabelPerson.setText("Zur n�chsten Person mit der Direktmarkierung springen\tCtrl + Shift + F8");
jumpToLabelPerson.setAccelerator(SWT.F8 | SWT.SHIFT | SWT.CTRL);
jumpToLabelPerson.addListener(SWT.Selection, new JumpToLabelPerson());
// Zur n�chsten Person ohne die Direktmarkierung springen.
MenuItem jumpToWithoutLabelPerson = new MenuItem(submenu, SWT.PUSH);
jumpToWithoutLabelPerson.setText("Zur n�chsten Person ohne die Direktmarkierung springen\tAlt + Shift + F8");
jumpToWithoutLabelPerson.setAccelerator(SWT.F8 | SWT.SHIFT | SWT.ALT);
jumpToWithoutLabelPerson.addListener(SWT.Selection, new JumpToWithoutLabelPerson());
}
/**
* Men�punkte f�r verschiedene Ansichten.
*/
private void createViewsMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem viewItem = new MenuItem(bar, SWT.CASCADE);
viewItem.setText("&Ansicht");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
viewItem.setMenu(submenu);
// Vor- und Nachfahren-Ansicht.
MenuItem standardView = new MenuItem(submenu, SWT.PUSH);
standardView.setText("Standard (Vor- und Nachfahrenansicht)");
standardView.addListener(SWT.Selection, new SetStandardView());
// Stamm-Ansicht (nur M�nner / nur Frauen).
MenuItem stammView = new MenuItem(submenu, SWT.PUSH);
stammView.setText("Stammansicht (nur ein Geschlecht)");
stammView.addListener(SWT.Selection, new SetUniSexView());
}
/**
* Men�punkte zum Navigieren.
*/
private void createNavigationMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem personItem = new MenuItem(bar, SWT.CASCADE);
personItem.setText("&Navigation");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
personItem.setMenu(submenu);
// Zu einem beliebigen Elternteil hin wechseln.
MenuItem gotoAnyParent = new MenuItem(submenu, SWT.PUSH);
gotoAnyParent.setText("Zu beliebigem Elternteil wechseln\tCtrl + Shift + E");
gotoAnyParent.setAccelerator(SWT.CONTROL + SWT.SHIFT + 'E');
gotoAnyParent.addListener(SWT.Selection, new GotoAnyParent());
// Zu einem bestimmten Elternteil hin wechseln.
MenuItem gotoParent = new MenuItem(submenu, SWT.PUSH);
gotoParent.setText("Zu Elternteil wechseln\tAlt + Shift + E");
gotoParent.setAccelerator(SWT.ALT + SWT.SHIFT + 'E');
gotoParent.addListener(SWT.Selection, new GotoParent());
new MenuItem(submenu, SWT.SEPARATOR);
// Zu einem beliebigen Kind hin wechseln.
MenuItem gotoAnyChild = new MenuItem(submenu, SWT.PUSH);
gotoAnyChild.setText("Zu beliebigem Kind wechseln\tCtrl + Shift + K");
gotoAnyChild.setAccelerator(SWT.CONTROL + SWT.SHIFT + 'K');
gotoAnyChild.addListener(SWT.Selection, new GotoAnyChild());
// Zu einem bestimmten Kind hin wechseln.
MenuItem gotoChild = new MenuItem(submenu, SWT.PUSH);
gotoChild.setText("Zu Kind wechseln\tAlt + Shift + K");
gotoChild.setAccelerator(SWT.ALT + SWT.SHIFT + 'K');
gotoChild.addListener(SWT.Selection, new GotoChild());
new MenuItem(submenu, SWT.SEPARATOR);
// Zu einem beliebigen Partner hin wechseln.
MenuItem gotoAnyPartner = new MenuItem(submenu, SWT.PUSH);
gotoAnyPartner.setText("Zu beliebigem Partner wechseln\tCtrl + Shift + P");
gotoAnyPartner.setAccelerator(SWT.CONTROL + SWT.SHIFT + 'P');
gotoAnyPartner.addListener(SWT.Selection, new GotoAnyPartner());
// Zu einem bestimmten Partner hin wechseln.
MenuItem gotoPartner = new MenuItem(submenu, SWT.PUSH);
gotoPartner.setText("Zu Partner wechseln\tAlt + Shift + P");
gotoPartner.setAccelerator(SWT.ALT + SWT.SHIFT + 'P');
gotoPartner.addListener(SWT.Selection, new GotoPartner());
}
/**
* Men�punkte, mit denen Personendaten (vorerst) erledigt werden k�nnen.
* @param bar
*/
private void createExtrasMenu(Menu bar) {
// Haupt-Men�punkt.
MenuItem personItem = new MenuItem(bar, SWT.CASCADE);
personItem.setText("E&xtras");
Menu submenu = new Menu(shell, SWT.DROP_DOWN);
personItem.setMenu(submenu);
// TODO - Men�punkt Quelle hinzuf�gen.
// Nachnamen (letztes Wort des Namens) in Gro�buchstaben umwandeln.
MenuItem bigFamilyName = new MenuItem(submenu, SWT.PUSH);
bigFamilyName.setText("&Nachnamen in &Gro�buchstaben umwandeln\tF9");
bigFamilyName.setAccelerator(SWT.F9);
bigFamilyName.addListener(SWT.Selection, new BigFamilyName());
// GED-Datei zum Familien-Merge einlesen.
MenuItem mergeData = new MenuItem(submenu, SWT.PUSH);
mergeData.setText("&Fremddaten �bernehmen\tF10");
mergeData.setAccelerator(SWT.F10);
mergeData.addListener(SWT.Selection, new MergeData());
// Personendaten ausblenden.
MenuItem openPurViewer = new MenuItem(submenu, SWT.PUSH);
openPurViewer.setText("Familien-&Vollansicht ein-/ausblenden\tF11");
openPurViewer.setAccelerator(SWT.F11);
openPurViewer.addListener(SWT.Selection, new PersonDataVisibilityChanger());
// Aktuelle Person abschlie�en, ohne Verweise.
MenuItem fullValidation = new MenuItem(submenu, SWT.PUSH);
fullValidation.setText("V&alidierung\tF12");
fullValidation.setAccelerator(SWT.F12);
fullValidation.addListener(SWT.Selection, new FullValidation());
// Auswertung fahren.
int blase;
// MenuItem reportCreation = new MenuItem(submenu, SWT.PUSH);
// reportCreation.setText("Aus&wertung erstellen");
// reportCreation.addListener(SWT.Selection, new ReportCreation());
// TODO - Men�punkt: Restlichen Fremddaten l�schen. Mit Nachfrage und
// entsprechender Dateil�schung!
new MenuItem(submenu, SWT.SEPARATOR);
// Optionen-Dialog �ffnen.
MenuItem options = new MenuItem(submenu, SWT.PUSH);
options.setText("&Optionen");
options.addListener(SWT.Selection, new ShowOptionsDialog());
}
}