Merge changes made in gramps20 into HEAD

svn: r4549
This commit is contained in:
Alex Roitman 2005-05-11 14:04:47 +00:00
parent bd0ac77097
commit 69287c81f8
111 changed files with 42212 additions and 31765 deletions

View File

@ -1,10 +1,243 @@
2005-05-11 Alex Roitman <shura@gramps-project.org>
* INSTALL, NEWS, README, acinclude.m4, configure.in, doc/gramps.1.in,
doc/gramps-manual/Makefile.am, doc/gramps-manual/C/*.xml,
doc/gramps-manual/C/figures/*.png, src/AddSpouse.py, src/AddrEdit.py,
src/AttrEdit.py, src/ChooseParents.py, src/Date.py, src/DateEdit.py,
src/DbPrompter.py, src/DisplayModels.py,
src/EditPlace.py, src/EditSource.py, src/EventEdit.py,
src/FamilyView.py, src/GenericFilter.py, src/GrampsBSDDB.py,
src/GrampsGconfKeys.py, src/GrampsIniKeys.py, src/GrampsXMLDB.py,
src/ImageSelect.py, src/Marriage.py, src/MergeData.py,
src/MergePeople.py, src/NameEdit.py, src/PedView.py, src/PeopleModel.py,
src/ReadGedcom.py, src/ReadXML.py, src/RelLib.py, src/ReportUtils.py,
src/SourceView.py, src/StartupDialog.py, src/UrlEdit.py, src/Witness.py,
src/WriteGedcom.py, src/WriteXML.py, src/gramps.glade,
src/gramps_main.py, src/mergedata.glade, src/data/Makefile.am,
src/data/gramps.schemas, src/data/tips.xml, src/dates/Date_fi.py,
src/dates/Makefile.am, src/plugins/Check.py,
src/plugins/FilterEditor.py, src/plugins/GraphViz.py,
src/plugins/ImportGeneWeb.py, src/plugins/PatchNames.py,
src/plugins/ReorderIds.py, src/plugins/ScratchPad.py,
src/plugins/SoundGen.py, src/plugins/StatisticsChart.py,
src/plugins/TestcaseGenerator.py, src/plugins/Verify.py,
src/plugins/rel_es.py, src/po/da.po, src/po/de.po, src/po/es.po,
src/po/fi.po, src/po/fr.po, src/po/nb.po, src/po/nl.po, src/po/no.po,
src/po/ru.po, src/po/sv.po, src/po/template.po:
Merge changes made in gramps20 into HEAD.
2005-05-10 Don Allingham <don@gramps-project.org>
* src/DbPrompter.py: add callback for progressbar
* src/GrampsXMLDB.py: pass callback task
* src/ReadXML.py: handle progress callback, fix placeobj error
* src/gramps_main.py: define progress bar callback, remove problem
filters
2005-05-10 Eero Tamminen <eerot@sf>
* src/plugins/StatisticsChart.po: add gettext _() to three strings
where it was missing
2005-05-10 Don Allingham <don@gramps-project.org>
* src/StartupDialog.py: check for broken Slackware library, and
missing gconf installation, present error messages instead of
tracebacks
2005-05-10 Alex Roitman <shura@gramps-project.org>
* src/data/gramps.schemas: Add a welcome key.
* src/GrampsGconfKeys.py: Add get/set methods for welcome key.
* src/GrampsIniKeys.py: Add get/set methods for welcome key.
* src/po/ru.po: Update.
* src/gramps.glade: Remove unused widget.
* src/gramps_main.py: Use new welcome key for the welcome dialog.
* src/data/tips.xml: Update tips.
* src/WriteXML.py (write_witness): Proper witness reference.
* src/ReadXML.py (start_witness): Initialize empty comment.
2005-05-10 Julio Sanchez <jsanchez@users.sourceforge.net>
* src/po/es.po: Updated translation
* src/plugins/rel_es.py: Revert to more conservative relationships
2005-05-09 Don Allingham <don@gramps-project.org>
* src/gramps.glade: new scrollable message dialog
* src/gramps_main.py: add new upgrading information message
* src/template.po: new translatable string
* src/StartupDialog.py: Added Alex's configuration upgrade, but
wrapped in gconf detection
2005-05-09 Alex Roitman <shura@gramps-project.org>
* doc/gramps-manual/C/authors.xml: Update.
* src/DisplayModels.py (column_change): Use localized time string.
* src/PeopleModel.py (column_change): Use localized time string.
* src/RelLib.py (get_change_display): Use localized time string.
2005-05-09 Baruch Even <baruch@ev-en.org>
* src/plugins/GraphViz.py (parse_user_options): Use 'justyears'.
2005-05-08 Don Allingham <don@gramps-project.org>
* src/WriteGedcom.py: fix adopted relationship generation
2005-05-08 Alex Roitman <shura@gramps-project.org>
* src/po/ru.po: Typos.
* doc/gramps-manual/C/usage.xml: Typo.
2005-05-07 Alex Roitman <shura@gramps-project.org>
* INSTALL: Update.
2005-05-07 Julio Sanchez <jsanchez@users.sourceforge.net>
* src/po/es.po: Updated translation
2005-05-07 Jens Arvidsson <jya@sverige.nu>
* src/po/sv.po: Partial translation update for version 2.0.0.
2005-05-07 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/PedView.py (build_detail_string), src/FamilyView.py (load_family):
Dont crash on strange signal race condition, that leaves database in
corrupt state before sending "active-changed"
* src/plugins/ImportGeneWeb.py (read_children_lines): Properly add
birth event; (parse_person): Remove brackets from name;
(get_or_create_place): Fix typo
2005-05-06 Alex Roitman <shura@gramps-project.org>
* acinclude.m4: Copy macro for GCONF configuration from gconf2-dev;
add --disable-mime-install and --enable-packager-mode arguments.
* configure.in: Call new macros; Remove obsolete French and Russian
manuals for the time being.
* doc/gramps-manual/Makefile.am: Remove obsolete manuals.
* src/data/Makefile.am: Conditional installation of gconf keys and
mime types.
* src/po/da.po: Typos preventing make.
* NEWS: Update.
* README: Update.
2005-05-06 Larry Allingham <lallingham@woh.rr.com>
* doc/gramps-manual/C/authors.xml, doc/gramps-manual/C/faq.xml,
doc/gramps-manual/C/mainwin.xml, doc/gramps-manual/C/usage.xml:
Typos and corrections.
2005-05-06 Don Allingham <don@gramps-project.org>
* src/ReadGedcomp.py: Handle inline sources better in GEDCOM files
* src/ReportUtils.py: check for spouse existance before creating a
marriage string - return an empty string instead.
* src/ReadXML.py: fix handling of non-gregorian dates
* src/EditPerson.py: faster building of place lists using cursors
2005-05-06 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/gramps_main.py (undo): Block signals during undo to make
it MUCH faster when undoing larger imports or plugin runs
2005-05-06 Don Allingham <don@gramps-project.org>
* src/gramps_main.py: fix beta warning dialog
2005-05-05 Alex Roitman <shura@gramps-project.org>
* doc/gramps.1.in, doc/gramps-manual/C/bugs.xml,
doc/gramps-manual/C/cmdline.xml, doc/gramps-manual/C/faq.xml,
doc/gramps-manual/C/getstart.xml,
doc/gramps-manual/C/gramps-manual.xml,
doc/gramps-manual/C/mainwin.xml,
doc/gramps-manual/C/preface.xml: Update.
2005-05-05 Don Allingham <don@gramps-project.org>
* src/plugins/PatchNames.py: handle multiple titles (bug 1196056)
* src/plugins/ReorderIDs.py: bring up to speed with new handle/id methodology,
2005-05-05 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/GenericFilter.py: Fix copy-n-paste errors;
dont crash on empty database
2005-05-04 Alex Roitman <shura@gramps-project.org>
* doc/gramps-manual/C/figures/scratch-pad.png: Add new figure.
* doc/gramps-manual/C/authors.xml: Update.
* doc/gramps-manual/C/keybind.xml: Update.
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/cfe-ar.png: Update.
* doc/gramps-manual/C/figures/cfe-df.png: Update.
* src/plugins/FilterEditor.py: Correct manual section.
* src/plugins/ScratchPad.py: Correct manual section.
* src/plugins/SoundGen.py: Correct manual section.
* src/plugins/Verify.py: Correct manual section.
* src/SourceView.py (__init__): Connect to the key-press-event.
* doc/gramps-manual/C/keybind.xml: Update.
* doc/gramps-manual/C/cmdline.xml: Update.
* doc/gramps-manual/C/custom.xml: Update.
* doc/gramps-manual/C/filtref.xml: Update.
2005-05-03 Don Allingham <don@gramps-project.org>
* src/gramps_main.py: remove beta warning, handle OSError
on config open
2005-05-03 Tino Meinen <a.t.meinen@chello.nl>
* src/po/nl.po: Updated Dutch translation
2005-05-03 Eero Tamminen <eerot@sf>
* src/po/fi.po: Updated to new template.
2005-05-03 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/GenericFilter.py (HaveChildren): Match what it should
2005-05-03 Alex Roitman <shura@gramps-project.org>
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/*.png: Add new figures.
* src/MergePeople.py: Minor cleanups; Help buttons.
* src/MergeData.py: Minor cleanups; Help buttons.
* src/mergedata.glade: Minor cleanups; Help buttons.
* doc/gramps-manual/C/prefs.xml: Update.
* doc/gramps-manual/C/figures/prefs.png: Add new figure.
2005-05-03 Don Allingham <don@gramps-project.org>
* src/ReportUtils.py: fixed type (get-day() -> get_day())
2005-05-03 Don Allingham <don@gramps-project.org>
* src/ListBox.py: added to CVS
* src/Makefile.am: added ListBox.py
2005-05-02 Don Allingham <don@gramps-project.org>
* src/gramps.glade: remove place field, fixed parent relationships
* src/ImageSelect.py: remove place handling
2005-05-02 Alex Roitman <shura@gramps-project.org>
* src/DateEdit.py (DateEditorDialog.__init__): Correct manual section.
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/edit-person-notes.png: Update.
* doc/gramps-manual/C/figures/date-selection.png: Add new figure.
* src/EditPlace.py: Correct manual section.
* src/EditSource.py: Correct manual section.
* src/EventEdit.py: Correct manual section.
* src/ImageSelect.py: Correct manual section.
* src/Marriage.py: Correct manual section.
* src/NameEdit.py: Correct manual section.
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/edit-*.png: Update.
* src/AddrEdit.py: Correct manual section.
* src/AttrEdit.py: Correct manual section.
* src/Witness.py: Correct manual section.
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/edit-*.png: Update.
* src/po/ru.po: Translation update.
2005-05-02 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/gramps_main.py: Disable fast merge on a readonly db
* src/plugins/Check.py: Disable on readonly db
* src/plugins/TestcaseGenerator.py: Disable on readonly db
2005-05-02 Don Allingham <dona@gramps-project.org>
* src/GrampsBSDDB.py: handle missing version number properly, detect
empty database properly.
* src/ReadGedcom.py: set default gedcom parser class to "GEDCOM 5.5"
instead of None
* src/AddSpouse.py: fix filtering of lists using GenericFilters
* src/ChooseParents.py: fix filtering of lists using GenericFilters
* src/GenericFilter.py: fix date comparison
2005-05-02 Don Allingham <don@gramps-project.org>
* src/EditPerson.py: start of new gallery
* src/ImageSelect.py: start of new gallery
@ -12,6 +245,23 @@
* src/const.py.in: LDS temple names
* src/edit_person.glade: start of new gallery
2005-05-01 Alex Roitman <shura@gramps-project.org>
* src/EditPerson.py (on_help_clicked): Call appropriate manual section.
* doc/gramps-manual/C/usage.xml: Update.
* doc/gramps-manual/C/figures/edit-person-*.png: Update.
* configure.in: Bump up version, to distinguish from released 1.1.99.
2005-05-01 Don Allingham <don@gramps-project.org>
* src/po/template.po: updated for string changes
* src/Date.py: add the ui_calendar_names for translation for the ui
* src/DateEdit.py: use the new ui_calendar_names for the ui
* src/plugins/Check.py: delete families that contain only a
single parent and no children
2005-05-01 Eero Tamminen <eerot@sf>
* src/dates/Date_fi.py: Fixed Display class + other changes.
Parser is waiting for Gramps DateParser.py update
2005-04-30 Don Allingham <don@gramps-project.org>
* src/EditPerson.py: Add support for inline editing
* src/EventEdit.py: Don't commit events here - should be commited
@ -21,6 +271,12 @@
* src/const.py.in: convert Alternate Birth and Alternate Death to
Birth and Death
2005-04-29 Eero Tamminen <eerot@sf>
* src/dates/Date_fi.py: initial Finnish date parser, doesn't yet
work correctly
* src/dates/Makefile.am: Added Date_fi.py
* src/po/fi.po: Updated translation from template.po + some fixes
2005-04-29 Alex Roitman <shura@gramps-project.org>
* src/edit_person.glade: Compact name edit button.
@ -29,6 +285,14 @@
New files. Start of a client interface for phpGedView.
unfinished. Put them in CVS to not loose them.
2005-04-28 Alex Roitman <shura@gramps-project.org>
* src/EditPlace.py (on_add_url_clicked,on_update_url_clicked):
Use empty name when not available.
* src/UrlEdit.py (__init__): Work with empty names.
2005-04-28 Don Allingham <don@gramps-project.org>
* src/FamilyView.py: fix adding child to wrong family
2005-04-28 Don Allingham <don@gramps-project.org>
* src/EditPerson.py: remove dead logic for birth/death editing,
fix list handling
@ -60,6 +324,12 @@
src/po/fr.po, src/po/ru.po, src/po/template.po: Merge changes
made in gramps20 into HEAD.
2005-04-26 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/EditPerson.py (on_apply_person_clicked): Fix crash when
changing gender caused by a family handle/object mismatch
* src/MergePeople.py: Corrected gender display (closes #1190203)
2005-04-26 Martin Hawlisch <Martin.Hawlisch@gmx.de>
* src/PedView.py: Removed navigation buttons in flavour of a menu;

View File

@ -1,71 +1,53 @@
For rebuilding from source, here are some guidelines to follow. For
developers who may be adding functionality to the program, be sure to read
the last section of this documen: "FINAL WORDS".
$Id$
SUPER-SHORT VERSION:
You should be able to just run "./configure && make". But if you make any
significant changes or experience any problems, you may wish to run
"./autogen.sh && make" to regenerate everything.
This file contains some useful details on the installation from source code
for GRAMPS. It does not cover installation of a pre-built binary package.
For that use your package manager, the rest is done by the packager.
This will call aclocal if necessary, then automake, which creates
Makefile.in from Makefile.am rules. Then it calls autoconf, which will
generate configure from configure.in and the Makefile.{am,in} sources.
Finally, autogen calls configure to generate the final files necessary for
building gramps.
SHORT VERSION:
Execute:
aclocal
automake --add-missing --gnu && autoconf && make
configure vs autogen scripts
----------------------------
If you are building from released tarball, you should be able to just
run "./configure && make". However, if you're building from the CVS,
the configure is not present. You should auto-generate it by
running ./autogen.sh and then "make" and, finally, "make install".
MORE INFO: Version and package info is now set in configure.in through a
call to the AM_INIT_AUTOMAKE macro. The results are stored in variables
PACKAGE and VERSION, which then get substituted wherever necessary.
(gramps.sh, gramps.spec, src/const.py, asst. Makefiles, etc.) We also
manually set the RELEASE variable for setting things like "pre" or minor
bugfix issues. * Note: Using @VERSION@ in the manuals has the advantage that
the current manual always states that it describes current version of
gramps. The disadvantage is that this becomes misleading if the manual
isn't regularly updated. Keep in mind this is GRAMPS version and not
*manual* version. Another problem is that the standard GNOME SGML
documentation make rules (sgmldocs.make) have their own rule, but automake
generates its own rule and this introduces a conflict.
"make (un)install" now runs scrollkeeper-update to ensure
documentation database is up to date. Scrollkeeper v. > 0.3 is required
to properly register documentation.
Regular vs local installation
-----------------------------
This version of gramps requires, among others, the two things to be done:
gconf schemas and mime types for gramps MUST be properly installed.
The usual ./configure, make, and make install as a root should do the trick.
But be careful if you're using the non-default options or would like
to install without being root.
VERBOSE, UGLY DETAILS FOR DEVELOPERS:
Using automake/autoconf adds many, MANY build targets to the makefiles.
Basically, we only care about the main and "install" targets. However,
there are some others that bear further notice:
The latter is possible, but you should supply additional arguments to
autogen or configrue:
--with-gconf-source=xml::$HOME/.gconf --with-mime-dir=$HOME/.local/share
Most likely, such local install will also need some prefix with write
permissions for you:
--prefix=$HOME/my_gramps_path
* make dist -- will create a lovely gramps-{VERSION}.tar.gz archive with
everything needed to distribute, including the HTML documentation just in
case Joe User doen't know about or have a compatable jw/db2html. After
running "make dist" you can create the rpms using
"rpm -ta gramps-{VERSION}.tar.gz". How nice is that?
Whether you're doing local install or regular install, YOU MUST INSTALL
GCONF SCHEMAS AND MIME TYPES. YOU HAVE BEEN WARNED!
* make clean -- only gets rid of byte-compiled stuff like .so files.
* make distclean -- improves on clean by eliminating configuration (*.in,
config.*, Makefiles, and converted documentation.) stuff. This is generally
what you (as a developer) will want for testing "fresh" compiles.
Packager's issues
------------------
The above mentioned gconf schemas and mime types must be installed.
However, the update-mime-database and the gconftool-2 calls to process
the newly installed types and schemas must be done in POST-INSTALLATION.
In packager's world, the install happens on packager's machine
into something like /tmp/gramps-tmp. However, the postinstall
should happen on the user's machine.
* make trans -- We add this one on our own for building the template.po file.
Another caveat of the automake mantra is that new/overriding make
targets/rules/defines should generally go in the Makefile.am files rather
than Makefile.in.
* Note: Another beauty of the automake mechanism (and having automake macros
in the configure script) is that once the scripts have been made, a change
to any .am file will trigger "make" to regenerate the Makefile.in/configure
scripts as appropriate. It is _very_ convenient.
FINAL WORDS: automake "thinks" of a distribution in terms of "SOURCES", such
as raw C code, "COMPILED OBJECTS" like executables and libraries, and
"DATA", such as images, scripts, and documentation. Thus, for gramps we
concentrate on DATA-type objects. We must tell automake what objects are
important. We do this by adding to the EXTRA_DIST variable in the various
Makefile.am files before running automake.
To assist with that, there's an argument available in configure
(or autogen, which will pass it to configure) which disables
the gconf schema and mime type processing:
--enable-packager-mode
This argument should disable postinstall calls made during
make install, and print a nasty warning during configure.
IT IS PACKAGER'S RESPONSIBILITY to follow the advice given
by the configure output and to copy the appropriate code
from the src/data/Makefile.am into the pos-tinstall (and post-uninstall)
of the particular packaging system.

View File

@ -1,3 +1,8 @@
Version 2.0.0 -- the "The Bright Side of Life" release
* Bug fixes
* Translation updates.
* Manual update (English only).
Version 1.1.99 -- the "What... is your favourite colour?" release
* Bug fixes
* GEDCOM import fixes with parent/child relationships

View File

@ -5,28 +5,18 @@ If building from source, also read the INSTALL file (at least through the
Requirements
--------------------------------
The following packages *MUST* be installed in order for Gramps to work:
Python 2.2 or greater
Gnome 2.0 or greater
PyGTK2 1.99.14 or greater
Gnome-python 1.99.14 or greater
Many distributions already provide PyXML, but if your
installation does not have it, you can get it from
http://sourceforge.net/project/showfiles.php?group_id=6473
Python 2.3 or greater
Gnome 2.8 or greater
PyGTK2 2.4 or greater
Gnome-python 2.6 or greater
The following packages are *STRONGLY RECOMMENDED* to be installed:
Reportlab Enable creation of PDF documents
http://www.reportlab.com
Python Imaging Library (PIL)
Enable generation of thumbnails for images
http://www.pythonware.com/products/pil
GraphViz Enable creation of graphs using GraphViz engine
http://www.graphviz.org
If, for some reason, you can't/don't want to install PIL, at least make sure
that ImageMagick is available on your system: http://www.imagemagick.org
WITHOUT eithr PIL or ImageMagick *YOU WILL NOT BE ABLE TO USE THUMBNAILS*
for any of your images.
Documentation
---------------------------------
@ -35,7 +25,7 @@ installed in the GNOME help path(*). Gnome help browser (Yelp) uses these
(properly installed) XML files to display the documentation.
Of course, current HTML documentation can also be found on the gramps website,
http://gramps.sourceforge.net/help.html
http://gramps-project.org/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=7
(*) More precisely, they are installed
in ${prefix}/share/gramps/gnome/help/gramps,

View File

@ -1,3 +1,46 @@
dnl AM_GCONF2_REPLACEMENT
dnl Defines GCONF_SCHEMA_CONFIG_SOURCE which is where you should install schemas
dnl (i.e. pass to gconftool-2
dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where
dnl you should install foo.schemas files
dnl
dnl This macro was copied from AM_GCONF_SOURCE_2 from the gconf2-dev package.
dnl By copying it here we remove the requirement for having it on the system.
AC_DEFUN([AM_GCONF2_REPLACEMENT],
[
if test "x$GCONF_SCHEMA_INSTALL_SOURCE" = "x"; then
GCONF_SCHEMA_CONFIG_SOURCE=`gconftool-2 --get-default-source`
else
GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE
fi
AC_ARG_WITH(gconf-source,
[ --with-gconf-source=sourceaddress Config database for installing schema files.],GCONF_SCHEMA_CONFIG_SOURCE="$withval",)
AC_SUBST(GCONF_SCHEMA_CONFIG_SOURCE)
AC_MSG_RESULT([Using config source $GCONF_SCHEMA_CONFIG_SOURCE for schema installation])
if test "x$GCONF_SCHEMA_FILE_DIR" = "x"; then
GCONF_SCHEMA_FILE_DIR='$(sysconfdir)/gconf/schemas'
fi
AC_ARG_WITH(gconf-schema-file-dir,
[ --with-gconf-schema-file-dir=dir Directory for installing schema files.],GCONF_SCHEMA_FILE_DIR="$withval",)
AC_SUBST(GCONF_SCHEMA_FILE_DIR)
AC_MSG_RESULT([Using $GCONF_SCHEMA_FILE_DIR as install directory for schema files])
AC_ARG_ENABLE(schemas-install,
[ --disable-schemas-install Disable the schemas installation],
[case "${enableval}" in
yes) schemas_install=true ;;
no) schemas_install=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-schemas-install) ;;
esac],[schemas_install=true])
AM_CONDITIONAL(GCONF_SCHEMAS_INSTALL, test x$schemas_install = xtrue)
])
dnl AM_SHARED_MIME
dnl Defines SHARED_MIME_DIR which is where mime type definitions should go.
dnl
@ -9,8 +52,46 @@ AC_DEFUN([AM_SHARED_MIME],
fi
AC_ARG_WITH(mime-dir,
[ --with-mime-dir=dir Shared mime directory.],SHARED_MIME_DIR="$withval",)
[ --with-mime-dir=dir Shared mime directory.],SHARED_MIME_DIR="$withval",)
AC_SUBST(SHARED_MIME_DIR)
AC_MSG_RESULT([Using directory $SHARED_MIME_DIR for installation of mime type definitions])
AC_ARG_ENABLE(mime-install,
[ --disable-mime-install Disable the mime types installation],
[case "${enableval}" in
yes) mime_install=true ;;
no) mime_install=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --disable-mime-install) ;;
esac],[mime_install=true])
AM_CONDITIONAL(SHARED_MIME_INSTALL, test x$mime_install = xtrue)
])
dnl AM_PACKAGER
dnl Defines conditional PACKAGER_MODE to define packager mode
dnl
AC_DEFUN([AM_PACKAGER],
[
AC_ARG_ENABLE(packager_mode,
[ --enable-packager-mode Enable packager mode],
[case "${enableval}" in
yes) packager_mode=true ;;
no) packager_mode=false ;;
*) AC_MSG_ERROR(bad value ${enableval} for --enable-packager-mode) ;;
esac],[packager_mode=false])
AM_CONDITIONAL(PACKAGER_MODE, test x$packager_mode = xtrue)
if test "x$packager_mode" = "xtrue"; then
AC_MSG_RESULT([WARNING:
Packager mode enabled.
GConf schemas and shared mime types WILL NOT BE INSTALLED.
You will need to place the contents of the
GCONF_SCHEMAS_INSTALLATION and SHARED_MIME_INSTALLATION
commands MANUALLY into the postinstall script of your package,
see src/data/Makefile.am file for details.
Otherwise you will end up with the unusable package.
YOU HAVE BEEN WARNED!])
fi
])

View File

@ -4,7 +4,7 @@ dnl Process this file with autoconf to produce a configure script.
dnl May need to run automake && aclocal first
AC_PREREQ(2.57)
AC_INIT(gramps, 1.1.99, gramps-bugs@lists.sourceforge.net)
AC_INIT(gramps, 2.0.0, gramps-bugs@lists.sourceforge.net)
AC_CONFIG_SRCDIR(src/gramps.py)
AM_INIT_AUTOMAKE(1.6.3)
dnl RELEASE=0.CVS$(head -c 10 ${srcdir}/ChangeLog | tr -d '-')
@ -16,8 +16,9 @@ then
VERSIONSTRING="$VERSION-$RELEASE"
fi
AM_GCONF_SOURCE_2
AM_GCONF2_REPLACEMENT
AM_SHARED_MIME
AM_PACKAGER
AC_SUBST(RELEASE)
AC_SUBST(VERSIONSTRING)
@ -253,8 +254,6 @@ src/po/Makefile
doc/Makefile
doc/gramps-manual/Makefile
doc/gramps-manual/C/Makefile
doc/gramps-manual/fr/Makefile
doc/gramps-manual/ru/Makefile
example/Makefile
example/gramps/Makefile
gramps.spec

View File

@ -29,52 +29,56 @@
<para>
The somewhat incomplete list of contributors includes (in alphabetical order):
<itemizedlist>
<listitem><para>Alexandre Duret-Lutz</para></listitem>
<listitem><para>Alexander Bogdashevsky</para></listitem>
<listitem><para>Alexander Roitman</para></listitem>
<listitem><para>Arkadiusz Lipiec</para></listitem>
<listitem><para>Bernd Felsche</para></listitem>
<listitem><para>David R. Hampton</para></listitem>
<listitem><para>Bernd Schandl</para></listitem>
<listitem><para>Billy C. Earney</para></listitem>
<listitem><para>Bruce J. DeGrasse</para></listitem>
<listitem><para>Donald A. Peterson</para></listitem>
<listitem><para>Douglas S. Blank</para></listitem>
<listitem><para>Eero Tamminen</para></listitem>
<listitem><para>Egyeki Gergely</para></listitem>
<listitem><para>Frederick Noronha</para></listitem>
<listitem><para>Frode Jemtland</para></listitem>
<listitem><para>Gary Shao</para></listitem>
<listitem><para>Greg Kuperberg</para></listitem>
<listitem><para>Guillaume Pratte</para></listitem>
<listitem><para>James Treacy</para></listitem>
<listitem><para>Jason Salaz</para></listitem>
<listitem><para>Jeffrey C. Ollie</para></listitem>
<listitem><para>Larry Allingham</para></listitem>
<listitem><para>Jens Arvidsson</para></listitem>
<listitem><para>Jesper Zedlitz</para></listitem>
<listitem><para>Jim Smart</para></listitem>
<listitem><para>Julio Sanchez</para></listitem>
<listitem><para>Lars Kr. Lundin</para></listitem>
<listitem><para>Laurent Protois</para></listitem>
<listitem><para>Leonid Mamtchenkov</para></listitem>
<listitem><para>Lorenzo Cappelletti</para></listitem>
<listitem><para>Marcos Bedinelli</para></listitem>
<listitem><para>Martin Hawlisch</para></listitem>
<listitem><para>Martin Senftleben</para></listitem>
<listitem><para>Matthieu Pupat</para></listitem>
<listitem><para>Michel Guitel</para></listitem>
<listitem><para>Nathan Bullock</para></listitem>
<listitem><para>Pier Luigi Cinquantini</para></listitem>
<listitem><para>Radek Malcic</para></listitem>
<listitem><para>Douglas S. Blank</para></listitem>
<listitem><para>Radu Bogdan Mare</para></listitem>
<listitem><para>Alexander Bogdashevsky</para></listitem>
<listitem><para>Richard Bos</para></listitem>
<listitem><para>Samuel Tardieu</para></listitem>
<listitem><para>Sebastian Voecking</para></listitem>
<listitem><para>Nathan Bullock</para></listitem>
<listitem><para>Lorenzo Cappelletti</para></listitem>
<listitem><para>Pier Luigi Cinquantini</para></listitem>
<listitem><para>Bruce J. DeGrasse</para></listitem>
<listitem><para>Alexandre Duret-Lutz</para></listitem>
<listitem><para>Billy C. Earney</para></listitem>
<listitem><para>Baruch Even</para></listitem>
<listitem><para>Bernd Felsche</para></listitem>
<listitem><para>Egyeki Gergely</para></listitem>
<listitem><para>Michel Guitel</para></listitem>
<listitem><para>Steve Hall</para></listitem>
<listitem><para>Steve Swales</para></listitem>
<listitem><para>Tim Waugh</para></listitem>
<listitem><para>David R. Hampton</para></listitem>
<listitem><para>Martin Hawlisch</para></listitem>
<listitem><para>Frode Jemtland</para></listitem>
<listitem><para>Greg Kuperberg</para></listitem>
<listitem><para>Arkadiusz Lipiec</para></listitem>
<listitem><para>Lars Kr. Lundin</para></listitem>
<listitem><para>Radek Malcic</para></listitem>
<listitem><para>Leonid Mamtchenkov</para></listitem>
<listitem><para>Tino Meinen</para></listitem>
<listitem><para>Frederick Noronha</para></listitem>
<listitem><para>Jeffrey C. Ollie</para></listitem>
<listitem><para>Donald A. Peterson</para></listitem>
<listitem><para>Guillaume Pratte</para></listitem>
<listitem><para>Laurent Protois</para></listitem>
<listitem><para>Matthieu Pupat</para></listitem>
<listitem><para>Alexander Roitman</para></listitem>
<listitem><para>Jason Salaz</para></listitem>
<listitem><para>Julio Sanchez</para></listitem>
<listitem><para>Bernd Schandl</para></listitem>
<listitem><para>Martin Senftleben</para></listitem>
<listitem><para>Gary Shao</para></listitem>
<listitem><para>Jim Smart</para></listitem>
<listitem><para>Steve Swales</para></listitem>
<listitem><para>Eero Tamminen</para></listitem>
<listitem><para>Samuel Tardieu</para></listitem>
<listitem><para>Richard Taylor</para></listitem>
<listitem><para>James Treacy</para></listitem>
<listitem><para>Sebastian Voecking</para></listitem>
<listitem><para>Xing Wang</para></listitem>
<listitem><para>Tim Waugh</para></listitem>
<listitem><para>Jesper Zedlitz</para></listitem>
</itemizedlist>
If you know of somebody else who should be listed here, please let us know.
</para>

View File

@ -24,4 +24,18 @@
<title>Known Bugs and Limitations</title>
<para>The bugs are tracked through the
<ulink url="http://sourceforge.net/tracker/?group_id=25770&amp;atid=385137" type="http">
sourceforge.net tracking system</ulink>.
</para>
<para>The known limitations include the BSDDB performance issues related
to caching and the memory size. As long as the BSDDB cache fits completely
into the available memory on the system, the performance should be
adequate. When the cache size exceeds that of the free memory and
portions of database cache start to be swapped onto the disk, the performance
degrades appreciably. This can be solved by adjusting the BSDDB cache
size for the large databases.
</para>
</appendix >

View File

@ -27,7 +27,7 @@
<para>This appendix provides the reference to the command line
capabilities available when launching &app; from the terminal. </para>
<para>Let us note here that &app; was designed to be an interactive
<note><para>&app; was designed to be an interactive
program. Therefore it uses graphical display and cannot run from the
true non-graphical console. It would take an enormous amount of effort
to enable it to run in a text-only terminal. This is why the set of
@ -35,49 +35,62 @@
on the graphical display. Rather, it merely makes certain (typical) tasks
more convenient. It also allows one to execute these tasks from the scripts.
However, the graphical display must be accessible at all times!
</para>
</para></note>
<para>To summarize, the use of the command line options provides
<tip><para>To summarize, the use of the command line options provides
non-interactive behavior, but does not get rid of graphical display
dependency. Take it or leave it!
</para>
</para></tip>
<sect1 id="cmdline-options">
<title>Available options</title>
<para>Here is the list of the command line options in &app;:
<para>This section provides the reference list of all command line
options available in &app;. If you want to know more than just
a list of options, see next sections: <xref linkend="cmdline-operation"/>
and <xref linkend="cmdline-examples"/>.
</para>
<variablelist>
<varlistentry><term>Format options</term>
<listitem><para> The format of any file destined for import or export
can be specified with the
<command>-f</command> <replaceable>format</replaceable>
option. The <replaceable>format</replaceable> can be one of the
following:
<sect2 id="cmdline-opt-format"><title>Format options</title>
<para> The format of any file destined for opening, importing,
or exporting can be specified with the
<command>-f <replaceable>format</replaceable></command>
option. The acceptable <replaceable>format</replaceable> values
are listed below.</para>
<variablelist>
<varlistentry><term>gramps</term>
<varlistentry><term>grdb</term>
<listitem><para> &app; database. This format is available
for both import and export. When not specified, it can be
guessed if the filename represents a directory.
for opening, import, and export. When not specified, it can be
guessed if the filename ends with .grdb
</para></listitem></varlistentry>
<varlistentry><term>gramps-xml</term>
<listitem><para> &app; XML database. This format is available
for opening, import, and export. When not specified, it can be
guessed if the filename represents a directory.
</para></listitem></varlistentry>
<varlistentry><term>gedcom</term>
<listitem><para> GEDCOM file. This format is available
for both import and export. When not specified, it can be
for opening, import, and export. When not specified, it can be
guessed if the filename ends with .ged
</para></listitem></varlistentry>
<varlistentry><term>gramps-pkg</term>
<listitem><para> &app; package. This format is available
for both import and export. When not specified, it can be
for import and export. When not specified, it can be
guessed if the filename ends with .tgz
</para></listitem></varlistentry>
<varlistentry><term>geneweb</term>
<listitem><para> GeneWen file This format is available
for import and export. When not specified, it can be
guessed if the filename ends with gw
</para></listitem></varlistentry>
<varlistentry><term>wft</term>
<listitem><para> Web Family Tree. This format is available
for export only. When not specified, it can be guessed
@ -91,79 +104,228 @@
</variablelist>
</para></listitem>
</varlistentry>
</sect2>
<varlistentry><term>Import options</term>
<listitem><para> The files destined for import can be specified with
the
<command>-i</command> <replaceable>filename</replaceable>
option. The format can be specified with the <command>-f</command>
option immediately following the <replaceable>filename</replaceable>.
<sect2 id="cmdline-opt-open"><title>Opening options</title>
<para>There are two ways to give &app; the name of the file to
be opened: </para>
<itemizedlist>
<listitem><para>supply bare file name</para></listitem>
<listitem><para>use the
<command>-O <filename>filename</filename></command> or
<command>-open=<filename>filename</filename></command> option
</para></listitem>
</itemizedlist>
<para>If the filename is given without any option flag, the attempt
to open the file will be made, and then the interactive &app; session
will be launched.
</para>
<tip><para>If no option is given, just the file name, &app; will
ignore the rest of the command line arguments. Use the -O flag
to open the file and do something with the data.
</para></tip>
<para>The format can be specified with the
<command>-f <replaceable>format</replaceable></command> or
<command>--format=<replaceable>format</replaceable></command>
option, immediately following the <filename>filename</filename>.
If not specified, the guess will be attempted based on
the <replaceable>filename</replaceable>. For <term>gramps</term>
format, the <replaceable>filename</replaceable> is actually the
the <filename>filename</filename>. For gramps-xml
format, the <filename>filename</filename> is actually the
name of directory under which the gramps database resides. For
<term>gedcom</term> and <term>gramps-pkg</term>, the
<replaceable>filename</replaceable> is the name of the
grdb and gedcom,
the <filename>filename</filename> is the name of the
corresponding file.
</para>
<tip><para>Only grdb, gramps-xml,
and gedcom formats can be opened directly.
For other formats, you will need to use the import option
which will set up the empty database and then import data into it.
</para></tip>
<tip><para>Only a single file can be opened. If you need to combine
data from several sources, you will need to use
the import option.</para></tip>
</sect2>
<sect2 id="cmdline-opt-import"><title>Import options</title>
<para> The files destined for import can be specified with the
<command>-i <filename>filename</filename></command>
or <command>--import=<filename>filename</filename></command>
option. The format can be specified with the
<command>-f <replaceable>format</replaceable></command> or
<command>--format=<replaceable>format</replaceable></command>
option, immediately following the <filename>filename</filename>.
If not specified, the guess will be attempted based on
the <filename>filename</filename>. For gramps-xml
format, the <filename>filename</filename> is actually the
name of directory under which the gramps database resides. For
grdb, gedcom, gramps-pkg, and geneweb,
the <filename>filename</filename> is the name of the
corresponding file.
</para>
<tip><para>More than one file can be imported in one command.
If this is the case, &app; will incorporate the data from
the next file into the database available at the moment.
</para></tip>
<para>When more than one input file is given, each has to be preceded
by <command>-i</command> flag. The files are imported in the
specified order, i.e.
<command>-i</command> <replaceable>file1</replaceable>
<command>-i</command> <replaceable>file2</replaceable>
and
<command>-i</command> <replaceable>file2</replaceable>
<command>-i</command> <replaceable>file1</replaceable>
specified order, i.e. <command>
-i <filename>file1</filename>
-i <filename>file2</filename>
</command> and <command>
-i <filename>file2</filename>
-i <filename>file1</filename>
</command>
might produce different gramps IDs in the resulting database.
</para></listitem>
</varlistentry>
</para></sect2>
<varlistentry><term>Export options</term>
<listitem><para> The files destined for export can be specified with
the
<command>-o</command> <replaceable>filename</replaceable>
<sect2 id="cmdline-opt-export"><title>Export options</title>
<para> The files destined for export can be specified with the
<command>-o <filename>filename</filename></command> or
<command>--output=<filename>filename</filename></command>
option. The format can be specified with the <command>-f</command>
option immediately following the <replaceable>filename</replaceable>.
option immediately following the <filename>filename</filename>.
If not specified, the guess will be attempted based on
the <replaceable>filename</replaceable>. For <term>gramps</term>
and <term>iso</term> formats, the <replaceable>filename</replaceable>
the <filename>filename</filename>. For gramps-xml
and iso formats, the <filename>filename</filename>
is actually the name of directory the gramps database will be written
into. For <term>gedcom</term>, <term>wft</term>,
and <term>gramps-pkg</term>, the <replaceable>filename</replaceable>
into. For grdb, gedcom, wft, geneweb,
and gramps-pkg, the <filename>filename</filename>
is the name of the resulting file.
</para>
<tip><para>More than one file can be exported in one command.
If this is the case, &app; will attempt to write several files
using the data from the database available at the moment.
</para></tip>
<para> When more than one output file is given, each has to be
preceded by <command>-o</command> flag. The files are written one
by one, in the specified order.
</para></listitem>
</varlistentry>
</para></sect2>
<varlistentry><term>Action options</term>
<listitem><para> The action to perform on the imported data can be
<sect2 id="cmdline-opt-action"><title>Action options</title>
<para> The action to perform on the imported data can be
specified with the
<command>-a</command> <replaceable>action</replaceable>
<command>-a <replaceable>action</replaceable></command> or
<command>--action=<replaceable>action</replaceable></command>
option. This is done after all imports are successfully completed.
Currently available actions are <term>summary</term> (same as
</para>
<para>Currently available actions are:</para>
<variablelist>
<varlistentry><term>summary</term>
<listitem><para>This action is the same as
<menuchoice><guimenu>Reports</guimenu><guisubmenu>View</guisubmenu>
<guimenuitem>Summary</guimenuitem></menuchoice>)
and <term>check</term> (same as
<guimenuitem>Summary</guimenuitem></menuchoice>
</para></listitem></varlistentry>
<varlistentry><term>check</term>
<listitem><para>This action is the same as
<menuchoice><guimenu>Tools</guimenu>
<guisubmenu>Database Processing</guisubmenu>
<guimenuitem>Check and Repair</guimenuitem></menuchoice>).
<guimenuitem>Check and Repair</guimenuitem></menuchoice>.
</para> </listitem> </varlistentry>
<varlistentry><term>report</term>
<listitem><para>This action allows producing reports
from the command line. As reports generally have many options
of their own, this action should be followed by the report option
string. The string is given using the
<command>-p <replaceable>option_string</replaceable></command> or
<command>--options=<replaceable>option_string</replaceable></command>
option.
</para>
<tip><para>
The report option string should satisfy the following conditions:
</para>
<itemizedlist>
<listitem><para>It must not contain any spaces. If some arguments
need to include spaces, the string should be enclosed with
quotation marks.
</para></listitem>
<listitem><para>Option string must list pairs of option names
and values.
</para></listitem>
<listitem><para>Withing a pair, option name and value must be
separated by the equal sign.
</para></listitem>
<listitem><para>Different pairs must be separated by commas.
</para></listitem>
</itemizedlist>
</tip>
<para>Most of the report options are specific for every report.
However, there some common options.
</para>
<variablelist>
<varlistentry><term>name=report_name</term>
<listitem> <para>
This mandatory option determines which report will be
generated. If the supplied report_name does not correspond
to any available report, the error message will be printed
followed by the list of available reports.
</para>
</listitem> </varlistentry>
<varlistentry><term>show=all</term>
<listitem> <para>
This will produce the list of names for all options available for
a given report.
</para>
</listitem> </varlistentry>
<varlistentry><term>show=option_name</term>
<listitem> <para>
This will print the description of the functionality supplied
by the option_name, as well as what are the acceptable types
and values for this option.
</para>
</listitem> </varlistentry>
</variablelist>
<para>
Use the above options to find out everything about a given report.
</para>
<tip><para>
If an option is not supplied, the last used value will be used.
If this report has never been generated before, then the
value from last generated report will be used when applicable.
Otherwise, the default value will be used.
</para></tip>
</listitem> </varlistentry>
</variablelist>
<para>When more than one output action is given, each has to be
preceded by <command>-a</command> flag. The actions are performed
one by one, in the specified order.
</para></listitem>
</varlistentry>
</variablelist>
</para></sect2>
</sect1>
@ -171,83 +333,181 @@
<sect1 id="cmdline-operation">
<title>Operation</title>
<itemizedlist>
<listitem>
<para>If the first argument on the command line does not start
with dash (i.e. no flag), &app; will attempt to open the file
with the name given by the first argument and start interactive
session, ignoring the rest of the command line arguments.
</para></listitem>
<listitem>
<para>If the <command>-O</command> flag is given, then &app; will
try opening the
supplied file name and then work with that data, as instructed by
the further command line parameters.
</para>
<note><para>Only one file can be opened in a single invokation
of &app;. If you need to get data from multiple sources, use
the importing options by using <command>-i</command> flag.
</para></note>
</listitem>
<listitem>
<para>With or without the <command>-O</command> flag, there could
be multiple imports, exports, and actions specified further on
the command line by using <command>-i</command>,
<command>-o</command>, and <command>-a</command> flags.
</para></listitem>
<listitem>
<para>The order of <command>-i</command>, <command>-o</command>,
or <command>-a</command> options with respect to each does not matter.
The actual execution order always is: all imports (if any) -> all
exports (if any) -> all actions (if any).</para>
<para>If no <command>-i</command> option is given, gramps will launch
<note><para>But opening must always be first!</para></note>
</listitem>
<listitem>
<para>If no <command>-O</command> or <command>-i</command>
option is given, gramps will launch
its main window and start the usual interactive session with the empty
database (since there is no data to process, anyway).</para>
database, since there is no data to process, anyway.
</para></listitem>
<listitem>
<para>If no <command>-o</command> or <command>-a</command> options
are given, gramps will launch its main window and start the usual
interactive session with the database resulted from all imports.
This database resides under
<replaceable>~/.gramps/import</replaceable> directory.</para>
interactive session with the database resulted from opening
and all imports (if any). This database resides in the
<filename>import_db.grdb</filename> file under the
<filename>~/.gramps/import/</filename> directory.
</para></listitem>
<listitem>
<para>Any errors encountered during import, export, or action, will
be either dumped to stdout (if these are exceptions handled by gramps)
or or to stderr (if these are not handled). Use usual shell redirections
of stdout and stderr to save messages and errors in files.</para>
of stdout and stderr to save messages and errors in files.
</para></listitem>
</itemizedlist>
</sect1>
<sect1 id="cmdline-examples">
<title>Examples</title>
<para>To import four databases (whose formats can be determined from
<variablelist>
<varlistentry>
<term>To import four databases (whose formats can be determined from
their names) and then check the resulting database for errors, one may
type:</para>
<para><command>gramps -i</command> <replaceable>file1.ged</replaceable>
<command>-i</command> <replaceable>file2.tgz</replaceable>
<command>-i</command> <replaceable>~/db3</replaceable>
<command>-i</command> <replaceable>file4.wft</replaceable>
<command>-a</command> <replaceable>check</replaceable>
type:</term>
<listitem>
<para><command>gramps
-i<filename>file1.ged</filename>
-i <filename>file2.tgz</filename>
-i <filename>~/db3</filename>
-i <filename>file4.wft</filename>
-a <filename>check</filename></command>
</para> </listitem></varlistentry>
<varlistentry>
<term>To explicitly specify the formats in the above example, append
filenames with appropriate <command>-f</command> options:</term>
<listitem>
<para><command>gramps
-i <filename>file1.ged</filename>
-f <replaceable>gedcom</replaceable>
-i <filename>file2.tgz</filename>
-f <replaceable>gramps-pkg</replaceable>
-i <filename>~/db3</filename>
-f <replaceable>gramps</replaceable>
-i <filename>file4.wft</filename>
-f <replaceable>wft</replaceable>
-a <replaceable>check</replaceable></command>
</para></listitem>
</varlistentry>
<varlistentry>
<term>To record the database resulting from all imports, supply
<command>-o</command> flag (use <command>-f</command>
if the filename does not allow gramps to guess the format):</term>
<listitem>
<para><command>gramps
-i <filename>file1.ged</filename>
-i <filename>file2.tgz</filename>
-o <filename>~/new-package</filename>
-f <replaceable>gramps-pkg</replaceable></command>
</para></listitem>
</varlistentry>
<varlistentry>
<term>To save any error messages of the above example into files
<filename>outfile</filename> and
<filename>errfile</filename>, run:</term>
<listitem>
<para><command>gramps
-i <filename>file1.ged</filename>
-i <filename>file2.tgz</filename>
-o <filename>~/new-package</filename>
-f <replaceable>gramps-pkg</replaceable>
&gt;<filename>outfile</filename>
2&gt;<filename>errfile</filename> </command>
</para></listitem>
</varlistentry>
<varlistentry>
<term>To import three databases and start interactive gramps
session with the result:</term>
<listitem>
<para><command>gramps
-i <filename>file1.ged</filename>
-i <filename>file2.tgz</filename>
-i <filename>~/db3</filename>
</command>
</para> </listitem>
</varlistentry>
<varlistentry>
<term>To open a database and, based on that data, generate timeline
report in PDF format putting the output into the
<filename>my_timeline.pdf</filename> file:</term>
<listitem>
<para><command>gramps
-O <filename>file.grdb</filename>
-a <replaceable>report</replaceable>
-p <replaceable>name=timeline,off=pdf,of=my_timeline.pdf</replaceable>
</command>
</para>
<para>To explicitly specify the formats in the above example, append
filenames with appropriate <command>-f</command> options:</para>
<para><command>gramps -i</command> <replaceable>file1.ged</replaceable>
<command>-f</command> <replaceable>gedcom</replaceable>
<command>-i</command> <replaceable>file2.tgz</replaceable>
<command>-f</command> <replaceable>gramps-pkg</replaceable>
<command>-i</command> <replaceable>~/db3</replaceable>
<command>-f</command> <replaceable>gramps</replaceable>
<command>-i</command> <replaceable>file4.wft</replaceable>
<command>-f</command> <replaceable>wft</replaceable>
<command>-a</command> <replaceable>check</replaceable>
<tip><para>Use the <replaceable>name=timeline,show=all</replaceable>
to find out about all available options for the timeline report. To
find out details of a particular option, use
<replaceable>show=option_name</replaceable>,
e.g. <replaceable>name=timeline,show=off</replaceable>
string.</para>
<para>To learn about available report names, use
<replaceable>name=show</replaceable> string.
</para>
</tip>
<para>To record the database resulting from all imports, supply
<command>-o</command> flag (use <command>-f</command>
if the filename does not allow gramps to guess the format):</para>
<para><command>gramps -i</command> <replaceable>file1.ged</replaceable>
<command>-i</command> <replaceable>file2.tgz</replaceable>
<command>-o</command> <replaceable>~/new-package</replaceable>
<command>-f</command> <replaceable>gramps-pkg</replaceable>
</para>
<para>To save any error messages of the above example into files
<replaceable>outfile</replaceable> and
<replaceable>errfile</replaceable>, run:</para>
<para><command>gramps -i</command> <replaceable>file1.ged</replaceable>
<command>-i</command> <replaceable>file2.tgz</replaceable>
<command>-o</command> <replaceable>~/new-package</replaceable>
<command>-f</command> <replaceable>gramps-pkg</replaceable>
&gt;<replaceable>outfile</replaceable>
2&gt;<replaceable>errfile</replaceable>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Finally, to start normal interactive session type:</term>
<listitem><para> <command>gramps </command></para></listitem>
</varlistentry>
</variablelist>
<para>To import three databases and start interactive gramps
session with the result:</para>
<para><command>gramps -i</command> <replaceable>file1.ged</replaceable>
<command>-i</command> <replaceable>file2.tgz</replaceable>
<command>-i</command> <replaceable>~/db3</replaceable>
</para>
<para>Finally, to start normal interactive session type:</para>
<para> <command>gramps </command></para>
</sect1>
</appendix>

View File

@ -1,4 +1,4 @@
<chapter id="gramps-prefs">
<chapter id="gramps-settings">
<!--
User Manual for Gramps - a GTK+/GNOME based genealogy program
@ -23,379 +23,269 @@
<!-- $Id$ -->
<title>Settings</title>
<para>To configure &app;, choose
<menuchoice><guimenu>Edit</guimenu>
<guimenuitem>Preferences...</guimenuitem></menuchoice>.
The <guilabel>Preferences</guilabel> dialog contains the following
categories: </para>
<sect1 id="gramps-prefs">
<title>Preferences</title>
<para>Most of the settings in &app;, are configured in the
<guilabel>Preferences</guilabel> dialog. To invoke it, choose
<menuchoice><guimenu>Edit</guimenu>
<guimenuitem>Preferences...</guimenuitem></menuchoice>. </para>
<!-- ==== Figure: Type-ahead find ==== -->
<figure id="prefs-fig">
<title>Preferences dialog</title>
<screenshot><mediaobject><imageobject><imagedata
fileref="figures/prefs.png" format="PNG"/></imageobject>
<textobject>
<phrase>Shows Preferences dialog. </phrase>
</textobject></mediaobject></screenshot></figure>
<!-- ==== End of Figure ==== -->
<para>The pane on the left displays the tree of available option
categories. Selecting a tree node will display the corresponding
options in the right side of the dialog. </para>
<itemizedlist>
<listitem><para><xref linkend="gramps-prefs-usage"/></para></listitem>
<listitem><para><xref linkend="gramps-prefs-display"/></para></listitem>
<listitem><para><xref linkend="gramps-prefs-db"/></para></listitem>
</itemizedlist>
<!-- =============== Customization Subsection ================ -->
<sect1 id="gramps-prefs-usage">
<title>Usage</title>
<sect2 id="gramps-prefs-db">
<title>Database</title>
<para> This category contains preferences relevant to the
general usage of &app;. It has the following subcategories:</para>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-usage-find">
<title>Find</title>
database itself. It has the following subcategories: </para>
<variablelist>
<varlistentry><term><guilabel>General</guilabel></term>
<listitem>
<variablelist>
<varlistentry><term><guilabel>Automatically
load last database</guilabel></term>
<listitem><para> Check this box to automatically load the
last open database on startup. </para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Enable autocompletion</guilabel></term>
<listitem><para>If this box is checked, &app; will attempt to complete
the text as you type it into text entry fields such as family name,
place of birth, etc. Completion is attempted based on the match
between the beginning of the text being typed and the corresponding
data already stored in the database.
</para></listitem>
<varlistentry><term><guilabel>Family name guessing</guilabel></term>
<listitem><para> This option affects the initial family name of a
child when he/she is added to the database. </para>
<tip><para>This option only
affects the initial family name guessed by &app; when the
<guilabel>Edit Person</guilabel> dialog is launched. You can modify
that name the way you see fit. Set this option to the value that you
will most frequently use, as it will save you a lot of
typing.</para></tip>
<para>If <guilabel>None</guilabel> is selected, no guessing will be
attempted. Selecting <guilabel>Father's surname</guilabel> will use
the family name of the father. Selecting <guilabel>Combination of
mother's and father's surname</guilabel> will use the father's name
followed by the mother's name. Finally, <guilabel>Icelandic
style</guilabel> will use the father's given name followed by the
&quot;sson&quot; suffix (e.g. the son of Edwin will be guessed as
Edwinsson).
</para></listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-usage-report">
<title>Report Preferences</title>
<variablelist>
<varlistentry><term><guilabel>Preferred text format</guilabel></term>
<listitem><para> Select the preferred format for text reports
from the available formats listed in this menu.
</para></listitem>
<varlistentry><term><guilabel>GRAMPS IDs</guilabel></term>
<listitem><para> Enter ID prefixes for various kinds of database
entries into the corresponding text entry fields.
</para>
<tip><para>The ID prefixes use formatting conventions common for
C, Python, and other programming languages. For example, the %04d
expands to an integer, prepended with zeros to have the total
width of founr digits. If you would like IDs to be 1, 2, 3, etc,
simply set the formatting parameter to %d.
</para></tip>
</listitem>
</varlistentry>
<varlistentry><term><guilabel>Preferred graphical format</guilabel></term>
<listitem><para> Select the preferred format for graphical reports
from the available formats listed in this menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Preferred paper size</guilabel></term>
<listitem><para> Select the preferred paper size used for reports
from the available sizes listed in this menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Default report directory</guilabel></term>
<listitem><para> Choose the default directory for the reports using the
<guibutton>Browse...</guibutton> button or type it in the text entry
field. </para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Default web site directory</guilabel></term>
<listitem><para> Choose the default directory for the web site using the
<guibutton>Browse...</guibutton> button or type it in the text entry
field. </para></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-usage-res">
<title>Researcher Information</title>
<variablelist>
<varlistentry><term><guilabel>Researcher information</guilabel></term>
<varlistentry><term><guilabel>Researcher Information</guilabel></term>
<listitem><para> Enter your personal information in the corresponding
text entry fields. Although &app; requests information about you,
this information is used only so that &app; can create valid GEDCOM
output files. A valid GEDCOM file requires information about the file's
creator. If you choose, you may leave the information empty, however
none of your exported GEDCOM files will be valid.
</para></listitem>
</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-usage-guess">
<title>Data Guessing</title>
<variablelist>
<varlistentry><term><guilabel>Family name guessing</guilabel></term>
<listitem><para> This option affects the initial family name of a
child when he/she is added to the database. NOTE: this option only
affects the initial family name guessed by &app; when the
<guilabel>Edit Person</guilabel> dialog is launched. You can modify
that name the way you see fit. Set this option to the value that you
will most frequently use, as it will save you a lot of typing.</para>
<para>If <guilabel>None</guilabel> is selected, no guessing will be
attempted. Selecting <guilabel>Father's surname</guilabel> will use
the family name of the father. Selecting <guilabel>Combination of
mother's and father's surname</guilabel> will use the father's name
followed by the mother's name. Finally, <guilabel>Icelandic
style</guilabel> will use the father's given name followed by the
&quot;sson&quot; suffix (e.g. the son of Edwin will be guessed as
Edwinsson).
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect1>
<!-- =============== Customization Subsection ================ -->
<sect1 id="gramps-prefs-display">
<sect2 id="gramps-prefs-display">
<title>Display</title>
<para> This category contains preferences relevant to
displaying database records and controls in &app;.
It has the following subcategories:</para>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-display-gen">
<title>General</title>
<variablelist>
<varlistentry><term><guilabel>General</guilabel></term>
<listitem>
<variablelist>
<varlistentry><term><guilabel>Default view</guilabel></term>
<listitem><para> This determines which view will appear when
you start &app;. Choose between Person and Family views.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Family view style</guilabel></term>
<listitem><para> This selects between the two available styles
of the Family view layout. The <guilabel>Left to right</guilabel>
style is similar to the Family Tree Maker (tm), while the
<guilabel>Top to bottom</guilabel> is similar to the Reunion.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Always display the LDS ordinance
tabs</guilabel></term>
<listitem><para> Check this box to have LDS ordinance tabs
displayed. If you do not know what LDS is then you probably
should not check it. </para></listitem></varlistentry>
<varlistentry><term><guilabel>Display Tip of the
Day</guilabel></term>
<listitem><para> Check this box to have the <guilabel>Tip
of the Day</guilabel> dialog appear on every startup.
The tips are displayed randomly from the large collection
of information bits on &app;.
</para>
<tip><para>The <guilabel>Tip of the Day</guilabel> is likely
to be useful for new user of &app;.
</para></tip>
</listitem></varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry><term><guilabel>Dates</guilabel></term>
<listitem>
<para> Select the display format for the dates
from the available formats listed in this menu.
</para>
<varlistentry><term><guilabel>Default view</guilabel></term>
<listitem><para> This determines which view will appear when you
start &app;. Choose between Person and Family views.
</para></listitem>
<tip><para>Available date display formats are language-specific.
Depending on whether or not there is a &app; date displayer
available for your language, you may or may not have a lot of
choices.
</para></tip>
</listitem>
</varlistentry>
<varlistentry><term><guilabel>Family view style</guilabel></term>
<listitem><para> This selects between the two available styles of the Family
view layout. The <guilabel>Left to right</guilabel> style is similar to the
Family Tree Maker (tm), while the <guilabel>Top to bottom</guilabel> is
similar to the Reunion.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Toolbar and Statusbar</guilabel></term>
<listitem>
<varlistentry><term><guilabel>Always display the LDS ordinance tabs</guilabel></term>
<listitem><para> Check this box to have LDS ordinance tabs displayed.
If you do not know what LDS is then you probably should not check it.
</para></listitem>
</varlistentry>
<variablelist>
<varlistentry><term><guilabel>Toolbar</guilabel></term>
<listitem><para> Select the desired appearance of the toolbar
icons from the menu. Selecting <guilabel>GNOME
Settings</guilabel> will use the overall settings selected
for your GNOME desktop.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Show index numbers in child list</guilabel></term>
<listitem><para>
This option is not currently implemented.
</para></listitem>
<varlistentry><term><guilabel>Statusbar</guilabel></term>
<listitem><para> Select the desired contents displayed in the
statusbar using the radio buttons.
</para></listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-display-date">
<title>Dates and Calendar</title>
<variablelist>
<varlistentry><term><guilabel>Display: Date format</guilabel></term>
<listitem><para> Select the display format for the dates
from the available formats listed in this menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Name format</guilabel></term>
<listitem><para> Select the display format for the names
from the available formats listed in this menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Entry: Date format</guilabel></term>
<listitem><para> Select the entry format for the dates
from the available formats listed in this menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Show calendar format selection menu</guilabel></term>
<listitem><para> Check this box to enable the calendar format selection
menu when you are entering dates in the <guilabel>Event
Editor</guilabel> dialog. This will allow you to select different
calendars when editing the dates.
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-display-bars">
<title>Toolbar and Statusbar</title>
<variablelist>
<varlistentry><term><guilabel>Toolbar</guilabel></term>
<listitem><para> Select the desired appearance of the toolbar icons
from the menu. Selecting <guilabel>GNOME Settings</guilabel> will use
the overall settings selected for your GNOME desktop.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Statusbar</guilabel></term>
<listitem><para> Select the desired contents displayed in the
statusbar using the radio buttons.
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</sect2>
</sect1>
<!-- =============== Customization Subsection ================ -->
<sect1 id="gramps-prefs-db">
<title>Database</title>
<para> This category contains preferences relevant to the
database itself. It has the following subcategories: </para>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-db-gen">
<title>General</title>
<variablelist>
<varlistentry><term><guilabel>Automatically load last database</guilabel></term>
<listitem><para> Check this box to automatically load the last open
database on startup. </para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Do not compress XML data file</guilabel></term>
<listitem><para> Check this box to disable compression of the XML
data file. Compression significantly reduces the file size. While it
creates an overhead in performance (some processor cycles must be spent
to decompress the file before use), this overhead is extremely small.
Now that the compression-related bugs have long been fixed, there is
virtually no reason to disable data file compression.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Autosave interval</guilabel></term>
<listitem><para> Set the interval (in minutes) after which &app; will
automatically save your database. Setting the interval to zero (0)
disables autosaving. </para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Default database directory</guilabel></term>
<listitem><para> Choose the default directory in which &app; starts
looking when saving the database using the <guibutton>Browse...</guibutton>
or type its path into the text entry field. </para></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-db-media">
<title>Media Objects</title>
<para>Before describing preferences for media objects, let us
review the background on local and non-local objects. A local object
is the object whose file is stored inside the same directory in which
the &app; database file resides. A non-local object is stored
elsewhere, so that the database has only the reference to the file's
location and some records of the object's properties. </para>
<para>You may choose to store your media objects either locally
or externally. Making your objects local will increase the amount
of disk space consumed by the &app; database directory. However,
if the external file is deleted or removed, &app; will still be able
to use the local copy. In contrast, leaving your objects non-local
will decrease the disk space requirements. However, losing the
original file will render your media object unusable.
<sect1 id="gramps-prefs-other">
<title>Other settings</title>
<para>Besides <guilabel>Preferences</guilabel> dialog, there are
other settings available in &app;. For various reasons they have been
made more readily accessible, as listed below.</para>
<variablelist>
<varlistentry>
<term>Column Editor</term>
<listitem>
<para>The columns of the list views may be added, removed, or reordered
in a <guilabel>Column Editor Dialog</guilabel>,
see <xref linkend="column-editor-fig"/>. Only checked columns will
be shown in the view. To change their order, drag any column to its desired place inside
the editor. Clicking <guibutton>OK</guibutton> will reflect the changes
in the appropriate view. To invoke <guilabel>Column Editor Dialog</guilabel>,
choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Column
Editor...</guimenuitem></menuchoice>.
</para>
<para>Note that exporting your database to any format will compile
all medial objects, no matter whether they are local or not.
Specifically, export to gramps package will include all the media
object files in the package and change the references accordingly.
Export to CD will copy all media object files to the directory under
the <guilabel>burn:///</guilabel> location in Nautilus and change the
references accordingly. Finally, export to GEDCOM will place all
media object files next to the GEDCOM file with the appropriate
changes in the path names.
</para>
<variablelist>
<varlistentry><term><guilabel>Drag and drop from an external
source</guilabel></term>
<listitem><para> Choose between a reference and a local copy made when
the object is dropped into the gallery. The reference saves disk
space as it does not copy the object. The local copy makes your
database portable as it does not depend on an external file. Consult
your needs to make best choice.</para>
<para>Check the <guilabel>Display global properties editor when
object is dropped</guilabel> box to invoke the global properties
editor after you drop an external object into the gallery.
</para></listitem>
<tip>
<para>The <guilabel>Column Editor</guilabel> is available
and works in the same way for all list views.
Specifically, it is available for People View, Family View (children list).
Sources View, Places View, and Media View.</para> </tip>
</listitem>
</varlistentry>
<varlistentry><term><guilabel>Drag and drop from an internal
source</guilabel></term>
<listitem><para> Check the <guilabel>Display local properties editor
when object is dropped</guilabel> box to invoke the local properties
editor after you drop an internal object into the gallery.
</para></listitem>
<varlistentry><term>Setting Home person</term>
<listitem><para>The Home person is the person who becomes active
when database opened, when <guibutton>Home</guibutton> button is clicked
or the <guimenuitem>Home</guimenuitem> menu item is selected from
either <guimenu>Go</guimenu> menu or the right-click context menu
anywhere.</para>
<para>To set Home person, make the desired person active and
then choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Set Home
person...</guimenuitem></menuchoice>.</para>
</listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-db-id">
<title>GRAMPS internal IDs</title>
<variablelist>
<varlistentry><term><guilabel> GRAMPS ID prefixes</guilabel></term>
<listitem><para> Enter ID prefixes for various kinds of database
entries into the corresponding text entry fields.
</para></listitem>
<varlistentry><term>Adjusting viewing controls</term>
<listitem>Whether the toolbar, the sidebar, or the filter (People View
only) are displayed in the main window is adjusted through
the <guimenu>View</guimenu> menu.
</listitem>
</varlistentry>
<varlistentry><term><guilabel>Allow internal GRAMPS ID numbers to be
edited</guilabel></term>
<listitem><para> Check this box to enable editing of the internal &app;
ID numbers. Unless you know what you are doing, leave it unchecked.
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
<!-- =============== Customization Sub-subsection ================ -->
<sect2 id="prefs-db-rcs">
<title>Revision Control</title>
<variablelist>
<varlistentry><term><guilabel>Use revision control</guilabel></term>
<listitem><para> Check this box to enable &app; to use the revision control
system for your database. If you choose this option, select the
particular revision control system from the menu.
</para></listitem>
</varlistentry>
<varlistentry><term><guilabel>Prompt for comment on save</guilabel></term>
<listitem><para> Check this box to instruct &app; to prompt you to enter
the comment when you save the database.
</para></listitem>
</varlistentry>
</variablelist>
</sect2>
</variablelist>
</sect1>
<sect1 id="gramps-prefs-adv">
<title>Advanced manipulation of settings</title>
<warning><para>The contents of this section is outside the scope
of interest of a general user of &app;. If you proceed with tweaking
the options on the low level you may damage your &app; installation.
Be careful. YOU HAVE BEEN WARNED!
</para></warning>
<para>By default, &app; stores its settings using gconf2 system.
All the settings used in this version of &app; are stored in
subdirectories under <filename>/apps/gramps/</filename> in the
gconf2 namespace. Accessing the keys can be done either using
<command>gconftool-2</command> command line tool, or the
<command>gconf-editor</command> GUI tool.
</para>
<para>All keys are documented, and the notification mechanisms
are used as appropriate. Therefore, updating keys from outside
of &app; should lead to updating &app; in real time, without
necessarily restarting it.</para>
</sect1>
</chapter>

View File

@ -61,13 +61,15 @@ This, however, may change in the future.
<varlistentry><term>Does it work with the Mac?</term>
<listitem><para>
The Fink project (<ulink url="http://fink.sf.net"
type="http">http://fink.sf.net</ulink>) has ported an old version of
&app; (0.8.0) to OSX. The Mac OSX port is not directly supported by
<ulink url="http://fink.sourceforge.net"
type="http">The Fink project</ulink> has ported
<ulink url="http://fink.sourceforge.net/pdb/package.php/gramps"
type="http">some older versions</ulink> of
&app; to OSX (tm). The Mac OSX port is not directly supported by
the &app; project, primarily because none of the &app; developers
have access to Mac OSX.</para>
have access to Mac OSX and because OSX is not Free Software.</para>
<para>The GNOME 2 version of &app; (0.9.x) does not appear to have been
<para>This version of &app; (&appversion;) does not appear to have been
ported by the Fink project. Please contact the Fink project for more
information.
</para></listitem>
@ -86,8 +88,8 @@ Yes, as long as the required GNOME libraries are installed.
<varlistentry><term>What version of GNOME do I need?</term>
<listitem><para>
The latest versions of gramps (0.9.0 and higher) require GNOME 2.0 or higher.
Previous versions required GNOME 1.X.
This version of gramps requires GNOME 2.8.0 or higher.
Previous versions in 1.0.x series required GNOME 2.0.
</para></listitem>
</varlistentry>
@ -137,7 +139,7 @@ their own plugins which could be new reports, charts, or research tools.
<listitem><para>
Text reports are available in HTML, PDF, AbiWord, KWord, LaTeX, RTF, and
OpenOffice formats. Graphical reports (charts and diagrams) are available in
PostScript, PDF, SVG, OpenOffice and GraphViz formats.
PostScript, PDF, SVG, OpenOffice, and GraphViz formats.
</para></listitem>
</varlistentry>
@ -148,7 +150,7 @@ data that you download from the Internet. It can export data that you could
send over the Internet. &app; is familiar with the standard file formats
widely used on the Internet (e.g. JPEG, PNG, and GIF images, MP3, OGG, and
WAV sound files, QuickTime, MPEG, and AVI movie files, etc). Other than that,
there is little that a genealogical program can do with the Internet :-)
there is little that a genealogical program can do with the Internet.
</para></listitem>
</varlistentry>
@ -170,7 +172,7 @@ knowledge of programming in Python.
<varlistentry><term>What standards does &app; support?</term>
<listitem><para>
The nice thing about the standards is that there never is a shortage of
them :-). &app; is tested to support the following flavors of GEDCOM:
them. &app; is tested to support the following flavors of GEDCOM:
GEDCOM5.5, Brother's Keeper, Family Origins, Familty Tree Maker, Ftree,
GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion, and
Visual Genealogie.
@ -181,43 +183,34 @@ Visual Genealogie.
size (bytes) &app; can handle?</term>
<listitem><para>
&app; has no hard limits on the size of a database that it can handle.
In reality, however, there are practical limits. Currently &app; loads all
data into memory, so the limiting factor tends to be the available memory
on the system.
Starting with this release, &app; no longer loads all data into memory,
which allows it to work with much larger database than before.
In reality, however, there are practical limits. The main limiting factors
are the available memory on the system and the cache size used for BSDDB
database access. With common memory sizes these days, &app; should have
no problem using databases with tens of thousands of people.
</para></listitem>
</varlistentry>
<varlistentry><term>How many people can &app; database handle?</term>
<listitem><para>
We have found that on a typical system, &app; tends to bog down after the
database has around 15,000 people. Again, this is dependant on how much
database has around 150,000 people. Again, this is dependent on how much
memory you have.
</para></listitem>
</varlistentry>
<varlistentry><term>Why is &app; running so slowly?</term>
<listitem><para>
If &app; seems too slow to you, it is most likely that you have a large
database. Currently, &app; loads all the database into memory, therefore
large databases tend to be less than responsive. Specifically, the system
can be virtually brought to its knees if swapping is needed for &app;' data.
</para> <para>
This will be addressed in the next stable release following version 1.0.
Temporarily, adding more memory could make a huge difference, but we realize
that this is a poor way of treating the problem. If you would like to help
with the implementation of the real database backend, please don't hesitate
to email us at <ulink url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
<listitem><para> It does not anymore! Just try out the current
version, &appversion;.
</para></listitem>
</varlistentry>
<varlistentry><term>My database is really big.
Is there a way around loading all the data into memory?</term>
<listitem><para>
Currently, there is no way around it. However, this is our biggest priority
after releasing version 1.0. The real database backend will be incorporated
in the next stable release (1.2) which will dramatically improve performance
in both speed and memory usage.
Starting with this release, &app; no longer loads all data into memory,
which allows it to work with much larger database than before.
</para></listitem>
</varlistentry>
@ -229,34 +222,30 @@ in both speed and memory usage.
the flag needs to be reset. This can be done with the following
command: </para>
<para><command>gconftool-2 -u /apps/gramps/startup</command>
<para><command>gconftool-2 -u /apps/gramps/behavior/startup</command>
</para></listitem>
</varlistentry>
<varlistentry><term>Why are non-latin characters displayed
as garbage in PDF/PS reports?</term>
<listitem><para>
This is a known problem -- PS (and PDF) have builtin fonts which pretty much
reflect the latin-1 charset. Any font in principle could be used with PS/PDF
but then it would have to be embedded in the file. This is problematic since
every system has different idea about fonts and their setup.</para>
<para>
This should be resolved as we move to gnome-print. In the meantime, a useable
workaround is to generate reports in OpenOffice.org format and then export
to PDF from the OpenOffice.org application.
</para></listitem>
<listitem><para> This is a limitation of the builtin fonts of PS
and PDF formats. To print non-latin text, use the Print...
in the format selection menu of the report dialog. This will use
the gnome-print backend, which supports PS and PDF creation,
as well as direct printing.</para>
<para>If you only have latin text, the PDF option will produce
a smalled PDF compared to that created by gnome-print, simply because
no font information will be embedded.
</para>
</listitem>
</varlistentry>
<varlistentry><term>Why can I not add/remove/edit columns to the lists
in People View and Family View?</term>
<listitem><para>
This will be addressed after the TreeModelSort bug is fixed in pygtk,
see <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=125172"
type="http">http://bugzilla.gnome.org/show_bug.cgi?id=125172</ulink>
for the details.
Once the patch is committed and incorporated into pygtk, we will add the
ability to add/remove/edit sortable columns.
<listitem><para> Now you can! Just try out the current
version, &appversion;.
</para></listitem>
</varlistentry>
@ -374,13 +363,13 @@ If, however, you would like the &app; project to to adopt your strategy,
you would need to convince &app; developers that your strategy is good
for &app; and superior to the present development strategy.</para>
<para>
HINT: if &app; developers are still not convinced after about three
<tip><para>
If &app; developers are still not convinced after about three
messages sent to gramps-devel, maybe you are better off on your own
rather than with a company of retards who can't fully realize the
potential of your great idea :-)
</para></listitem>
</para></tip></listitem>
</varlistentry>
</variablelist>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 16 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 7.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 21 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 8.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 9.6 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 9.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 6.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 24 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 19 KiB

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 13 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 8.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 26 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

@ -25,7 +25,8 @@
<title>Filter rules reference</title>
<para>This appendix lists of all the filter rules currently defined
in &app;. Each of these rules is available for use when creating custom
filters. The rules are listed by their categories.
filters, see <xref linkend="tools-util-cfe"/>. The rules are
listed by their categories.
</para>
<!-- =============== Appendices Sub-subsection ================ -->
@ -43,6 +44,26 @@
</para></listitem>
</varlistentry>
<varlistentry><term>People with incomplete names</term>
<listitem><para> This rule matches all people with either
given name or family name missing.
</para></listitem>
</varlistentry>
<varlistentry><term>Is bookmarked person</term>
<listitem><para> This rule matches all people who are on the
bookmark list.
</para></listitem>
</varlistentry>
<varlistentry><term>Has text matching substring of</term>
<listitem><para> This rule matches all people whose records contain
specified substring. All textual records are searched. Optionally,
the search can be made case sensitive, or a regular expression
match.
</para></listitem>
</varlistentry>
<varlistentry><term>Everyone</term>
<listitem><para> This rule matches any person in the database.
As such it is not very useful on its own except for testing purposes.
@ -50,6 +71,13 @@
</para></listitem>
</varlistentry>
<varlistentry><term>People probably alive</term>
<listitem><para> This rule matches all people whose records do
not indicate their death and who are not unreasonably old,
judging by their available birth data and today's date.
</para></listitem>
</varlistentry>
<varlistentry><term>Has a name</term>
<listitem><para> This rule matches any person whose name
matches the specified value in full or in part. For example,
@ -58,7 +86,7 @@
</para>
<para> Separate values can be used for Given name, Family name,
Suffix, and the Title. The rule returns a match if and only if
Suffix, and the Title. The rule returns a match if, and only if,
all non-empty values are (partially) matched by a person's
name. To use just one value, leave the other values empty.
</para></listitem>
@ -77,11 +105,33 @@
</para></listitem>
</varlistentry>
<varlistentry><term>Is default person</term>
<listitem><para> This rule matches the default (home) person.
</para></listitem>
</varlistentry>
<varlistentry><term>People marked private</term>
<listitem><para> This rule matches people whose records are marked
as private.
</para></listitem>
</varlistentry>
<varlistentry><term>Is a female</term>
<listitem><para> This rule matches any female person.
</para></listitem>
</varlistentry>
<varlistentry><term>People who have images</term>
<listitem><para> This rule matches people with images in their
galleries.
</para></listitem>
</varlistentry>
<varlistentry><term>People without a birth date</term>
<listitem><para> This rule matches people missing birth date.
</para></listitem>
</varlistentry>
<varlistentry><term>Is a male</term>
<listitem><para> This rule matches any male person.
</para></listitem>
@ -107,7 +157,7 @@
using the value "sw" for the Place.
</para>
<para> The rule returns a match if and only if
<para> The rule returns a match if, and only if,
all non-empty values are (partially) matched by a person's
birth. To use just one value, leave the other values empty.
</para></listitem>
@ -122,12 +172,18 @@
will be matched by the rule using the value "sw" for the Place.
</para>
<para> The rule returns a match if and only if
<para> The rule returns a match if, and only if,
all non-empty values are (partially) matched by a person's
death. To use just one value, leave the other values empty.
</para></listitem>
</varlistentry>
<varlistentry><term>Has source of</term>
<listitem><para> This rule matches people whose records refer
to the specified source.
</para></listitem>
</varlistentry>
<varlistentry><term>Has the personal event</term>
<listitem><para> This rule matches people that have a personal
event matching specified values for the Event type, Date, Place,
@ -139,7 +195,7 @@
</para>
<para> The personal events should be selected from a pull-down menu.
The rule returns a match if and only if all non-empty values
The rule returns a match if, and only if, all non-empty values
are (partially) matched by the personal event.
To use just one value, leave the other values empty.
</para></listitem>
@ -156,12 +212,30 @@
</para>
<para> The family events should be selected from a pull-down menu.
The rule returns a match if and only if all non-empty values
The rule returns a match if, and only if, all non-empty values
are (partially) matched by the personal event.
To use just one value, leave the other values empty.
</para></listitem>
</varlistentry>
<varlistentry><term>Witness</term>
<listitem><para> This rule matches people who are present as
a witness in the event. If the personal or family event type is
specified, only the events of this type will be searched.
</para></listitem>
</varlistentry>
<varlistentry><term>People with incomplete events</term>
<listitem><para> This rule matches people missing date or place in
any personal event.
</para></listitem>
</varlistentry>
<varlistentry><term>Families with incomplete events</term>
<listitem><para> This rule matches people missing date or place in
any family event of any of their families.
</para></listitem>
</varlistentry>
</variablelist>
</sect1>
@ -173,6 +247,26 @@
based on their family relationships:</para>
<variablelist>
<varlistentry><term>People with children</term>
<listitem><para> This rule matches people with children.
</para></listitem>
</varlistentry>
<varlistentry><term>People with multiple marriage records</term>
<listitem><para> This rule matches people with more than one spouse.
</para></listitem>
</varlistentry>
<varlistentry><term>People with no marriage records</term>
<listitem><para> This rule matches people with no spouses.
</para></listitem>
</varlistentry>
<varlistentry><term>People who were adopted</term>
<listitem><para> This rule matches adopted people.
</para></listitem>
</varlistentry>
<varlistentry><term>Has the relationships</term>
<listitem><para> This rule matches people with a particular
relationship. The relationship must match the type selected from
@ -180,7 +274,7 @@
of children can be specified.
</para>
<para> The rule returns a match if and only if
<para> The rule returns a match if, and only if,
all non-empty values are (partially) matched by a person's
relationship. To use just one value, leave the other values empty.
</para></listitem>
@ -207,6 +301,13 @@
</para></listitem>
</varlistentry>
<varlistentry><term>Is a sibling of filter match</term>
<listitem><para> This rule matches people whose sibling
is matched by the specified filter.
The specified filter name should be selected from the menu.
</para></listitem>
</varlistentry>
</variablelist>
</sect1>

View File

@ -25,8 +25,9 @@
<title>Getting Started</title>
<para>This chapter provides the most basic information on starting &app; and
obtaining help. Please procede to the following chapters for more information.</para>
<para>This chapter provides the most basic information on starting &app;
and obtaining help. Please procede to the following chapters for more
information.</para>
<!-- ================ Getting Started Subsection ====== -->
<sect1 id="gramps-start">
@ -35,13 +36,15 @@
<variablelist>
<varlistentry>
<term><guimenu>Applications</guimenu> menu</term>
<listitem><para>Choose <menuchoice><guisubmenu>Other</guisubmenu>
<listitem><para>The method of starting &app; from the menus may vary from
distribution to distribution. On default GNOME desktop,
choose <menuchoice><guisubmenu>Other</guisubmenu>
<guimenuitem>Gramps</guimenuitem></menuchoice>. </para></listitem>
</varlistentry>
<varlistentry>
<term>Command line</term>
<listitem><para>To start &app; from a command line, type
<command>gramps</command>, then press <keycap>Return</keycap>.</para>
<command>gramps</command>, then press <keycap>Enter</keycap>.</para>
<para>If you would like &app; to open a specific database or to
import a specific file on startup, you can supply the filename

View File

@ -34,9 +34,9 @@
<!ENTITY legal SYSTEM "legal.xml">
<!ENTITY appversion "1.2.0">
<!ENTITY appversion "2.0.0">
<!ENTITY manrevision "2.6">
<!ENTITY date "February 2005">
<!ENTITY date "May 2005">
<!ENTITY app "GRAMPS">
<!-- The rest of the entities is simply the chapters of the manual.. -->
@ -93,7 +93,7 @@
<surname>Roitman</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<address> <email>shura@alex.neuro.umn.edu</email> </address>
<address> <email>shura@gramps-project.org</email> </address>
</affiliation>
</author>
<author>
@ -101,7 +101,7 @@
<surname>Allingham</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<address> <email>dallingham@users.sourceforge.net</email> </address>
<address> <email>don@gramps-project.org</email> </address>
</affiliation>
</author>
@ -139,7 +139,7 @@
<date>&date;</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email></para>
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
</revision>
@ -148,7 +148,7 @@
<date>February 2004</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email></para>
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
</revision>
@ -157,7 +157,7 @@
<date>December 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email></para>
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
</revision>
@ -166,7 +166,7 @@
<date>September 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email></para>
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
</revision>
@ -175,7 +175,7 @@
<date>July 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email></para>
<email>shura@gramps-project.org</email></para>
<para role="author">Donald A. Peterson
<email>dpeterson@sigmaxi.org</email></para>
<para role="publisher">GRAMPS Project</para>
@ -186,7 +186,7 @@
<date>May 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email>
<email>shura@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
@ -196,7 +196,7 @@
<date>April 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@alex.neuro.umn.edu</email>
<email>shura@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
@ -206,7 +206,7 @@
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<email>dallingham@users.sourceforge.net</email>
<email>don@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
@ -216,7 +216,7 @@
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<email>dallingham@users.sourceforge.net</email>
<email>don@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
@ -231,7 +231,8 @@
<para>
To report a bug or make a suggestion regarding this application or
this manual, use the help menu in &app;, or follow the directions
on <ulink url="http://gramps.sourceforce.net/contact.html" type="http">this site.</ulink>
found on <ulink url="http://gramps-project.org/index.php?module=pagemaster&amp;PAGE_user_op=view_page&amp;PAGE_id=3"
type="http">this site</ulink>.
</para>
<!-- Translators may also add here feedback address for translations -->

View File

@ -23,13 +23,19 @@
<!-- $Id$ -->
<title>Keybindings reference</title>
<para>Most of the standard menu items define equivalent keybindings.
These are apparent because they are displayed on the right of
the menu item. However, some keybindings are not associated with
any items in the menu. </para>
<para>This appendix contains the list of keybindings that are not
displayed in menus of &app;.
</para>
<sect1 id="keybind-people">
<title>People View</title>
<para>The following bindings are available in the People View:</para>
<sect1 id="keybind-lists">
<title>List Views</title>
<para>The following bindings are available in all list views:
People View, Sources View, Places View, and Media View.</para>
<informaltable frame="topbot">
<tgroup cols="2">
@ -140,8 +146,8 @@
<entry><para><keycap>Ctrl</keycap>+<keycap>Up</keycap>
or <keycap>Ctrl</keycap>+<keycap>Left</keycap></para></entry>
<entry><para>Swap the selected spouse and the Active Person.
Use <keycap>Ctrl</keycap>+<keycap>Down</keycap> in standard Family View and
<keycap>Ctrl</keycap>+<keycap>Right</keycap> in alternative Family
Use <keycap>Ctrl</keycap>+<keycap>Up</keycap> in standard Family View and
<keycap>Ctrl</keycap>+<keycap>Left</keycap> in alternative Family
View.</para></entry>
</row>
</tbody>
@ -262,4 +268,4 @@
</sect1>
</appendix>
</appendix>

View File

@ -123,7 +123,7 @@
<!-- ==== End of Figure ==== -->
</listitem></varlistentry>
<varlistentry><term>To switch the View while in a Notebook mode,
<varlistentry><term>To switch the View while in a Tabbed mode,
click on the desired notebook tab.</term>
<listitem>
<!-- ==== Figure: Tabbed Notebook Mode ==== -->
@ -138,7 +138,7 @@
</listitem></varlistentry>
</variablelist>
<para>To switch between sidebar and notebook viewing modes,
<para>To switch between sidebar and tabbed viewing modes,
choose <menuchoice> <guimenu>View</guimenu>
<guimenuitem>Sidebar</guimenuitem>
</menuchoice> from the &app; menu.</para>
@ -156,7 +156,7 @@
<para> The individuals are arranged in a tree-like structure,
according to their family names. Every family name is a node of the
tree. Clicking the arrow on the left of the node will toggle its
expansion state. When expanded, the node's contents is listed in the
expansion state. When expanded, the node's content is listed in the
window. When collapsed, the contents is rolled up and not visible.
However, all the data is still intact, it is just not being displayed.
</para>
@ -179,7 +179,7 @@
see <xref linkend="column-editor-fig"/>. Only checked columns will be shown
in the view. To change their order, drag any column to its desired place inside
the editor. Clicking <guibutton>OK</guibutton> will reflect the changes
in the People View. To incoke <guilabel>Column Editor Dialog</guilabel>,
in the People View. To invoke <guilabel>Column Editor Dialog</guilabel>,
choose <menuchoice><guimenu>Edit</guimenu><guimenuitem>Column
Editor</guimenuitem></menuchoice>.
</para>
@ -286,7 +286,7 @@
allows you to edit their relationship information. Shift-clicking on
the Current spouse allows the editing of the Current spouse's data.</para>
<para> To add a new relationship use one of the two upper buttons to the
<para> To add a new relationship, use one of the two upper buttons to the
right of the spouse box. Click the top one to add a new person to a
database and to the new relationship. Click the middle one to add a
person already existing in the database to the new relationship.
@ -295,7 +295,7 @@
right of the spouse box. Note that removing a spouse from the
relationship does not remove the person from the database. Most of these
functions are also available by right-clicking into the spouse box and
selecting an appropriate items from the context menu. </para>
selecting an appropriate item from the context menu. </para>
<para>The parents of both the Active person and the Current spouse
are listed in the corresponding list boxes in the right-hand part of
@ -308,7 +308,7 @@
That is, it makes the selected Father the Active person, and the
selected Mother the Current spouse. Most of these
functions are also available by right-clicking into the parent box and
selecting an appropriate items from the context menu. </para>
selecting an appropriate item from the context menu. </para>
<para>The bottom list box displays children of the Active person and
the Current Spouse. The Children's list can be ordered by the Birth date
@ -329,7 +329,7 @@
button removes the selected child from the family. Note that removing
a child from the family does not remove the person from the
database. Most of these functions are also available by right-clicking
into the children box and selecting an appropriate items from the
into the children box and selecting an appropriate item from the
context menu.</para>
<para>The layout of the Family View can be switched from the
@ -378,7 +378,7 @@
relations (such as adoption, step-parenthood, guardianship, etc.).
When the mouse moves over the white box, it expands to display the
corresponding person's dates of birth and death. When the mouse is
placed over the family line, the line become highlighted to indicate
placed over the family line, the line becomes highlighted to indicate
an active link: double-clicking on the line makes the corresponding
ancestor the Active person. The display in that case is re-adjusted
to show four generations, starting from the newly selected Active
@ -428,7 +428,7 @@
context menu. Among other useful items, the context menu has submenus
listing <guilabel>Spouses</guilabel>, <guilabel>Siblings</guilabel>,
<guilabel>Children</guilabel>, and <guilabel>Parents</guilabel>
of that person. Insensitive (greyed out) submenus indicate the absense
of that person. Insensitive (greyed out) submenus indicate the absence
of the data in the appropriate category. Similarly to the children menu above,
children's and parents' menus distinguish continuing lines from dead ends.
</para>
@ -465,7 +465,7 @@
of the display area.
The set anchor person will stay in effect until either the anchor is
removed (by selecting the <guilabel>Remove anchor</guilabel> item from the
context menu) or until the active person chosen is unrelated to the anchor
context menu), or until the active person chosen is unrelated to the anchor
person. The latter move can be made using extensive navigation tools
available in &app;, see <xref linkend="gramps-nav"/> for the detailed
reference.
@ -546,8 +546,10 @@
Media Objects are any files that relate somehow to the stored
genealogical data. Technically, any file can be stored as a Media
Object. Most frequently, these are images, audio files, animation
files, etc. The list box on the bottom lists the Name, ID, Type, and
Path to the Media Object. <guilabel>Column Editor Dialog</guilabel>
files, etc. The list box on the bottom lists the <guilabel>Name</guilabel>,
<guilabel>ID</guilabel>, <guilabel>Type</guilabel>, and
<guilabel>Path</guilabel> of the Media Object.
<guilabel>Column Editor Dialog</guilabel>
may be used to rearrange the displayed columns, which obey usual
sorting rules. The top part of the GRAMPS window shows
a preview (if available) and information about the Media

View File

@ -67,10 +67,11 @@
<variablelist>
<varlistentry><term>Berkely database backend</term>
<listitem><para>The default format for &app; is now the BSDDB database. This change
allowed us to overcome performance issues and memory requirements of the 1.0.X branch.
With the database backend, the database sizes of several hunder thousand people do not
<varlistentry><term>Berkeley database backend</term>
<listitem><para>The default format for &app; is now the BSDDB database.
This change allowed us to overcome performance issues and memory
requirements of the 1.0.X branch. With the database backend, the database
sizes of up to a hundred thousand people do not
present a major obstacle any longer.</para>
<para>
@ -161,14 +162,15 @@
<varlistentry><term>Internationalization</term>
<listitem><para>
The approach for entering and displaying dates has been completely re-worked. In
particular, the new framework allows for a deeper localization of displayed dates than
was ever possible using the translatable strings.</para>
The approach for entering and displaying dates has been completely
re-worked. In particular, the new framework allows for a deeper
localization of displayed dates than was ever possible using the
translatable strings.</para>
<para>The internationalization of names have also been improved. Names can be
grouped under a non-default string. Patronymic names are supported, and it is easy
to program new ways on displaying names, as may be required by other cultures
and languages.
<para>The internationalization of names have also been improved.
Names can be grouped under a non-default string. Patronymic names are
supported, and it is easy to program new ways on displaying names, as
may be required by various cultures and languages.
</para></listitem>
</varlistentry>
@ -191,27 +193,27 @@
<title>Typographical conventions</title>
<para>
In this book, we some words are marked with special typography:
<simplelist>
<member><application>Applications</application></member>
<member><command>Commands</command> you type at the command
line</member>
<member><filename>Filenames</filename></member>
<member><replaceable>Replaceable text</replaceable></member>
<member><guilabel>Labels</guilabel> for buttons and other
portions of the graphical interface</member>
<itemizedlist>
<listitem><application>Applications</application></listitem>
<listitem><command>Commands</command> you type at the command
line</listitem>
<listitem><filename>Filenames</filename></listitem>
<listitem><replaceable>Replaceable text</replaceable></listitem>
<listitem><guilabel>Labels</guilabel> for buttons and other
portions of the graphical interface</listitem>
<member> Menu selections look like this:
<listitem> Menu selections look like this:
<menuchoice>
<guimenu>Menu</guimenu>
<guisubmenu>Submenu</guisubmenu>
<guimenuitem>Menu Item</guimenuitem>
</menuchoice>
</member>
<member><guibutton>Buttons</guibutton> you can
click</member>
<member><userinput>Anything you type
in</userinput></member>
</simplelist>
</listitem>
<listitem><guibutton>Buttons</guibutton> you can
click</listitem>
<listitem><userinput>Anything you type
in</userinput></listitem>
</itemizedlist>
</para>
<para>

File diff suppressed because it is too large Load Diff

View File

@ -1,3 +1,3 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = C fr ru
SUBDIRS = C

View File

@ -1,4 +1,4 @@
.TH gramps 1 "@VERSION@" "June 2004" "@VERSION@"
.TH gramps 1 "@VERSION@" "May 2005" "@VERSION@"
.SH NAME
gramps \- Genealogical Research and Analysis Management Programming System.
@ -7,6 +7,10 @@ gramps \- Genealogical Research and Analysis Management Programming System.
.RB [ \-?|\-\^\-help ]
.RB [ \-\^\-usage ]
.RB [ \-\^\-version ]
.RB [ \-O|\-\^\-open=
.IR FILE
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR FILE
.RB [ \-f|\-\^\-format=
@ -19,18 +23,19 @@ gramps \- Genealogical Research and Analysis Management Programming System.
.IR FORMAT ]]
.RB [ \-a|\-\^\-action=
.IR ACTION ]
.RB [ \-p|\-\^\-options=
.IR OPTIONSTRING ]]
.RB [
.IR FILE
.RB ]
.SH DESCRIPTION
.PP
\fIGramps\fP is an open source genealogy program. It is written in Python,
using the GTK/GNOME interface.
.br
\fIGramps\fP is a Free/OpenSource genealogy program. It is written in Python,
using the GTK+/GNOME interface.
Gramps should seem familiar to anyone who has used other geneology programs
before such as \fIFamily Tree Maker for Windows(TM)\fR or the GNU Geneweb.
.br
before such as \fIFamily Tree Maker (TM)\fR, \fIPersonal Ancestral
Files (TM)\fR, or the GNU Geneweb.
It supports importing of the ever popular GEDCOM format which is used world
wide by almost all other genealogy software.
@ -41,32 +46,56 @@ When \fIFILE\fR is given (without any flags) then it is
opened and an interactive session is started. The rest of the options
is ignored. This way of launching is suitable for using gramps
as a handler for genealogical data in e.g. web browsers. This invokation
can accept any data format known to gramps, see below.
can accept any data format native to gramps, see below.
.br
.TP
.BI \-f,\-\^\-format= " FORMAT"
Explicitly specify format of \fIFILE\fR given by preceding \fB\-i\fR or
Explicitly specify format of \fIFILE\fR given by preceding \fB\-O\fR,
\fB\-i\fR, or
\fB\-o\fR option. If the \fB\-f\fR option is not given for any \fIFILE\fR,
the format of that file is guessed according to its extension.
.br
Formats
available for import are \fBgramps\-xml\fR (guessed if \fIFILE\fR is a
directory), \fBgedcom\fR (guessed if \fIFILE\fR ends with \fB.ged\fR), and
\fBgramps\-pkg\fR (guessed if \fIFILE\fR ends with \fB.gpkg\fR).
available for opening are \fBgrdb\fR (guessed if \fIFILE\fR ends with
\fB.grdb\fR), \fBgramps\-xml\fR (guessed if \fIFILE\fR is a
directory), and \fBgedcom\fR (guessed if \fIFILE\fR ends with \fB.ged\fR).
.br
Formats available for export are \fBgramps\-xml\fR, \fBgedcom\fR, \fBgramps\-pkg\fR,
\fBwft\fR (guessed if \fIFILE\fR ends with \fB.wft\fR), and \fBiso\fR
(never guessed, always specify with \fB\-f\fR option).
Formats
available for import are \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR (guessed if \fIFILE\fR ends with \fB.gpkg\fR), and
\fBgeneweb\fR (guessed if \fIFILE\fR ends with \fB.gw\fR).
.br
Formats available for export are \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR, \fBwft\fR (guessed if \fIFILE\fR ends with \fB.wft\fR),
\fBgeneweb\fR, and \fBiso\fR (never guessed, always specify with
\fB\-f\fR option).
.TP
.BI \-O,\-\^\-open= " FILE"
Open \fIFILE\fR.
Only \fBgrdb\fR, \fBgramps\-xml\fR, and \fBgedcom\fR formats can be
opened directly. For other formats, you will need to use the import option
which will set up the empty database and then import data into it.
For \fBgramps\-xml\fR format, the \fIFILE\fR
is actually the name of directory under which the gramps database resides.
For \fBgrdb\fR and \fBgedcom\fR, the \fIFILE\fR is the name of
the corresponding file.
.br
Only a single file can be opened. If you need to combine data from several
sources, you will need to use the import option.
.TP
.BI \-i,\-\^\-import= " FILE"
Import data from \fIFILE\fR. For \fBgramps\-xml\fR format, the \fIFILE\fR
is actually the name of directory under which the gramps database resides.
For \fBgedcom\fR and \fBgramps\-pkg\fR, the \fIFILE\fR is the name of
the corresponding file.
For \fBgrdb\fR, \fBgedcom\fR, \fBgramps\-pkg\fR, and \fBgeneweb\fR,
the \fIFILE\fR is
the name of the corresponding file.
.br
When more than one input file is given, each has to be preceded by \fB\-i\fR
@ -79,8 +108,8 @@ gramps IDs in the resulting database.
.BI \-o,\-\^\-output= " FILE"
Export data into \fIFILE\fR. For \fBgramps\-xml\fR and \fBiso\fR formats, the
\fIFILE\fR is actually the name of directory the gramps database will be
written into. For \fBgedcom\fR, \fBwft\fR, and \fBgramps\-pkg\fR,
the \fIFILE\fR is the name of the resulting file.
written into. For \fBgrdb\fR, \fBgedcom\fR, \fBwft\fR, \fBgramps\-pkg\fR,
and \fBgeneweb\fR, the \fIFILE\fR is the name of the resulting file.
.br
When more than one output file is given, each has to be preceded
@ -90,27 +119,82 @@ by \fB\-o\fR flag. The files are written one by one, in the specified order.
.BI \-a,\-\^\-action= " ACTION"
Perform \fIACTION\fR on the imported data. This is done after all imports
are succesfully completed. Currently available actions are \fBsummary\fR
(same as Reports->View->Summary) and \fBcheck\fR (same as Tools->Database
Processing->Check and Repair).
(same as Reports->View->Summary), \fBcheck\fR (same as Tools->Database
Processing->Check and Repair), and \fBreport\fR (generates report, needs
the \fIOPTIONSTRING\fR supplied by the \fB\-p\fR flag).
.br
The report option string should satisfy the following conditions:
.br
It must not contain any spaces.
If some arguments need to include spaces, the string should
be enclosed with quotation marks.
Option string must list pairs of option names and values.
Withing a pair, option name and value must be separated by the equality sign.
Different pairs must be separated by commas.
.br
Most of the report options are specific for every report. However, there some
common options.
.BI "name=reportname"
.br
This mandatory option determines which report
will be generated. If the supplied report_name does not correspond to any
available report, the error message will be printed followed by the list of
available reports.
.BI "show=all"
.br
This will produce the list of names for all options
available for a given report.
.BI "show=optionname"
.br
This will print the description of
the functionality supplied by the optionname, as well as what are the
acceptable types and values for this option.
.br
Use the above options to find out
everything about a given report.
.LP
When more than one output action is given, each has to be preceded
by \fB\-a\fR flag. The actions are performed one by one, in the specified order.
.BI "Operation"
.br
If the first argument on the command line does not start with dash (i.e. no
flag), gramps will attempt to open the file with the name given by the first
argument and start interactive session, ignoring the rest of the command line
arguments.
.LP
If the \fB\-O\fR flag is given, then gramps will try opening
the supplied file name and then work with that data, as instructed by the
further command line parameters.
.LP
With or without the \fB\-O\fR flag, there could be multiple imports,
exports, and actions specified further on the command line by using \fB\-i\fR,
\fB\-o\fR, and \fB\-a\fR flags.
.LP
The order of \fB\-i\fR, \fB\-o\fR, or \fB\-a\fR options does not matter. The
actual order always is: all imports (if any) -> all exports (if any) ->
all actions (if any).
all actions (if any). But opening must always be first!
.LP
If no \fB\-i\fR option is given, gramps will launch its main
window and start the usual interactive session with the empty database
(since there is no data to process, anyway).
If no \fB\-O\fR or \fB\-i\fR option is given, gramps will launch its main
window and start the usual interactive session with the empty database,
since there is no data to process, anyway.
.LP
If no \fB\-o\fR or \fB\-a\fR options are given, gramps will launch its main
window and start the usual interactive session with the database resulted
from all imports. This database resides under \fB~/.gramps/import\fR directory.
from all imports. This database resides in the \fBimport_db.grdb\fR
under \fB~/.gramps/import\fR directory.
.LP
The error encountered during import, export, or action, will be either
@ -141,7 +225,7 @@ report generators, tools, and display filters to be added without modification
of the main program.
.LP
In addition to generating direct printer output, report generators also
target other systems, such as \fIOpenOffice.org\fR, \fIAbiWord\fR, HTML
target other systems, such as \fIOpenOffice.org\fR, \fIAbiWord\fR, HTML,
or LaTeX to allow the users to modify the format to suit their needs.
.SH KNOWN BUGS AND LIMITATIONS
@ -155,7 +239,7 @@ or LaTeX to allow the users to modify the format to suit their needs.
\fI${HOME}/.gramps\fP
.SH AUTHORS
Donald Allingham \fI<dallingham@users.sourceforge.net>\fR
Donald Allingham \fI<don@gramps-project.org>\fR
.br
\fIhttp://gramps.sourceforge.net\fR
.LP
@ -167,7 +251,7 @@ for inclusion in the Debian GNU/Linux system.
.LP
This manpage is currently maintained by:
.br
Alex Roitman \fI<shura@alex.neuro.umn.edu>\fR
Alex Roitman \fI<shura@gramps-project.org>\fR
.br
.SH DOCUMENTATION
@ -176,5 +260,5 @@ in the form of Gramps Manual. The manual is also available in XML format
as \fBgramps-manual.xml\fR under \fIdoc/gramps-manual/$LANG\fR in the official
source distribution.
.LP
The developer documentation can be found in the \fBDocs\fR section
of \fIhttp://sourceforge.net/project/gramps\fR site.
The developer documentation can be found on the
\fIhttp://developers.gramps-project.org\fR site.

View File

@ -53,8 +53,10 @@ import const
import Utils
import PeopleModel
import Date
import DateHandler
import Marriage
import NameDisplay
import GenericFilter
from QuestionDialog import ErrorDialog
#-------------------------------------------------------------------------
@ -81,25 +83,14 @@ class AddSpouse:
self.gender = self.person.get_gender()
self.active_family = family
self.filter_func = self.likely_filter
self.likely = self.build_likely(self.gender)
self.all = self.build_all()
self.filter = self.likely
# determine the gender of the people to be loaded into
# the potential spouse list. If Partners is selected, use
# the same gender as the current person.
birth_handle = self.person.get_birth_handle()
death_handle = self.person.get_death_handle()
if birth_handle:
self.bday = self.db.get_event_from_handle(birth_handle).get_date_object()
else:
self.bday = Date.Date()
if death_handle:
self.dday = self.db.get_event_from_handle(death_handle).get_date_object()
else:
self.dday = Date.Date()
self.glade = gtk.glade.XML(const.gladeFile, "spouseDialog","gramps")
self.relation_def = self.glade.get_widget("reldef")
@ -111,7 +102,7 @@ class AddSpouse:
self.renderer = gtk.CellRendererText()
self.slist = PeopleModel.PeopleModel(self.db)
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist)
self.selection = self.spouse_list.get_selection()
self.selection.connect('changed',self.select_row)
@ -127,7 +118,6 @@ class AddSpouse:
self.glade.get_widget('title'),title,
_('Choose Spouse/Partner'))
self.glade.signal_autoconnect({
"on_select_spouse_clicked" : self.select_spouse_clicked,
"on_spouse_help_clicked" : self.on_spouse_help_clicked,
@ -138,7 +128,34 @@ class AddSpouse:
self.rel_combo.set_active(RelLib.Family.MARRIED)
self.update_data()
def build_all(self):
filt = GenericFilter.GenericFilter()
filt.add_rule(GenericFilter.Everyone([]))
return filt
def build_likely(self,gender):
birth_handle = self.person.get_birth_handle()
death_handle = self.person.get_death_handle()
filt = GenericFilter.GenericFilter()
if gender == RelLib.Person.MALE:
filt.add_rule(GenericFilter.IsFemale([]))
else:
filt.add_rule(GenericFilter.IsMale([]))
if birth_handle:
birth = self.db.get_event_from_handle(birth_handle)
date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year()
if year:
date_obj.set_year(year-50)
date_obj.set_modifier(Date.MOD_AFTER)
text = DateHandler.displayer.display(date_obj)
rule = GenericFilter.HasBirth([text,"",""])
filt.add_rule(rule)
return filt
def add_columns(self,tree):
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(True)
@ -209,7 +226,7 @@ class AddSpouse:
person = epo.person
self.update_data(person.get_handle())
self.slist = PeopleModel.PeopleModel(self.db)
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.slist.rebuild_data()
self.spouse_list.set_model(self.slist)
@ -295,7 +312,6 @@ class AddSpouse:
return person.get_gender() != self.sgender
def likely_filter(self, person):
print self.sgender
if person.get_gender() == self.sgender:
return False
@ -361,12 +377,12 @@ class AddSpouse:
the potential spouse list.
"""
self.slist = PeopleModel.PeopleModel(self.db)
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist)
def on_show_toggled(self,obj):
if self.filter_func == self.likely_filter:
self.filter_func = self.all_filter
if self.filter == self.likely:
self.filter = self.all
else:
self.filter_func = self.likely_filter
self.filter = self.likely
self.update_data()

View File

@ -194,7 +194,7 @@ class AddressEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-ad')
def ok_clicked(self,obj):
"""

View File

@ -198,7 +198,7 @@ class AttributeEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-at')
def on_ok_clicked(self,obj):
"""

View File

@ -53,7 +53,9 @@ import RelLib
import const
import Utils
import PeopleModel
import Date
import NameDisplay
import DateHandler
import GenericFilter
from QuestionDialog import ErrorDialog
@ -89,25 +91,16 @@ class ChooseParents:
self.renderer = gtk.CellRendererText()
# set default filters
self.father_filter = GenericFilter.GenericFilter()
self.father_filter.add_rule(GenericFilter.IsMale([]))
self.all_males_filter = GenericFilter.GenericFilter()
self.all_males_filter.add_rule(GenericFilter.IsMale([]))
self.likely_males_filter = self.build_likely(True)
self.mother_filter = GenericFilter.GenericFilter()
self.mother_filter.add_rule(GenericFilter.IsFemale([]))
self.all_females_filter = GenericFilter.GenericFilter()
self.all_females_filter.add_rule(GenericFilter.IsFemale([]))
self.likely_females_filter = self.build_likely(False)
bhandle = self.person.get_birth_handle()
birth_event = self.db.get_event_from_handle(bhandle)
if birth_event:
self.bday = birth_event.get_date_object()
else:
self.bday = None
dhandle = self.person.get_death_handle()
death_event = self.db.get_event_from_handle(dhandle)
if death_event:
self.dday = death_event.get_date_object()
else:
self.dday = None
self.father_filter = self.likely_males_filter
self.mother_filter = self.likely_females_filter
if self.family:
self.father = self.family.get_father_handle()
@ -161,11 +154,13 @@ class ChooseParents:
self.redrawm()
self.glade.signal_autoconnect({
"on_add_parent_clicked" : self.add_parent_clicked,
"on_prel_changed" : self.parent_relation_changed,
"destroy_passed_object" : self.close,
"on_save_parents_clicked" : self.save_parents_clicked,
"on_help_familyDialog_clicked" : self.on_help_clicked,
"on_add_parent_clicked" : self.add_parent_clicked,
"on_prel_changed" : self.parent_relation_changed,
"destroy_passed_object" : self.close,
"on_showallf_toggled" : self.showallf_toggled,
"on_showallm_toggled" : self.showallm_toggled,
"on_save_parents_clicked" : self.save_parents_clicked,
"on_help_familyDialog_clicked" : self.on_help_clicked,
"on_familyDialog_delete_event" : self.on_delete_event,
})
@ -175,6 +170,34 @@ class ChooseParents:
self.window.show()
def build_likely(self,is_male):
birth_handle = self.person.get_birth_handle()
filt = GenericFilter.GenericFilter()
if is_male:
filt.add_rule(GenericFilter.IsMale([]))
else:
filt.add_rule(GenericFilter.IsFemale([]))
if birth_handle:
birth = self.db.get_event_from_handle(birth_handle)
date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year()
if year:
date_obj.set_year(year-10)
date_obj.set_modifier(Date.MOD_BEFORE)
rule = GenericFilter.HasBirth(
[DateHandler.displayer.display(date_obj),"",""])
filt.add_rule(rule)
date_obj = Date.Date(birth.get_date_object())
date_obj.set_year(year-60)
date_obj.set_modifier(Date.MOD_AFTER)
rule = GenericFilter.HasBirth(
[DateHandler.displayer.display(date_obj),"",""])
filt.add_rule(rule)
return filt
def build_list(self,opt_menu,sel):
cell = gtk.CellRendererText()
opt_menu.pack_start(cell,True)
@ -255,12 +278,6 @@ class ChooseParents:
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-quick')
def all_males_filter(self,person):
return (person.get_gender() == RelLib.Person.MALE)
def all_females_filter(self,person):
return (person.get_gender() == RelLib.Person.FEMALE)
def redrawf(self):
"""Redraws the potential father list"""
self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter)
@ -291,17 +308,17 @@ class ChooseParents:
self.redrawm()
def showallf_toggled(self,obj):
if self.father_filter == self.likely_father_filter:
self.father_filter = self.all_males_filter
if self.father_filter == self.likely_males_filter:
self.father_filter = self.all_females_filter
else:
self.father_filter = self.likely_father_filter
self.father_filter = self.likely_males_filter
self.redrawf()
def showallm_toggled(self,obj):
if self.mother_filter == self.likely_mother_filter:
if self.mother_filter == self.likely_females_filter:
self.mother_filter = self.all_females_filter
else:
self.mother_filter = self.likely_mother_filter
self.mother_filter = self.likely_females_filter
self.redrawm()
def find_family(self,father_handle,mother_handle,trans):

View File

@ -99,6 +99,14 @@ class Date:
"Persian",
"Islamic"]
ui_calendar_names = [_("Gregorian"),
_("Julian"),
_("Hebrew"),
_("French Republican"),
_("Persian"),
_("Islamic")]
def __init__(self,source=None):
"""
Creates a new Date instance.

View File

@ -193,7 +193,7 @@ class DateEditorDialog:
Utils.set_titles(self.top_window,title,_('Date selection'))
self.calendar_box = self.top.get_widget('calendar_box')
for name in Date.Date.calendar_names:
for name in Date.Date.ui_calendar_names:
self.calendar_box.append_text(name)
self.calendar_box.set_active(self.date.get_calendar())
self.calendar_box.connect('changed',self.switch_calendar)
@ -258,7 +258,7 @@ class DateEditorDialog:
response = self.top_window.run()
if response == gtk.RESPONSE_HELP:
try:
gnome.help_display('gramps-manual','index')
gnome.help_display('gramps-manual','adv-dates')
except gobject.GError, msg:
QuestionDialog.ErrorDialog(_("Could not open help"),str(msg))
elif response == gtk.RESPONSE_OK:

View File

@ -313,7 +313,7 @@ class ImportDbPrompter:
elif filetype == const.app_gramps_xml:
choose.destroy()
import ReadXML
ReadXML.importData(self.parent.db,filename)
ReadXML.importData(self.parent.db,filename,self.parent.update_bar)
return True
elif filetype == const.app_gedcom:
choose.destroy()

View File

@ -17,6 +17,7 @@
# along with this program; if not, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
#-------------------------------------------------------------------------
#
@ -25,6 +26,7 @@
#-------------------------------------------------------------------------
import time
from gettext import gettext as _
import locale
#-------------------------------------------------------------------------
#
@ -44,6 +46,14 @@ import DateHandler
_GENDER = [ _(u'female'), _(u'male'), _(u'unknown') ]
#-------------------------------------------------------------------------
#
# Localized constants
#
#-------------------------------------------------------------------------
_date_format = locale.nl_langinfo(locale.D_T_FMT)
_codeset = locale.nl_langinfo(locale.CODESET)
#-------------------------------------------------------------------------
#
# BaseModel
@ -281,7 +291,8 @@ class SourceModel(BaseModel):
return unicode(data[4])
def column_change(self,data):
return unicode(time.asctime(time.localtime(data[8])))
return unicode(time.strftime(_date_format,time.localtime(data[8])),
_codeset)
#-------------------------------------------------------------------------
#
@ -364,7 +375,8 @@ class PlaceModel(BaseModel):
return u''
def column_change(self,data):
return unicode(time.asctime(time.localtime(data[11])))
return unicode(time.strftime(_date_format,time.localtime(data[11])),
_codeset)
#-------------------------------------------------------------------------
#
@ -423,4 +435,5 @@ class MediaModel(BaseModel):
return unicode(data[0])
def column_change(self,data):
return unicode(time.asctime(time.localtime(data[8])))
return unicode(time.strftime(_date_format,time.localtime(data[8])),
_codeset)

View File

@ -290,7 +290,7 @@ class EditPlace:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-plc')
def build_columns(self,tree,list):
cnum = 0
@ -418,10 +418,9 @@ class EditPlace:
if node:
row = store.get_path(node)
url = self.ulist[row[0]]
if url:
name = _("Internet Address Editor for %s") % self.place.get_title()
else:
name = _("Internet Address Editor")
name = ""
if self.place:
name = self.place.get_title()
UrlEdit.UrlEditor(self,name,url,self.url_edit_callback)
def on_update_loc_clicked(self,obj):
@ -445,10 +444,9 @@ class EditPlace:
def on_add_url_clicked(self,obj):
import UrlEdit
name = ""
if self.place:
name = _("Internet Address Editor for %s") % self.place.get_title()
else:
name = _("Internet Address Editor")
name = self.place.get_title()
UrlEdit.UrlEditor(self,name,None,self.url_edit_callback)
def url_edit_callback(self,url):

View File

@ -212,7 +212,7 @@ class EditSource:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-src')
def close(self,obj):
self.gallery.close()

View File

@ -299,7 +299,7 @@ class EventEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-ev')
def get_place(self,field):
text = unicode(field.get_text().strip())

View File

@ -110,7 +110,7 @@ class FamilyView:
db.connect('person-rebuild', self.load_family)
def update_callback(self,handle):
self.load_family()
self.load_family(self.family)
def set_widgets(self,val):
already_init = self.cadded[val]
@ -584,11 +584,13 @@ class FamilyView:
model, node = obj.get_selected()
if not node:
self.display_marriage(None)
self.family = None
else:
row = model.get_path(node)
family_handle = self.person.get_family_handle_list()[row[0]]
fam = self.parent.db.get_family_from_handle(family_handle)
self.display_marriage(fam)
self.family = fam
def build_spouse_menu(self,event):
@ -796,7 +798,7 @@ class FamilyView:
self.parent.db.commit_person(new_person,trans)
self.parent.db.commit_family(family,trans)
self.parent.db.transaction_commit(trans,_("Add Child to Family"))
self.display_marriage(family)
self.load_family(family)
def select_child_clicked(self,obj):
if not self.person:
@ -966,6 +968,9 @@ class FamilyView:
if self.parent.active_person:
handle = self.parent.active_person.get_handle()
self.person = self.parent.db.get_person_from_handle(handle)
if not self.person:
self.clear()
return
splist = self.person.get_family_handle_list()
else:
self.person = None

View File

@ -66,14 +66,16 @@ from Utils import for_each_ancestor,probably_alive,get_source_referents
#-------------------------------------------------------------------------
def date_cmp(rule,value):
sd = rule.get_start_date()
s = sd.get_modifier()
value = s.get_start_date()
s = rule.get_modifier()
od = value.get_start_date()
cmp_rule = (sd[2],sd[1],sd[0])
cmp_value = (od[2],od[1],od[0])
if s == Date.MOD_BEFORE:
return rule > value
return cmp_rule > cmp_value
elif s == Date.MOD_AFTER:
return rule < value
return cmp_rule < cmp_value
else:
return rule == value
return cmp_rule == cmp_value
#-------------------------------------------------------------------------
#
@ -410,10 +412,8 @@ class IsDescendantOf(Rule):
except IndexError:
first = 1
if not self.init:
self.init = 1
root_id = self.list[0]
self.init_list(root_id,first)
root_id = self.list[0]
self.init_list(root_id,first)
def reset(self):
self.map = {}
@ -431,6 +431,8 @@ class IsDescendantOf(Rule):
return self.map.has_key(p_id)
def init_list(self,p_id,first):
if not p_id:
return
if not first:
self.map[p_id] = 1
@ -501,6 +503,8 @@ class IsLessThanNthGenerationDescendantOf(Rule):
return self.map.has_key(p_id)
def init_list(self,p_id,gen):
if not p_id:
return
if gen:
self.map[p_id] = 1
if gen >= int(self.list[1]):
@ -546,6 +550,8 @@ class IsMoreThanNthGenerationDescendantOf(Rule):
return self.map.has_key(p_id)
def init_list(self,p_id,gen):
if not p_id:
return
if gen >= int(self.list[1]):
self.map[p_id] = 1
@ -592,6 +598,8 @@ class IsChildOfFilterMatch(Rule):
return self.map.has_key(p_id)
def init_list(self,p_id):
if not p_id:
return
p = self.db.get_person_from_handle(p_id)
for fam_id in p.get_family_handle_list():
fam = self.db.get_family_from_handle(fam_id)
@ -635,6 +643,8 @@ class IsSiblingOfFilterMatch(Rule):
return self.map.has_key(p_id)
def init_list(self,p_id):
if not p_id:
return
p = self.db.get_person_from_handle(p_id)
fam_id = p.get_main_parents_family_handle()
fam = self.db.get_family_from_handle(fam_id)
@ -733,6 +743,8 @@ class IsAncestorOf(Rule):
return self.map.has_key(p_id)
def init_ancestor_list(self,db,p_id,first):
if not p_id:
return
if not first:
self.map[p_id] = 1
@ -763,6 +775,8 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
IsAncestorOf.__init__(self,list)
def prepare(self,db):
self.db = db
self.map = {}
try:
if int(self.list[1]):
first = 0
@ -771,7 +785,6 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
except IndexError:
first = 1
self.init = 1
filt = MatchesFilter(self.list)
filt.prepare(db)
for person_handle in db.get_person_handles(sort_handles=False):
@ -779,6 +792,9 @@ class IsAncestorOfFilterMatch(IsAncestorOf):
self.init_ancestor_list (db,person_handle,first)
filt.reset()
def reset(self):
self.map = {}
def name(self):
return 'Is an ancestor of filter match'
@ -806,7 +822,8 @@ class IsLessThanNthGenerationAncestorOf(Rule):
def prepare(self,db):
self.db = db
self.map = {}
self.build_witness_list()
root_id = self.list[0]
self.init_ancestor_list(root_id,0)
def reset(self):
self.map = {}
@ -822,17 +839,13 @@ class IsLessThanNthGenerationAncestorOf(Rule):
return _("Ancestral filters")
def apply(self,db,p_id):
self.orig_id = p_id
self.db = db
if not self.init:
self.init = 1
root_id = self.list[0]
self.init_ancestor_list(root_id,0)
return self.map.has_key(p_id)
def init_ancestor_list(self,p_id,gen):
# if self.map.has_key(p.get_handle()) == 1:
# loop_error(self.orig,p)
if not p_id:
return
if gen:
self.map[p_id] = 1
if gen >= int(self.list[1]):
@ -886,6 +899,8 @@ class IsMoreThanNthGenerationAncestorOf(Rule):
def init_ancestor_list(self,p_id,gen):
# if self.map.has_key(p.get_handle()) == 1:
# loop_error(self.orig,p)
if not p_id:
return
if gen >= int(self.list[1]):
self.map[p_id] = 1
@ -1243,21 +1258,21 @@ class HasBirth(Rule):
p = db.get_person_from_handle(p_id)
event_handle = p.get_birth_handle()
if not event_handle:
return 0
return False
event = db.get_event_from_handle(event_handle)
ed = event.get_description().upper()
if len(self.list) > 2 and ed.find(self.list[2].upper())==-1:
return 0
return False
if self.date:
if date_cmp(self.date,event.get_date_object()) == 0:
return 0
return False
pl_id = event.get_place_handle()
if pl_id:
pl = db.get_place_from_handle(pl_id)
pn = pl.get_title()
if len(self.list) > 1 and pn.find(self.list[1].upper()) == -1:
return 0
return 1
return False
return True
#-------------------------------------------------------------------------
#
@ -1599,7 +1614,7 @@ class HaveChildren(Rule):
def apply(self,db,p_id):
p = db.get_person_from_handle(p_id)
for (family_handle,rel1,rel2) in p.get_parent_family_handle_list():
for family_handle in p.get_family_handle_list():
family = db.get_family_from_handle(family_handle)
return len(family.get_child_handle_list()) > 0

View File

@ -112,7 +112,7 @@ class GrampsBSDDB(GrampsDbBase):
return GrampsBSDDBCursor(self.media_map)
def need_upgrade(self):
return self.metadata['version'] < _DBVERSION
return not self.readonly and self.metadata.get('version',0) < _DBVERSION
def load(self,name,callback,mode="w"):
if self.person_map:
@ -190,10 +190,11 @@ class GrampsBSDDB(GrampsDbBase):
gstats = self.metadata.get('gender_stats')
if not self.readonly and gstats == None:
self.metadata['version'] = _DBVERSION
elif not self.metadata.has_key('version'):
self.metadata['version'] = 0
if not self.readonly:
if gstats == None:
self.metadata['version'] = _DBVERSION
elif not self.metadata.has_key('version'):
self.metadata['version'] = 0
if self.bookmarks == None:
self.bookmarks = []
@ -207,7 +208,7 @@ class GrampsBSDDB(GrampsDbBase):
self.close()
def close(self):
if not self.person_map:
if self.person_map == None:
return
self.name_group.close()
self.person_map.close()
@ -356,7 +357,7 @@ class GrampsBSDDB(GrampsDbBase):
"None", "Birth", "Adopted", "Stepchild",
"Sponsored", "Foster", "Unknown", "Other", ]
version = self.metadata['version']
version = self.metadata.get('version',0)
if version < 2:
self.upgrade_2(child_rel_notrans)
if version < 3:

View File

@ -164,6 +164,12 @@ def get_betawarn():
def save_betawarn(val):
set_bool("/apps/gramps/behavior/betawarn",val)
def get_welcome():
return get_int("/apps/gramps/behavior/welcome")
def save_welcome(val):
set_int("/apps/gramps/behavior/welcome",val)
def get_media_reference():
return get_bool("/apps/gramps/behavior/make-reference")

View File

@ -35,6 +35,7 @@ NL = "\n" # FIX: newlines on Mac/Windows, if different?
_ini_schema = {
'behavior/autoload' : '0',
'behavior/betawarn' : '0',
'behavior/welcome' : '100',
'preferences/date-format' : '0',
'preferences/dont-ask' : '0',
'interface/defaultview' : '0',
@ -312,6 +313,12 @@ def get_betawarn():
def save_betawarn(val):
set_bool("behavior", "betawarn",val)
def get_welcome():
return get_bool("behavior", "welcome")
def save_welcome(val):
set_bool("behavior", "welcome",val)
def get_media_reference():
return get_bool("behavior", "make-reference")
@ -589,6 +596,8 @@ if __name__ == "__main__":
save_autoload(val)
print "get_betawarn()", get_betawarn()
save_betawarn(val)
print "get_welcome()", get_welcome()
save_welcome(val)
print "get_media_reference()", get_media_reference()
save_media_reference(val)
print "get_media_global()", get_media_global()

View File

@ -48,7 +48,7 @@ class GrampsXMLDB(GrampsInMemDB):
GrampsInMemDB.load(self,name,callback,mode)
self.id_trans = {}
ReadXML.importData(self,name,use_trans=False)
ReadXML.importData(self,name,callback,use_trans=False)
self.bookmarks = self.metadata.get('bookmarks')
if self.bookmarks == None:

View File

@ -906,19 +906,6 @@ class GlobalMediaProperties:
self.date_entry = self.change_dialog.get_widget('date')
self.date_entry.set_editable(mode)
self.pdmap = {}
self.add_places = []
for key in self.db.get_place_handles():
p = db.get_place_from_handle(key).get_display_info()
self.pdmap[p[0]] = key
self.place = self.change_dialog.get_widget('place')
self.place.set_editable(mode)
self.place_list = self.pdmap.keys()
self.place_list.sort()
build_dropdown(self.place,self.place_list)
if self.obj:
self.date_entry.set_text(self.dd.display(self.date_object))
@ -1183,10 +1170,6 @@ class GlobalMediaProperties:
if not self.date_object.is_equal(self.obj.get_date_object()):
self.obj.set_date_object(self.date_object)
p = self.get_place(self.place)
if p:
self.obj.set_place_handle(p)
format = self.preform.get_active()
if text != note or desc != self.obj.get_description():
self.obj.set_note(text)
@ -1202,7 +1185,7 @@ class GlobalMediaProperties:
def on_help_clicked(self, obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-media')
def on_ok_clicked(self, obj):
self.on_apply_clicked(obj)

View File

@ -373,7 +373,7 @@ class Marriage:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-rel')
def ev_drag_begin(self, context, a):
return

View File

@ -33,6 +33,7 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
import gtk
from gnome import help_display
#-------------------------------------------------------------------------
#
@ -73,9 +74,14 @@ class MergePlaces:
self.glade.signal_autoconnect({
"destroy_passed_object" : Utils.destroy_passed_object,
"on_merge_places_clicked" : self.on_merge_places_clicked,
"on_help_places_clicked" : self.help,
})
self.top.show()
def help(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','adv-merge-places')
def on_merge_places_clicked(self,obj):
"""
Performs the merge of the places when the merge button is clicked.
@ -175,6 +181,8 @@ class MergeSources:
self.glade = gtk.glade.XML(const.mergeFile,"merge_sources","gramps")
self.top = self.glade.get_widget("merge_sources")
Utils.set_titles(self.top,self.glade.get_widget('title'),
_("Merge Sources"))
self.title1 = self.glade.get_widget("title1")
self.title2 = self.glade.get_widget("title2")
@ -203,12 +211,17 @@ class MergeSources:
self.glade.get_widget('ok').connect('clicked',self.merge)
self.glade.get_widget('cancel').connect('clicked',self.close)
self.glade.get_widget('help').connect('clicked',self.help)
self.trans = self.db.transaction_begin()
self.top.show()
def close(self,obj):
self.top.destroy()
def help(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','adv-merge-sources')
def merge(self,obj):
"""
Performs the merge of the sources when the merge button is clicked.

View File

@ -27,6 +27,15 @@
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
import gtk
import pango
from gnome import help_display
#-------------------------------------------------------------------------
#
# GRAMPS modules
@ -37,8 +46,6 @@ import ReportUtils
import Utils
import NameDisplay
import const
import gtk
import pango
sex = ( _("female"), _("male"), _("unknown"))
@ -62,10 +69,15 @@ class Compare:
self.glade.get_widget('cancel').connect('clicked',self.cancel)
self.glade.get_widget('close').connect('clicked',self.merge)
self.glade.get_widget('help').connect('clicked',self.help)
def cancel(self,obj):
self.top.destroy()
def help(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','adv-merge-people')
def merge(self,obj):
if self.glade.get_widget('select1').get_active():
merge = MergePeople(self.db,self.p1,self.p2)
@ -219,8 +231,11 @@ class MergePeopleUI:
p1.set_label(n1)
p2.set_label(n2)
Utils.set_titles(top,glade.get_widget('title'),_("Merge People"))
glade.get_widget('help').connect('clicked',self.help)
ret = top.run()
ret = gtk.RESPONSE_HELP
while ret == gtk.RESPONSE_HELP:
ret = top.run()
if ret == gtk.RESPONSE_OK:
if p1.get_active():
@ -231,6 +246,11 @@ class MergePeopleUI:
update()
top.destroy()
def help(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','adv-merge-people')
def name_of(p):
if not p:
return ""

View File

@ -245,7 +245,7 @@ class NameEditor:
def on_help_clicked(self,*obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-an')
def on_name_edit_ok_clicked(self,obj):
first = unicode(self.given_field.get_text())

View File

@ -761,3 +761,59 @@ def find_parents(db,p):
if mother_handle not in parentlist:
parentlist.append(mother_handle)
return parentlist
#-------------------------------------------------------------------------
#
# Functions to build the text displayed in the details view of a DispBox
# aditionally used by PedigreeView to get the largest area covered by a DispBox
#
#-------------------------------------------------------------------------
def build_detail_string(db,person):
detail_text = NameDisplay.displayer.display(person)
def format_event(db, label, event):
if not event:
return u""
ed = event.get_date()
ep = None
place_handle = event.get_place_handle()
if place_handle:
place_title = db.get_place_from_handle(place_handle).get_title()
if place_title != "":
if len(place_title) > 15:
ep = place_title[:14]+"..."
else:
ep = place_title
if ep:
return u"\n%s %s, %s" % (label,ed,ep)
return u"\n%s %s" % (label,ed)
birth_handle = person.get_birth_handle()
if birth_handle:
detail_text += format_event(db, _BORN, db.get_event_from_handle(birth_handle))
else:
for event_handle in person.get_event_list():
event = db.get_event_from_handle(event_handle)
if event and event.get_name() == "Baptism":
detail_text += format_event(db, _BAPT, event)
break
if event and event.get_name() == "Christening":
detail_text += format_event(db, _CHRI, event)
break
death_handle = person.get_death_handle()
if death_handle:
detail_text += format_event(db, _DIED, db.get_event_from_handle(death_handle))
else:
for event_handle in person.get_event_list():
event = db.get_event_from_handle(event_handle)
if event and event.get_name() == "Burial":
detail_text += format_event(db, _BURI, event)
break
if event and event.get_name() == "Cremation":
detail_text += format_event(db, _CREM, event)
break
return detail_text

View File

@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Donald N. Allingham
# Copyright (C) 2000-2005 Donald N. Allingham
#
# 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
@ -47,6 +47,14 @@ import pango
from RelLib import *
import NameDisplay
#-------------------------------------------------------------------------
#
# Localized constants
#
#-------------------------------------------------------------------------
_date_format = locale.nl_langinfo(locale.D_T_FMT)
_codeset = locale.nl_langinfo(locale.CODESET)
#-------------------------------------------------------------------------
#
# constants
@ -280,7 +288,9 @@ class PeopleModel(gtk.GenericTreeModel):
return data[_ID_COL]
def column_change(self,data,node):
return time.asctime(time.localtime(data[_CHANGE_COL]))
return unicode(time.strftime(_date_format,
time.localtime(data[_CHANGE_COL])),
_codeset)
def column_gender(self,data,node):
return _GENDER[data[_GENDER_COL]]

View File

@ -71,6 +71,7 @@ class SourceView:
self.list = glade.get_widget("source_list")
#self.list.set_property('fixed-height-mode',True)
self.list.connect('button-press-event',self.button_press)
self.list.connect('key-press-event',self.key_press)
self.selection = self.list.get_selection()
self.selection.set_mode(gtk.SELECTION_MULTIPLE)

View File

@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Donald N. Allingham
# Copyright (C) 2000-2005 Donald N. Allingham
#
# 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
@ -20,23 +20,103 @@
# $Id$
import const
#-------------------------------------------------------------------------
#
# Standard python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GTK+/GNOME modules
#
#-------------------------------------------------------------------------
import gtk
import gtk.glade
import gnome
import gnome.ui
import const
if not const.no_gconf:
try:
import gconf
except ImportError:
import gnome.gconf
gconf = gnome.gconf
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import const
import GrampsKeys
from QuestionDialog import ErrorDialog
from gettext import gettext as _
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
if not const.no_gconf:
client = gconf.client_get_default()
client.add_dir("/apps/gramps",gconf.CLIENT_PRELOAD_NONE)
def need_to_run():
val = GrampsKeys.get_startup()
if val < const.startup:
return 1
return 0
return True
return False
def upgrade_prefs():
"""
Get the preferences from the older keys, store them in the new keys.
On success, print message and return True.
On failure, print message and return False.
"""
try:
GrampsKeys.save_fprefix(client.get_string('/apps/gramps/fprefix'))
GrampsKeys.save_sprefix(client.get_string('/apps/gramps/sprefix'))
GrampsKeys.save_pprefix(client.get_string('/apps/gramps/pprefix'))
GrampsKeys.save_oprefix(client.get_string('/apps/gramps/oprefix'))
GrampsKeys.save_iprefix(client.get_string('/apps/gramps/iprefix'))
GrampsKeys.save_researcher_country(client.get_string('/apps/gramps/researcher-country'))
GrampsKeys.save_researcher_email(client.get_string('/apps/gramps/researcher-email'))
GrampsKeys.save_researcher_phone(client.get_string('/apps/gramps/researcher-phone'))
GrampsKeys.save_researcher_city(client.get_string('/apps/gramps/researcher-city'))
GrampsKeys.save_researcher_postal(client.get_string('/apps/gramps/researcher-postal'))
GrampsKeys.save_researcher_addr(client.get_string('/apps/gramps/researcher-addr'))
GrampsKeys.save_researcher_state(client.get_string('/apps/gramps/researcher-state'))
GrampsKeys.save_researcher_name(client.get_string('/apps/gramps/researcher-name'))
GrampsKeys.save_family_view(client.get_int('/apps/gramps/familyview'))
GrampsKeys.save_default_view(client.get_int('/apps/gramps/defaultview'))
GrampsKeys.save_autoload(client.get_bool('/apps/gramps/autoload'))
GrampsKeys.save_uselds(client.get_bool('/apps/gramps/use-lds'))
GrampsKeys.save_statusbar(client.get_int('/apps/gramps/statusbar'))
GrampsKeys.save_view(not client.get_bool('/apps/gramps/view'))
GrampsKeys.save_screen_size_checked(client.get_bool('/apps/gramps/screen-size-checked'))
GrampsKeys.save_lastnamegen(client.get_int('/apps/gramps/surname-guessing'))
toolbar = client.get_int('/apps/gramps/toolbar')
if toolbar == 5:
toolbar = -1
GrampsKeys.save_toolbar(toolbar)
GrampsKeys.save_toolbar_on(client.get_bool('/apps/gramps/toolbar-on'))
print "Successfully imported preferences from the 1.0.x version."
return True
except:
print "Failed to import preferences from the 1.0.x version."
return False
#-------------------------------------------------------------------------
#
#
#
#-------------------------------------------------------------------------
class StartupDialog:
def __init__(self,task,args):
@ -44,13 +124,32 @@ class StartupDialog:
self.task = task
self.args = args
if not const.no_gconf and upgrade_prefs():
GrampsKeys.save_startup(const.startup)
self.close(None)
return
self.w = gtk.Window()
self.fg_color = gtk.gdk.color_parse('#7d684a')
self.bg_color = gtk.gdk.color_parse('#e1dbc5')
self.logo = gtk.gdk.pixbuf_new_from_file("%s/gramps.png" % const.rootDir)
self.splash = gtk.gdk.pixbuf_new_from_file("%s/splash.jpg" % const.rootDir)
d = gnome.ui.Druid()
try:
d = gnome.ui.Druid()
except AttributeError:
ErrorDialog(_("Broken GNOME libraries"),
_("GRAMPS has detected an incomplete gnome-python "
"library, which is required by GRAMPS. This is "
"frequently seen on Slackware systems, due to the "
"lack of support for GNOME in the Slackware "
"environment. If you are running Slackware, this "
"problem can be resolved by installing Dropline "
"GNOME (http://www.dropline.net/gnome/). If you "
"are running another distribution, please check "
"your GNOME configuration."))
gtk.main_quit()
self.w.add(d)
try:
d.add(self.build_page1())
@ -153,6 +252,7 @@ class StartupDialog:
box.add(table)
box.show_all()
name = GrampsKeys.get_researcher_name()
if not name or name.strip() == "":
import pwd
@ -164,14 +264,26 @@ class StartupDialog:
name = ""
self.name.set_text(name)
self.addr.set_text(GrampsKeys.get_researcher_addr())
self.city.set_text(GrampsKeys.get_researcher_city())
self.state.set_text(GrampsKeys.get_researcher_state())
self.postal.set_text(GrampsKeys.get_researcher_postal())
self.country.set_text(GrampsKeys.get_researcher_country())
self.phone.set_text(GrampsKeys.get_researcher_phone())
self.email.set_text(GrampsKeys.get_researcher_email())
try:
self.addr.set_text(GrampsKeys.get_researcher_addr())
self.city.set_text(GrampsKeys.get_researcher_city())
self.state.set_text(GrampsKeys.get_researcher_state())
self.postal.set_text(GrampsKeys.get_researcher_postal())
self.country.set_text(GrampsKeys.get_researcher_country())
self.phone.set_text(GrampsKeys.get_researcher_phone())
self.email.set_text(GrampsKeys.get_researcher_email())
except:
ErrorDialog(_("Configuration/Installation error"),
_("The gconf schemas were not found. First, try "
"executing 'pkill gconfd' and try starting gramps "
"again. If this does not help then the schemas "
"were not properly installed. If you have not "
"done 'make install' or if you installed without "
"being a root, this is most likely a cause of the "
"problem. Please read the INSTALL file in the "
"top-level source directory."))
gtk.main_quit()
return p
def build_page5(self):

View File

@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Donald N. Allingham
# Copyright (C) 2000-2005 Donald N. Allingham
#
# 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
@ -20,6 +20,13 @@
# $Id$
#-------------------------------------------------------------------------
#
# python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
@ -36,7 +43,6 @@ import gnome
import const
import Utils
import RelLib
from gettext import gettext as _
#-------------------------------------------------------------------------
#
@ -64,7 +70,7 @@ class UrlEditor:
self.priv = self.top.get_widget("priv")
title_label = self.top.get_widget("title")
if name == ", ":
if not name or name == ", ":
etitle =_('Internet Address Editor')
else:
etitle =_('Internet Address Editor for %s') % name,

View File

@ -209,7 +209,7 @@ class WitnessEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-complete')
gnome.help_display('gramps-manual','adv-wit')
def choose(self,obj):
import SelectPerson

View File

@ -827,9 +827,10 @@ class GedcomWriter:
self.writeln('1 ADOP')
fam = None
for f in person.get_parent_family_handle_list():
mrel = f[1].lower()
frel = f[2].lower()
if mrel=="adopted" or frel=="adopted":
mrel = f[1]
frel = f[2]
if (mrel == RelLib.Person.CHILD_REL_ADOPT or
frel == RelLib.Person.CHILD_REL_ADOPT):
fam = f[0]
break
if fam:
@ -853,9 +854,10 @@ class GedcomWriter:
self.writeln('1 ADOP')
fam = None
for f in person.get_parent_family_handle_list():
mrel = f[1].lower()
frel = f[2].lower()
if mrel=="adopted" or frel=="adopted":
mrel = f[1]
frel = f[2]
if (mrel == RelLib.Person.CHILD_REL_ADOPT or
frel == RelLib.Person.CHILD_REL_ADOPT):
fam = f[0]
break
if fam:
@ -957,7 +959,7 @@ class GedcomWriter:
if self.flist.has_key(family[0]):
self.writeln("1 FAMC @%s@" % self.fid(family[0]))
if self.adopt == GedcomInfo.ADOPT_PEDI:
if family[1].lower() == "adopted":
if family[1] == RelLib.Person.CHILD_REL_ADOPT:
self.writeln("2 PEDI Adopted")
for family_handle in person.get_family_handle_list():

View File

@ -477,15 +477,13 @@ class XmlWriter:
sp = " "*index
com = self.fix(w.get_comment())
if w.get_type() == RelLib.Event.ID:
self.g.write('%s<witness>\n' % sp)
self.g.write(' %s<hlink>%s</hlink>\n' % (sp,w.get_value()))
self.g.write('%s<witness hlink="%s">\n' % (sp,w.get_value()))
if com:
self.g.write(' %s<comment>%s</comment>\n' % (sp,com))
self.g.write('%s</witness>\n' % sp)
else:
nm = self.fix(w.get_value())
self.g.write('%s<witness>\n' % sp)
self.g.write(' %s<name>%s</name>\n' % (sp,nm))
self.g.write('%s<witness name="%s">\n' % (sp,nm))
if com:
self.g.write(' %s<comment>%s</comment>\n' % (sp,com))
self.g.write('%s</witness>\n' % sp)

View File

@ -21,26 +21,50 @@ EXTRA_DIST = \
gramps.mime \
gramps.schemas
install-schemas:
$(INSTALL) -d $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.schemas $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)
-GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
gconftool-2 --makefile-install-rule $(top_srcdir)/src/data/gramps.schemas
-pkill gconfd
# Conditionally enable/disable gconf schemas or mime types,
# or disable both in a packager mode
GCONF_SCHEMAS_INSTALLATION =
GCONF_SCHEMAS_UNINSTALLATION =
SHARED_MIME_INSTALLATION =
SHARED_MIME_UNINSTALLATION =
install-data-local: install-schemas
if !PACKAGER_MODE
if GCONF_SCHEMAS_INSTALL
GCONF_SCHEMAS_INSTALLATION += \
$(INSTALL) -d $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR) ;\
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.schemas $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR) ;\
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
gconftool-2 --makefile-install-rule $(top_srcdir)/src/data/gramps.schemas ;\
pkill gconfd ; echo Restarting gconfd
GCONF_SCHEMAS_UNINSTALLATION += \
rm $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas ;\
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
gconftool-2 --makefile-uninstall-rule $(top_srcdir)/src/data/gramps.schemas
endif
if SHARED_MIME_INSTALL
SHARED_MIME_INSTALLATION += \
$(INSTALL) -d $(DESTDIR)$(SHARED_MIME_DIR)/packages ;\
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.xml $(DESTDIR)$(SHARED_MIME_DIR)/packages ;\
update-mime-database $(DESTDIR)$(SHARED_MIME_DIR)
SHARED_MIME_UNINSTALLATION += \
rm $(DESTDIR)$(SHARED_MIME_DIR)/packages/gramps.xml ;\
update-mime-database $(DESTDIR)$(SHARED_MIME_DIR)
endif
endif
install-data-local:
$(INSTALL) -d $(DESTDIR)$(prefix)/share/applications
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.desktop $(DESTDIR)$(prefix)/share/applications
$(INSTALL) -d $(DESTDIR)$(prefix)/share/icons/gnome/48x48/mimetypes/
$(INSTALL_DATA) $(top_srcdir)/src/data/gnome-mime-application-x-*.png $(DESTDIR)$(prefix)/share/icons/gnome/48x48/mimetypes/
$(INSTALL) -d $(DESTDIR)$(prefix)/share/application-registry
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.applications $(DESTDIR)$(prefix)/share/application-registry
$(INSTALL) -d $(DESTDIR)$(SHARED_MIME_DIR)/packages
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.xml $(DESTDIR)$(SHARED_MIME_DIR)/packages
$(INSTALL) -d $(DESTDIR)$(prefix)/share/mime-info
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.keys $(DESTDIR)$(prefix)/share/mime-info
$(INSTALL_DATA) $(top_srcdir)/src/data/gramps.mime $(DESTDIR)$(prefix)/share/mime-info
update-mime-database $(DESTDIR)$(SHARED_MIME_DIR)
$(SHARED_MIME_INSTALLATION)
$(GCONF_SCHEMAS_INSTALLATION)
uninstall-local:
-rm $(DESTDIR)$(prefix)/share/applications/gramps.desktop
@ -48,8 +72,5 @@ uninstall-local:
-rm $(DESTDIR)$(prefix)/share/mime-info/gramps.keys
-rm $(DESTDIR)$(prefix)/share/mime-info/gramps.mime
-rm $(DESTDIR)$(prefix)/share/application-registry/gramps.applications
-rm $(DESTDIR)$(SHARED_MIME_DIR)/packages/gramps.xml
-rm $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas
update-mime-database $(DESTDIR)$(SHARED_MIME_DIR)
-GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
gconftool-2 --makefile-uninstall-rule $(top_srcdir)/src/data/gramps.schemas
$(SHARED_MIME_UNINSTALLATION)
$(GCONF_SCHEMAS_UNINSTALLATION)

View File

@ -28,6 +28,20 @@
</locale>
</schema>
<schema>
<key>/schemas/apps/gramps/behavior/welcome</key>
<applyto>/apps/gramps/behavior/welcome</applyto>
<owner>gramps</owner>
<type>int</type>
<default>100</default>
<locale name="C">
<short>Welcome message has already been displayed for this version</short>
<long>This key keeps the version for which the welcome message
has already been displayed. The integer denotes the major, minor,
and release numerals, e.g. 200 denotes the 2.0.0 version.</long>
</locale>
</schema>
<schema>
<key>/schemas/apps/gramps/preferences/date-format</key>
<applyto>/apps/gramps/preferences/date-format</applyto>

View File

@ -31,18 +31,24 @@ often wonder why we didn't write down pieces of information that grandfather
told us while we were young. Don't wait till it's too late...
</tip>
<!--
<tip>
<b>EXAMPLES OF A FAMILY TREE</b>: To see how a Gramps family tree database looks,
check Help &gt; Open example database. You'll find the elaborate Smith family
database, It includes 42 individuals and 15 families, with fairly complete
basic data about many of these individuals.
</tip>
-->
<tip>
<b>THE PEOPLE VIEW</b>: The People view throws up a list of all individuals in the
database. You can sort the listing simply by clicking on numerous headings
<b>THE PEOPLE VIEW</b>: The People view throws up a list of all individuals
in the database.
<!--
You can sort the listing simply by clicking on numerous headings
such as name, gender, birth date or death date. Clicking heading the second
time will reverse the sort.
-->
</tip>
<tip>
@ -62,13 +68,13 @@ children in the family tree.
<tip>
<b>LOCATING PEOPLE</b>: In the People view, you can locate any individual by
navigating through the alphabetic tabs of surnames. Then, click on the names
through the list of surnames. Then, click on the names
themselves to unfold display of all the individuals with the same last name.
</tip>
<tip>
<b>TO ADD INFORMATION TO SELECTED PEOPLE</b>: First, locate them in the People
view. (Use the alphabetic tabs of surnames, and click on the names to unfold
view. (Use the list of surnames, and click on the names to unfold
the display of all individuals sharing the name). Then, go to the Family
view, and add the relevant information.
</tip>
@ -122,9 +128,6 @@ SoundEx codes.
<tip>
<b>SETTING YOUR PREFERENCES</b>: Edit &gt; Preferences will allow you to choose a
number of settings, determining how your GRAMPS program should work.
Particularly useful are the report preferences (set the format in which you
would like your reports to appear, and in which directory these should be
stored).
</tip>
<tip>
@ -171,8 +174,8 @@ more than once in the database.
</tip>
<tip>
<b>ADDING A SIBLING</b>: To add siblings in Gramps, make yourself or your spouse an
active person (i.e. navigate to yourself or your spouse). Then switch to the
<b>ADDING A SIBLING</b>: To add siblings in Gramps, make either of your parents
an active person (i.e. navigate to either of your parents). Then switch to the
Family View and add a new child by clicking the button second from the top on
the right of the Children list (the &quot;New&quot; button). Enter the data for the
new person and click OK.
@ -201,7 +204,7 @@ over-ride that filtering by checking &quot;Show all&quot; checkbutton.
</tip>
<tip>
<b>KEYBINDINGS</b>: GRAMP's manual is quite elaborate and well written; it also is
<b>KEYBINDINGS</b>: GRAMPS's manual is quite elaborate and well written; it also is
detailed about keybindings (in a separate appendix) and other matters. Check
it out.
</tip>
@ -214,7 +217,7 @@ gramps-users at lists.sf.net, as appropriate for your questions.
</tip>
<tip>
<b>TIPS OF THE DAY</b>: GRAMPS's development version has the option of popping up a
<b>TIPS OF THE DAY</b>: GRAMPS's has the option of popping up a
window with the tip of the day about the use of GRAMPS. The tip is chosen
randomly from the pool of tips. To add your own tip, send it in to
gramps-users@lists.sf.net
@ -247,7 +250,8 @@ You can visit these bookmarks much like in your browser, simply via Bookmark
<tip>
<b>DATES</b>: Incorrect date formats will show up with the red button alongside the
date. Green means okay, and amber signifies acceptable.
date. Green means okay, and amber signifies acceptable. Click on the colored
button to invoke Date Selection dialog, if you like.
</tip>
<tip>
@ -260,11 +264,13 @@ military service, nobility titles, number of marriages, occupations,
ordination, property, religion, retirement, wills, etc.
</tip>
<!--
<tip>
GRAMPS' People view gives you a list of all individuals in the database. You
can sort the listing by differing priorities simply by clicking on headings
like name, gender, bate date or death date.
</tip>
-->
<tip>
<b>CHANGING PREFERRED NAME</b>: If a person has several names, it is very easy
@ -283,14 +289,18 @@ more distant parts of the tree.
<tip>
The Sources view shows all the family's referenced sources in a single view.
<!--
Double-click on each to edit, add notes, and to see which individuals
reference the source.
reference the source.-->
</tip>
<tip>
The Places view shows all places referred to in the database. It also allows
The Places view shows all places referred to in the database.
<!--
It also allows
you to sort the list by half-a-dozen different criteria, such as City,
County or State.
-->
</tip>
<tip>
@ -406,8 +416,7 @@ seems to be an error.
<tip>
You can link any 'media' (including non-text information) and other
file-types to your GRAMPS family tree. Choose between copying (if in text
format) or linking the file to the database.
file-types to your GRAMPS family tree.
</tip>
<tip>
@ -430,7 +439,7 @@ also create their own custom styles.
<tip>
Eight output formats are supported by GRAMPS -- PDF, AbiWord, KWord,
OpenOffice Writer, HTML, Rich Text Format (RTF), Latex, and plain text.
These formats generate data which can be read in Windows computers, making
These formats generate data which can be read on all computers, making
it easy for anyone to access it.
</tip>
@ -563,14 +572,7 @@ to help too?
</tip>
<tip>
New versions of GRAMPS that are already in testing use an advanced database
design that guarantee very fast access to many thousands of entries in the
database. Other new features are being designed and coordinated by several
active developers.
</tip>
<tip>
Numerous GRAMPS releases are made each year (11 during one 12-month period).
Numerous GRAMPS releases are made each year.
</tip>
<tip>
@ -592,17 +594,12 @@ http://www.gnu.org/licenses/licenses.html#GPL !
</tip>
<tip>
GRAMPS performs slowly with databases of over 10,000 people, does not
GRAMPS does not
support TempleReady GEDCOM extensions, and offers limited drag-and-drop
support. Currently, there is no support for drag and drop between databases.
Graph reports are also limited in functionality.
</tip>
<tip>
To learn more about the GRAMPS Next Generation, visit the wiki page at
http://gramps.sourceforge.net/wiki/index.php/GrampsNextGeneration
</tip>
<tip>
GRAMPS is the Genealogical Research and Analysis Management Program System.
In other words, it a personal genealogy program letting you store, edit, and
@ -635,11 +632,6 @@ To run GRAMPS, you need to have GNOME installed. But you do not need to be
running the GNOME desktop.
</tip>
<tip>
The latest versions of gramps (0.9.0 and higher) require GNOME 2.0 or
higher. Previous versions required GNOME 1.X.
</tip>
<tip>
GRAMPS makes every effort to maintain compatibility with GEDCOM, the general
standard of recording genealogical information. We have import and export

View File

@ -0,0 +1,175 @@
# -*- coding: utf-8 -*-
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2004-2005 Donald N. Allingham
#
# 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 2 of the License, or
# (at your option) 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, write to the Free Software
# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
#
# $Id$
"""
Finnish-specific classes for parsing and displaying dates.
"""
#-------------------------------------------------------------------------
#
# Python modules
#
#-------------------------------------------------------------------------
import re
#-------------------------------------------------------------------------
#
# GRAMPS modules
#
#-------------------------------------------------------------------------
import Date
from DateParser import DateParser
from DateDisplay import DateDisplay
#-------------------------------------------------------------------------
#
# Finnish parser
#
# This handles only dates where days and months are given as numeric, as:
# - That's how they are normally used in Finland
# - Parsing Finnish is much more complicated than English
#-------------------------------------------------------------------------
class DateParserFI(DateParser):
# NOTE: these need to be in lower case because the "key" comparison
# is done as lower case. In the display method correct capitalization
# can be used.
modifier_to_int = {
# examples:
# - ennen 1.1.2005
# - 1.1.2005 jälkeen
# - noin 1.1.2005
u'ennen' : Date.MOD_BEFORE,
u'e.' : Date.MOD_BEFORE,
u'jälkeen' : Date.MOD_AFTER,
u'j.' : Date.MOD_AFTER,
u'noin' : Date.MOD_ABOUT,
u'n.' : Date.MOD_ABOUT,
}
bce = ["ekr", "ekr\."]
calendar_to_int = {
u'gregoriaaninen' : Date.CAL_GREGORIAN,
u'greg.' : Date.CAL_GREGORIAN,
u'juliaaninen' : Date.CAL_JULIAN,
u'jul.' : Date.CAL_JULIAN,
u'heprealainen' : Date.CAL_HEBREW,
u'hepr.' : Date.CAL_HEBREW,
u'islamilainen' : Date.CAL_ISLAMIC,
u'isl.' : Date.CAL_ISLAMIC,
u'ranskan vallankumouksen aikainen': Date.CAL_FRENCH,
u'ranskan v.' : Date.CAL_FRENCH,
u'persialainen' : Date.CAL_PERSIAN,
u'pers.' : Date.CAL_PERSIAN,
}
quality_to_int = {
u'arviolta' : Date.QUAL_ESTIMATED,
u'arv.' : Date.QUAL_ESTIMATED,
u'laskettuna' : Date.QUAL_CALCULATED,
u'lask.' : Date.QUAL_CALCULATED,
}
def init_strings(self):
DateParser.init_strings(self)
# date, whitespace
self._span = re.compile("(?P<start>.+)\s+-\s+(?P<stop>.+)",
re.IGNORECASE)
self._range = re.compile("(?P<start>.+)\s+ja\s+(?P<stop>.+)\s+väliltä",
re.IGNORECASE)
#-------------------------------------------------------------------------
#
# Finnish display
#
#-------------------------------------------------------------------------
class DateDisplayFI(DateDisplay):
calendar = ("",
u"(Juliaaninen)",
u"(Heprealainen)",
u"(Ranskan v.)",
u"(Persialainen)",
u"(Islamilainen)")
_qual_str = ("", "laskettuna", "arviolta")
formats = (
"VVVV-KK-PP (ISO)",
"PP.KK.VVVV"
)
def display(self,date):
"""
Returns a text string representing the date.
"""
mod = date.get_modifier()
qual = date.get_quality()
cal = date.get_calendar()
start = date.get_start_date()
if mod == Date.MOD_TEXTONLY:
return date.get_text()
if start == Date.EMPTY:
return ""
# select numerical date format
self.format = 1
if mod == Date.MOD_SPAN:
d1 = self.display_cal[cal](start)
d2 = self.display_cal[cal](date.get_stop_date())
text = "%s - %s" % (d1, d2)
elif mod == Date.MOD_RANGE:
d1 = self.display_cal[cal](start)
d2 = self.display_cal[cal](date.get_stop_date())
text = "%s ja %s väliltä" % (d1, d2)
else:
text = self.display_cal[date.get_calendar()](start)
if mod == Date.MOD_BEFORE:
text = "ennen " + text
elif mod == Date.MOD_AFTER:
# kludge: should be actually after the date
text = "jälkeen " + text
elif mod == Date.MOD_ABOUT:
text = "noin " + text
if qual:
# prepend quality
text = "%s %s" % (self._qual_str[qual], text)
if cal:
# append calendar type
text = "%s %s" % (text, self.calendar[cal])
return text
#-------------------------------------------------------------------------
#
# Register classes
#
#-------------------------------------------------------------------------
from DateHandler import register_datehandler
register_datehandler(('fi_FI','finnish'), DateParserFI, DateDisplayFI)

View File

@ -8,7 +8,8 @@ pkgdatadir = $(datadir)/@PACKAGE@/dates
pkgdata_PYTHON = \
Date_ru.py\
Date_fr.py\
Date_es.py
Date_es.py\
Date_fi.py
pkgpyexecdir = @pkgpyexecdir@/dates
pkgpythondir = @pkgpythondir@/dates

View File

@ -20314,25 +20314,6 @@ Very High</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="filter">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="padding">0</property>
@ -24691,7 +24672,7 @@ Very High</property>
<widget class="GtkTable" id="table49">
<property name="border_width">12</property>
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_rows">2</property>
<property name="n_columns">3</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
@ -24775,56 +24756,6 @@ Very High</property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label423">
<property name="visible">True</property>
<property name="label" translatable="yes">_Place:</property>
<property name="use_underline">True</property>
<property name="use_markup">False</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
<property name="wrap">False</property>
<property name="selectable">False</property>
<property name="xalign">0</property>
<property name="yalign">0.5</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">place</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
</widget>
<packing>
<property name="left_attach">1</property>
<property name="right_attach">2</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="place">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">2</property>
<property name="bottom_attach">3</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox99">
<property name="visible">True</property>
@ -30885,7 +30816,6 @@ Very High</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">600</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="icon">gramps.png</property>
@ -31009,7 +30939,7 @@ Very High</property>
<property name="border_width">12</property>
<property name="visible">True</property>
<property name="n_rows">14</property>
<property name="n_columns">4</property>
<property name="n_columns">3</property>
<property name="homogeneous">False</property>
<property name="row_spacing">6</property>
<property name="column_spacing">12</property>
@ -31398,13 +31328,6 @@ Very High</property>
<property name="xpad">0</property>
<property name="ypad">0</property>
<property name="mnemonic_widget">group_as</property>
<property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
<property name="width_chars">-1</property>
<property name="single_line_mode">False</property>
<property name="angle">0</property>
<accessibility>
<atkrelation target="group_as" type="label-for"/>
</accessibility>
</widget>
<packing>
<property name="left_attach">1</property>
@ -31447,28 +31370,6 @@ Very High</property>
</packing>
</child>
<child>
<widget class="GtkEntry" id="group_as">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">9</property>
<property name="bottom_attach">10</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkLabel" id="label419">
<property name="visible">True</property>
@ -31556,29 +31457,6 @@ Very High</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="group_over">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Override</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_group_over_toggled" last_modification_time="Tue, 28 Sep 2004 20:16:42 GMT"/>
</widget>
<packing>
<property name="left_attach">3</property>
<property name="right_attach">4</property>
<property name="top_attach">9</property>
<property name="bottom_attach">10</property>
<property name="x_options">fill</property>
<property name="y_options"></property>
</packing>
</child>
<child>
<widget class="GtkComboBoxEntry" id="name_type">
<property name="visible">True</property>
@ -31722,6 +31600,62 @@ Family name Given name
<property name="y_options">fill</property>
</packing>
</child>
<child>
<widget class="GtkHBox" id="hbox106">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">6</property>
<child>
<widget class="GtkEntry" id="group_as">
<property name="visible">True</property>
<property name="sensitive">False</property>
<property name="can_focus">True</property>
<property name="editable">False</property>
<property name="visibility">True</property>
<property name="max_length">0</property>
<property name="text" translatable="yes"></property>
<property name="has_frame">True</property>
<property name="invisible_char" translatable="yes">*</property>
<property name="activates_default">False</property>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
<child>
<widget class="GtkCheckButton" id="group_over">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="label" translatable="yes">_Override</property>
<property name="use_underline">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<signal name="toggled" handler="on_group_over_toggled" last_modification_time="Tue, 28 Sep 2004 20:16:42 GMT"/>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">False</property>
</packing>
</child>
</widget>
<packing>
<property name="left_attach">2</property>
<property name="right_attach">3</property>
<property name="top_attach">9</property>
<property name="bottom_attach">10</property>
<property name="x_options">fill</property>
<property name="y_options">fill</property>
</packing>
</child>
</widget>
<packing>
<property name="tab_expand">False</property>
@ -33819,4 +33753,93 @@ Family name Given name
</child>
</widget>
<widget class="GtkDialog" id="scrollmsg">
<property name="visible">True</property>
<property name="title" translatable="yes">GRAMPS</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_CENTER_ALWAYS</property>
<property name="modal">False</property>
<property name="default_width">450</property>
<property name="default_height">400</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="icon">gramps.png</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
<property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
<property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
<property name="has_separator">True</property>
<child internal-child="vbox">
<widget class="GtkVBox" id="dialog-vbox20">
<property name="visible">True</property>
<property name="homogeneous">False</property>
<property name="spacing">0</property>
<child internal-child="action_area">
<widget class="GtkHButtonBox" id="dialog-action_area20">
<property name="visible">True</property>
<property name="layout_style">GTK_BUTTONBOX_END</property>
<child>
<widget class="GtkButton" id="closebutton1">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-close</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-7</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">False</property>
<property name="fill">True</property>
<property name="pack_type">GTK_PACK_END</property>
</packing>
</child>
<child>
<widget class="GtkScrolledWindow" id="scrolledwindow85">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="hscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
<property name="shadow_type">GTK_SHADOW_IN</property>
<property name="window_placement">GTK_CORNER_TOP_LEFT</property>
<child>
<widget class="GtkTextView" id="msg">
<property name="visible">True</property>
<property name="can_focus">True</property>
<property name="editable">True</property>
<property name="overwrite">False</property>
<property name="accepts_tab">True</property>
<property name="justification">GTK_JUSTIFY_LEFT</property>
<property name="wrap_mode">GTK_WRAP_NONE</property>
<property name="cursor_visible">True</property>
<property name="pixels_above_lines">0</property>
<property name="pixels_below_lines">0</property>
<property name="pixels_inside_wrap">0</property>
<property name="left_margin">0</property>
<property name="right_margin">0</property>
<property name="indent">0</property>
<property name="text" translatable="yes"></property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
<property name="expand">True</property>
<property name="fill">True</property>
</packing>
</child>
</widget>
</child>
</widget>
</glade-interface>

View File

@ -145,9 +145,7 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
try:
GrampsCfg.loadConfig()
self.beta_warn()
self.welcome()
self.RelClass = PluginMgr.relationship_class
self.relationship = self.RelClass(self.db)
self.gtop = gtk.glade.XML(const.gladeFile, "gramps", "gramps")
@ -205,17 +203,48 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
self.db.set_researcher(GrampsCfg.get_researcher())
def beta_warn(self):
if not GrampsKeys.get_betawarn():
def welcome(self):
if GrampsKeys.get_welcome() >= 200:
return
WarningDialog(
"Use at your own risk",
"This is an unstable development version of GRAMPS. "
"It is intended as a technology preview. Do not trust "
"your family database to this development version. "
"This version may contain bugs which could corrupt "
"your database.")
GrampsKeys.save_betawarn(1)
glade = gtk.glade.XML(const.gladeFile,'scrollmsg')
top = glade.get_widget('scrollmsg')
msg = glade.get_widget('msg')
msg.get_buffer().set_text(
_("Welcome to the 2.0.x series of GRAMPS!\n"
"\n"
"This version drastically differs from the 1.0.x branch\n"
"in a few ways. Please read carefully, as this may affect\n"
"the way you are using the program.\n"
"\n"
"1. This version works with the Berkeley database backend.\n"
" Because of this, changes are written to disk immediately.\n"
" There is NO Save function anymore!\n"
"2. The Media object files are not managed by GRAMPS.\n"
" There is no concept of local objects, all objects\n"
" are external. You are in charge of keeping track of\n"
" your files. If you delete the image file from disk,\n"
" it will be lost!\n"
"3. The version control provided by previous GRAMPS\n"
" versions has been removed. You may set up the versioning\n"
" system on your own if you'd like, but it will have to be\n"
" outside of GRAMPS.\n"
"4. It is possible to directly open GRAMPS XML databases\n"
" (used by previous versions) as well as GEDCOM files.\n"
" However, any changes will be written to the disk when\n"
" you quit GRAMPS. In case of GEDCOM files, this may lead\n"
" to a data loss because some GEDCOM files contain data\n"
" that does not comply with the GEDCOM standard and cannot\n"
" be parsed by GRAMPS. If unsure, set up an empty grdb\n"
" database (new GRAMPS format) and import GEDCOM into it.\n"
" This will keep the original GEDCOM untouched.\n"
"\n"
"Enjoy!\n"
"The GRAMPS project\n"))
top.run()
top.destroy()
GrampsKeys.save_welcome(200)
GrampsKeys.sync()
def date_format_key_update(self,client,cnxn_id,entry,data):
@ -295,6 +324,8 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
self.filter_btn = self.gtop.get_widget("filter1")
self.toolbar_btn = self.gtop.get_widget("toolbar2")
self.statusbar = self.gtop.get_widget("statusbar")
self.progress = self.statusbar.get_children()[0]
self.progress.set_pulse_step(0.01)
self.filter_list = self.gtop.get_widget("filter_list")
self.views = self.gtop.get_widget("views")
@ -522,7 +553,10 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
if self.undo_active:
return
self.undo_active = True
self.db.disable_signals()
self.db.undo()
self.db.enable_signals()
self.db.request_rebuild()
if self.active_person:
p = self.db.get_person_from_handle(self.active_person.get_handle())
self.change_active_person(p)
@ -997,15 +1031,15 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
all.add_rule(GenericFilter.IsWitness([]))
filter_list.append(all)
all = GenericFilter.ParamFilter()
all.set_name(_("Any textual record contains..."))
all.add_rule(GenericFilter.HasTextMatchingSubstringOf([]))
filter_list.append(all)
# all = GenericFilter.ParamFilter()
# all.set_name(_("Any textual record contains..."))
# all.add_rule(GenericFilter.HasTextMatchingSubstringOf([]))
# filter_list.append(all)
all = GenericFilter.ParamFilter()
all.set_name(_("Any textual record matches regular expression..."))
all.add_rule(GenericFilter.HasTextMatchingRegexpOf([]))
filter_list.append(all)
# all = GenericFilter.ParamFilter()
# all.set_name(_("Any textual record matches regular expression..."))
# all.add_rule(GenericFilter.HasTextMatchingRegexpOf([]))
# filter_list.append(all)
self.filter_model = GenericFilter.FilterStore(filter_list)
self.filter_list.set_model(self.filter_model)
@ -1196,7 +1230,7 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
try:
import ReadXML
ReadXML.importData(self.db,dbname,None)
ReadXML.importData(self.db,dbname,self.update_bar)
except:
DisplayTrace.DisplayTrace()
@ -1207,6 +1241,12 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
os.rmdir(tmpdir_path)
self.import_tool_callback()
def update_bar(self,percent):
if percent:
self.progress.pulse()
else:
self.progress.set_fraction(0)
def read_file(self,filename,callback=None):
self.topWindow.set_resizable(False)
mode = "w"
@ -1243,6 +1283,9 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
ErrorDialog(_('Cannot open database'),
_('The database file specified could not be opened.'))
return 0
except ( IOError, OSError ), msg:
ErrorDialog(_('Cannot open database'),str(msg))
return 0
except db.DBAccessError, msg:
ErrorDialog(_('Cannot open database'),
_('%s could not be opened.' % filename) + '\n' + msg[1])
@ -1258,6 +1301,7 @@ class Gramps(GrampsDBCallback.GrampsDBCallback):
self.gtop.get_widget('add_item').set_sensitive(not self.db.readonly)
self.gtop.get_widget('remove_item').set_sensitive(not self.db.readonly)
self.gtop.get_widget('merge').set_sensitive(not self.db.readonly)
self.gtop.get_widget('fast_merge1').set_sensitive(not self.db.readonly)
self.gtop.get_widget('default_person1').set_sensitive(not self.db.readonly)
self.gtop.get_widget('edit_bookmarks').set_sensitive(not self.db.readonly)
self.gtop.get_widget('tools_menu').set_sensitive(not self.db.readonly)

View File

@ -58,6 +58,20 @@
<signal name="clicked" handler="on_merge_places_clicked" object="merge_places"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="help">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
<signal name="clicked" handler="on_help_places_clicked" last_modification_time="Tue, 03 May 2005 16:20:19 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
@ -100,12 +114,13 @@
<child>
<widget class="GtkTable" id="table5">
<property name="border_width">6</property>
<property name="visible">True</property>
<property name="n_rows">3</property>
<property name="n_columns">2</property>
<property name="homogeneous">False</property>
<property name="row_spacing">0</property>
<property name="column_spacing">0</property>
<property name="column_spacing">6</property>
<child>
<widget class="GtkEntry" id="title3_text">
@ -347,6 +362,20 @@
<signal name="clicked" handler="on_merge_clicked" object="merge"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="help">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
<signal name="clicked" handler="on_help_clicked" last_modification_time="Tue, 03 May 2005 15:36:08 GMT"/>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
@ -482,7 +511,6 @@
<property name="active">False</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<property name="group">select1</property>
</widget>
<packing>
<property name="left_attach">1</property>
@ -505,6 +533,7 @@
<property name="active">True</property>
<property name="inconsistent">False</property>
<property name="draw_indicator">True</property>
<property name="group">select2</property>
</widget>
<packing>
<property name="left_attach">0</property>
@ -539,9 +568,9 @@
<property name="type">GTK_WINDOW_TOPLEVEL</property>
<property name="window_position">GTK_WIN_POS_NONE</property>
<property name="modal">False</property>
<property name="default_width">620</property>
<property name="resizable">True</property>
<property name="destroy_with_parent">False</property>
<property name="icon">gramps.png</property>
<property name="decorated">True</property>
<property name="skip_taskbar_hint">False</property>
<property name="skip_pager_hint">False</property>
@ -586,6 +615,19 @@
<property name="response_id">-5</property>
</widget>
</child>
<child>
<widget class="GtkButton" id="help">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>
@ -606,9 +648,9 @@
<property name="column_spacing">6</property>
<child>
<widget class="GtkLabel" id="label80">
<widget class="GtkLabel" id="title">
<property name="visible">True</property>
<property name="label" translatable="yes">&lt;span weight=&quot;bold&quot; size=&quot;larger&quot;&gt;Merge Sources&lt;/span&gt;</property>
<property name="label" translatable="yes"></property>
<property name="use_underline">False</property>
<property name="use_markup">True</property>
<property name="justify">GTK_JUSTIFY_LEFT</property>
@ -1189,6 +1231,19 @@
<signal name="clicked" handler="on_merge_places_clicked" object="merge_places"/>
</widget>
</child>
<child>
<widget class="GtkButton" id="help">
<property name="visible">True</property>
<property name="can_default">True</property>
<property name="can_focus">True</property>
<property name="label">gtk-help</property>
<property name="use_stock">True</property>
<property name="relief">GTK_RELIEF_NORMAL</property>
<property name="focus_on_click">True</property>
<property name="response_id">-11</property>
</widget>
</child>
</widget>
<packing>
<property name="padding">0</property>

View File

@ -57,6 +57,11 @@ from QuestionDialog import OkDialog, MissingMediaDialog
def runTool(database,active_person,callback,parent=None):
try:
if database.readonly:
# TODO: split plugin in a check and repair part to support
# checking of a read only database
return
trans = database.transaction_begin()
trans.set_batch(True)
database.disable_signals()
@ -68,7 +73,7 @@ def runTool(database,active_person,callback,parent=None):
while prev_total != total:
prev_total = total
checker.check_for_broken_family_links()
checker.check_parent_relationships()
checker.cleanup_empty_families(0)
@ -294,9 +299,27 @@ class CheckIntegrity:
def cleanup_empty_families(self,automatic):
for family_handle in self.db.get_family_handles():
family = self.db.get_family_from_handle(family_handle)
if not family.get_father_handle() and not family.get_mother_handle():
father_handle = family.get_father_handle()
mother_handle = family.get_mother_handle()
if not father_handle and not mother_handle:
self.empty_family.append(family_handle)
self.delete_empty_family(family_handle)
continue
elif not father_handle and len(family.get_child_handle_list()) == 0:
person = self.db.get_person_from_handle(mother_handle)
person.remove_family_handle(family_handle)
self.db.commit_person(person,self.trans)
self.db.remove_family(family_handle,self.trans)
self.empty_family.append(family_handle)
continue
elif not mother_handle and len(family.get_child_handle_list()) == 0:
person = self.db.get_person_from_handle(father_handle)
person.remove_family_handle(family_handle)
self.db.commit_person(person,self.trans)
self.db.remove_family(family_handle,self.trans)
self.empty_family.append(family_handle)
continue
def delete_empty_family(self,family_handle):
for key in self.db.get_person_handles(sort_handles=False):
@ -464,7 +487,10 @@ class CheckIntegrity:
else:
cn = _("Non existing person")
family = self.db.get_family_from_handle(family_handle)
pn = Utils.family_name(family,self.db)
if family:
pn = Utils.family_name(family,self.db)
else:
pn = family_handle
self.text.write('\t')
self.text.write(_("%s was restored to the family of %s\n") % (cn,pn))

View File

@ -337,7 +337,7 @@ class FilterEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','tools-util')
help_display('gramps-manual','tools-util-cfe')
def on_delete_event(self,obj,b):
self.filterdb.save()
@ -490,7 +490,7 @@ class EditFilter:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','tools-util')
help_display('gramps-manual','tools-util-cfe')
def on_delete_event(self,obj,b):
self.close_child_windows()

View File

@ -729,6 +729,7 @@ class GraphVizOptions(ReportOptions.ReportOptions):
self.options_dict['pagesv'] = self.vpages_sb.get_value_as_int()
self.options_dict['showfamily'] = int(self.show_families_cb.get_active())
self.options_dict['incid'] = int(self.includeid_cb.get_active())
self.options_dict['justyears'] = int(self.just_years_cb.get_active())
self.options_dict['placecause'] = int(self.place_cause_cb.get_active())
self.options_dict['rankdir'] = \
_options.rankdir[self.rank_box.get_active()][0]

View File

@ -86,9 +86,8 @@ def importData(database, filename, cb=None):
#-------------------------------------------------------------------------
#
#
#
# For a description of the file format see
# http://cristal.inria.fr/~ddr/GeneWeb/en/gwformat.htm
#-------------------------------------------------------------------------
class GeneWebParser:
def __init__(self, dbase, file):
@ -255,7 +254,8 @@ class GeneWebParser:
birth_handle = child.get_birth_handle()
birth = self.db.get_event_from_handle(birth_handle)
if not birth:
birth = RelLib.Event()
birth = self.create_event("Birth")
child.set_birth_handle(birth.get_handle())
birth.set_place_handle(self.current_child_birthplace_handle)
self.db.commit_event(birth,self.trans)
if self.current_child_source_handle:
@ -450,14 +450,14 @@ class GeneWebParser:
while idx < len(fields) and personDataRe.match(fields[idx]):
if fields[idx][0] == '(':
#print "Public Name: %s" % fields[idx]
public_name = self.decode(fields[idx])
public_name = self.decode(fields[idx][1:-1])
idx = idx + 1
elif fields[idx][0] == '{':
#print "Firstsname Alias: %s" % fields[idx]
firstname_aliases.append(self.decode(fields[idx]))
firstname_aliases.append(self.decode(fields[idx][1:-1]))
idx = idx + 1
elif fields[idx][0] == '[':
#print "Titles: %s" % fields[idx]
print "TODO: Titles: %s" % fields[idx]
idx = idx + 1
elif fields[idx] == '#nick':
idx = idx + 1
@ -672,7 +672,7 @@ class GeneWebParser:
def get_or_create_place(self,place_name):
place = None
if place_name in self.pkeys:
person = self.db.get_place_from_handle(self.pkeys[place_name])
place = self.db.get_place_from_handle(self.pkeys[place_name])
else:
place = RelLib.Place()
place.set_title(place_name)

View File

@ -106,13 +106,25 @@ class PatchNames:
for key in self.db.get_person_handles(sort_handles=False):
person = self.db.get_person_from_handle(key)
first = person.get_primary_name().get_first_name()
sname = person.get_primary_name().get_surname()
name = person.get_primary_name()
first = name.get_first_name()
sname = name.get_surname()
match = _title_re.match(first)
if match:
if name.get_title():
current_title = [name.get_title()]
else:
current_title = []
while match:
groups = match.groups()
self.title_list.append((key,groups[0],groups[1]))
first = groups[1]
current_title.append(groups[0])
match = _title_re.match(first)
if current_title:
self.title_list.append((key," ".join(current_title),first))
continue
match = _nick_re.match(first)
if match:
groups = match.groups()

View File

@ -39,6 +39,7 @@ from gettext import gettext as _
#
#------------------------------------------------------------------------
import Utils
import RelLib
from QuestionDialog import WarningDialog
_findint = re.compile('^[^\d]*(\d+)[^\d]*')
@ -46,14 +47,14 @@ _findint = re.compile('^[^\d]*(\d+)[^\d]*')
def runTool(db,active_person,callback,parent):
"""Changed person, family, object, source, and place ids"""
#FIXME -- Remove when the tool is back from the dead
WarningDialog(_('Tool currently unavailable'),
_('This tool has not yet been brought up to date '
'after transition to the database, sorry.'),parent.topWindow)
return
#WarningDialog(_('Tool currently unavailable'),
# _('This tool has not yet been brought up to date '
# 'after transition to the database, sorry.'),parent.topWindow)
#return
#FIXME
try:
ReorderIds(db,callback)
ReorderIds(db)
except:
import DisplayTrace
DisplayTrace.DisplayTrace()
@ -65,31 +66,43 @@ def runTool(db,active_person,callback,parent):
#-------------------------------------------------------------------------
class ReorderIds:
def __init__(self,db,callback):
def __init__(self,db):
self.db = db
self.reorder_person()
self.reorder(db.get_family_handle_map(),db.fprefix,None)
self.reorder(db.get_object_map(),db.oprefix,None)
self.reorder(db.get_source_map(),db.sprefix,db.build_source_display)
self.reorder(db.get_place_handle_map(),db.pprefix,db.build_place_display)
callback(1)
self.trans = db.transaction_begin()
self.reorder(RelLib.Person, db.get_person_from_gramps_id, db.get_person_from_handle,
db.find_next_person_gramps_id, db.get_person_cursor, db.commit_person,
db.iprefix)
self.reorder(RelLib.Family,db.get_family_from_gramps_id, db.get_family_from_handle,
db.find_next_family_gramps_id, db.get_family_cursor, db.commit_family,
db.fprefix)
self.reorder(RelLib.MediaObject, db.get_object_from_gramps_id, db.get_object_from_handle,
db.find_next_object_gramps_id, db.get_media_cursor, db.commit_media_object,
db.oprefix)
self.reorder(RelLib.Source, db.get_source_from_gramps_id, db.get_source_from_handle,
db.find_next_source_gramps_id, db.get_source_cursor, db.commit_source,
db.sprefix)
self.reorder(RelLib.Place, db.get_place_from_gramps_id, db.get_place_from_handle,
db.find_next_place_gramps_id, db.get_place_cursor, db.commit_place,
db.pprefix)
db.transaction_commit(self.trans,_("Reorder gramps IDs"))
def reorder_person(self):
def reorder(self, class_type, find_from_id, find_from_handle, find_next_id, get_cursor, commit, prefix):
dups = []
newids = {}
key_list = []
# search all ids in the map
cursor = self.db.get_person_cursor()
cursor = get_cursor()
data = cursor.first()
while data:
(handle,sdata) = data
gramps_id = sdata[1]
obj = class_type()
obj.unserialize(sdata)
gramps_id = obj.get_gramps_id()
# attempt to extract integer, if we can't, treat it as a
# duplicate
@ -104,42 +117,27 @@ class ReorderIds:
newgramps_id = prefix % int(index)
if newgramps_id == gramps_id:
newids[newgramps_id] = gramps_id
continue
elif data_map.has_key(newgramps_id):
dups.append(handle)
elif find_from_id(newgramps_id) != None:
dups.append(obj.get_handle())
else:
data = data_map[gramps_id]
data_map[newgramps_id] = data
newids[newgramps_id] = gramps_id
data.set_gramps_id(newgramps_id)
del data_map[gramps_id]
if update:
update(newgramps_id,gramps_id)
commit(obj,self.trans)
newids[newgramps_id] = gramps_id
except:
dups.append(handle)
else:
dups.append(handle)
data = cursor.next()
cursor.close()
# go through the duplicates, looking for the first availble
# handle that matches the new scheme.
index = 0
for gramps_id in dups:
while 1:
newgramps_id = prefix % index
if not newids.has_key(newgramps_id):
break
index = index + 1
newids[newgramps_id] = newgramps_id
data = data_map[gramps_id]
data.set_gramps_id(newgramps_id)
data_map[newgramps_id] = data
if update:
update(newgramps_id,gramps_id)
del data_map[gramps_id]
for handle in dups:
obj = find_from_handle(handle)
obj.set_gramps_id(find_next_id())
commit(obj,self.trans)
#-------------------------------------------------------------------------
#

View File

@ -845,7 +845,7 @@ class ScratchPadWindow:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','tools-util')
help_display('gramps-manual','tools-util-scratch-pad')
def on_close_scratchpad(self,obj):
self.remove_itself_from_menu()

View File

@ -117,7 +117,7 @@ class SoundGen:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','tools-util')
help_display('gramps-manual','tools-util-other')
def on_delete_event(self,obj,b):
self.remove_itself_from_menu()

View File

@ -524,9 +524,9 @@ class StatisticsChart(Report.Report):
# document heading
mapping['chart_title'] = table[0]
if genders:
heading = "%(genders)s born %(year_from)04d-%(year_to)04d: %(chart_title)s" % mapping
heading = _("%(genders)s born %(year_from)04d-%(year_to)04d: %(chart_title)s") % mapping
else:
heading = "Persons born %(year_from)04d-%(year_to)04d: %(chart_title)s" % mapping
heading = _("Persons born %(year_from)04d-%(year_to)04d: %(chart_title)s") % mapping
self.data.append((heading, table[1], lookup))
#DEBUG
#print heading
@ -899,7 +899,7 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
tip = _("With fewer items pie chart and legend will be used instead of a bar chart.")
self.bar_items = gtk.Entry(2)
self.bar_items.set_text(str(self.options_dict['bar_items']))
dialog.add_option("Min. bar char items", self.bar_items, tip)
dialog.add_option(_("Min. bar char items"), self.bar_items, tip)
# -------------------------------------------------
# List of available charts on a separate option tab
@ -919,12 +919,12 @@ class StatisticsChartOptions(ReportOptions.ReportOptions):
vbox = gtk.VBox()
hbox.add(vbox)
tip = _("Mark checkboxes to add charts with indicated data")
dialog.add_frame_option("Chart Selection", "", hbox, tip)
dialog.add_frame_option(_("Chart Selection"), "", hbox, tip)
hbox.show_all()
# Note about children
label = gtk.Label(_("Note that both biological and adopted children are taken into account."))
dialog.add_frame_option("Chart Selection", "", label)
dialog.add_frame_option(_("Chart Selection"), "", label)
def parse_user_options(self, dialog):
@ -958,5 +958,5 @@ register_report(
status = (_("Alpha")),
author_name="Eero Tamminen",
author_email="",
description= _("Generates statistical bar graphs.")
description= _("Generates statistical bar and pie charts of the people in the database.")
)

View File

@ -522,9 +522,9 @@ class TestcaseGenerator:
#
#-------------------------------------------------------------------------
def TestcaseGeneratorPlugin(database,active_person,callback,parent=None):
print "TestcaseGeneratorPlugin"
fg = TestcaseGenerator(database,active_person,callback,parent)
fg.run()
if not database.readonly:
fg = TestcaseGenerator(database,active_person,callback,parent)
fg.run()
#-------------------------------------------------------------------------
#

View File

@ -109,7 +109,7 @@ class Verify:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
help_display('gramps-manual','tools-util')
help_display('gramps-manual','tools-util-other')
def get_year(self,event_handle):
"""

View File

@ -66,26 +66,35 @@ _level_name_plural = [ "", "primeros", "segundos", "terceros", "cuartos",
"decimoséptimos", "decimoctavos", "decimononos",
"vigésimos", ]
# This plugin tries to be flexible and expect little from the following
# tables. Ancestors are named from the list for the first generations.
# When this list is not enough, ordinals are used based on the same idea,
# i.e. bisabuelo is 'segundo abuelo' and so on, that has been the
# traditional way in Spanish. When we run out of ordinals we resort to
# N-ésimo notation, that is sort of understandable if in context.
_parents_level = [ "", "padres", "abuelos", "bisabuelos", "tatarabuelos",
"trastatarabuelos"]
_father_level = [ "", "padre", "abuelo", "bisabuelo", "tatarabuelo",
"trastatarabuelo"]
_mother_level = [ "", "madre", "abuela", "bisabuela", "tatarabuela",
"trastatarabuela"]
# Higher-order terms (after trastatarabuelo) on this list are not standard,
# but then there is no standard naming scheme at all for this in Spanish.
# Check http://www.genealogia-es.com/guia3.html that echoes a proposed
# scheme that has got some reception in the Spanish-language genealogy
# community. This plugin implements a scheme based on this list. When
# this list is not enough, ordinals are used based on the same idea, i.e.
# bisabuelo is 'segundo abuelo' and so on. When we run out of ordinals
# we resort to N-ésimo notation, that is sort of understandable if in
# context.
_parents_level = [ "", "padres", "abuelos", "bisabuelos", "tatarabuelos",
"trastatarabuelos", "pentabuelos", "hexabuelos",
"heptabuelos", "octabuelos", "eneabuelos", "decabuelos"]
_father_level = [ "", "padre", "abuelo", "bisabuelo", "tatarabuelo",
"trastatarabuelo", "pentabuelo", "hexabuelo",
"heptabuelo", "octabuelo", "eneabuelo", "decabuelo"]
_mother_level = [ "", "madre", "abuela", "bisabuela", "tatarabuela",
"trastatarabuela", "pentabuela", "hexabuela",
"heptabuela", "octabuela", "eneabuela", "decabuela"]
# community. Uncomment these names if you want to use them.
#_parents_level = [ "", "padres", "abuelos", "bisabuelos", "tatarabuelos",
# "trastatarabuelos", "pentabuelos", "hexabuelos",
# "heptabuelos", "octabuelos", "eneabuelos", "decabuelos"]
#_father_level = [ "", "padre", "abuelo", "bisabuelo", "tatarabuelo",
# "trastatarabuelo", "pentabuelo", "hexabuelo",
# "heptabuelo", "octabuelo", "eneabuelo", "decabuelo"]
#_mother_level = [ "", "madre", "abuela", "bisabuela", "tatarabuela",
# "trastatarabuela", "pentabuela", "hexabuela",
# "heptabuela", "octabuela", "eneabuela", "decabuela"]
_son_level = [ "", "hijo", "nieto", "bisnieto",
"tataranieto", "trastataranieto", ]

Some files were not shown because too many files have changed in this diff Show More