Merge changes from gramps20 made since 2.0.5
svn: r5105
75
ChangeLog
@ -1,3 +1,6 @@
|
||||
2005-08-17 Alex Roitman <shura@gramps-project.org>
|
||||
* various: merge changes made in gramps20 branch with main trunk.
|
||||
|
||||
2005-08-17 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/Makefile.am
|
||||
* src/plugins/Makefile.am: ScratchPad moved folder.
|
||||
@ -1142,6 +1145,7 @@
|
||||
2005-04-26 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/PedView.py: Removed navigation buttons in flavour of a menu;
|
||||
|
||||
<<<<<<< ChangeLog
|
||||
2005-04-23 Don Allingham <don@gramps-project.org>
|
||||
* src/ListModel.py: keep track of data index
|
||||
* src/EventEdit.py: use new label scheme for tabs that uses an
|
||||
@ -1170,6 +1174,77 @@
|
||||
2005-04-23 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/GrampsDbBase.py (_find_from_handle,find_object_from_handle,
|
||||
find_place_from_handle): Fix typo
|
||||
=======
|
||||
2005-04-24 Don Allingham <don@gramps-project.org>
|
||||
* src/gramps.glade: remove REDO menu item
|
||||
|
||||
2005-04-24 Eero Tamminen <eerot@sf>
|
||||
* configure.in: Add Finnish back to installed languages
|
||||
* src/po/fi.po: Make translations more consistent + some fixes
|
||||
|
||||
2005-04-24 Alex Roitman <shura@gramps-project.org>
|
||||
* src/plugins/rel_ru.py (get_parents): Remove gettext string.
|
||||
|
||||
* src/ReportUtils.py (list_person_str): Add missing periods;
|
||||
Use burial_date and burial_place for named format string parameters.
|
||||
|
||||
* src/ReportUtils.py (died_str): Typo.
|
||||
* src/gramps_main.py (on_home_clicked): Typo.
|
||||
* src/rule.glade: Translate label.
|
||||
* src/po/fi.po: Add to gramps20 branch.
|
||||
* src/po/template.po: Update translation template.
|
||||
* src/po/ru.po: Translation update.
|
||||
|
||||
* src/EditSource.py (button_press): Proper invokation of editors.
|
||||
* src/ImageSelect.py: Remove workarounds for window management.
|
||||
|
||||
* src/Report.py (GrampsStyleComboBox): Use non-translated style name.
|
||||
|
||||
2005-04-23 Julio Sanchez <jsanchez@users.sourceforge.net>
|
||||
* src/po/es.po: Nearly complete update, but completely untested
|
||||
|
||||
2005-04-23 Eero Tamminen <eerot@sf>
|
||||
* src/po/fi.po: Improved translations for style and filter names
|
||||
and some other things. Still not tested
|
||||
|
||||
2005-04-22 Don Allingham <don@gramps-project.org>
|
||||
* src/Date.py (__cmp__): check for Date instance before compare
|
||||
|
||||
2005-04-21 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/ReadGedcom.py (parse_family_object): Set MediaRef properly;
|
||||
(parse_individual): Set Adoption event properly;
|
||||
(importData): Dont crash because of a short line;
|
||||
Support _WITN, _WTN and _GODP; Ignore _LOC extended locations
|
||||
* src/Marriage.py (__init__): Properly get place title
|
||||
|
||||
2005-04-20 Don Allingham <don@gramps-project.org>
|
||||
* src/DbPrompter.py: handle runtime errors issued by
|
||||
gnomevfs.get_mime_type
|
||||
|
||||
2005-04-21 Eero Tamminen <eerot@sf>
|
||||
* src/po/fi.po: Translation updated, but not yet tested & fixed
|
||||
|
||||
2005-04-20 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/plugins/ExportVCalendar.py: Mark strings for translation; use
|
||||
proper family name
|
||||
|
||||
2005-04-20 Eero Tamminen <eerot@sf>
|
||||
* src/plugins/changenames.glade: fix typo
|
||||
* src/plugins/TestcaseGenerator.py: fix typos in description
|
||||
* src/plugins/DetAncestralReport.py: fix gettext usage
|
||||
* src/plugins/DetDescendantReport.py: fix gettext usage
|
||||
* src/plugins/ChangeNames.py: fix typo
|
||||
|
||||
2005-04-20 Don Allingham <don@gramps-project.org>
|
||||
* src/plugins/DetAncestralReport.py: fixed i18n strings
|
||||
* src/ReadGedcom.py: handle FTM style of child/parent relationship
|
||||
translation
|
||||
* src/gedcomimport.py:
|
||||
* src/DisplayModels.py: fix bad index into list
|
||||
* src/Relationship.py: handle race condition where the screen
|
||||
wants to update with a stale family handle after the database
|
||||
has been closed and the internal data has not be rebuilt.
|
||||
>>>>>>> 1.1547.2.407
|
||||
|
||||
2005-04-19 Martin Hawlisch <Martin.Hawlisch@gmx.de>
|
||||
* src/PedView.py: Replaced gnome canvas by an implementation
|
||||
|
6
NEWS
@ -1,3 +1,9 @@
|
||||
Version 2.0.6 -- the "Just like my dear Papa!" release
|
||||
* New Narrative Web Page added to create a more complete web site.
|
||||
* French manual available again (Jérôme).
|
||||
* Progress meters in plugins.
|
||||
* Numerous bug fixes.
|
||||
|
||||
Version 2.0.5 -- the "It's certainly uncontaminated by cheese" release
|
||||
* New filters based on personal notes.
|
||||
* New routine for checking and removing corrupted source references in
|
||||
|
@ -1,6 +1,6 @@
|
||||
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 (i.e. pass to $GCONFTOOL
|
||||
dnl Defines GCONF_SCHEMA_FILE_DIR which is a filesystem directory where
|
||||
dnl you should install foo.schemas files
|
||||
dnl
|
||||
@ -10,7 +10,7 @@ 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`
|
||||
GCONF_SCHEMA_CONFIG_SOURCE=`$GCONFTOOL --get-default-source`
|
||||
else
|
||||
GCONF_SCHEMA_CONFIG_SOURCE=$GCONF_SCHEMA_INSTALL_SOURCE
|
||||
fi
|
||||
|
@ -16,6 +16,12 @@ then
|
||||
VERSIONSTRING="$VERSION-$RELEASE"
|
||||
fi
|
||||
|
||||
dnl Checking for gconftool-2
|
||||
AC_PATH_PROG(GCONFTOOL, gconftool-2, no)
|
||||
if test "x$GCONFTOOL" = xno; then
|
||||
AC_MSG_ERROR([gconftool-2 executable not found in your path - should be installed with GConf])
|
||||
fi
|
||||
|
||||
AM_GCONF2_REPLACEMENT
|
||||
AM_SHARED_MIME
|
||||
AM_PACKAGER
|
||||
@ -254,6 +260,7 @@ src/po/Makefile
|
||||
doc/Makefile
|
||||
doc/gramps-manual/Makefile
|
||||
doc/gramps-manual/C/Makefile
|
||||
doc/gramps-manual/fr/Makefile
|
||||
example/Makefile
|
||||
example/gramps/Makefile
|
||||
gramps.spec
|
||||
|
@ -70,7 +70,7 @@
|
||||
<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.
|
||||
guessed if the filename ends with .gramps
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>gedcom</term>
|
||||
@ -82,13 +82,13 @@
|
||||
<varlistentry><term>gramps-pkg</term>
|
||||
<listitem><para> &app; package. This format is available
|
||||
for import and export. When not specified, it can be
|
||||
guessed if the filename ends with .tgz
|
||||
guessed if the filename ends with .gpkg
|
||||
</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
|
||||
guessed if the filename ends with .gw
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>wft</term>
|
||||
@ -134,12 +134,7 @@
|
||||
<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 and gedcom,
|
||||
the <filename>filename</filename> is the name of the
|
||||
corresponding file.
|
||||
the <filename>filename</filename>.
|
||||
</para>
|
||||
|
||||
<tip><para>Only grdb, gramps-xml,
|
||||
@ -163,12 +158,7 @@
|
||||
<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.
|
||||
the <filename>filename</filename>.
|
||||
</para>
|
||||
|
||||
<tip><para>More than one file can be imported in one command.
|
||||
@ -195,10 +185,10 @@
|
||||
option. The format can be specified with the <command>-f</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
|
||||
and iso formats, the <filename>filename</filename>
|
||||
the <filename>filename</filename>. For iso format,
|
||||
the <filename>filename</filename>
|
||||
is actually the name of directory the gramps database will be written
|
||||
into. For grdb, gedcom, wft, geneweb,
|
||||
into. For grdb, gramps-xml, gedcom, wft, geneweb,
|
||||
and gramps-pkg, the <filename>filename</filename>
|
||||
is the name of the resulting file.
|
||||
</para>
|
||||
@ -411,8 +401,8 @@
|
||||
<listitem>
|
||||
<para><command>gramps
|
||||
-i<filename>file1.ged</filename>
|
||||
-i <filename>file2.tgz</filename>
|
||||
-i <filename>~/db3</filename>
|
||||
-i <filename>file2.gpkg</filename>
|
||||
-i <filename>~/db3.gramps</filename>
|
||||
-i <filename>file4.wft</filename>
|
||||
-a <filename>check</filename></command>
|
||||
</para> </listitem></varlistentry>
|
||||
@ -424,10 +414,10 @@
|
||||
<para><command>gramps
|
||||
-i <filename>file1.ged</filename>
|
||||
-f <replaceable>gedcom</replaceable>
|
||||
-i <filename>file2.tgz</filename>
|
||||
-i <filename>file2.gpkg</filename>
|
||||
-f <replaceable>gramps-pkg</replaceable>
|
||||
-i <filename>~/db3</filename>
|
||||
-f <replaceable>gramps</replaceable>
|
||||
-i <filename>~/db3.gramps</filename>
|
||||
-f <replaceable>gramps-xml</replaceable>
|
||||
-i <filename>file4.wft</filename>
|
||||
-f <replaceable>wft</replaceable>
|
||||
-a <replaceable>check</replaceable></command>
|
||||
@ -441,7 +431,7 @@
|
||||
<listitem>
|
||||
<para><command>gramps
|
||||
-i <filename>file1.ged</filename>
|
||||
-i <filename>file2.tgz</filename>
|
||||
-i <filename>file2.gpkg</filename>
|
||||
-o <filename>~/new-package</filename>
|
||||
-f <replaceable>gramps-pkg</replaceable></command>
|
||||
</para></listitem>
|
||||
@ -454,7 +444,7 @@
|
||||
<listitem>
|
||||
<para><command>gramps
|
||||
-i <filename>file1.ged</filename>
|
||||
-i <filename>file2.tgz</filename>
|
||||
-i <filename>file2.dpkg</filename>
|
||||
-o <filename>~/new-package</filename>
|
||||
-f <replaceable>gramps-pkg</replaceable>
|
||||
><filename>outfile</filename>
|
||||
@ -468,8 +458,8 @@
|
||||
<listitem>
|
||||
<para><command>gramps
|
||||
-i <filename>file1.ged</filename>
|
||||
-i <filename>file2.tgz</filename>
|
||||
-i <filename>~/db3</filename>
|
||||
-i <filename>file2.gpkg</filename>
|
||||
-i <filename>~/db3.gramps</filename>
|
||||
</command>
|
||||
</para> </listitem>
|
||||
</varlistentry>
|
||||
|
@ -1,3 +1,3 @@
|
||||
# Process this file with automake to produce Makefile.in
|
||||
|
||||
SUBDIRS = C
|
||||
SUBDIRS = C fr
|
||||
|
@ -10,6 +10,10 @@ entities = legal.xml\
|
||||
faq.xml\
|
||||
keybind.xml\
|
||||
filtref.xml\
|
||||
cmdline.xml
|
||||
cmdline.xml \
|
||||
authors.xml \
|
||||
bugs.xml \
|
||||
preface.xml
|
||||
|
||||
include $(top_srcdir)/doc/xmldocs.make
|
||||
dist-hook: app-dist-hook
|
||||
|
96
doc/gramps-manual/fr/authors.xml
Normal file
@ -0,0 +1,96 @@
|
||||
<appendix id="gramps-about">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<title>Au sujet de GRAMPS</title>
|
||||
<para> &app; a été écrit par Donald N. Allingham</para>
|
||||
|
||||
<para>
|
||||
La liste quelque peu inachevée de contribuants inclut (dans l'ordre alphabétique)
|
||||
<itemizedlist>
|
||||
|
||||
<listitem><para>Larry Allingham</para></listitem>
|
||||
<listitem><para>Jens Arvidsson</para></listitem>
|
||||
<listitem><para>Marcos Bedinelli</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>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>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>
|
||||
Si quelqu'un d'autre devrait être énuméré ici, svp faites-nous le savoir.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Pour trouver plus d'informations sur GRAMPS, visitez
|
||||
<ulink url="http://gramps.sourceforge.net" type="http">la page web du projet GRAMPS</ulink>.</para>
|
||||
<para>
|
||||
Pour rapporter un bug ou faire une suggestion concernant cette application ou ce manuel, employez le menu d'aide dans GRAMPS, ou suivez les directions sur
|
||||
<ulink url="http://gramps.sourceforce.net/contact.html" type="http">cet emplacement.</ulink>
|
||||
</para>
|
||||
|
||||
<para> Ce programme est distribué en vertu de la licence de Grand Public de GNU, comme publiée par la Free Software Foundation; version 2 de la licence, ou (à votre option) toute version postérieure. Une copie de cette licence peut être trouvée à ce
|
||||
<ulink url="ghelp:gpl" type="help">lien</ulink>,ou dans le fichier COPIER inclus avec le code source de ce programme. </para>
|
||||
|
||||
</appendix>
|
35
doc/gramps-manual/fr/bugs.xml
Normal file
@ -0,0 +1,35 @@
|
||||
<appendix id="mayapp-bugs">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<title>Bugs et limitations connus</title>
|
||||
|
||||
<para>Les bugs sont dépistés par
|
||||
<ulink url="http://sourceforge.net/tracker/?group_id=25770&atid=385137" type="http">
|
||||
le suivi système de sourceforge.net </ulink>.
|
||||
</para>
|
||||
|
||||
<para>Les limitations connues incluent les issues d'exécution de BSDDB, liées à la capacité de la mémoire. Aussi longtemps que le cache de BSDDB s'adapte complètement dans la mémoire disponible du système, l'exécution devrait être proportionnée. Quand la taille du cache excède celle de la mémoire libre, des parties du cache de la base de données commencent à être permutées sur le disque, l'exécution se dégrade sensiblement. Ceci peut être résolu en ajustant la taille du cache de BSDDB aux grandes bases de données.
|
||||
</para>
|
||||
|
||||
</appendix >
|
@ -1,229 +1,405 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<appendix id="append-cmdline">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- =============== Appendices Subsection ================ -->
|
||||
<sect2 id="append-cmdline">
|
||||
<title>Manuel de référence pour l'utilisation en ligne de commande</title>
|
||||
<para>Cette annexe décrit les possibilités offertes par &app; en
|
||||
ligne de commande, depuis un terminal. </para>
|
||||
<title>Références en ligne de commande</title>
|
||||
<para>Cette annexe décrit les possibilités offertes par GRAMPS en ligne de commande, depuis un terminal.</para>
|
||||
|
||||
<para>Notons ici que &app; est écrit pour être piloté à travers
|
||||
son interface graphique. Il ne peut pas être utilisé dans un mode
|
||||
strictement limité au texte. Les modifications pour le faire seraient
|
||||
très importantes. C'est pourquoi les options de la ligne de commande
|
||||
ne visent pas l'indépendance par rapport au mode graphique.
|
||||
En fait, elles rendent seulement certaines tâches fréquentes plus
|
||||
commodes et exécutables depuis des scripts. L'affichage
|
||||
graphique doit cependant toujours être accessible.
|
||||
</para>
|
||||
<note><para>&app; est écrit pour être piloté à travers son interface graphique. Il ne peut pas être utilisé dans un mode strictement limité au texte. Les modifications pour le faire seraient très importantes. C'est pourquoi les options de la ligne de commande ne visent pas l'indépendance par rapport au mode graphique. En fait, elles rendent seulement certaines tâches fréquentes plus commodes et exécutables depuis des scripts. L'affichage graphique doit cependant toujours être accessible.
|
||||
</para></note>
|
||||
|
||||
<para>En résumé, les options de la ligne de commande fournissent
|
||||
un mode non-interactif mais n'affranchissent pas d'un
|
||||
affichage graphique. C'est comme çà !
|
||||
</para>
|
||||
<tip><para> En résumé, les options de la ligne de commande fournissent un mode non-interactif mais n'affranchissent pas d'un affichage graphique. C'est comme çà !
|
||||
</para></tip>
|
||||
|
||||
|
||||
<sect3 id="cmdline-options">
|
||||
<sect1 id="cmdline-options">
|
||||
<title>Options disponibles</title>
|
||||
|
||||
<para>Voici la liste des options de lancement de &app; : </para>
|
||||
<variablelist>
|
||||
<varlistentry><term>Options de format</term>
|
||||
<listitem><para> Le format des fichiers de lecture ou d'écriture est donné par l'option
|
||||
<command>-f</command> <replaceable>format</replaceable>.
|
||||
Le <replaceable>format</replaceable> est à choisir parmi un des choix suivants :
|
||||
<para>Voici la liste des options de lancement de GRAMPS. Si vous voulez connaître plus d'options, voir <xref linkend="cmdline-operation"/>
|
||||
et <xref linkend="cmdline-examples"/>.
|
||||
</para>
|
||||
|
||||
<sect2 id="cmdline-opt-format"><title>Options de format</title>
|
||||
<para> Le format des fichiers de lecture ou d'écriture est donné par l'option
|
||||
<command>-f <replaceable>format</replaceable></command>
|
||||
Les valeurs acceptables <replaceable>format</replaceable> sont énumérées ci-dessous.</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry><term>gramps</term>
|
||||
<listitem><para> &app; chemin. Ce format est disponible
|
||||
en lecture comme en écriture. Il est deviné d'après la nature
|
||||
la nature (fichier ou répertoire) du chemin.
|
||||
|
||||
<varlistentry><term>grdb</term>
|
||||
<listitem><para>Base de données de &app;.Ce format est prêt à l'ouverture, à l'importation, et à l'exportation. Une fois indiqué, il peut deviner si le fichier porte l'extension grdb
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>gramps-xml</term>
|
||||
<listitem><para>Base de données de &app;. Ce format est prêt à l'ouverture, à l'importation, et à l'exportation. Une fois indiqué, il peut deviner si le fichier représente un dossier-gramps.
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>gedcom</term>
|
||||
<listitem><para> fichier GEDCOM. Ce format est disponible
|
||||
en lecture comme en écriture. Il est deviné
|
||||
si le nom de fichier a comme suffixe .ged.
|
||||
<listitem><para>Fichier GEDCOM.Ce format est prêt à l'ouverture, à l'importation, et à l'exportation. Une fois indiqué, il peut deviner si le fichier porte l'extension ged
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>gramps-pkg</term>
|
||||
<listitem><para> &app; package. Ce format est disponible
|
||||
en lecture comme en écriture. Il est deviné
|
||||
si le nom de fichier a comme suffixe .tgz .
|
||||
<listitem><para>Paquet de &app;.Ce format est prêt à l'importation et à l'exportation. Une fois indiqué, il peut deviner si le fichier porte l'extension tgz
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>geneweb</term>
|
||||
<listitem><para>Le fichier de GeneWen.Ce format est prêt à l'importation et à l'exportation. Une fois indiqué, il peut deviner si le fichier porte l'extension gw
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>wft</term>
|
||||
<listitem><para>Web Family Tree. Ce format est disponible
|
||||
en écriture seulement. Il est deviné
|
||||
si le nom de fichier a comme suffixe .wft.
|
||||
<listitem><para> Web Family Tree. Ce format est prêt à l'exportation seulement. Une fois indiqué, il peut deviner si le fichier porte l'extension wft
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>iso</term>
|
||||
<listitem><para>image de CD. Ce format est disponible
|
||||
en écriture seulement. Il doit toujours être
|
||||
précisé explicitement.
|
||||
<listitem><para> Image de CD. Ce format est prêt à l'exportation seulement. Il doit toujours être indiquer explicitement.
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect2>
|
||||
|
||||
<sect2 id="cmdline-opt-open"><title>Options d'ouverture</title>
|
||||
<para>Il y a deux manières de donner à &app; le nom du fichier à ouvrir:</para>
|
||||
<itemizedlist>
|
||||
<listitem><para>chemin du fichier </para></listitem>
|
||||
|
||||
<listitem><para>use the
|
||||
<command>-O <filename>nom du fichier</filename></command> ou
|
||||
<command>-open=<filename>nom du fichier</filename></command>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Options de lecture</term>
|
||||
<listitem><para> Les fichiers à lire sont spécifiés avec l'option
|
||||
<command>-i</command> <replaceable>chemin</replaceable>.
|
||||
Le format peut être précisé avec l'option <command>-f</command>
|
||||
immédiatement après le <replaceable>chemin</replaceable>.
|
||||
Si le format n'est pas précisé, il sera deviné d'après le
|
||||
<replaceable>chemin</replaceable> donné. Pour le format <term>gramps</term>,
|
||||
le <replaceable>chemin</replaceable> est en fait le
|
||||
nom du répertoire dans lequel les données gramps sont placées. Pour les formats
|
||||
<term>gedcom</term> et <term>gramps-pkg</term>, le
|
||||
<replaceable>chemin</replaceable> est le nom du fichier de données. </para>
|
||||
</itemizedlist>
|
||||
|
||||
<para>Quand plusieurs fichiers sont à lire, chaque nom de fichier doit être
|
||||
précédé par une commande <command>-i</command>.
|
||||
Les fichiers sont lus dans l'ordre des arguments, c'est à dire que
|
||||
<command>-i</command> <replaceable>chemin1</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2</replaceable>
|
||||
et
|
||||
<command>-i</command> <replaceable>chemin2</replaceable>
|
||||
<command>-i</command> <replaceable>chemin1</replaceable>
|
||||
peuvent ne pas donner les mêmes identifications gramps dans les données après chargement.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<para>Si le nom du fichier est donné sans options, &app; ouvrira sa fenêtre principale et commencera une session.
|
||||
</para>
|
||||
|
||||
<tip><para>Si aucune option n'est donnée, juste le nom de fichier, &app; ignorera le reste des arguments de ligne de commande. Employer -o pour ouvrir le fichier et pour faire quelque chose avec les données.
|
||||
</para></tip>
|
||||
|
||||
<varlistentry><term>Options d'écriture</term>
|
||||
<listitem><para> Les fichiers à écrire sont précisés par l'option
|
||||
<command>-o</command> <replaceable>chemin</replaceable>.
|
||||
Le format peut être spécifié par l'option <command>-f</command>
|
||||
placée immédiatement après le <replaceable>chemin</replaceable>.
|
||||
Si ce n'est pas le cas, il sera deviné d'après le
|
||||
<replaceable>chemin</replaceable>. Pour les formats <term>gramps</term>
|
||||
et <term>iso</term>, le <replaceable>chemin</replaceable>
|
||||
est en fait le nom du répertoire où seront écrites les données gramps.
|
||||
Pour les formats <term>gedcom</term>, <term>wft</term>,
|
||||
et <term>gramps-pkg</term>, le <replaceable>chemin</replaceable>
|
||||
est le nom du fichier écrit.
|
||||
<para>Le format peut être indiqué avec l'option
|
||||
<command>-f <replaceable>format</replaceable></command> ou
|
||||
<command>--format=<replaceable>format</replaceable></command>
|
||||
juste après <filename>le nom du fichier</filename>.
|
||||
Pour le format gramps-xml,<filename>nom de fichier</filename> est réellement le nom du répertoire sous lequel la base de données de gramps réside. Pour le grdb et le gedcom, <filename>le nom de fichier</filename> est le nom du fichier correspondant.
|
||||
</para>
|
||||
|
||||
<para>Quand plusieurs fichiers de sortie sont précisés, chacun doit être
|
||||
précédé par une option <command>-o</command> . Les fichiers sont écrits
|
||||
un par un dans l'ordre des arguments. </para></listitem>
|
||||
</varlistentry>
|
||||
<tip><para>Seulement grdb, gramps-xml, et les formats gedcom peuvent être ouverts directement. Pour d'autres formats, vous devrez employer l'option d'importation qui installera la base de données vide puis importera des données.
|
||||
</para></tip>
|
||||
|
||||
<tip><para>Seulement un fichier simple peut être ouvert. Si vous devez combiner des données depuis plusieurs sources, vous devrez employer l'option d'importation.</para></tip>
|
||||
|
||||
</sect2>
|
||||
|
||||
<varlistentry><term>Options d'action</term>
|
||||
<listitem><para>L'action à exécuter sur les données lues peut être précisée
|
||||
avec l'option <command>-a</command> <replaceable>action</replaceable>.
|
||||
Ceci est fait après que toutes les lectures ont été faites avec succès.
|
||||
Les actions actuellement disponibles sont <term>summary</term> (comme
|
||||
<menuchoice><guimenu>Reports</guimenu> <guisubmenu>View</guisubmenu>
|
||||
<guimenuitem>Summary</guimenuitem></menuchoice>)
|
||||
et <term>check</term> (comme <menuchoice><guimenu>Tools</guimenu>
|
||||
<guisubmenu>Database Processing</guisubmenu>
|
||||
<guimenuitem>Check and Repair</guimenuitem></menuchoice>).
|
||||
<sect2 id="cmdline-opt-import"><title>Options d'importation</title>
|
||||
<para> Les dossiers destinés à l'importation peuvent être indiqués avec
|
||||
<command>-i <filename>nom du fichier</filename></command>
|
||||
ou <command>--import=<filename>nom du fichier</filename></command>
|
||||
Le format peut être indiqué avec l'option
|
||||
<command>-f <replaceable>format</replaceable></command> ou
|
||||
<command>--format=<replaceable>format</replaceable></command>
|
||||
juste après<filename>nom de fichier</filename>.
|
||||
Pour le format gramps-xml,<filename>le nom du fichier</filename> est réellement le nom du répertoire sous lequel la base de données de gramps réside. Pour grdb, gedcom, gramps-pkg, et geneweb, <filename>le nom du fichier</filename> est le nom du fichier correspondant.
|
||||
</para>
|
||||
|
||||
<para>Si plusieurs actions de sorties sont données, chacune doit être précédée par une option
|
||||
<command>-a</command>. Les actions sont exécutées une par une dans l'ordre des arguments.
|
||||
<tip><para>Plus d'un fichier peut être importé dans une commande. Si c'est le cas,
|
||||
&app; incorporera les données à partir du prochain fichier à la base de données disponible à l'heure actuelle.
|
||||
</para></tip>
|
||||
<para>Quand plus d'un dossier d'entrée est donné, chacun doit être par précédé de<command>-i</command>Les dossiers sont importés dans l'ordre indiqué, c.-à-d..
|
||||
<command>
|
||||
-i <filename>fichier1</filename>
|
||||
-i <filename>fichier2</filename>
|
||||
</command> and <command>
|
||||
-i <filename>fichier2</filename>
|
||||
-i <filename>fichier1</filename>
|
||||
</command>
|
||||
pourraient produire différentes versions dans la base de données résultant.
|
||||
</para></sect2>
|
||||
|
||||
<sect2 id="cmdline-opt-export"><title>Options d'exportation</title>
|
||||
<para> Les dossiers destinés à l'exportation peuvent être indiqués avec
|
||||
<command>-o <filename>nom du fichier</filename></command> ou
|
||||
<command>--output=<filename>nom du fichier</filename></command>
|
||||
Le format peut être indiqué avec l'option <command>-f</command>
|
||||
juste après <filename>le nom du fichier</filename>.
|
||||
Pour gramps-xml et les formats iso, <filename>nom du fichier</filename>
|
||||
est réellement le nom du répertoire la base de données de gramps. Pour grdb, gedcom, wft, geneweb, et gramps-pkg,<filename>le nom du fichier</filename>
|
||||
est le nom du dossier résultant.
|
||||
</para>
|
||||
|
||||
<tip><para>Plus d'un fichier peut être exporté dans une commande. Si c'est le cas, &app; essayera d'écrire plusieurs fichiers en utilisant les données de la base de données disponible à l'heure actuelle.
|
||||
</para></tip>
|
||||
|
||||
<para> Quand plus d'un fichier est donné, chacun doit être par précédé par <command>-o</command> Les dossiers sont écrits dans l'ordre indiqué.
|
||||
</para></sect2>
|
||||
|
||||
<sect2 id="cmdline-opt-action"><title>Options d'action</title>
|
||||
<para> L'action à exécuter sur les données importées peut être indiquée avec
|
||||
<command>-a <replaceable>action</replaceable></command> ou
|
||||
<command>--action=<replaceable>action</replaceable></command>
|
||||
Ceci est fait après que toutes les importations soient accomplies avec succès.
|
||||
</para>
|
||||
|
||||
<para>Les actions actuellement disponibles sont:</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>summary</term>
|
||||
<listitem><para>Cette action est identique à
|
||||
<menuchoice><guimenu>Rapports</guimenu><guisubmenu>Vue</guisubmenu>
|
||||
<guimenuitem>Sommaire</guimenuitem></menuchoice>
|
||||
</para></listitem></varlistentry>
|
||||
|
||||
|
||||
<varlistentry><term>check</term>
|
||||
<listitem><para>Cette action est identique à
|
||||
<menuchoice><guimenu>Outils</guimenu>
|
||||
<guisubmenu>Traitement de la Base de données</guisubmenu>
|
||||
<guimenuitem>contrôle et réparation</guimenuitem></menuchoice>.
|
||||
</para> </listitem> </varlistentry>
|
||||
|
||||
<varlistentry><term>report</term>
|
||||
<listitem><para>Cette action laisse produire des rapports à partir de la ligne de commande. Car les rapports ont généralement beaucoup d'options propres, cette action devrait être suivie de la chaîne d'option du rapport. La chaîne est donnée en utilisant
|
||||
<command>-p <replaceable>option_string</replaceable></command> ou
|
||||
<command>--options=<replaceable>option_string</replaceable></command>
|
||||
</para>
|
||||
|
||||
<tip><para>
|
||||
La chaîne d'option de rapport devrait satisfaire les conditions suivantes:
|
||||
</para>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem><para>Elle ne doit contenir aucun espaces. Si quelques arguments doivent inclure les espaces, la chaîne devrait être enfermée avec des guillemets.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<listitem><para>Option string must list pairs of option names
|
||||
and values.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>La chaîne d'option doit énumérer des paires de noms et de valeurs séparées par le signe égal.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>Différentes paires doivent être séparées par des virgules.
|
||||
</para></listitem>
|
||||
|
||||
</itemizedlist>
|
||||
</tip>
|
||||
|
||||
|
||||
<para>La plupart des options de rapport sont spécifiques pour chaque rapport. Cependant, il y a quelques options communes.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>name=report_name</term>
|
||||
<listitem> <para>
|
||||
Cette option obligatoire détermine quel rapport sera produit. Si le report_name ne correspond à aucun rapport disponible, le message d'erreur sera affiché à la suite de la liste de rapports disponibles.
|
||||
</para>
|
||||
</listitem> </varlistentry>
|
||||
|
||||
<varlistentry><term>show=all</term>
|
||||
<listitem> <para>
|
||||
Ceci affichera la liste de noms pour toutes les options disponibles pour un rapport présenté.
|
||||
</para>
|
||||
</listitem> </varlistentry>
|
||||
|
||||
<varlistentry><term>show=option_name</term>
|
||||
<listitem> <para>
|
||||
Ceci affichera la description de la fonctionnalité assurée par l'option_name, pour les types et les valeurs acceptables pour cette option.
|
||||
</para>
|
||||
</listitem> </varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
<para>
|
||||
Employez les options ci-dessus pour découvrir tout au sujet d'un rapport présenté.
|
||||
</para>
|
||||
|
||||
<tip><para>
|
||||
Si une option n'est pas assurée, la dernière valeur utilisée sera employée. Si ce rapport n'a jamais été produit avant, alors la valeur du dernier rapport produit sera employée comme applicable. Autrement, la valeur par défaut sera employée.
|
||||
</para></tip>
|
||||
|
||||
</listitem> </varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
<para>Quand plus d'une action à produire est donnée, chacunes doivent être par précédé<command>-a</command> . Les actions sont effectuées dans l'ordre indiqué.
|
||||
</para></sect2>
|
||||
|
||||
<sect3 id="cmdline-operation">
|
||||
<title>Operation</title>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 id="cmdline-operation">
|
||||
<title>Opération</title>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem>
|
||||
<para>Si le premier argument sur la ligne de commande ne commence pas par le tiret, &app; essayera d'ouvrir le dossier avec le nom donné par le premier argument et de commencer la session interactive, ignorant le reste des arguments de ligne de commande.
|
||||
</para></listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Si <command>-O</command> est donné, alors &app; essayera d'ouvrir le nom de fichier fourni et fonctionnera alors avec ces données.
|
||||
</para>
|
||||
|
||||
<note><para>Seulement, un fichier peut être ouvert par
|
||||
&app;. Si vous avez besoin d'ouvrir depuis plusieurs sources, utilisez l'option d'importation
|
||||
<command>-i</command>.
|
||||
</para></note>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>L'ordre des options <command>-i</command>, <command>-o</command>,
|
||||
ou <command>-a</command> entre elles n'a pas de signification.
|
||||
L'ordre réel d'exécution est toujours : les lectures (s'il y en a) puis les
|
||||
écritures (s'il y en a) et enfin les actions (s'il y en a).</para>
|
||||
|
||||
<para>Si aucune option<command>-i</command> n'est donnée, gramps ouvrira
|
||||
sa fenêtre principale et commencera une session interactive avec un ensemble vide de données
|
||||
puisqu'il n'y a pas de données à traiter.</para>
|
||||
ou <command>-a</command> entre elles n'a pas de signification. L'ordre réel d'exécution est toujours : les lectures (s'il y en a) puis les écritures (s'il y en a) et
|
||||
enfin les actions (s'il y en a).</para>
|
||||
|
||||
<note><para>Mais l'ouverture doit toujours être première!</para></note>
|
||||
</listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Si aucune option <command>-O</command> ou <command>-i</command>
|
||||
n'est donnée, gramps ouvrira sa fenêtre principale et commencera une session interactive avec un ensemble vide de données puisqu'il n'y a pas de données à traiter.
|
||||
</para></listitem>
|
||||
|
||||
<para>Si aucune option<command>-o</command> ou <command>-a</command> n'est donnée,
|
||||
gramps ouvrira sa fenêtre principale et commencera une session interactive
|
||||
avec les données lues. Cet ensemble de données se situe dans le répertoire
|
||||
<replaceable>~/.gramps/import</replaceable> .</para>
|
||||
|
||||
<para>Les erreurs trouvées pendant les phases de lecture, d'écriture et d'action sont
|
||||
rapportées soit sur la sortie standard quand elles sont gérées par gramps,
|
||||
soit sur la sortie d'erreur dans le cas contraire. Utilisez les redirections
|
||||
du shell pour les conserver dans des fichiers. </para>
|
||||
<listitem>
|
||||
<para>Si aucune option <command>-o</command> ou <command>-a</command>n'est donnée, gramps ouvrira sa fenêtre principale et commencera une session interactive avec les données lues.
|
||||
<filename>import_db.grdb</filename> se situera dans le répertoire
|
||||
<filename>~/.gramps/import/</filename>.
|
||||
</para></listitem>
|
||||
|
||||
<listitem>
|
||||
<para>Les erreurs trouvées pendant les phases de lecture, d'écriture et d'action sont rapportées soit sur la sortie standard quand elles sont gérées par gramps, soit sur la sortie d'erreur dans le cas contraire. Utilisez les redirections du shell pour les conserver dans des fichiers.
|
||||
</para></listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<sect3 id="cmdline-examples">
|
||||
<sect1 id="cmdline-examples">
|
||||
<title>Exemples</title>
|
||||
<para>Lecture de quatre bases de données dont les formats peuvent être devinés d'après les noms,
|
||||
puis vérification des données : </para>
|
||||
<para><command>gramps -i</command> <replaceable>chemin1.ged</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2.tgz</replaceable>
|
||||
<command>-i</command> <replaceable>~/db3</replaceable>
|
||||
<command>-i</command> <replaceable>chemin4.wft</replaceable>
|
||||
<command>-a</command> <replaceable>check</replaceable>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry>
|
||||
<term>Lecture de quatre bases de données dont les formats peuvent être devinés d'après les noms, puis vérification des données :</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>Si vous voulez préciser les formats de fichiers dans l'exemple ci-dessus, complétez les noms de fichiers par les options <command>-f</command> appropriées :</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>Pour enregistrer le résultat des lectures, donnez l'option
|
||||
<command>-o</command>(utiliser <command>-f</command>
|
||||
si le nom de fichier ne permet pas à gramps de deviner le 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>Pour sauver les erreurs de l'exemple précédent dans les fichiers
|
||||
<filename>outfile</filename> et
|
||||
<filename>errfile</filename>, lancez :</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>
|
||||
><filename>outfile</filename>
|
||||
2><filename>errfile</filename> </command>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry>
|
||||
<term>Pour lire trois ensembles de données puis lancer une session interactive de gramps sur le tout :</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>Pour ouvrir une base de données, produisant un rapport temporel dans le format pdf et l'enregistrant sous le fichier
|
||||
<filename>my_timeline.pdf</filename> :</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>Si vous voulez préciser les formats de fichiers dans l'exemple ci-dessus,
|
||||
complétez les noms de fichiers par les options
|
||||
<command>-f</command> appropriées : </para>
|
||||
<para><command>gramps -i</command> <replaceable>chemin1.ged</replaceable>
|
||||
<command>-f</command> <replaceable>gedcom</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2.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>chemin4.wft</replaceable>
|
||||
<command>-f</command> <replaceable>wft</replaceable>
|
||||
<command>-a</command> <replaceable>check</replaceable>
|
||||
<tip><para>Employez <replaceable>name=timeline,show=all</replaceable>
|
||||
pour découvrir toutes les options disponibles au sujet du rapport de timeline. Pour découvrir des détails d'une option particulière, employez
|
||||
<replaceable>show=option_name</replaceable>,
|
||||
par exemple :<replaceable>name=timeline,show=off</replaceable>
|
||||
</para>
|
||||
|
||||
<para>Pour enregistrer le résultat des lectures, donnez l'option
|
||||
<command>-o</command> (utilisez l'option <command>-f</command>
|
||||
si le nom de fichier ne permet pas à gramps de deviner le format) : </para>
|
||||
<para><command>gramps -i</command> <replaceable>chemin1.ged</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2.tgz</replaceable>
|
||||
<command>-o</command> <replaceable>~/nouvel-ensemble-gramps</replaceable>
|
||||
<command>-f</command> <replaceable>gramps-pkg</replaceable>
|
||||
</para>
|
||||
|
||||
<para>Pour sauver les erreurs de l'exemple précédent dans les fichiers
|
||||
<replaceable>sortie</replaceable> et
|
||||
<replaceable>erreur</replaceable>, lancez : </para>
|
||||
<para><command>gramps -i</command> <replaceable>chemin1.ged</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2.tgz</replaceable>
|
||||
<command>-o</command> <replaceable>~/nouvel-ensemble-gramps</replaceable>
|
||||
<command>-f</command> <replaceable>gramps-pkg</replaceable>
|
||||
><replaceable>sortie</replaceable>
|
||||
2><replaceable>erreur</replaceable>
|
||||
|
||||
<para>Pour se renseigner sur les noms disponibles de rapport, employez
|
||||
<replaceable>name=show</replaceable>.
|
||||
</para>
|
||||
</tip>
|
||||
|
||||
<para>Pour lire trois ensembles de données puis lancer une session interactive de gramps
|
||||
sur le tout : </para>
|
||||
<para><command>gramps -i</command> <replaceable>chemin1.ged</replaceable>
|
||||
<command>-i</command> <replaceable>chemin2.tgz</replaceable>
|
||||
<command>-i</command> <replaceable>~/db3</replaceable>
|
||||
</para>
|
||||
|
||||
<para>Enfin, pour lancer une session interactive normale, entrez : </para>
|
||||
<para> <command>gramps</command></para>
|
||||
|
||||
</sect3>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</sect2>
|
||||
<varlistentry>
|
||||
<term>Enfin, pour lancer une session interactive normale, entrez :</term>
|
||||
<listitem><para> <command>gramps </command></para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect1>
|
||||
|
||||
</appendix>
|
||||
|
@ -1,408 +1,234 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<chapter id="gramps-settings">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- ================ Customization ================================ -->
|
||||
<title>Configuration</title>
|
||||
|
||||
<sect1 id="gramps-prefs">
|
||||
<title>Préférences</title>
|
||||
|
||||
<sect1 id="gramps-prefs">
|
||||
<title>Personnalisation</title>
|
||||
<para>Choisissez
|
||||
<menuchoice><guimenu>Edition</guimenu>
|
||||
<guimenuitem>Préférences...</guimenuitem></menuchoice> pour configurer &app;.
|
||||
Le dialogue <guilabel>Préférences</guilabel> propose les
|
||||
catégories suivantes : </para>
|
||||
<para>La plupart des configuration &app;, sont affichables dans la boîte de dialogue
|
||||
<guilabel>Préférences</guilabel> Choisissez,
|
||||
<menuchoice><guimenu>Edition</guimenu>
|
||||
<guimenuitem>Préférences...</guimenuitem></menuchoice>. </para>
|
||||
|
||||
<!-- ==== Figure: Type-ahead find ==== -->
|
||||
<figure id="prefs-fig">
|
||||
<title>Dialogue de préférences</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>La fenêtre du côté gauche montre l'arbre des options disponibles. Le choix d'un noeud montrera les options correspondantes du côté droit. </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 ================ -->
|
||||
<sect2 id="gramps-prefs-usage">
|
||||
<title>Utilisation</title>
|
||||
<para> Cette catégorie regroupe les préférences à propos de l'utilisation
|
||||
générale de &app;. Les sous-catégories suivantes sont disponibles : </para>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-usage-find">
|
||||
<title>Recherche</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Active la terminaison automatique</guilabel></term>
|
||||
<listitem><para>Si cette option est validée, &app; essaiera de terminer seul
|
||||
le texte entré dans les zones de saisie comme le nom de famille,
|
||||
les lieux... La terminaison est tentée en s'appuyant sur la correspondance
|
||||
entre le début de texte saisi et les données du même type déjà dans la base de données.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-usage-report">
|
||||
<title>Préférences d'impression</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Format de texte</guilabel></term>
|
||||
<listitem><para> Sélectionne le format pour les impressions textuelles
|
||||
parmi les formats disponibles.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Format graphique</guilabel></term>
|
||||
<listitem><para> Sélectionne le format pour les impressions graphiques
|
||||
parmi les formats disponibles.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Taille de page</guilabel></term>
|
||||
<listitem><para> Sélectionne la taille de feuille utilisée pour les impressions
|
||||
parmi les formats disponibles.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Répertoire par défaut des impressions</guilabel></term>
|
||||
<listitem><para> Choisissez le répertoire par défaut pour les fichiers d'impression
|
||||
en utilisant le bouton
|
||||
<guibutton>Parcourir...</guibutton> ou entrez-le dans la zone de saisie de
|
||||
texte. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Répertoire par défaut pour la création de site web</guilabel></term>
|
||||
<listitem><para> Choisissez le répertoire par défaut pour la création de site web
|
||||
en utilisant le bouton
|
||||
<guibutton>Parcourir...</guibutton> ou entrez-le dans la zone de saisie de
|
||||
texte. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-usage-res">
|
||||
<title>Informations sur le chercheur</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Informations sur le chercheur</guilabel></term>
|
||||
<listitem><para> Entrez vos informations personnelles dans les champs
|
||||
de saisie. Bien que &app; vous interroge,
|
||||
cette information ne sert quà créer des fichiers GEDCOM valides.
|
||||
Le format GEDCOM a besoin de données sur l'auteur du fichier.
|
||||
Vous pouvez laissez les données vides mais les fichiers GEDCOM
|
||||
exportés ne seront pas valides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-usage-guess">
|
||||
<title>Hypothèse</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Hypothèse de nom de famille</guilabel></term>
|
||||
<listitem><para> Cette option affecte le nom de famille initial
|
||||
d'un enfant lors de sa création dans la base de données. NOTE : cela
|
||||
ne change que le nom de famille initial proposé par &app; quand la fenêtre
|
||||
<guilabel>Affiche Personne</guilabel> est ouverte. Vous pouvez modifier
|
||||
ce nom comme vous voulez ensuite. Positionnez cette option selon ce que vous
|
||||
faites le plus souvent, et elle vous économisera beaucoup
|
||||
de frappe. </para>
|
||||
|
||||
<para>Si <guilabel>Aucun</guilabel> est sélectionné, aucune hypothèse
|
||||
ne sera faite. Choisir <guilabel>Nom du père</guilabel> prendra
|
||||
le nom du père et le proposera comme nom de l'enfant.
|
||||
Choisir <guilabel>Combinaison du nom du père et de la mère</guilabel>
|
||||
proposera le nom du père suivi du nom de la mère.
|
||||
Enfin, choisir <guilabel>Style Islandais</guilabel> prendra le nom
|
||||
du père suivi du suffixe "sson" (c'est à dire que le fils d'Erik
|
||||
aura comme nom de famille Eriksson).
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
</sect2>
|
||||
|
||||
<!-- =============== Customization Subsection ================ -->
|
||||
<sect2 id="gramps-prefs-display">
|
||||
<title>Affichage</title>
|
||||
<para> Cette catégorie regroupe les préférences pour
|
||||
afficher le contenu de la base de données et les contrôles.
|
||||
Les sous-catégories suivantes existent : </para>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-display-gen">
|
||||
<title>Général</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Vue par défault</guilabel></term>
|
||||
<listitem><para> Ceci définit quelle vue sera affichée au lancement
|
||||
de &app;. Vous avez le choix entre la vue des Individus et
|
||||
la vue par Famille.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Style de Vue par Famille</guilabel></term>
|
||||
<listitem><para> Ceci sélectionne une des deux dispositions possibles
|
||||
pour la vue par Famille. Le style
|
||||
<guilabel>de Gauche à Droite</guilabel> ressemble à
|
||||
Family Tree Maker (tm), alors que le style <guilabel>de Haut en Bas</guilabel>
|
||||
ressemble à Réunion.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Toujours afficher l'onglet LDS</guilabel></term>
|
||||
<listitem><para> Validez ce choix si vous souhaiter toujours afficher
|
||||
l'onglet des données LDS (Later Days Saints, Mormons en français).
|
||||
Si vous ne savez pas ce que c'est, ne le validez pas.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Montrer l'index dans les listes d'enfants</guilabel></term>
|
||||
<listitem><para>
|
||||
Cette option n'est actuellement pas programmée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-display-date">
|
||||
<title>Dates et Calendriers</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Affichage : Format de Date</guilabel></term>
|
||||
<listitem><para> Sélectionne le format d'affichage des dates
|
||||
parmi les choix du menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Format des Noms</guilabel></term>
|
||||
<listitem><para> Sélectionne le format d'affichage des noms
|
||||
parmi les choix du menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Saisie : Format de Date</guilabel></term>
|
||||
<listitem><para> Sélectionne le format de saisie des dates
|
||||
parmi les choix du menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Sélection des formats de calendriers proposés</guilabel></term>
|
||||
<listitem><para> Cochez ce choix si vous voulez avoir plusieurs calendriers disponibles
|
||||
lors des saisies de dates dans le dialogue
|
||||
<guilabel>Modification d'évènement</guilabel>. Ceci vous permettra alors de choisir
|
||||
parmi plusieurs calendriers pour modifier les dates.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-display-bars">
|
||||
<title>Barres d'outils et de status</title>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Barre d'outils</guilabel></term>
|
||||
<listitem><para> Sélectionne l'affichage des icônes de la barre d'outils.
|
||||
Les <guilabel>paramètres GNOME</guilabel> seront utilisés
|
||||
par &app;. Il est possible d'afficher seulement les icônes, seulement le texte
|
||||
ou encore d'afficher les deux.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Barre de Status</guilabel></term>
|
||||
<listitem><para> Sélectionne ce qui est affiché dans la barre de status.
|
||||
Il est possible d'afficher le nom de l'individu seul, accompagné de l'identifiant Gramps
|
||||
ou aussi le lien entre la personne sélectionnée et le probant (individu origine
|
||||
de la recherche généalogique ascendante). Cette dernière option n'est correctement
|
||||
rédigée qu'en langue Anglaise pour le moment.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
</sect2>
|
||||
|
||||
<!-- =============== Customization Subsection ================ -->
|
||||
<sect2 id="gramps-prefs-db">
|
||||
<title>Base de données</title>
|
||||
<para> Cette catégorie regroupe les préférences liées à la
|
||||
base de données elle-même. Vous y trouvez les sous-catégories suivantes : </para>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-db-gen">
|
||||
<title>Général</title>
|
||||
<para> Cette catégorie regroupe les préférences liées à la base de données elle-même. Vous y trouvez les sous-catégories suivantes : </para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry><term><guilabel>Général</guilabel></term>
|
||||
<listitem>
|
||||
<variablelist>
|
||||
<varlistentry><term><guilabel>Chargement automatique de la dernière base</guilabel></term>
|
||||
<listitem><para>Cochez ce choix pour charger automatiquement la dernière base ouverte, lors du lancement de &app;.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Estimation du nom de famille </guilabel></term>
|
||||
<listitem><para> Cette option affecte le nom de famille initial d'un enfant quand il/elle est ajouté à la base de données. </para>
|
||||
|
||||
<tip><para>Cette option affecte seulement le nom de famille initial deviné par &app; quand le
|
||||
<guilabel>dialogue d'édition</guilabel> de la personne est lancé. Placez cette option à la valeur que vous emploierez le plus fréquemment, car elle vous évitera beaucoup de dactylographie.
|
||||
</para></tip>
|
||||
|
||||
<varlistentry><term><guilabel>Chargement automatique de la dernière base</guilabel></term>
|
||||
<listitem><para> Cochez ce choix pour charger automatiquement la dernière
|
||||
base ouverte, lors du lancement de &app;. </para></listitem>
|
||||
<para>Si <guilabel>Aucun</guilabel> est choisi, aucune estimation sera essayé. Choix <guilabel>du nom de famille du père</guilabel>
|
||||
emploiera le nom. de famille du père. Choix
|
||||
<guilabel>de la combinaison
|
||||
du nom de famille de la mère et du père</guilabel>
|
||||
emploiera le nom du père suivi du nom de la mère. En conclusion,
|
||||
<guilabel>le modèle islandais</guilabel> emploiera le nom donné du père suivi du suffixe de "sson" (par exemple le fils d'Edwin sera deviné comme Edwinsson).
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Ne pas compresser les fichiers XML</guilabel></term>
|
||||
<listitem><para> Cochez ce choix pour désactiver la compression des
|
||||
fichiers XML. La compression réduit considérablement la taille du fichier.
|
||||
Cela coûte un tout petit peu plus en terme de puissance CPU. Les erreurs
|
||||
de compression ont été corrigées depuis bien longtemps et il n'y a
|
||||
plus aucune raison de désactiver la compression.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel> Intervalle de sauvegarde automatique</guilabel></term>
|
||||
<listitem><para> Ceci fixe le délai (en minutes) entre deux sauvegardes
|
||||
automatiques de la base de données. La valeur zéro (0) désactive
|
||||
la sauvegarde automatique. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Répertoire par defaut de la base de données</guilabel></term>
|
||||
<listitem><para> Ceci précise le répertoire utilisé par défaut avant une sauvegarde.
|
||||
Ceci sert quand on valide le bouton <guibutton>Parcourir...</guibutton> après
|
||||
la commande de sauvegarde, ou quand on saisit un chemin d'accès directement
|
||||
dans la zone de saisie de texte. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-db-media">
|
||||
<title>Medias</title>
|
||||
|
||||
<para>Avant de décrire les préférences pour les objets Médias,
|
||||
il faut revoir les notions d'objet local et non local.
|
||||
Un objet local a ses données conservées dans le répertoire de
|
||||
la base de données.
|
||||
Au contraire, un objet non local est conservé ailleurs et la base
|
||||
de données ne conserve qu'une référence du chemin d'accès
|
||||
au fichier ainsi que quelques informations sur l'objet. </para>
|
||||
|
||||
<para>Vous pouvez décider de conserver vos objets médias localement
|
||||
ou pas. Les objets locaux augmentent l'espace-disque consommé par la base
|
||||
de données. si le fichier externe est détruit ou déplacé, &app;
|
||||
en aura toujours une copie.
|
||||
Au contraire, les objets non locaux réduisent l'espace-disque consommé,
|
||||
mais il ne faut pas perdre les fichiers sous peine de
|
||||
perdre aussi le contenu des objets non locaux.
|
||||
<varlistentry><term><guilabel>Identifications de &app;</guilabel></term>
|
||||
<listitem><para> Écrivez les préfixes d'identification pour différents genres d'entrées de base de données dans les champs correspondants d'enregistrement de texte.
|
||||
</para>
|
||||
|
||||
<para>Remarque : l'exportation de la base de données en n'importe
|
||||
quel format intègre tous les objets, qu'ils soient locaux
|
||||
ou pas. En particulier, exporter en un paquetage gramps
|
||||
inclut tous les objets médias dans le fichier produit, et change
|
||||
les références en conséquence. Exporter vers un CD-Rom copie tous les objets
|
||||
médias dans le répertoire de <guilabel>gravure:///</guilabel> dans Nautilus
|
||||
et ajuste leur référence. Enfin, l'export en Gedcom met les fichiers de médias
|
||||
à côté du fichier de données Gedcom en mettant à jour les chemins
|
||||
d'accès conservés dans le fichier Gedcom.
|
||||
<tip><para>Les préfixes d'identification emploient des conventions de formatage communes pour C, Python, et d'autres langages de programmation. Par exemple, le %04d augmente à un nombre entier ajouté au début de zéros, pour avoir toute la largeur des chiffres. Si vous voudriez que les identifications soient 1, 2, 3, etc.., placé simplement le paramètre de formatage à %d.
|
||||
</para></tip>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Informations sur le chercheur</guilabel></term>
|
||||
<listitem><para> Entrez vos informations personnelles dans les champs de saisie. Bien que &app; vous interroge, cette information ne sert qu' à créer des fichiers GEDCOM valides. Le format GEDCOM a besoin de données sur l'auteur du fichier. Vous pouvez laissez les données vides mais les fichiers GEDCOM exportés ne seront pas valides. &app; requests information about you,
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Glisser-Déposer à partir d'une Source externe
|
||||
</guilabel></term>
|
||||
<listitem><para> Ceci choisit entre une référence et une copie locale
|
||||
quand un fichier est déposé dans la galerie. Une référence
|
||||
économise l'espace-disque en ne copiant pas l'objet. La copie locale
|
||||
rend votre base de données déplaçable puisqu'elle ne dépend pas de
|
||||
fichiers externes. Réfléchissez à votre besoin pour faire le meilleur choix.</para>
|
||||
|
||||
<para>Cochez le choix <guilabel>Ouvrir l'éditeur de propriétés quand
|
||||
un objet est déposé</guilabel> pour lancer l'éditeur de propriétés
|
||||
après qu'un objet a été déposé dans la Galerie.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Glisser-Déposer depuis une source interne</guilabel></term>
|
||||
<listitem><para>Cochez le choix <guilabel>Ouvrir l'éditeur de propriétés quand
|
||||
un objet est déposé</guilabel> pour lancer l'éditeur de propriétés
|
||||
après qu'un objet interne (à la base de données) a été déposé dans la Galerie.
|
||||
</para></listitem>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-db-id">
|
||||
<title>Identifiants internes gramps</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel> Préfixes d'identifiants &app;</guilabel></term>
|
||||
<listitem><para> Saisissez les préfixes utilisés par &app; pour générer
|
||||
les identifiants pour différents éléments de données.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Autorise la modification des identifiants internes de
|
||||
Gramps</guilabel></term>
|
||||
<listitem><para> Cochez ce choix pour autoriser la modification des identifiants internes
|
||||
utilisés par &app;. N'autorisez cela que si vous savez vraiment ce que vous faites.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<!-- =============== Customization Sub-subsection ================ -->
|
||||
<sect3 id="prefs-db-rcs">
|
||||
<title>Contrôle de Révision</title>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Utiliser le contrôle de révision</guilabel></term>
|
||||
<listitem><para> Cochez ce choix si vous autorisez &app; à utiliser
|
||||
la gestion des versions pour votre base de données.
|
||||
Si vous le faites, choisissez le système de gestion de version
|
||||
par le menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Prompt pour un commentaire de sauvegarde</guilabel></term>
|
||||
<listitem><para> Cochez ce choix pour que &app; demande un commentaire lors de la sauvegarde
|
||||
de la base de données.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
</sect2>
|
||||
|
||||
</sect1> <!-- ================ End Customization ================== -->
|
||||
<sect2 id="gramps-prefs-display">
|
||||
<title>Affichage</title>
|
||||
<para> Cette catégorie regroupe les préférences pour afficher le contenu de la base de données et les contrôles. Les sous-catégories suivantes existent :</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Général</guilabel></term>
|
||||
<listitem>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Vue de défaut</guilabel></term>
|
||||
<listitem><para> Ceci détermine quelle vue apparaîtra quand vous commencez &app;. Choisissez entre les vues de personne et de famille.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Modèle de vue de famille</guilabel></term>
|
||||
<listitem><para> Ceci choisit entre les deux modèles disponibles de vue de famille. Le style <guilabel>Gauche vers la Droite</guilabel>
|
||||
ressemble à Family Tree Maker (tm), alors que le style
|
||||
<guilabel>de Haut en Bas</guilabel> est proche de Réunion.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Toujours afficher l'onglet LDS</guilabel></term>
|
||||
<listitem><para> Validez ce choix si vous souhaiter toujours afficher l'onglet des données LDS (Later Days Saints, Mormons en français). Si vous ne savez pas ce que c'est, ne le validez pas. </para></listitem></varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Astuce d'affichage du jour</guilabel></term>
|
||||
<listitem><para> Vérifiez cette boîte pour avoir <guilabel>l'astuce du jour</guilabel> à chaque démarrage. Les astuces sont montrés aléatoirement de la base de
|
||||
&app;.
|
||||
</para>
|
||||
|
||||
<tip><para><guilabel>L'astuce du jour</guilabel> est susceptible d'être utile pour le nouvel utilisateur de &app;.
|
||||
</para></tip>
|
||||
</listitem></varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Dates</guilabel></term>
|
||||
|
||||
<listitem>
|
||||
<para> Choisissez le format d'affichage pour les dates à partir des formats disponibles énumérés dans ce menu.
|
||||
</para>
|
||||
|
||||
<tip><para>Les formats d'affichage disponibles sont spécifiques à une langue. Selon le displayer &app; pour votre langue, vous pouvez ou ne pouvez pas avoir beaucoup de choix.
|
||||
</para></tip>
|
||||
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Barre d'outils et Barre de Status</guilabel></term>
|
||||
<listitem>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term><guilabel>Barre d'outils</guilabel></term>
|
||||
<listitem><para> Sélectionne l'affichage des icônes de la barre d'outils. Les <guilabel>paramètres GNOME
|
||||
</guilabel> seront utilisés par &app;. Il est possible d'afficher seulement les icônes, seulement le texte ou encore d'afficher les deux.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term><guilabel>Barre de Status</guilabel></term>
|
||||
<listitem><para> Sélectionne ce qui est affiché dans la barre de status. Il est possible d'afficher le nom de l'individu seul, accompagné de l'identifiant Gramps ou aussi le lien entre la personne sélectionnée et le probant (individu origine de la recherche
|
||||
généalogique ascendante). Cette dernière option n'est correctement rédigée qu'en langue Anglaise pour le moment.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect2>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="gramps-prefs-other">
|
||||
<title>D'autres personnalisations</title>
|
||||
|
||||
<para>Sans compter que d'autres <guilabel>Préférences</guilabel> sont disponibles dans &app;.Pour différentes raisons ils ont été rendus plus aisément accessibles, comme énuméré ci-dessous.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term>Rédacteur de Colonne</term>
|
||||
<listitem>
|
||||
<para>Les colonnes des vues de liste peuvent être ajoutées, enlevées, ou déplacées à nouveau dans un dialogue de <guilabel>rédacteur de colonne</guilabel>,
|
||||
voir <xref linkend="column-editor-fig"/>. Seulement des colonnes vérifiées seront montrées dans la vue. Pour changer leur ordre, glisser n'importe quelle colonne à son endroit désiré à l'intérieur de la fenêtre. Cliquer sur <guibutton>Valider</guibutton>
|
||||
reflétera les changements de la vue appropriée. Pour appeler la fenêtre d'édition de colonne choisissez<menuchoice><guimenu>Edition</guimenu><guimenuitem>
|
||||
Editeur de Colonne...</guimenuitem></menuchoice>.
|
||||
</para>
|
||||
|
||||
<tip>
|
||||
<para>L'<guilabel>éditeur de Colonne</guilabel> est disponible et travaille de la même manière pour toutes les vues. Spécifiquement, elle est disponible pour la vue des Individus, vue de famille (liste d'enfants), vue des sources, vue des Lieux et vue des médias.</para> </tip>
|
||||
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Réglage de la personne de référence</term>
|
||||
<listitem><para>La personne de référence est la personne qui devient active
|
||||
quand le bouton <guibutton>personne de référence</guibutton> est utilisé
|
||||
ou le menu contextuel (clic-droit)</para>
|
||||
|
||||
<para>Pour éditer la personne de référence, sélectionner la personne désirée puis choisissez
|
||||
<menuchoice><guimenu>Edition</guimenu><guimenuitem>personne de référence...</guimenuitem></menuchoice>.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
<varlistentry><term>Ajustement des commandes de visionnement</term>
|
||||
<listitem> Les Barre d'outils, Barre de Status et Filtres (vue des Individus seulement) sont ajustables dans
|
||||
<guimenu>Affichage</guimenu>.
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect1>
|
||||
|
||||
<sect1 id="gramps-prefs-adv">
|
||||
<title>Manipulation avançée des préférences</title>
|
||||
|
||||
<warning><para>Le contenu de cette section est en dehors de la portée d'un utilisateur général de &app;.
|
||||
Si vous continuez, vous pouvez endommager votre installation de &app; Faites attention. VOUS AVEZ ÉTÉ AVERTIS!
|
||||
</para></warning>
|
||||
|
||||
<para>Par défaut, &app; stocke ses préférences en utilisant le système gconf2. Toutes les préférences utilisés dans cette version de &app;
|
||||
&app; sont stockés dans les sous-répertoires <filename>/apps/gramps/</filename> L'accès aux clefs peut être fait avec
|
||||
<command>gconftool-2</command> en ligne de commande, ou
|
||||
<command>gconf-editor</command> Outil de GUI.
|
||||
</para>
|
||||
|
||||
<para>Toutes les clefs sont documentées, et les mécanismes d'avis sont employés comme appropriés. Par conséquent, la mise à jour des clefs à l'extérieur de &app;
|
||||
devrait mener à mettre à jour &app; en temps réel, sans le remettre en marche nécessairement.</para>
|
||||
</sect1>
|
||||
|
||||
</chapter>
|
||||
|
@ -1,398 +1,266 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<appendix id="faq">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- =============== Appendices Subsection ================ -->
|
||||
<sect2 id="faq">
|
||||
<title>Foire Aux Questions</title>
|
||||
<para>Cette annexe répond aux questions fréquemment posées sur les listes
|
||||
de discussions et les forums. Elle n'est évidemment pas limitative.
|
||||
Si vous souhaitez y ajouter des questions et/ou des réponses,
|
||||
envoyez un message électronique à
|
||||
<ulink url="mailto:gramps-devel@lists.sf.net" type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
<title>Questions Fréquemment Posées</title>
|
||||
<para>Cette annexe répond aux questions les plus fréquemment posées sur les listes de discussions et les forums. Elle n'est évidemment pas limitative. Si vous souhaitez ajouter des questions et/ou des réponses, envoyez un message électronique à <ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Qu'est ce que &app; ? </term>
|
||||
<listitem><para>&app; est le Système de Recherche et Analyse Généalogique
|
||||
(Genealogical Research and Analysis Management Program System).
|
||||
Autrement dit, c'est un programme personnel de généalogie qui vous permet
|
||||
de conserver, modifier et chercher dans des données généalogiques, avec
|
||||
l'aide de l'ordinateur.
|
||||
|
||||
<varlistentry><term>Qu'est ce que &app; ?</term>
|
||||
<listitem><para> &app; est un Système de Recherche et d'Analyse Généalogique (Genealogical Research and Analysis Management Program System). Autrement dit, c'est un
|
||||
programme personnel de généalogie qui vous permet de conserver, modifier et chercher dans des données généalogiques, avec l'aide de l'ordinateur.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Où puis-je le trouver et que coûte-t'il ? </term>
|
||||
<varlistentry><term>D'où l'obtiens-je et combien coûte-t-il?</term>
|
||||
<listitem><para>
|
||||
&app; peut être téléchargé gratuitement depuis le site Internet
|
||||
<ulink url="http://sf.net/projects/gramps" type="http">http://sf.net/projects/gramps</ulink>.
|
||||
C'est un projet Open Source publié sous la licence GNU GPL.
|
||||
Vous avez complètement accès aux programmes sources et vous avez
|
||||
le droit de redistribuer le programme et les sources librement.
|
||||
&app; peut être téléchargé gratuitement depuis le site Internet <ulink url="http://sf.net/projects/gramps"
|
||||
type="http">http://sf.net/projects/gramps</ulink> C'est un projet Open Source publié sous la licence GNU GPL. Vous avez complètement accès aux programmes sources et vous avez le droit de redistribuer le programme et les sources librement.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Fonctionne-t'il avec Windows (tm) ? </term>
|
||||
<varlistentry><term>Fonctionne-t'il avec Windows (tm)?</term>
|
||||
<listitem><para>
|
||||
Non. &app; utilise les librairies GTK et GNOME. Les librairies GTK
|
||||
ont été portées sous Windows, mais pas les librairies GNOME.
|
||||
Cependant, cela pourrait changer un jour.
|
||||
Non. &app; utilise les librairies GTK et GNOME. Les librairies GTK ont été portées sous Windows, mais pas les librairies GNOME. Cependant, cela pourrait changer un jour.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Fonctionne-t'il sur le Macintosh ? </term>
|
||||
<varlistentry><term>Fonctionne-t'il sur Macintosh</term>
|
||||
<listitem><para>
|
||||
Le projet Fink (<ulink url="http://fink.sf.net"
|
||||
type="http">http://fink.sf.net</ulink>) a porté une vieille version de
|
||||
&app; (0.8.0) sur OSX. La version Mac OSX n'est pas directement supportée
|
||||
par le projet &app;, surtout parce qu'aucun développeur de &app;
|
||||
n'a accès à Mac OSX.</para>
|
||||
|
||||
<para>La version Gnome 2 de &app; (0.9.x) n'a pas été portée par le
|
||||
projet Fink. Vous êtes priés de contacter le projet Fink pour plus
|
||||
d'information.
|
||||
</para></listitem>
|
||||
<ulink url="http://fink.sourceforge.net"
|
||||
type="http">Le projet Fink </ulink> a porté
|
||||
<ulink url="http://fink.sourceforge.net/pdb/package.php/gramps"
|
||||
type="http"> quelques anciennes versions </ulink> de
|
||||
&app; à OSX (tm). La version Mac OSX n'est pas directement supportée par le projet &app; surtout parce qu'aucun développeur de &app; n'a accès à
|
||||
Mac OSX. La version Gnome 2 de &app; (0.9.x) n'a pas été portée par le projet Fink. Vous êtes priés de contacter le projet Fink pour plus d'information.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Fonctionne-t'il avec KDE ? </term>
|
||||
<varlistentry><term>Fonctionne-t'il avec KDE ?</term>
|
||||
<listitem><para>
|
||||
Oui, à condition que les librairies GNOME nécessaires soient installées.
|
||||
Oui, à condition que les librairies GNOME nécessaires soient installées.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Dois-je vraiment installer GNOME ? </term>
|
||||
<listitem><para>Oui, mais il n'est pas obligatoire d'utiliser le bureau GNOME.
|
||||
<varlistentry><term>Dois-je vraiment installer GNOME ?</term>
|
||||
<listitem><para> Oui, mais il n'est pas obligatoire d'utiliser le bureau GNOME.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>De quelle version de GNOME ai-je besoin ? </term>
|
||||
<varlistentry><term>De quelle version de GNOME ai-je besoin ?</term>
|
||||
<listitem><para>
|
||||
Les dernières versions de &app; (0.9.0 et suivantes) ont besoin de GNOME 2.0 ou ultérieures.
|
||||
Les versions précédentes utilisaient GNOME 1.X.
|
||||
Cette version de &app; exige GNOME 2,8,0 ou plus haut. Les versions précédentes des séries 1.0.x ont exigé GNOME 2,0.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>&app; est-il compatible avec
|
||||
d'autres logiciels de généalogie ? </term>
|
||||
<varlistentry><term>&app; est-il compatible avec d'autres logiciels de généalogie ? (GenApps)</term>
|
||||
<listitem><para>
|
||||
&app; fait tout ce qui est possible pour rester compatible avec
|
||||
le format de données généalogique standard Gedcom. Nous avons
|
||||
des filtres de lecture et d'écriture pour les fichiers Gedcom. </para>
|
||||
&app; fait tout ce qui est possible pour rester compatible avec le format de données généalogique standard Gedcom. Nous avons des filtres de lecture et d'écriture pour les fichiers Gedcom. </para>
|
||||
|
||||
<para>
|
||||
Il faut savoir que le format Gedcom est mal utilisé. Chaque logiciel
|
||||
de généalogie a sa propre variante de Gedcom. Quand nous avons connaissance
|
||||
d'une variante, il est très rapide de créer les filtres de lecture et d'écriture.
|
||||
Par contre, trouver les variantes demande d'avoir l'information de la part
|
||||
des utilisateurs. N'hésitez pas à nous signaler une variante non supportée
|
||||
par &app;, nous ferons ensuite de notre mieux pour la supporter !
|
||||
<para>
|
||||
Il faut savoir que le format Gedcom est mal utilisé. Chaque logiciel de généalogie a sa propre variante de Gedcom. Quand nous avons connaissance d'une variante, il est très rapide de créer les filtres de lecture et d'écriture. Par contre, trouver les variantes demande d'avoir l'information de la part des
|
||||
utilisateurs. N'hésitez pas à nous signaler une variante non supportée par &app;,
|
||||
, nous ferons ensuite de notre mieux pour la supporter !
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>&app; peut-il lire les fichiers créés par le logiciel de
|
||||
généalogie SuperGenWare ? </term>
|
||||
<listitem><para>Voir la question précédente.
|
||||
<varlistentry><term>&app; peut-il lire des fichiers créés par GenApp X?</term>
|
||||
<listitem><para> Voir ci-dessus.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>&app; peut-il écrire les fichiers lisibles par le logiciel de
|
||||
généalogie SuperGenWare ?</term>
|
||||
<listitem><para>Voir au-dessus..
|
||||
<varlistentry><term>&app; peut-il écrire des fichiers pour GenApp X?</term>
|
||||
<listitem><para> Voir ci-dessus.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>&app; peut-il imprimer mon arbre généalogique ? </term>
|
||||
<varlistentry><term>&app; peut-il imprimer mon arbre généalogique?</term>
|
||||
<listitem><para>
|
||||
Oui. Chacun a son idée sur comment doit être dessiné un arbre généalogique.
|
||||
Certains pensent qu'il faut montrer toutes les familles depuis un ancêtre lointain
|
||||
jusqu'à la racine de l'arbre, d'autres qu'il faut remonter de la personne
|
||||
actuelle et montrer tous ses ancêtres et leurs familles. D'autres encore
|
||||
pensent à un tableau, à des éditions en mode texte... </para>
|
||||
Oui. Chacun a son idée sur comment doit être dessiné un arbre généalogique. Certains pensent qu'il faut montrer toutes les familles depuis un ancêtre lointain jusqu'à la racine de l'arbre, d'autres qu'il faut remonter de la personne actuelle et montrer tous ses ancêtres et leurs familles. D'autres encore pensent à un tableau, à des éditions en mode texte.</para>
|
||||
|
||||
<para>
|
||||
&app; peut faire tout cela, en des présentations très variées ainsi que d'autres encore.
|
||||
Plus généralement, le principe de greffons (plugins) permet aux utilisateurs
|
||||
et donc à vous-même, de créer vos propres greffons qui créent vos propres rapports,
|
||||
états ou sorties papier pour aider vos recherches.
|
||||
<para>
|
||||
&app; peut faire tout cela, en des présentations très variées ainsi que d'autres encore. Plus généralement, le principe de greffons (plugins) permet aux utilisateurs et donc à vous-même, de créer vos propres greffons qui créent vos propres rapports, états ou sorties papier pour aider vos recherches.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Quel est le format des sorties d'impression de &app; ? </term>
|
||||
<varlistentry><term>Dans quels formats &app; peut-il produire ses rapports? </term>
|
||||
<listitem><para>
|
||||
Les sorties de texte pour impression sont disponibles dans les formats HTML, PDF, AbiWord,
|
||||
KWord, LaTeX, RTF, et OpenOffice. Les impressions graphiques (dessins et diagrammes)
|
||||
sont disponibles en formats PostScript, PDF, SVG, OpenOffice et GraphViz.
|
||||
Les formats de texte disponibles dans les formats sont : HTML, PDF, AbiWord, KWord, LaTeX, RTF, et OpenOffice. Les impressions graphiques (dessins et diagrammes) sont disponibles en formats PostScript, PDF, SVG, OpenOffice et GraphViz.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>&app; est-il compatible avec Internet ? </term>
|
||||
<listitem><para>
|
||||
&app; peut garder des liens web et envoyer votre navigateur web vers eux.
|
||||
Il peut importer des données que vous téléchargez depuis le Réseau. Il
|
||||
peut exporter des données que vous y enverrez. Il connait les formats
|
||||
de fichiers courants (JPEG, PNG et GIF pour les images, MP3, OGG et
|
||||
WAV pour les sons, QuickTime, MPEG et AVI pour les video). A part cela,
|
||||
il n'y a pas grand chose d'autre qu'un généalogiste puisse faire avec
|
||||
Internet :-) .
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Puis-je créer une édition, un filtre ou un machin ? </term>
|
||||
<listitem><para>
|
||||
Oui. Il y a beaucoup de façons de personnaliser &app;. Vous pouvez
|
||||
modifier ou créer les modèles d'impressions. Vous avez ainsi le contrôle des
|
||||
polices de caractères, des couleurs et d'éléments de la disposition
|
||||
des impressions. Vous pouvez aussi utiliser les réglages de &app;
|
||||
pour choisir les informations servant à préparer l'impression.
|
||||
En plus de tout cela, vous pouvez créer vos propres filtres.
|
||||
Cela sert à sélectionner des individus selon vos besoins.
|
||||
Vous pouvez combiner ces filtres pour constituer des filtres
|
||||
plus élaborés. Enfin, vous pouvez créer vos greffons. Ils peuvent
|
||||
servir à définir des rapports, des outils d'aide à la recherche
|
||||
ou encore des filtres de lecture ou d'écriture de données. Cela
|
||||
demande la connaissance de la programmation en Python.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Quels standards &app; supporte-t'il ? </term>
|
||||
<listitem><para>
|
||||
L'amusant à propos des standards est qu'on ne risque pas d'en manquer :-).
|
||||
&app; supporte les variantes suivantes de Gedcom :
|
||||
GEDCOM5.5, Brother's Keeper, Family Origins, Familty Tree Maker, Ftree,
|
||||
GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion et
|
||||
Visual Genealogie.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Quelle est la taille maximale d'une base de données
|
||||
&app; ? </term>
|
||||
<listitem><para>
|
||||
&app; n'a pas de limite stricte sur la taille de sa base de données.
|
||||
Il y a seulement des limites pratiques. Pour le moment, &app; charge
|
||||
ses données en mémoire, qui devient alors la ressource critique.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Combien de personnes peut-on mettre dans une base
|
||||
de données &app; ? </term>
|
||||
<listitem><para>
|
||||
Nous avons expérimenté que &app; tient jusqu'environ 15000 personnes
|
||||
sur une configuration moyenne. Encore une fois, cela dépend en fait
|
||||
de la taille mémoire du système.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Pourquoi &app; est-il si lent ? </term>
|
||||
<listitem><para>
|
||||
Si &app; vous parait si lent, c'est probablement que vous avez une
|
||||
grosse base de données. Pour le moment, &app; charge les données en
|
||||
mémoire. En conséquence, les temps de réponse s'allongent pour de gros
|
||||
volumes de données. En particulier, le résultat sera catastrophique
|
||||
si les données de &app; occasionnent de la pagination (swap).
|
||||
</para>
|
||||
<para>
|
||||
Ceci sera traité dans la première version stable après le version 1.0 .
|
||||
En attendant, ajouter de la mémoire peut tout changer mais nous sommes
|
||||
conscients que ce n'est pas la meilleure façon de traiter le problème.
|
||||
Si vous souhaitez aider à l'implémentation avec une vraie base de donnée,
|
||||
n'hésitez pas à nous contacter par courrier électronique à
|
||||
<ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Ma base de données est vraiment très grosse.
|
||||
Y-a t'il un moyen de la charger sans tout charger en mémoire ? </term>
|
||||
<listitem><para>
|
||||
Actuellement, il n'y a pas d'autre moyen. C'est notre plus grosse
|
||||
priorité après la finition de la version 1.0 . L'utilisation d'une
|
||||
vraie base de données se fera dans la prochaine version stable (1.2),
|
||||
qui améliorera grandement les performances, tant en vitesse
|
||||
d'exécution qu'en empreinte mémoire.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Je veux relancer le dialogue d'installation (druid). Comment fais-je ? </term>
|
||||
<listitem><para>
|
||||
&app; gère un état dans les données de configuration GNOME pour mémoriser le fait
|
||||
que le dialogue d'installation a été exécuté. Ceci peut se faire par la commande
|
||||
suivante :</para>
|
||||
<para><command>gconftool-2 -u /apps/gramps/startup</command>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Pourquoi les caractères non latins sont-ils mal
|
||||
affichés dans les impressions PDF ou Postscript ? </term>
|
||||
<listitem><para>
|
||||
C'est un problème connu. Le Postscript (et le PDF) utilisent des
|
||||
polices de caractères internes qui correspondent bien au jeu de caractère
|
||||
latin-1. En principe, on pourrait utiliser n'importe quel police de caractères
|
||||
mais il faudrait l'embarquer dans le fichier. C'est délicat parce que
|
||||
chaque système gère à sa façon les polices et leur définition. </para>
|
||||
|
||||
<para>
|
||||
Ce devrait être réglé quand nous serons passés avec Gnome-print.
|
||||
Entre temps, une solution de contournement est de générer des éditions
|
||||
en format OpenOffice.org, puis de générer le PDF depuis OpenOffice.org.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Pourquoi ne peut-on pas ajouter, enlever ou modifier
|
||||
des colonnes aux listes dans les Vues Individus et Famille ? </term>
|
||||
<listitem><para>
|
||||
Ceci sera traité quand l'erreur dans TreeModelSort de pygtk sera corrigée
|
||||
(voir <ulink url="http://bugzilla.gnome.org/show_bug.cgi?id=125172"
|
||||
type="http">http://bugzilla.gnome.org/show_bug.cgi?id=125172</ulink>
|
||||
pour les détails).
|
||||
Dès que la correction sera validée et mise dans pygtk, nous ajouterons
|
||||
la capacité d'ajouter, retirer et éditer des colonnes avec tri.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Je souhaiterais contribuer à &app; en écrivant
|
||||
mon édition favorite. Comment fais-je ? </term>
|
||||
<listitem><para>
|
||||
La façon la plus simple pour écrire de nouveaux rapports, filtres
|
||||
ou outils est d'en copier un qui existe déjà puis de le modifier.
|
||||
Si cela vous convient, tant mieux ! Si votre idée ne rentre
|
||||
dans la logique d'aucun outil existant, le <ulink
|
||||
url="http://gramps.sourceforge.net/phpwiki/index.php/GrampsDevelopersPage"
|
||||
type="http">lien</ulink> peut vous aider à écrire un greffon en partant de rien.
|
||||
|
||||
Si vous avez besoin de plus d'aide, ou si vous voulez discuter de
|
||||
votre idée avec nous, n'hésitez pas à nous contacter par messagerie
|
||||
électronique à <ulink
|
||||
url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Pour tester votre réalisation, vous pouvez sauver le greffon dans le répertoire
|
||||
<replaceable>$HOME/.gramps/plugins</replaceable> où il devrait être
|
||||
trouvé par &app; et chargé lors du lancement.
|
||||
Un greffon bien écrit s'enregistre lui-même dans &app; et crée son
|
||||
entrée dans un menu.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Si votre greffon vous satisfait et que vous voulez contribuer vers
|
||||
le projet &app;, vous êtes le bienvenu : contactez-nous à
|
||||
<ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>J'ai trouvé une erreur et je veux qu'elle soit
|
||||
corrigée tout de suite ! Que puis-je faire ? </term>
|
||||
<varlistentry><term>&app; est-il compatible avec Internet?</term>
|
||||
<listitem><para>
|
||||
La meilleure chose à faire est de corriger l'erreur, puis d'envoyer
|
||||
la correction à
|
||||
<ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink> :-)</para>
|
||||
|
||||
<para>
|
||||
Autrement, la meilleure chose ensuite est d'envoyer un bon
|
||||
rapport d'anomalie. Ceci peut se faire de deux façons différentes :
|
||||
(1) envoyez votre rapport à
|
||||
<ulink url="mailto:gramps-bugs@lists.sf.net"
|
||||
type="mailto">gramps-bugs@lists.sf.net</ulink>
|
||||
ou (2) enregistrez votre rapport avec les système de suivi d'erreur à
|
||||
<ulink url="http://sf.net/tracker/?group_id=25770" type="http">
|
||||
http://sf.net/tracker/?group_id=25770&atid=385137</ulink>
|
||||
(cette fonction est aussi disponible en choisissant
|
||||
<menuchoice><guisubmenu>Aide</guisubmenu><guimenuitem>Signaler une erreur
|
||||
</guimenuitem></menuchoice> dans le menu principal de &app;). </para>
|
||||
|
||||
<para>Un bon rapport d'anomalie devrait comprendre : </para>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem><para>
|
||||
La version de &app; que vous utilisez (disponible par l'entrée de menu
|
||||
<menuchoice><guisubmenu>Aide</guisubmenu>
|
||||
<guimenuitem>A propos</guimenuitem></menuchoice>).
|
||||
&app; cpeut garder des liens web et envoyer votre navigateur web vers eux. Il peut importer des données que vous téléchargez depuis le Réseau. Il peut exporter des données que vous y enverrez. Il connait les formats de fichiers courants (JPEG, PNG et GIF pour les images, MP3, OGG et WAV pour les sons, QuickTime, MPEG et AVI pour les video). A part cela, il n'y a pas grand chose d'autre qu'un généalogiste puisse faire avec Internet :-) .
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<listitem><para>
|
||||
La langue d'utilisation de &app; (faites </para>
|
||||
<para><command>echo $LANG</command></para>
|
||||
<para>dans votre terminal de commande).
|
||||
<varlistentry><term>Puis-je créer une édition, un filtre ou un machin ?</term>
|
||||
<listitem><para>
|
||||
Oui. Il y a beaucoup de façons de personnaliser &app;. Vous pouvez modifier ou créer les modèles d'impressions. Vous avez ainsi le contrôle des polices de caractères, des couleurs et d'éléments de la disposition des impressions. Vous pouvez aussi utiliser les réglages de &app;
|
||||
pour choisir
|
||||
les informations servant à préparer l'impression. En plus de tout cela, vous pouvez créer vos propres filtres. Cela sert à sélectionner des individus selon vos besoins. Vous pouvez combiner ces filtres pour constituer des filtres plus élaborés. Enfin, vous pouvez créer vos greffons. Ils peuvent servir à définir des rapports, des outils d'aide à la recherche ou encore des filtres de lecture ou d'écriture de données. Cela demande la connaissance de la programmation en Python.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<listitem><para>
|
||||
Les symptomes indiquant que c'est effectivement une erreur.
|
||||
<varlistentry><term>Quels standards &app; supporte-t'il ?</term>
|
||||
<listitem><para>
|
||||
L'amusant à propos des standards est qu'on ne risque pas d'en manquer :-). &app; supporte les variantes suivantes de Gedcom : GEDCOM5.5, Brother's Keeper, Family Origins, Familty Tree Maker, Ftree, GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion et Visual Genealogie.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<listitem><para>
|
||||
Tous les messages de trace, d'erreur ou avertissement
|
||||
qui ont été affichés dans le terminal ou dans une fenêtre de trace séparée.
|
||||
<varlistentry><term>Quelle est la taille maximale d'une base de données &app; ?</term>
|
||||
<listitem><para>
|
||||
&app; n'a pas de limite stricte sur la taille de sa base de données. Il y a seulement des limites pratiques. Pour le moment, &app;
|
||||
charge ses données en mémoire, qui devient alors la ressource critique.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</itemizedlist>
|
||||
<varlistentry><term>Combien de personnes peut-on mettre dans une base de données &app; ?</term>
|
||||
<listitem><para>
|
||||
Nous avons expérimenté que &app; tient jusqu'environ 15000 personnes sur une configuration moyenne. Encore une fois, cela dépend en fait de la taille mémoire du système
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<para>La plupart des erreurs peuvent être corrigées rapidement
|
||||
quand suffisamment d'information est fournie. Pour garantir
|
||||
la qualité de l'information, nous vous invitons à suivre
|
||||
vos rapports d'anomalie. En particulier, si vous enregistrez
|
||||
un rapport sur le système de suivi sf.net bug, PAR PITIE enregistrez-vous
|
||||
sur sf.net avant de soumettre votre rapport
|
||||
(enregistrez-vous sur un compte libre si vous n'en avez pas encore).
|
||||
Nous aurons ainsi un moyen de vous joindre si nous avons besoin de plus d'information.
|
||||
Si vous préférez enregistrer un rapport de façon anonyme, au moins
|
||||
surveillez souvent si votre page de rapport a quelque chose de nouveau,
|
||||
comme ce sera probablement le cas. </para>
|
||||
<varlistentry><term>Pourquoi &app; est-il si lent ?</term>
|
||||
<listitem><para> Essayez juste la version en cours, &appversion;.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<para>Si tout cela ne vous parait pas clair, suivez
|
||||
<ulink url="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"
|
||||
type="http">ce lien.</ulink>
|
||||
<varlistentry><term>Ma base de données est vraiment très grosse. Y-a t'il un moyen de la charger sans tout charger en mémoire ?</term>
|
||||
<listitem><para>
|
||||
&app; ne charge plus toutes les données en mémoire, ce qui lui permet de fonctionner avec une base de données beaucoup plus grande qu'avant.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Je veux relancer le dialogue d'installation (assistant). Comment faire ?</term>
|
||||
<listitem><para>
|
||||
&app; gère un état dans les données de configuration GNOME pour mémoriser le fait que le dialogue d'installation a été exécuté. Ceci peut se faire par la commande suivante :</para>
|
||||
|
||||
<para><command>gconftool-2 -u /apps/gramps/behavior/startup</command>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Pourquoi est-ce que des caractères non-latins sont montrés comme ordures dans des rapports de PDF/ps?</term>
|
||||
<listitem><para> C'est une limitation des polices des formats de pdf. Pour imprimer le texte non-latin, utilisez l'impression de GNOME.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Pourquoi ne peut on pas modifier les colonnes dans la vue des Familles et des Individus ?</term>
|
||||
<listitem><para> Maintenant vous pouvez! Essayez juste la version en cours, &appversion;.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Je souhaiterais contribuer à &app; en écrivant mon rapport favoris. Comment faire ?</term>
|
||||
<listitem><para>
|
||||
La façon la plus simple pour écrire de nouveaux rapports, filtres ou outils est d'en copier un qui existe déjà puis de le modifier. Si cela vous convient, tant mieux ! Si votre idée ne rentre dans la logique d'aucun outil existant, <ulink
|
||||
url="http://gramps.sourceforge.net/phpwiki/index.php/GrampsDevelopersPage"
|
||||
type="http">ce lien</ulink>peut fournir de l'aide en écrivant votre propre plugin à partir de zéro. Si vous avez besoin de plus d'aide ou vous voudriez discuter de votre idée avec nous, n'hésitez à nous contacter <ulink
|
||||
url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Pour tester votre réalisation, vous pouvez sauver le plugin dans le répertoire
|
||||
<replaceable>$HOME/.gramps/plugins</replaceable> où il devrait être trouvé par &app; et chargé lors du lancement. Un plugin bien écrit s'enregistre lui-même dans &app; et crée son entrée dans un menu.</para>
|
||||
|
||||
<para>
|
||||
Si votre plugin vous satisfait et que vous voulez contribuer vers le projet &app;, vous êtes le bienvenu : contactez-nous à <ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
|
||||
<varlistentry><term>J'ai trouvé une erreur et je veux qu'elle soit corrigée tout de suite! Que puis-je faire ?</term>
|
||||
<listitem><para>
|
||||
La meilleure chose à faire est de corriger l'erreur, puis d'envoyer la correction
|
||||
<ulink url="mailto:gramps-devel@lists.sf.net"
|
||||
type="mailto">gramps-devel@lists.sf.net</ulink> :-)</para>
|
||||
|
||||
<para>Autrement, la meilleure chose ensuite est d'envoyer un bon rapport d'anomalie. Ceci peut se faire de deux façons différentes : (1) envoyez votre rapport à
|
||||
<ulink url="mailto:gramps-bugs@lists.sf.net"
|
||||
type="mailto">gramps-bugs@lists.sf.net</ulink>
|
||||
ou (2) enregistrez votre rapport avec les système de suivi d'erreur à
|
||||
<ulink url="http://sf.net/tracker/?group_id=25770" type="http">
|
||||
http://sf.net/tracker/?group_id=25770&atid=385137</ulink>
|
||||
(cette fonction est également disponible sous
|
||||
<menuchoice><guisubmenu>Aide</guisubmenu><guimenuitem>Signaler une erreur</guimenuitem></menuchoice> ans le menu principal de &app;). </para>
|
||||
|
||||
<para>Un bon rapport d'anomalie devrait comprendre : </para>
|
||||
|
||||
<itemizedlist>
|
||||
|
||||
<listitem><para>
|
||||
La version de &app; que vous utilisez <menuchoice><guisubmenu>Aide</guisubmenu>
|
||||
<guimenuitem>A propos</guimenuitem></menuchoice> menu item).
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
La langue d'utilisation de &app; (faites </para>
|
||||
<para><command>echo $LANG</command></para>
|
||||
<para>dans votre terminal).
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
Les symptomes indiquant que c'est effectivement une erreur.
|
||||
</para></listitem>
|
||||
|
||||
<listitem><para>
|
||||
Tous les messages de trace, d'erreur ou avertissement qui ont été affichés dans le terminal ou dans une fenêtre de trace séparée.
|
||||
</para></listitem>
|
||||
|
||||
</itemizedlist>
|
||||
|
||||
<para>La plupart des erreurs peuvent être corrigées rapidement quand suffisamment d'information est fournie. Pour garantir la qualité de l'information, nous vous invitons à suivre vos rapports d'anomalie. En particulier, si vous enregistrez un rapport sur le système de suivi sf.net bug, PAR PITIE enregistrez-vous sur sf.net avant de soumettre votre rapport
|
||||
(enregistrez-vous sur un compte libre si vous n'en avez pas encore). Nous aurons ainsi un moyen de vous joindre si nous avons besoin de plus d'information. Si vous préférez enregistrer un rapport de façon anonyme, au moins surveillez souvent si votre page de rapport a quelque chose de nouveau, comme ce sera probablement le cas.</para>
|
||||
|
||||
<para>Si tout cela ne vous parait pas clair, suivez
|
||||
<ulink url="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"
|
||||
type="http">ce lien.</ulink>
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Il est évident que &app; doit absolument
|
||||
devenir une application (client-serveur/web/PHP/weblog/Javascript/C++/distribuée/KDE/Motif/Tcl/Win32/C#/Je-ne-sais-pas-encore-quoi).
|
||||
Quand cela va-t'il se faire ? </term>
|
||||
<varlistentry><term>Il est évident que &app; doit absolument devenir une application (clientserveur/ web/PHP/weblog/Javascript/C++/ distribuée/KDE/Motif/Tcl/Win32/C#/Jene- sais-pas-encore-quoi). Quand cela va-t'il se faire ?</term>
|
||||
<listitem><para>
|
||||
Le meilleur moyen que cela se fasse est de le faire vous-même.
|
||||
Comme &app; est libre et open-source, personne ne vous interdit
|
||||
de prendre tout le code et de continuer le développement dans
|
||||
la direction qui vous convient. Vous devrez donner un autre nom
|
||||
à votre projet pour éviter les confusions avec la suite de &app;.
|
||||
Si vous voulez que le projet &app; vous fournisse des avis,
|
||||
de l'expertise, des outils ou n'importe quoi, nous serons heureux
|
||||
de coopérer avec votre projet, pour assurer la compatibilité
|
||||
ou bien des opérations de lecture-écriture de et vers le format
|
||||
de données de votre projet. </para>
|
||||
Le meilleur moyen que cela se fasse est de le faire vous-même. Comme
|
||||
&app; iest libre et open-source, personne ne vous interdit de prendre tout le code et de continuer le développement dans la direction qui vous convient. Vous devrez donner un autre nom à votre projet pour éviter les confusions avec la suite de &app;
|
||||
development. Si vous voulez que le projet &app; pvous fournisse des avis, de l'expertise, des outils ou n'importe quoi, nous serons heureux de coopérer avec votre projet, pour assurer la compatibilité ou bien des opérations de lecture-écriture de et vers le format de données de votre projet. </para>
|
||||
|
||||
<para>
|
||||
Cependant, si vous souhaitez que le projet &app; suive votre
|
||||
stratégie, vous devrez convaincre les développeurs de &app;
|
||||
que votre stratégie est bonne pour &app; et meilleure que
|
||||
celle prévue. </para>
|
||||
<para>
|
||||
Cependant, si vous souhaitez que le projet &app; suive votre stratégie, vous devrez convaincre les développeurs de &app; que votre stratégie est bonne pour &app; et meilleure que celle prévue.</para>
|
||||
|
||||
<para>
|
||||
TRUC : si les développeurs de &app; ne sont pas convaincus
|
||||
après trois messages envoyés à gramps-devel, peut-être vous feriez mieux
|
||||
d'aller seul plutôt qu'avec un groupe d'idiots qui ne
|
||||
peuvent pas comprendre votre génie :-) .
|
||||
<tip><para>
|
||||
si les développeurs de &app; ne sont pas convaincus après trois messages envoyés à gramps-devel, peut-être vous feriez mieux d'aller seul plutôt qu'avec un groupe d'idiots qui ne peuvent pas comprendre votre génie
|
||||
:-).
|
||||
|
||||
</para></listitem>
|
||||
</para></tip></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect2>
|
||||
</appendix>
|
||||
|
BIN
doc/gramps-manual/fr/figures/column-editor.png
Normal file
After Width: | Height: | Size: 8.2 KiB |
BIN
doc/gramps-manual/fr/figures/comp-people.png
Normal file
After Width: | Height: | Size: 22 KiB |
BIN
doc/gramps-manual/fr/figures/date-selection.png
Normal file
After Width: | Height: | Size: 9.4 KiB |
BIN
doc/gramps-manual/fr/figures/find-people.png
Normal file
After Width: | Height: | Size: 23 KiB |
BIN
doc/gramps-manual/fr/figures/merge-people.png
Normal file
After Width: | Height: | Size: 7.0 KiB |
BIN
doc/gramps-manual/fr/figures/merge-plc.png
Normal file
After Width: | Height: | Size: 7.1 KiB |
BIN
doc/gramps-manual/fr/figures/merge-src.png
Normal file
After Width: | Height: | Size: 12 KiB |
BIN
doc/gramps-manual/fr/figures/prefs.png
Normal file
After Width: | Height: | Size: 8.6 KiB |
BIN
doc/gramps-manual/fr/figures/scratch-pad.png
Normal file
After Width: | Height: | Size: 8.1 KiB |
@ -1,376 +1,365 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<appendix id="append-filtref">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
This document 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 document 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$ -->
|
||||
<!-- =============== Appendices Subsection ================ -->
|
||||
<sect2 id="append-filtref">
|
||||
<title>Documentation de référence sur les règles de filtrage</title>
|
||||
<para>Cette annexe décrit les fonctions de filtrage actuellement définies
|
||||
dans &app;. Ces règles sont disponibles quand vous créez des filtres
|
||||
personnalisés. Elles sont ici présentées par catégories.
|
||||
|
||||
<title>Les règles de filtrage</title>
|
||||
<para>Cette annexe décrit les fonctions de filtrage actuellement définies dans &app; (voir <xref linkend="tools-util-cfe"/>. Ces règles sont présentées ici par catégories.
|
||||
</para>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-general">
|
||||
<sect1 id="filtref-general">
|
||||
<title>Filtres généraux</title>
|
||||
<para>Cette catégorie comprend les fonctions les plus générales : </para>
|
||||
<para>Cette catégorie comprend les fonctions les plus générales :</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>A un enregistrement complet</term>
|
||||
<listitem><para> Cette règle accepte toutes les personnes
|
||||
dont l'enregistrement est marqué comme complet. Pour le moment,
|
||||
la complétude de l'enregistrement est marquée par le chercheur
|
||||
dans le dialogue <guilabel>Modifie Personne</guilabel>.
|
||||
<listitem><para>
|
||||
|
||||
Cette règle accepte toutes les personnes dont l'enregistrement est marqué comme complet. Pour le moment, la complétude de l'enregistrement est marquée par le chercheur dans le dialogue Modifie Personne.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Tout le monde</term>
|
||||
<listitem><para> Cette fonction accepte toutes les personnes de la base de données.
|
||||
Elle n'est pas très utile seule sauf pour tester. Par contre, elle
|
||||
sert en combinaison avec d'autres fonctions.
|
||||
<varlistentry><term>Individus ayant des noms incomplets</term>
|
||||
<listitem><para> Cette règle sélectionne toutes les personnes ayant des noms incomplets.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus marqués</term>
|
||||
<listitem><para> Cette règle sélectionne toutes les personnes qui sont sur la liste de signet.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Noms qui contiennent une chaîne</term>
|
||||
<listitem><para> Cette fonction sélectionne toutes les personnes
|
||||
dont l'identité contient la chaîne donnée. Par exemple,
|
||||
Jacques Dupont, Jean Dupond et seront sélectionnés par cette
|
||||
fonction, utilisée avec la valeur "pon".
|
||||
<listitem><para> Cette fonction sélectionne toutes les personnes dont l'identité contient la chaîne donnée. Par exemple, Jacques Dupont, Jean Dupond seront sélectionnés par cette fonction, utilisée avec la valeur "pon".
|
||||
Des chaînes séparées peuvent être utilisées pour le prénom, le nom de famille, le suffixe et le titre. La fonction sélectionne un individu quand toutes les chaînes non vides font partie du nom d'une personne. Si vous voulez utiliser une seule valeur, laissez les autres vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Tout le monde</term>
|
||||
<listitem><para> Cette fonction accepte toutes les personnes de la base de données. Elle n'est pas très utile seule sauf pour tester. Par contre, elle sert en combinaison avec d'autres fonctions.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus probablement en vie</term>
|
||||
<listitem><para> Cette règle sélectionne toutes les personnes dont les dates n'indiquent pas leur mort et qui ne sont pas anormalement vieilles, jugeant à leurs données disponibles de naissance et aujourd'hui.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus dont le nom contient</term>
|
||||
<listitem><para>Cette règle sélectionne toute personne dont le nom contient la valeur indiquée, complètement ou en partie. Par exemple, Marta Ericsdotter sera trouvée par la règle sous-chaîne= "eric" pour le nom de famille.
|
||||
</para>
|
||||
|
||||
<para> Des chaînes séparées peuvent être utilisées pour
|
||||
le prénom, le nom de famille, le suffixe et le titre.
|
||||
La fonction sélectionne un individu quand toutes les chaînes
|
||||
non vides font partie du nom d'une personne. Si vous voulez
|
||||
utiliser une seule valeur, laissez les autres vides.
|
||||
<para>Des valeurs séparées peuvent être employées pour le nom indiqué, le nom de famille, le suffixe, et le titre. La règle est efficace si et seulement si, toutes les valeurs non vides (partiellement) sont assorties par le nom d'une personne. Pour employer juste une valeur, laissez les autres valeurs vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A l'identifiant</term>
|
||||
<listitem><para> Cette fonction sélectionne la personne ayant
|
||||
exactement l'identifiant &app; donné.
|
||||
<listitem><para> Cette fonction sélectionne la personne ayant exactement l'identifiant &app; donné.
|
||||
</para>
|
||||
|
||||
<para> Vous pouvez entrer l'identifiant dans un champ texte,
|
||||
ou bien sélectionner une personne dans la liste en cliquant le bouton
|
||||
<guibutton>Select...</guibutton>. Dans ce cas, l'identifiant apparaîtra
|
||||
dans le champ de saisie de texte après la sélection.
|
||||
<para> Vous pouvez entrer l'identifiant dans un champ texte, ou bien sélectionner une personne dans la liste en cliquant le bouton
|
||||
<guibutton>Sélectionner...</guibutton>. Dans ce cas, l'identifiant apparaîtra dans le champ de saisie de texte après la sélection.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est la personne de référence</term>
|
||||
<listitem><para> Cette règle sélectionne la personne de référence.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus marqués comme privés</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes dont les informations sont marquées comme privés.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est une femme</term>
|
||||
<listitem><para> Cette fonction sélectionne les femmes.
|
||||
<listitem><para> Cette fonction sélectionne les femmes.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus qui ont des images</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes avec des images dans leurs galeries.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus sans date de naissance</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes sans date de naissance.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est un homme</term>
|
||||
<listitem><para> Ce filtre sélectionne les hommes.
|
||||
<listitem><para> Ce filtre sélectionne les hommes.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-event">
|
||||
<title>Fonctions sur évènements</title>
|
||||
<para>Cette catégorie regroupe les fonctions qui utilisent les évènements des personnes : </para>
|
||||
<sect1 id="filtref-event">
|
||||
<title> Filtres d'événements</title>
|
||||
<para>Cette catégorie regroupe les fonctions qui utilisent les évènements des personnes :</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>A la naissance</term>
|
||||
<listitem><para>Cette fonction sélectionne les personnes dont
|
||||
la naissance correspond aux valeurs données pour Date, Lieu, et Description.
|
||||
La correspondance est faite même quand l'évènement n'est que partiellement
|
||||
identique. Les correspondances sont insensibles à la casse des caractères.
|
||||
Par exemple, toute personne née en France sera sélectionnée par
|
||||
la valeur "fr" pour le lieu.
|
||||
</para>
|
||||
|
||||
<para> La règle sélectionne l'entrée si et seulement si toutes les
|
||||
valeurs non vides correspondent (partiellement) à la naissance
|
||||
de la personne. Si vous voulez sélectionner sur un seul champ,
|
||||
laissez les autres champs vides.
|
||||
<listitem><para> Cette fonction sélectionne les personnes dont la naissance correspond aux valeurs données pour Date, Lieu, et Description. La correspondance est faite même quand l'évènement n'est que partiellement identique.
|
||||
</para>
|
||||
<para> Les
|
||||
correspondances sont insensibles à la casse des caractères. Par exemple, toute personne née en France sera sélectionnée par la valeur "fr" pour le lieu. La règle sélectionne l'entrée si et seulement si toutes les valeurs non vides correspondent (partiellement) à la naissance de la personne. Si vous voulez sélectionner sur un seul champ, laissez les autres champs vides.
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A le décès</term>
|
||||
<listitem><para>Cette fonction sélectionne les personnes dont
|
||||
le décès correspond aux valeurs données pour Date, Lieu, et Description.
|
||||
La correspondance est faite même quand l'évènement n'est que partiellement
|
||||
identique. Les correspondances sont insensibles à la casse des caractères.
|
||||
Par exemple, toute personne décédée en France sera sélectionnée par
|
||||
la valeur "fr" pour le lieu.
|
||||
<varlistentry><term>Au décès</term>
|
||||
<listitem><para> Cette fonction sélectionne les personnes dont le décès correspond aux valeurs données pour Date, Lieu, et Description. La correspondance est faite même quand l'évènement n'est que partiellement identique. Les correspondances sont insensibles à la casse des caractères. Par exemple, toute personne décédée en France sera sélectionnée par la valeur "fr" pour le lieu.
|
||||
</para>
|
||||
|
||||
<para> La règle sélectionne l'entrée si et seulement si toutes les
|
||||
valeurs non vides correspondent (partiellement) à la naissance
|
||||
de la personne. Si vous voulez sélectionner sur un seul champ,
|
||||
laissez les autres champs vides.
|
||||
<para> La règle sélectionne l'entrée si et seulement si toutes les valeurs non vides correspondent (partiellement) à la naissance de la personne. Si vous voulez sélectionner sur un seul champ, laissez les autres champs vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A la source</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes dont les informations se rapportent à la source indiquée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A l'évènement personnel</term>
|
||||
<listitem><para>Cette fonction sélectionne les personnes dont
|
||||
un évènement personnel correspond aux valeurs données pour Date, Lieu, Type et Description.
|
||||
La correspondance est faite même quand l'évènement n'est que partiellement
|
||||
identique. Les correspondances sont insensibles à la casse des caractères.
|
||||
Par exemple, toute personne ayant obtenu un diplômee en France sera sélectionnée par
|
||||
la valeur "fr" pour le lieu.
|
||||
<listitem><para> Cette fonction sélectionne les personnes dont un évènement personnel correspond aux valeurs données pour Date, Lieu, Type et Description. La correspondance est faite même quand l'évènement n'est que partiellement identique. Les correspondances sont insensibles à la casse des caractères. Par exemple, toute personne ayant obtenu un diplômee en France sera sélectionnée par la valeur "fr" pour le lieu.
|
||||
</para>
|
||||
|
||||
<para> L'évènement personnel est sélectionné dans une liste déroulante.
|
||||
La règle sélectionne l'entrée si et seulement si toutes les
|
||||
valeurs non vides correspondent (partiellement) à un évènement
|
||||
de la personne. Si vous voulez sélectionner sur un seul champ,
|
||||
laissez les autres champs vides.
|
||||
<para> L'évènement personnel est sélectionné dans une liste déroulante. La règle sélectionne l'entrée si et seulement si toutes les valeurs non vides correspondent (partiellement) à un évènement de la personne. Si vous voulez sélectionner sur un seul champ, laissez les autres champs vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A l'évènement familial</term>
|
||||
<listitem><para>Cette fonction sélectionne les personnes dont
|
||||
un évènement familial correspond aux valeurs données pour Date, Lieu, Type et Description.
|
||||
La correspondance est faite même quand l'évènement n'est que partiellement
|
||||
identique. Les correspondances sont insensibles à la casse des caractères.
|
||||
Par exemple, toute personne s'étant mariée en France sera sélectionnée par
|
||||
la valeur Mariage pour l'évènement et "fr" pour le lieu.
|
||||
<listitem><para> Cette fonction sélectionne les personnes dont un évènement familial correspond aux valeurs données pour Date, Lieu, Type et Description. La correspondance est faite même quand l'évènement n'est que partiellement identique. Les correspondances sont insensibles à la casse des caractères. Par exemple, toute personne s'étant mariée en France sera sélectionnée par la valeur Mariage pour l'évènement et "fr" pour le lieu.
|
||||
</para>
|
||||
|
||||
<para> L'évènement familial est sélectionné dans une liste déroulante.
|
||||
La règle sélectionne l'entrée si et seulement si toutes les
|
||||
valeurs non vides correspondent (partiellement) à un évènement
|
||||
de la famille de la personne. Si vous voulez sélectionner sur un seul champ,
|
||||
laissez les autres champs vides.
|
||||
<para> L'évènement familial est sélectionné dans une liste déroulante. La règle sélectionne l'entrée si et seulement si toutes les valeurs non vides correspondent (partiellement) à un évènement de la famille de la personne. Si vous voulez sélectionner sur un seul champ, laissez les autres champs vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Témoin</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui sont présentes comme témoin. Si et seulement si le type d'événement (Individuel ou Familial) est indiqué, les événements de ce type seront recherchés.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus ayant des événements incomplets</term>
|
||||
<listitem><para> Cette règle recherche la date ou le lieu absent dans n'importe quel événement personnel.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term> Familles ayant des événements incomplets</term>
|
||||
<listitem><para> Cette règle recherche la date ou le lieu absent dans n'importe quel événement familial.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-family">
|
||||
<title>Filtres Familiaux</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent
|
||||
les personnes d'après leurs relations familiales : </para>
|
||||
<sect1 id="filtref-family">
|
||||
<title>Filtres familiaux</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent les personnes d'après leurs relations familiales :</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Individus avec des enfants :</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes avec des enfants.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus avec mariages multiples</term>
|
||||
<listitem><para> Cette règle sélectionne des personnes avec plus d'un conjoint.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus sans mariage</term>
|
||||
<listitem><para> Cette règle sélectionne des personnes sans conjoints.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Individus adoptés</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes adoptées.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A les relations</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes
|
||||
possédant un type de relation, sélectionné dans le menu.
|
||||
On peut spécifier le nombre de relations et d'enfants en option.
|
||||
<listitem><para> Cette règle sélectionne des personnes avec une relation particulière. Le nombre de relations et le nombre d'enfants peuvent être indiqués.
|
||||
</para>
|
||||
|
||||
<para> La règle sélectionne l'entrée si et seulement si toutes les
|
||||
valeurs non vides correspondent (partiellement) à un évènement
|
||||
de la famille de la personne. Si vous voulez sélectionner sur un seul champ,
|
||||
laissez les autres champs vides.
|
||||
<para> La règle est efficace si, et seulement si, toutes les valeurs non vides (partiellement) correspondent. Pour employer juste une valeur, laissez les autres valeurs vides.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est l'époux(se) d'un individu résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes mariées
|
||||
à une personne choisie par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
<varlistentry><term>Est le conjoint résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne des personnes mariées à un individu associé à un filtre. Le nom du filtre doit être choisi parmi le menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est l'enfant d'un individu résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes enfant
|
||||
d'une personne choisie par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
<varlistentry><term> Est un enfant résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes pour qui l'un ou l'autre parent est associé à un filtre. Le nom du filtre doit être choisi parmi le menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est le parent d'un individu résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes parentes
|
||||
(père ou mère) d'une personne choisie par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
<varlistentry><term> Est un parent résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes dont l'enfant est associé à un filtre. Le nom du filtre doit être choisi parmi le menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term> Est un enfant résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes dont l'enfant de mêmes parents est associé à un filtre. Le nom du filtre doit être choisi parmi le menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-ancestral">
|
||||
<title>Filtres ascendants</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent
|
||||
les personnes d'après leurs relations d'ascendance avec d'autres personnes : </para>
|
||||
<sect1 id="filtref-ancestral">
|
||||
<title> Filtres ascendants</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent les personnes d'après leurs relations d'ascendance avec d'autres personnes :</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Est l'ancêtre de</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes ancêtres
|
||||
de la personne désignée. L'option Inclusif précise
|
||||
si la personne désignée est à considérer comme ancêtre
|
||||
d'elle-même, ce qui est utile pour construire des éditions.
|
||||
<listitem><para> Cette règle sélectionne les personnes ancêtres de la personne désignée. L'option Inclusif précise si la personne désignée est à considérer comme ancêtre d'elle-même, ce qui est utile pour construire des éditions.
|
||||
</para>
|
||||
|
||||
<para> Vous pouvez soit saisir l'identifiant dans une zone de saisie,
|
||||
soit sélectionner une personne dans la liste en cochant le bouton
|
||||
<guibutton>Sélectionner...</guibutton>. Dans ce cas, son identifiant
|
||||
apparaîtra dans la zone de saisie après la sélection.
|
||||
<para> Vous pouvez soit saisir l'identifiant dans une zone de saisie, soit sélectionner une personne dans la liste en cochant le bouton
|
||||
<guibutton>Sélectionner...</guibutton> . Dans ce cas, son identifiant apparaîtra dans la zone de saisie après la sélection.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est l'ascendant d'un individu sur au moins N générations</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes ancêtres
|
||||
de la personne désignée à au moins N générations d'écart.
|
||||
Par exemple, un écart de 2 sélectionnera les grands-parents, les
|
||||
arrière-grands-parents..., mais pas les parents de la personnes
|
||||
désignée.
|
||||
<listitem><para> Cette règle sélectionne les personnes ancêtres de la personne désignée à au moins N générations d'écart. Par exemple, un écart de 2 sélectionnera les grands-parents, les arrière-grands-parents..., mais pas les parents de la
|
||||
personnes désignée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est l'ascendant d'un individu sur moins de N générations</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes ancêtres
|
||||
de la personne désignée à au plus N générations d'écart.
|
||||
Par exemple, un écart de 2 sélectionnera les parents et les grands-parents,
|
||||
mais pas les arrière-grands-parents... de la personnes
|
||||
désignée.
|
||||
</para></listitem>
|
||||
<listitem><para> Cette règle sélectionne les personnes ancêtres de la personne désignée à au plus N générations d'écart. Par exemple, un écart de 2 sélectionnera les parents et les grands-parents, mais pas les arrière-grands-parents... de la personnes désignée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A un ancêtre commun avec</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont un ancêtre
|
||||
commun avec la personne désignée.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont un ancêtre commun avec la personne désignée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A un ascendant commun avec les individus résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont un ancêtre
|
||||
commun avec les personnes sélectionnées par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont un ancêtre commun avec les personnes sélectionnées par un filtre. Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est l'ascendant d'un individu résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui sont ancêtres
|
||||
d'une des personnes sélectionnées par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui sont ancêtres d'une des personnes sélectionnées par un filtre. Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-descendant">
|
||||
<title>Filtres des Descendants</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent
|
||||
les personnes d'après leurs relations de descendance avec d'autres personnes : </para>
|
||||
<sect1 id="filtref-descendant">
|
||||
<title>Filtres descendants</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent les personnes d'après leurs relations de descendance avec d'autres personnes :</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Est descendant(e) de</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes qui descendent
|
||||
de la personne désignée. L'option Inclusif précise
|
||||
si la personne désignée est à considérer comme descendant
|
||||
d'elle-même, ce qui est utile pour construire des éditions.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui descendent de la personne désignée. L'option Inclusif précise si la personne désignée est à considérer comme descendant d'elle-même, ce qui est utile pour construire des rapports.
|
||||
</para>
|
||||
|
||||
<para> Vous pouvez soit saisir l'identifiant dans une zone de saisie,
|
||||
soit sélectionner une personne dans la liste en cochant le bouton
|
||||
<guibutton>Sélectionner...</guibutton>. Dans ce cas, son identifiant
|
||||
apparaîtra dans la zone de saisie après la sélection.
|
||||
<para> Vous pouvez soit saisir l'identifiant dans une zone de saisie, soit sélectionner une personne dans la liste en cochant le bouton
|
||||
<guibutton>Sélectionner...</guibutton>.Dans ce cas, son identifiant apparaîtra dans la zone de saisie après la sélection.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est descendant d'un individu sur au moins N générations</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes qui descendent
|
||||
de la personne désignée à au moins N générations d'écart.
|
||||
Par exemple, un écart de 2 sélectionnera les petits-enfants, les
|
||||
arrière-petits-enfants..., mais pas les enfants de la personnes
|
||||
désignée.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui descendent de la personne désignée à au moins N générations d'écart. Par exemple, un écart de 2 sélectionnera les petits-enfants, les arrière-petits-enfants..., mais pas les enfants de la personnes désignée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est descendant d'un individu sur moins de N générations</term>
|
||||
<listitem><para>Cette règle sélectionne les personnes qui descendent
|
||||
de la personne désignée à au plus N générations d'écart.
|
||||
Par exemple, un écart de 2 sélectionnera les enfants et les petits-enfants,
|
||||
mais pas les arrière-petits-enfants... de la personnes
|
||||
désignée.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui descendent de la personne désignée à au plus N générations d'écart. Par exemple, un écart de 2 sélectionnera les enfants et les petits-enfants, mais pas les arrière-petits-enfants... de la personnes désignée.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est descendant d'un individu résultant du filtrage</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui descendent
|
||||
d'une des personnes sélectionnées par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
<listitem><para> Cette règle sélectionne les personnes qui descendent d'une des personnes sélectionnées par un filtre. Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Est un membre de la famille descendante de</term>
|
||||
<listitem><para> Cette règle sélectione en plus des descendants directs
|
||||
de la personne désignée, ceux des époux(ses) des descendants directs.
|
||||
<listitem><para> Cette règle sélectione en plus des descendants directs de la personne désignée, ceux des époux(ses) des descendants directs.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-relat">
|
||||
<title>Filtres relationnels</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent
|
||||
les personnes d'après leurs relations : </para>
|
||||
<sect1 id="filtref-relat">
|
||||
<title> Filtres relationnels</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui sélectionnent les personnes d'après leurs relations :
|
||||
</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Relation entre deux individus</term>
|
||||
<listitem><para> Cette règle sélectionne les ancêtres des deux personnes
|
||||
jusqu'à leur ancêtre commun s'il existe. Ceci donne la
|
||||
"liaison relationnelle" entre ces individus à travers leur(s)
|
||||
ancêtre(s) commun(s).
|
||||
</para>
|
||||
|
||||
<para> Vous pouvez soit saisir l'identifiant des personnes dans une zone de saisie,
|
||||
soit les sélectionner dans la liste en cochant leur bouton
|
||||
<guibutton>Sélectionner...</guibutton>. Dans ce cas, l'identifiant
|
||||
apparaîtra dans la zone de saisie après la sélection.
|
||||
<listitem><para> Cette règle sélectionne les ancêtres des deux personnes jusqu'à leur ancêtre commun s'il existe. Ceci donne la "liaison relationnelle" entre ces individus à travers leur(s) ancêtre(s) commun(s).
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
|
||||
<para> Vous pouvez soit saisir l'identifiant des personnes dans une zone de saisie, soit les sélectionner dans la liste en cochant leur bouton <guibutton>Sélectionner...</guibutton>.Dans ce cas, l'identifiant apparaîtra dans la zone de saisie après la sélection.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect1>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="filtref-misc">
|
||||
<title>Filtres divers</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui n'appartiennent
|
||||
pas à une autre catégorie : </para>
|
||||
<sect1 id="filtref-misc">
|
||||
<title> Filtres divers</title>
|
||||
<para>Cette catégorie comprend les règles suivantes qui n'appartiennent pas aux autres catégories :</para>
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>A l'attribut individuel</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes
|
||||
qui ont l'attribut individuel avec une valeur donnée.
|
||||
L'attribut sur lequel porte la sélection est choisi dans un menu déroulant.
|
||||
La valeur désirée pour cet attribut est saisie dans une zone de texte.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont l'attribut individuel avec une valeur donnée. L'attribut sur lequel porte la sélection est choisi dans un menu déroulant. La valeur désirée pour cet attribut est saisie dans une zone de texte.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>A l'attribut familial</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes
|
||||
qui ont l'attribut familial avec une valeur donnée.
|
||||
L'attribut sur lequel porte la sélection est choisi dans un menu déroulant.
|
||||
La valeur désirée pour cet attribut est saisie dans une zone de texte.
|
||||
<listitem><para> Cette règle sélectionne les personnes qui ont l'attribut familial avec une valeur donnée. L'attribut sur lequel porte la sélection est choisi dans un menu déroulant. La valeur désirée pour cet attribut est saisie dans une zone de texte.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Correspond au filtre suivant</term>
|
||||
<listitem><para> Cette règle sélectionne les personnes par un filtre.
|
||||
Le filtre est choisi par son nom dans un menu.
|
||||
<listitem><para> Cette règle sélectionne les personnes par un filtre. Le filtre est choisi par son nom dans un menu.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
</sect2>
|
||||
</appendix>
|
||||
|
@ -1,33 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<chapter id="gramps-getting-started">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- =========== Getting Started ============================== -->
|
||||
|
||||
<sect1 id="gramps-getting-started">
|
||||
<title>Initiation</title>
|
||||
<title>Commencer</title>
|
||||
|
||||
<para>Ce chapitre fournit les informations les plus basiques sur &app;.</para>
|
||||
|
||||
<!-- ================ Getting Started Subsection ====== -->
|
||||
<sect2 id="gramps-start">
|
||||
<title>Pour lancer gramps</title>
|
||||
<sect1 id="gramps-start">
|
||||
<title>Pour Lancer &app;</title>
|
||||
<para>Vous pouvez lancer &app; comme suit :</para>
|
||||
<variablelist>
|
||||
<varlistentry>
|
||||
<term><guimenu>Applications</guimenu> menu</term>
|
||||
<listitem><para>Choisissez <menuchoice><guisubmenu>Autres</guisubmenu>
|
||||
<listitem><para>Les menus peuvent changer selon votre distribution. Pour le bureau GNOME par défaut,
|
||||
<menuchoice><guisubmenu>Autre</guisubmenu>
|
||||
<guimenuitem>Gramps</guimenuitem></menuchoice>. </para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry>
|
||||
@ -35,63 +43,56 @@
|
||||
<listitem><para>Pour lancer &app; en ligne de commande, entrez
|
||||
<command>gramps</command>, puis <keycap>Entrée</keycap>.</para>
|
||||
|
||||
<para>Si vous voulez que &app; ouvre un ensemble de données
|
||||
lors de son lancement, spécifiez le fichier au lancement comme argument
|
||||
de la ligne de commande :</para>
|
||||
<para>Si vous voulez que &app; ouvre un ensemble de données lors de son lancement, spécifiez le fichier au lancement comme argument de la ligne de commande :</para>
|
||||
|
||||
<para>
|
||||
<command>gramps -i</command> <replaceable>chemin.ged</replaceable>
|
||||
<command>gramps</command> <filename>nom_du_fichier.grdb</filename>
|
||||
</para>
|
||||
|
||||
<para>où <replaceable>chemin.ged</replaceable> est le nom du fichier
|
||||
que vous voulez ouvrir ou importer. La documentation de référence
|
||||
des options en ligne de commande est dans <xref linkend="append-cmdline"/>.
|
||||
<para>ou <filename>nom_du_fichier.grdb</filename> est le nom du fichier que vous voulez ouvrir ou importer. La documentation de référence des options en ligne de commande est dans <xref linkend="append-cmdline"/>.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
</variablelist>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ================ Getting Started Subsection ==== -->
|
||||
<sect2 id="run-1st-time">
|
||||
<title>La première utilisation de gramps</title>
|
||||
<sect1 id="run-1st-time">
|
||||
<title> La première utilisation de &app;</title>
|
||||
<para>
|
||||
La première fois que vous l'utilisez, GRAMPS affiche un
|
||||
dialogue de premier lancement. Suivez les directives qui vous guident
|
||||
à travers les sections
|
||||
<guilabel>Informations sur le chercheur</guilabel>, <guilabel>Formats de dates
|
||||
numériques</guilabel>, <guilabel>Utilisation d'autres calendriers</guilabel>,
|
||||
et <guilabel>extensions LDS</guilabel> . La plupart de ces dialogues
|
||||
sont simples et ne seront pas décrits ici.
|
||||
La première fois que vous l'utilisez, &app; affiche un dialogue de premier lancement.
|
||||
Suivez les directives qui vous guident à travers les sections
|
||||
<guilabel>Informations sur le chercheur</guilabel>, <guilabel>Formats de dates numériques</guilabel>,
|
||||
<guilabel>Utilisation d'autres calendriers</guilabel>,
|
||||
et <guilabel>extensions LDS</guilabel> La plupart de ces dialogues sont simples et ne seront pas décrits ici.
|
||||
</para>
|
||||
|
||||
<!-- ==== Figure: Getting Started Druid Window ==== -->
|
||||
<figure id="druid-fig">
|
||||
<title>Dialogue de premier lancement : Informations sur le chercheur en généalogie</title>
|
||||
<title>Dialogue de premier lancement : Informations sur le chercheur</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/researcher.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Affiche le dialogue d'information sur le chercheur en généalogie. </phrase>
|
||||
<phrase>La fenêtre d'informations sur le chercheur</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Saisissez vos informations personnelles dans les champs
|
||||
de texte. &app; vous demande ces données uniquement pour pouvoir créer
|
||||
des fichiers Gedcom valides. Ceux-ci décrivent le créateur du fichier.
|
||||
Si vous le souhaitez, vous pouvez tout laisser à blanc mais les fichiers
|
||||
Gedcom créés seront alors incorrects.
|
||||
<para>Saisissez vos informations personnelles dans les champs de texte.
|
||||
&app; vous demande ces données uniquement pour pouvoir créer des fichiers Gedcom valides.
|
||||
Ceux-ci décrivent le créateur du fichier.
|
||||
Si vous le souhaitez, vous pouvez tout laisser en blanc mais les fichiers Gedcom créés seront
|
||||
alors incorrects.
|
||||
</para>
|
||||
|
||||
<para>Ces informations peuvent être saisies plus tard dans le dialogue
|
||||
<guilabel>Préférences</guilabel>, dans la catégorie
|
||||
<guilabel>Usage</guilabel> , sous le choix
|
||||
<guilabel>Recherche d'information/Information sur le chercheur en généalogie</guilabel>.
|
||||
</para></sect2>
|
||||
<para>Ces informations peuvent être saisies plus tard dans le
|
||||
dialogue <guilabel>Préférences</guilabel> / <guilabel>chercheur</guilabel>.
|
||||
</para>
|
||||
|
||||
<!-- ================ Getting Started Sub-section -->
|
||||
<sect2 id="choose-db-start">
|
||||
<title>Choix d'une banque de données au démarrage</title>
|
||||
<para>Si &app; est lancé sans base de données à ouvrir,
|
||||
le dialogue suivant s'ouvrira pour vous le demander.</para>
|
||||
</sect1>
|
||||
|
||||
<!-- ================ Getting Started Subsection -->
|
||||
<sect1 id="choose-db-start">
|
||||
<title> Choix d'une base de données au démarrage</title>
|
||||
<para>Si &app; est lancé sans base de données à ouvrir, le dialogue suivant s'ouvrira pour vous le demander.</para>
|
||||
|
||||
<!-- ==== Figure: Open existing/new database window ==== -->
|
||||
<figure id="first-open">
|
||||
@ -99,107 +100,58 @@
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/first-open.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Présente le dialogue d'ouverture d'une base de données. </phrase>
|
||||
<phrase>L'ouverture d'une base de données</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Si vous voulez ouvrir une base existante, cochez le bouton radio du haut
|
||||
puis le bouton <guibutton>OK</guibutton> . Il vous sera alors demandé le nom
|
||||
d'une base existante à ouvrir. Au contraire, si vous voulez partir en créant
|
||||
une base vide, sélectionnez Créer une nouvelle base XML. </para>
|
||||
<para>Si vous voulez ouvrir une base existante, cochez le bouton radio du haut puis le bouton OK . Il vous sera alors demandé le nom d'une base existante à ouvrir. Au contraire, si vous voulez partir en créant une base vide, sélectionnez Créer une nouvelle base</para>
|
||||
|
||||
<para>NOTE : quand vous partez avec une base de données nouvelle, vous devez
|
||||
choisir un <replaceable>REPERTOIRE</replaceable> vide et
|
||||
<replaceable>NON UN FICHIER</replaceable>. Cela créera un répertoire vide
|
||||
si besoin est. Le répertoire que vous donnez servira à &app; pour ranger
|
||||
le fichier de données <replaceable>data.gramps</replaceable> et éventuellement les
|
||||
copies des objets multimedia. Ce répertoire sera mis à jour par &app;
|
||||
lors de chaque sauvegarde de la base de données. </para>
|
||||
<note id="file-notdir-note">
|
||||
<title>Choix du fichier</title>
|
||||
<para>
|
||||
À la différence de la version 1.0.X de &app;, cette version n'exige pas de choisir un dossier pour la base de données. Choisissez juste un Nom de fichier, comme dans n'importe quelle autre application.
|
||||
</para>
|
||||
</note>
|
||||
|
||||
<para>NOTE : quand vous ouvrez une base de données existantes, spécifiez
|
||||
un <replaceable>REPERTOIRE</replaceable> et
|
||||
<replaceable>NON UN FICHIER</replaceable>. Le répertoire que vous voulez
|
||||
ouvrir doit contenir le fichier de données <replaceable>data.gramps</replaceable>
|
||||
et éventuellement les copies d'objets multimedia. Un tel répertoire est créé
|
||||
par &app; quand vous créez une base vide et est mis à jour lors de chaque
|
||||
sauvegarde. </para>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
<!-- ================ Getting Started Sub-subsection -->
|
||||
<!--
|
||||
<sect3 id="zodb-support">
|
||||
<title>Support optionnel du format ZODB</title>
|
||||
|
||||
<para>Dans le cas où StandaloneZODB ou bien Zope sont installés sur votre système,
|
||||
&app; vous proposera en plus la possibilité de créer une base ZODB nouvelle.
|
||||
Vous pouvez alors choisir de créer une base nouvelle au format XML ou ZODB.
|
||||
Chaque format a ses avantages et ses inconvénients. </para>
|
||||
|
||||
<para>XML signifie eXtensible Markup Language et conserve les données
|
||||
dans une forme structurée, lisible en clair. En cas de besoin, il peut être
|
||||
facilement analysé par d'autres programmes. Il ne conserve que les données
|
||||
"pures" (sans index par exemple). Son point faible est le coût de
|
||||
traitement plus lourd de gros fichiers de données. </para>
|
||||
|
||||
<para>ZODB signifie "Zope Object Database" et fournit toutes les capacités
|
||||
d'une base de données. Les fichiers ZODB ne peuvent être lus simplement.
|
||||
Ils comprennent des données supplémentaires pour mieux traiter de grandes
|
||||
quantités de données. ZODB est nettement plus rapide pour
|
||||
des ensembles de données de plusieurs milliers de personnes. </para>
|
||||
|
||||
<para>Dire quel format de données est le meilleur est difficile dans l'absolu.
|
||||
Si vous commencez vos recherches, une base XML vous conviendra probablement.
|
||||
Par contre, si vous avez des milliers de personnes dans vos données, vous serez
|
||||
probablement mieux servis avec ZODB. </para>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
-->
|
||||
<!-- ================ Getting Started Subsection ==== -->
|
||||
<sect2 id="get-help">
|
||||
<title>Avoir de l'aide</title>
|
||||
<para> Les possibilités suivantes vous sont toujours accessibles à partir du menu
|
||||
<menuchoice><guimenu>Aide</guimenu></menuchoice> : </para>
|
||||
<sect1 id="get-help">
|
||||
<title> Obtenir de l'Aide</title>
|
||||
<para> Les possibilités suivantes vous sont toujours accessibles à partir du menu <menuchoice><guimenu>Aide</guimenu></menuchoice></para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Manuel utilisateur</term>
|
||||
<listitem><para> Ce choix vous permet de lire ce manuel dans le navigateur
|
||||
d'aide. </para></listitem>
|
||||
<listitem><para> Ce choix vous permet de lire ce manuel dans le navigateur d'aide.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>FAQ</term>
|
||||
<listitem><para> Ce choix vous donne accès à la Foire Aux Questions
|
||||
de &app; dans le navigateur web. </para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>GRAMPS page d'accueil</term>
|
||||
<listitem><para> Ce choix ouvre la page d'accueil de &app; dans votre navigateur
|
||||
web. </para></listitem>
|
||||
<varlistentry><term>FAQ</term>
|
||||
<listitem><para> Ce choix vous donne accès à la Foire Aux Questions de &app; dans le navigateur web.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Listes de diffusion GRAMPS</term>
|
||||
<listitem><para> Ce choix envoie votre navigateur web vers les archives
|
||||
des listes de diffusion de &app; . </para></listitem>
|
||||
<varlistentry><term>La page d'accueil de &app;</term>
|
||||
<listitem><para> Ce choix ouvre la page d'accueil de &app; dans votre navigateur web.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Rapporter une anomalie</term>
|
||||
<listitem><para> Ce choix vous permet d'enregistrer un rapport d'anomalie sur &app;
|
||||
dans le système de suivi d'anomalies. </para></listitem>
|
||||
<varlistentry><term>Listes de diffusion &app;</term>
|
||||
<listitem><para> Ce choix envoie votre navigateur web vers les archives des listes de diffusion de &app; .</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Lister les greffons</term>
|
||||
<listitem><para> Ce choix liste les greffons chargés par &app;. </para></listitem>
|
||||
<varlistentry><term>Rapporter une erreur</term>
|
||||
<listitem><para> Ce choix vous permet d'enregistrer un rapport d'anomalie sur &app; dans le système de suivi d'anomalies.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Montrez le statut plugin </term>
|
||||
<listitem><para> Employez cet article pour montrer le statut de plugins chargés.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Ouvrir une base exemple</term>
|
||||
<listitem><para> Ce choix ouvre la base de données exemple installée avec
|
||||
&app;. Elle décrit des personnes fictives et sert à apprendre à utiliser
|
||||
&app;. </para></listitem>
|
||||
<listitem><para> Ce choix ouvre la base de données exemple installée avec &app;. Elle décrit des personnes fictives et sert à apprendre à utiliser &app;.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</sect1> <!-- ================ End Getting Started ======================== -->
|
||||
</chapter>
|
||||
|
@ -1,24 +1,47 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
|
||||
<?xml version="1.0"?>
|
||||
<?yelp:chunk-depth 3?>
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!DOCTYPE article PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN"
|
||||
"http://www.oasis-open.org/docbook/xml/4.1.2/docbookx.dtd" [
|
||||
|
||||
<!-- Information about the entities
|
||||
The legal.xml file contains legal information, there is no need to edit the file.
|
||||
Use the appversion entity to specify the version of the application.
|
||||
Use the manrevision entity to specify the revision number of this manual.
|
||||
Use the date entity to specify the release date of this manual.
|
||||
Use the app entity to specify the name of the application. -->
|
||||
|
||||
<!ENTITY legal SYSTEM "legal.xml">
|
||||
|
||||
<!ENTITY appversion "2.0.0">
|
||||
<!ENTITY manrevision "2.6">
|
||||
<!ENTITY date "May 2005">
|
||||
<!ENTITY app "GRAMPS">
|
||||
|
||||
<!-- The rest of the entities is simply the chapters of the manual.. -->
|
||||
|
||||
<!ENTITY preface SYSTEM "preface.xml">
|
||||
<!ENTITY getstart SYSTEM "getstart.xml">
|
||||
<!ENTITY mainwin SYSTEM "mainwin.xml">
|
||||
<!ENTITY usage SYSTEM "usage.xml">
|
||||
@ -27,16 +50,8 @@
|
||||
<!ENTITY keybind SYSTEM "keybind.xml">
|
||||
<!ENTITY filtref SYSTEM "filtref.xml">
|
||||
<!ENTITY cmdline SYSTEM "cmdline.xml">
|
||||
<!ENTITY appversion "1.0.0">
|
||||
<!ENTITY manrevision "2.5">
|
||||
<!ENTITY date "February 2004">
|
||||
<!ENTITY app "<application>GRAMPS</application>">
|
||||
<!-- Information about the entities
|
||||
The legal.xml file contains legal information, there is no need to edit the file.
|
||||
Use the appversion entity to specify the version of the application.
|
||||
Use the manrevision entity to specify the revision number of this manual.
|
||||
Use the date entity to specify the release date of this manual.
|
||||
Use the app entity to specify the name of the application. -->
|
||||
<!ENTITY bugs SYSTEM "bugs.xml">
|
||||
<!ENTITY authors SYSTEM "authors.xml">
|
||||
]>
|
||||
<!--
|
||||
(Do not remove this comment block.)
|
||||
@ -46,30 +61,31 @@
|
||||
Template last modified Apr 11, 2002
|
||||
-->
|
||||
<!-- =============Document Header ============================= -->
|
||||
<article id="index" lang="fr">
|
||||
<book id="index" lang="fr">
|
||||
<!-- please do not change the id; for translations, change lang to -->
|
||||
<!-- appropriate code -->
|
||||
<articleinfo>
|
||||
<title>gramps Manuel V&manrevision;</title>
|
||||
<bookinfo>
|
||||
<title>GRAMPS Manual V&manrevision;</title>
|
||||
|
||||
<copyright> <year>2001</year> <holder>Donald N. Allingham</holder> </copyright>
|
||||
<copyright> <year>2003-2004</year> <holder>Alex Roitman</holder> </copyright>
|
||||
<copyright> <year>2003-2005</year> <holder>Alex Roitman</holder> </copyright>
|
||||
|
||||
<!-- translators: uncomment this:
|
||||
|
||||
<copyright>
|
||||
<year>2003-2004</year>
|
||||
<holder>Michel Guitel (french translation)</holder>
|
||||
<year>2002</year>
|
||||
<holder>ME-THE-TRANSLATOR (Latin translation)</holder>
|
||||
</copyright>
|
||||
|
||||
-->
|
||||
<!-- An address can be added to the publisher information. If a role is
|
||||
not specified, the publisher/author is the same for all versions of the
|
||||
document. -->
|
||||
<publisher> <publishername> GRAMPS Project </publishername> </publisher>
|
||||
|
||||
&legal;
|
||||
<!-- This file contains link to license for the documentation (GNU FDL), and
|
||||
other legal stuff such as "NO WARRANTY" statement. Please do not change
|
||||
any of this. -->
|
||||
<!-- This file contains link to license for the documentation (GNU GPL), and
|
||||
other legal stuff such as "NO WARRANTY" statement. -->
|
||||
|
||||
<authorgroup>
|
||||
<author>
|
||||
@ -77,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>
|
||||
@ -85,27 +101,26 @@
|
||||
<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>
|
||||
|
||||
<!-- This is appropriate place for other contributors: translators,
|
||||
maintainers, etc. Commented out by default.
|
||||
-->
|
||||
|
||||
<othercredit role="translator">
|
||||
<firstname>Michel</firstname>
|
||||
<surname>Guitel</surname>
|
||||
<firstname>Latin</firstname>
|
||||
<surname>Translator 1</surname>
|
||||
<affiliation>
|
||||
<orgname>French Translation Team</orgname>
|
||||
<address> <email>michel.guitel@free.fr</email> </address>
|
||||
<orgname>Latin Translation Team</orgname>
|
||||
<address> <email>translator@gnome.org</email> </address>
|
||||
</affiliation>
|
||||
<contrib>French translation</contrib>
|
||||
<contrib>Latin translation</contrib>
|
||||
</othercredit>
|
||||
<!--
|
||||
-->
|
||||
</authorgroup>
|
||||
|
||||
<!-- According to GNU FDL, revision history is mandatory if you are -->
|
||||
<!-- According to GNU GPL, revision history is mandatory if you are -->
|
||||
<!-- modifying/reusing someone else's document. If not, you can omit it. -->
|
||||
<!-- Remember to remove the &manrevision; entity from the revision entries other
|
||||
-->
|
||||
@ -124,7 +139,16 @@
|
||||
<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>
|
||||
<revision>
|
||||
<revnumber>GRAMPS Manual V2.5</revnumber>
|
||||
<date>February 2004</date>
|
||||
<revdescription>
|
||||
<para role="author">Alex Roitman
|
||||
<email>shura@gramps-project.org</email></para>
|
||||
<para role="publisher">GRAMPS Project</para>
|
||||
</revdescription>
|
||||
</revision>
|
||||
@ -133,25 +157,25 @@
|
||||
<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>
|
||||
<revision>
|
||||
<revnumber>GRAMPS Manual V2.3</revnumber>
|
||||
<date>September 2003</date>
|
||||
<revdescription>
|
||||
<para role="author">Alex Roitman
|
||||
<email>shura@gramps-project.org</email></para>
|
||||
<para role="publisher">GRAMPS Project</para>
|
||||
</revdescription>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>GRAMPS Manual V2.3</revnumber>
|
||||
<date>September 2003</date>
|
||||
<revdescription>
|
||||
<para role="author">Alex Roitman
|
||||
<email>shura@alex.neuro.umn.edu</email></para>
|
||||
<para role="publisher">GRAMPS Project</para>
|
||||
</revdescription>
|
||||
</revision>
|
||||
<revision>
|
||||
<revnumber>GRAMPS Manual V2.2</revnumber>
|
||||
<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>
|
||||
@ -162,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>
|
||||
@ -172,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>
|
||||
@ -182,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>
|
||||
@ -192,137 +216,44 @@
|
||||
<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>
|
||||
</revision>
|
||||
</revhistory>
|
||||
|
||||
<releaseinfo>This manual describes version &appversion; of GRAMPS.
|
||||
<releaseinfo>Ce manuel décrit la version &appversion; de GRAMPS.
|
||||
</releaseinfo>
|
||||
|
||||
<legalnotice>
|
||||
<title>Feedback</title>
|
||||
<para>To report a bug or make a suggestion regarding the &app; application or
|
||||
this manual, follow the directions in the <ulink url="ghelp:gnome-feedback"
|
||||
type="help">GNOME Feedback Page</ulink>.
|
||||
</para>
|
||||
<!-- Translators may also add here feedback address for translations -->
|
||||
<title>Signalements</title>
|
||||
<para>Pour signaler une erreur ou faire une suggestion sur &app;
|
||||
ou sur ce manuel, allez à la <ulink url="ghelp:gnome-feedback"
|
||||
type="help">Page GNOME</ulink>.
|
||||
</para>
|
||||
</legalnotice>
|
||||
</articleinfo>
|
||||
|
||||
<indexterm zone="index"> <primary>GRAMPS</primary> </indexterm>
|
||||
<indexterm zone="index"> <primary>gramps</primary> </indexterm>
|
||||
|
||||
<!-- ============= Document Body ============================= -->
|
||||
<!-- ============= Introduction ============================== -->
|
||||
<sect1 id="gramps-intro">
|
||||
<title>Introduction</title>
|
||||
<para> &app; est une application de généalogie.
|
||||
&app; est l'acronyme pour
|
||||
Genealogical Research and Analysis Management Programming System
|
||||
(Systeme de Programmation pour Recherche, Analyse et Gestion de données généalogiques).
|
||||
En bref, il vous permet de conserver, modifier et chercher des données de généalogie
|
||||
à l'aide d'un ordinateur. Il est semblable à d'autres programmes de généalogie
|
||||
mais il offre en plus des possibilités qui lui sont uniques. </para>
|
||||
|
||||
<sect2 id="why-gramps">
|
||||
<title>Pourquoi gramps? </title>
|
||||
<para> &app; a été pensé avec l'idée que la plupart des logiciels
|
||||
de généalogie permettent de saisir des données. Ils suivent en général
|
||||
le modèle de données standard Gedcom. Habituellement, on peut afficher
|
||||
des arbres ascendants ou descendants sur l'écran ou bien les imprimer.
|
||||
On peut ajouter des images aux données. On peut souvent saisir des
|
||||
informations sur des personnes ou des familles non obligatoirement
|
||||
liées avec l'objet de la recherche. D'autres extensions portent sur
|
||||
l'importation ou l'exportation de données ainsi que sur les impressions
|
||||
d'états. </para>
|
||||
|
||||
<para> &app; cherche à fournir toutes les fonctions
|
||||
communes de ces logiciels et aussi la capacité d'intégrer des informations
|
||||
éparses directement, puis de traiter/réorganiser
|
||||
n'importe quel évènement et/ou donnée dans toute la base de données,
|
||||
pour aider l'utilisateur dans ses recherches, analyses, recoupements
|
||||
et éventuellement mises en relation de données. En bref, cet outil
|
||||
traite toutes les données en un lieu unique avec l'aide de l'ordinateur,
|
||||
en remplaçant le crayon et les montagnes de papier. </para>
|
||||
</sect2>
|
||||
</sect1> <!-- ================ End Intro ================================ -->
|
||||
|
||||
&getstart; <!-- Getting Started -->
|
||||
&mainwin; <!-- Main window -->
|
||||
&usage; <!-- Usage -->
|
||||
&custom; <!-- Customization -->
|
||||
|
||||
|
||||
<!-- ============= Bugs ================================== -->
|
||||
<!-- This section is optional and is commented out by default.
|
||||
You can use it to describe known bugs and limitations of the
|
||||
program if there are any - please be frank and list all
|
||||
problems you know of.
|
||||
-->
|
||||
|
||||
<sect1 id="mayapp-bugs">
|
||||
<title>Erreurs connues, limitations</title>
|
||||
<para>Pour le moment, &app; charge toutes ses données en mémoire ce qui
|
||||
charge lourdement le système quand la base de données est très grande
|
||||
(au dessus de 15000 individus sur une configuration moyenne).
|
||||
Ceci sera traité dans la version 1.2 par l'utilisation d'une base de données
|
||||
intégrée. L'utilisation mémoire comme les performances seront grandement améliorées. </para>
|
||||
|
||||
<para>L'envoi direct sur une imprimante n'est pas supporté.
|
||||
Il est prévu de corriger celà après la version stable 1.0 par le recours
|
||||
à l'architecture gnome-print.</para>
|
||||
|
||||
<para>Les impressions PS et PDF génèrent des caractères erronés à la
|
||||
place des caractères Unicode. gnome-print devrait aussi régler ce problème.
|
||||
En attendant, la solution est de produire des états au format
|
||||
OpenOffice.org puis de les convertir en PDF avec OpenOffice.</para>
|
||||
</sect1>
|
||||
<!-- ============= About ================================== -->
|
||||
<!-- This section contains info about the program (not docs), such as
|
||||
author's name(s), web page, license, feedback address. This
|
||||
section is optional: primary place for this info is "About.." box of
|
||||
the program. However, if you do wish to include this info in the
|
||||
manual, this is the place to put it.
|
||||
Alternatively, you can put this information in the title page.-->
|
||||
<sect1 id="gramps-about">
|
||||
<title>A propos de gramps</title>
|
||||
<para> &app; est écrit par Donald N. Allingham
|
||||
(<email>dallingham@users.sourceforge.net</email>).
|
||||
Si vous cherchez plus d'information sur &app;, allez à l'URL de la
|
||||
<ulink url="http://gramps.sourceforge.net" type="http">Page Web du
|
||||
Projet GRAMPS</ulink>. </para>
|
||||
<title>Retour</title>
|
||||
<para>
|
||||
Si vous désirez signaler une erreur du programme, ou faire une suggestion
|
||||
à propos du programme ou du manuel, utilisez le menu d'aide
|
||||
de &app; ou suivez le lien
|
||||
<ulink url="ghelp:gnome-feedback" type="help">suggestions</ulink>.
|
||||
Pour rapporter un bug ou faire une suggestion concernant cette application ou ce manuel, employer le menu d'aide de GRAMPS, ou <ulink url="http://gramps-project.org/index.php?module=pagemaster&PAGE_user_op=view_page&PAGE_id=3"
|
||||
type="http">ce lien</ulink>.
|
||||
</para>
|
||||
|
||||
<para> This program is distributed 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. A copy of this license can be found at this
|
||||
<ulink url="ghelp:gpl" type="help">link</ulink>, or in the file
|
||||
COPYING included with the source code of this program. </para>
|
||||
<!-- Translators may also add here feedback address for translations -->
|
||||
</legalnotice>
|
||||
</bookinfo>
|
||||
|
||||
</sect1> <!-- ============= End About ============================= -->
|
||||
<!-- ============= Document Body ============================= -->
|
||||
|
||||
<!-- ============= Appendices ================================== -->
|
||||
<sect1 id="appendices">
|
||||
<title>Appendices</title>
|
||||
|
||||
&faq; <!-- FAQ -->
|
||||
&keybind; <!-- Keybindings reference -->
|
||||
&filtref; <!-- Filter rule reference -->
|
||||
&cmdline; <!-- Command line reference -->
|
||||
<!-- Preface -->
|
||||
&preface;
|
||||
|
||||
<!-- Regular chapters -->
|
||||
&getstart; <!-- Getting Started -->
|
||||
&mainwin; <!-- Main window -->
|
||||
&usage; <!-- Usage -->
|
||||
&custom; <!-- Customization -->
|
||||
|
||||
<!-- Appendices -->
|
||||
&faq; <!-- FAQ -->
|
||||
&keybind; <!-- Keybindings reference -->
|
||||
&filtref; <!-- Filter rule reference -->
|
||||
&cmdline; <!-- Command line reference -->
|
||||
&bugs; <!-- Bugs and problems -->
|
||||
&authors; <!-- About authors -->
|
||||
|
||||
</sect1>
|
||||
|
||||
</article>
|
||||
</book>
|
||||
|
@ -1,32 +1,37 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<appendix id="append-keybind">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- =============== Appendices Subsection ================ -->
|
||||
<sect2 id="append-keybind">
|
||||
<title>Manuel de référence des commandes au clavier</title>
|
||||
<para>Cette annexe décrit les commandes clavier qui ne sont pas
|
||||
affichées dans les menus de &app;.
|
||||
<title>Commandes Clavier</title>
|
||||
<para>La plupart des commandes du menu ont un équivalent au clavier.</para>
|
||||
|
||||
<para>Cette annexe décrit les commandes clavier qui ne sont pas affichées dans les menus de &app;.
|
||||
</para>
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="keybind-people">
|
||||
<title>Vue Individus</title>
|
||||
<para>Les commandes suivantes sont disponibles dans la Vue Individus : </para>
|
||||
<sect1 id="keybind-lists">
|
||||
<title>Vue Individuelle</title>
|
||||
<para>Les commandes suivantes sont disponibles dans la Vue des Individus,
|
||||
des Sources, des Lieux, des Médias.</para>
|
||||
|
||||
<informaltable frame="topbot">
|
||||
<tgroup cols="2">
|
||||
@ -34,29 +39,25 @@
|
||||
<colspec colname="col2"/>
|
||||
<thead>
|
||||
<row valign="top">
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Commande</para></entry>
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Clé</para></entry>
|
||||
<entry colname="col2" valign="top"><para>Fonction</para></entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre le dialogue <guilabel>Modifie Personne</guilabel>
|
||||
sur la personne sélectionnée.</para></entry>
|
||||
<entry><para>Ouvre le dialogue <guilabel>Edition de l'individus</guilabel> sur la personne sélectionnée</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
</informaltable>
|
||||
|
||||
</sect3>
|
||||
</sect1>
|
||||
|
||||
|
||||
<!-- =============== Appendices Sub-subsection ================ -->
|
||||
<sect3 id="keybind-family">
|
||||
<title>Vue Famille</title>
|
||||
<para>Les commandes disponibles dans la Vue Famille dépendent
|
||||
de l'élément actif. La table suivante liste les commandes
|
||||
pour tous les types déléments. </para>
|
||||
<sect1 id="keybind-family">
|
||||
<title> Vue Familiale</title>
|
||||
<para>Les commandes disponibles dans la Vue Famille dépendent de l'élément actif. Le tableau suivante liste les commandes pour tous les types d'éléments.</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
@ -69,22 +70,22 @@
|
||||
<colspec colname="col2"/>
|
||||
<thead>
|
||||
<row valign="top">
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Commande</para></entry>
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Clé</para></entry>
|
||||
<entry colname="col2" valign="top"><para>Fonction</para></entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre le dialogue <guilabel>Modifie Personne</guilabel> sur
|
||||
la personne active.</para></entry>
|
||||
</row>
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre le dialogue <guilabel>Edition de l'individus</guilabel> sur la personne sélectionnée</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Flèche vers le bas</keycap>
|
||||
ou <keycap>Ctrl</keycap>+<keycap>Flèche à droite</keycap></para></entry>
|
||||
<entry><para>Echange la personne active et son époux(se) sélectionné(e).
|
||||
Utilisez <keycap>Ctrl</keycap>+<keycap>Flèche vers le bas</keycap> dans la Vue Famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Flèche à droite</keycap> dans la vue alternative Famille. </para></entry>
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Bas</keycap>
|
||||
or <keycap>Ctrl</keycap>+<keycap>Droite</keycap></para></entry>
|
||||
<entry><para>Echange la personne active et son époux(se) sélectionné(e). Utilisez
|
||||
<keycap>Ctrl</keycap>+<keycap>Bas</keycap> dans
|
||||
la Vue Famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Droite</keycap> à droite dans la vue alternative Famille.</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -103,39 +104,40 @@
|
||||
<colspec colname="col2"/>
|
||||
<thead>
|
||||
<row valign="top">
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Commande</para></entry>
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Clé</para></entry>
|
||||
<entry colname="col2" valign="top"><para>Fonction</para></entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Modifie la relation entre la personne active et l'époux(se)
|
||||
sélectionné(e).</para></entry>
|
||||
<entry><para>Modifie la relation entre la personne active et l'époux(se) sélectionné(e).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Modifie les informations de l'époux(se) sélectionné(e).</para></entry>
|
||||
<entry><para>Modifie les informations de l'époux(se)
|
||||
sélectionné(e).
|
||||
</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Inser</keycap></para></entry>
|
||||
<entry><para><keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une personne existante à la liste des époux(ses).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Inser</keycap></para></entry>
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une nouvelle personne à la liste des époux(ses).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Delete</keycap></para></entry>
|
||||
<entry><para>Enlève l'époux(se) sélectionné(e) de la liste des époux(ses).
|
||||
L'époux(se) enlevée n'est pas supprimé(e) de la base de données.</para></entry>
|
||||
<entry><para><keycap>Suppr</keycap></para></entry>
|
||||
<entry><para>Enlève l'époux(se) sélectionné(e) de la liste des époux(ses). L'époux(se) enlevée n'est pas supprimé(e) de la base de données.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Flèche vers le haut</keycap>
|
||||
ou <keycap>Ctrl</keycap>+<keycap>Flèche vers la gauche</keycap></para></entry>
|
||||
<entry><para>Echange l'époux(se) sélectionné(e) et la personne active.
|
||||
Utilisez <keycap>Ctrl</keycap>+<keycap>Flèche vers le bas</keycap> dans la vue Famille
|
||||
standard et <keycap>Ctrl</keycap>+<keycap>Flèche à droite</keycap> dans l'autre vue.</para></entry>
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Haut</keycap>
|
||||
ou <keycap>Ctrl</keycap>+<keycap>Gauche</keycap></para></entry>
|
||||
<entry><para>Swap Echange l'époux(se) sélectionné(e) et la personne active. Utilisez
|
||||
<keycap>Ctrl</keycap>+<keycap>Haut</keycap> dans la vue Famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Gauche</keycap> dans l'autre vue.
|
||||
View.</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -154,40 +156,34 @@
|
||||
<colspec colname="col2"/>
|
||||
<thead>
|
||||
<row valign="top">
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Commande</para></entry>
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Clé</para></entry>
|
||||
<entry colname="col2" valign="top"><para>Fonction</para></entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre la relation entre les parents et leur enfant
|
||||
(personne sélectionnée ou bien époux(se) sélectionnée, selon
|
||||
le parent qui est sélectionné à ce moment). </para></entry>
|
||||
<entry><para>Ouvre la relation entre les parents et leur enfant</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Inser</keycap></para></entry>
|
||||
<entry><para>Ajoute une famille existante dans la
|
||||
liste (des parents de la mersonne active).</para></entry>
|
||||
<entry><para><keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une famille existante dans la liste (des parents de la mersonne active).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Inser</keycap></para></entry>
|
||||
<entry><para>Ajoute une nouvelle famille dans la
|
||||
liste (des parents de la mersonne active).</para></entry>
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une nouvelle famille dans la liste (des parents de la mersonne active).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Suppr</keycap></para></entry>
|
||||
<entry><para>Enlève la famille sélectionnée de la liste.
|
||||
Les parents ne sont pas supprimés de la base de données.</para></entry>
|
||||
<entry><para>Enlève la famille sélectionnée de la liste. Les parents ne sont pas supprimés de la base de données.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Flèche vers la droite</keycap>
|
||||
ou <keycap>Ctrl</keycap>+<keycap>Flèche vers le bas</keycap></para></entry>
|
||||
<entry><para>Prend comme famille active les parents sélectionnés.
|
||||
Utilisez <keycap>Ctrl</keycap>+<keycap>Flèche vers la droite</keycap> dans
|
||||
la vue famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Flèche vers le bas</keycap> dans l'autre
|
||||
vue.</para></entry>
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Droite</keycap>
|
||||
or <keycap>Ctrl</keycap>+<keycap>Bas</keycap></para></entry>
|
||||
<entry><para>Prend comme famille active les parents
|
||||
sélectionnés. Utilisez <keycap>Ctrl</keycap>+<keycap>Droite</keycap> dans la vue famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Bas</keycap> vers le bas dans l'autre vue.
|
||||
</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -206,43 +202,38 @@
|
||||
<colspec colname="col2"/>
|
||||
<thead>
|
||||
<row valign="top">
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Commande</para></entry>
|
||||
<entry colname="col1" colsep="0" valign="top"><para>Clé</para></entry>
|
||||
<entry colname="col2" valign="top"><para>Fonction</para></entry>
|
||||
</row>
|
||||
</thead>
|
||||
<tbody>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre la relation entre l'enfant et son
|
||||
parent (la personne active et l'époux(se) sélectionnée).</para></entry>
|
||||
<entry><para>Ouvre la relation entre l'enfant et son parent (la personne active et l'époux(se) sélectionnée).</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Entrée</keycap></para></entry>
|
||||
<entry><para>Ouvre les informations personnelles de l'enfant
|
||||
sélectionné.</para></entry>
|
||||
<entry><para>Ouvre les informations personnelles de l'enfant sélectionné.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Inser</keycap></para></entry>
|
||||
<entry><para>Ajoute une personne de la base de données à la liste des
|
||||
enfants.</para></entry>
|
||||
<entry><para><keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une personne de la base de données à la liste des enfants.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Inser</keycap></para></entry>
|
||||
<entry><para>Ajoute une personne nouvelle à la liste des
|
||||
enfants.</para></entry>
|
||||
<entry><para><keycap>Shift</keycap>+<keycap>Insert</keycap></para></entry>
|
||||
<entry><para>Ajoute une personne nouvelle à la liste des enfants.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Suppr</keycap></para></entry>
|
||||
<entry><para>Enlève l'enfant sélectionné de la liste.
|
||||
Cet enfant n'est pas supprimé de la base de données.</para></entry>
|
||||
<entry><para>Enlève l'enfant sélectionné de la liste. Cet enfant n'est pas supprimé de la base de données.</para></entry>
|
||||
</row>
|
||||
<row valign="top">
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Flèche vers la gauche</keycap>
|
||||
ou <keycap>Ctrl</keycap>+<keycap>Flèche vers le haut</keycap></para></entry>
|
||||
<entry><para>Prend l'enfant sélectionné comme Personne Active.
|
||||
Utilisez <keycap>Ctrl</keycap>+<keycap>Left</keycap> dans la vue Famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Flèche vers le haut</keycap> dans l'autre
|
||||
vue.</para></entry>
|
||||
<entry><para><keycap>Ctrl</keycap>+<keycap>Gauche</keycap>
|
||||
or <keycap>Ctrl</keycap>+<keycap>Haut</keycap></para></entry>
|
||||
<entry><para>Prend l'enfant sélectionné comme Personne Active. Utilisez
|
||||
<keycap>Ctrl</keycap>+<keycap>Gauche</keycap> dans la vue Famille standard et
|
||||
<keycap>Ctrl</keycap>+<keycap>Haut</keycap> dans l'autre vue.
|
||||
View.</para></entry>
|
||||
</row>
|
||||
</tbody>
|
||||
</tgroup>
|
||||
@ -253,7 +244,6 @@
|
||||
|
||||
</variablelist>
|
||||
|
||||
</sect3>
|
||||
|
||||
</sect2>
|
||||
</sect1>
|
||||
|
||||
</appendix>
|
||||
|
@ -1,76 +1,13 @@
|
||||
<legalnotice id="legalnotice">
|
||||
<para>
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts. You can find
|
||||
a copy of the GFDL at this <ulink type="help"
|
||||
url="ghelp:fdl">link</ulink> or in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
</para>
|
||||
<para> This manual is part of a collection of GNOME manuals
|
||||
distributed under the GFDL. If you want to distribute this
|
||||
manual separately from the collection, you can do so by
|
||||
adding a copy of the license to the manual, as described in
|
||||
section 6 of the license.
|
||||
</para>
|
||||
Ce manuel est un logiciel libre; vous pouvez le redistribuer et/ou le modifier en vertu de la licence de grand public de GNU comme publiée par Free Software Foundation; version 2 de la licence, ou (à votre option) toute version postérieure.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Many of the names used by companies to distinguish their
|
||||
products and services are claimed as trademarks. Where those
|
||||
names appear in any GNOME documentation, and the members of
|
||||
the GNOME Documentation Project are made aware of those
|
||||
trademarks, then the names are in capital letters or initial
|
||||
capital letters.
|
||||
</para>
|
||||
<para>
|
||||
Ce manuel est distribué dans l'espoir qu'il sera utile, mais SANS GARANTIE; sans même la garantie implicite de la VALEUR MARCHANDE ou POUR UN BUT PARTICULIER. Voyez la licence grand public GNU pour plus de détails.
|
||||
</para>
|
||||
|
||||
<para>
|
||||
DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT ARE PROVIDED
|
||||
UNDER THE TERMS OF THE GNU FREE DOCUMENTATION LICENSE
|
||||
WITH THE FURTHER UNDERSTANDING THAT:
|
||||
|
||||
<orderedlist>
|
||||
<listitem>
|
||||
<para>DOCUMENT IS PROVIDED ON AN "AS IS" BASIS,
|
||||
WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR
|
||||
IMPLIED, INCLUDING, WITHOUT LIMITATION, WARRANTIES
|
||||
THAT THE DOCUMENT OR MODIFIED VERSION OF THE
|
||||
DOCUMENT IS FREE OF DEFECTS MERCHANTABLE, FIT FOR
|
||||
A PARTICULAR PURPOSE OR NON-INFRINGING. THE ENTIRE
|
||||
RISK AS TO THE QUALITY, ACCURACY, AND PERFORMANCE
|
||||
OF THE DOCUMENT OR MODIFIED VERSION OF THE
|
||||
DOCUMENT IS WITH YOU. SHOULD ANY DOCUMENT OR
|
||||
MODIFIED VERSION PROVE DEFECTIVE IN ANY RESPECT,
|
||||
YOU (NOT THE INITIAL WRITER, AUTHOR OR ANY
|
||||
CONTRIBUTOR) ASSUME THE COST OF ANY NECESSARY
|
||||
SERVICING, REPAIR OR CORRECTION. THIS DISCLAIMER
|
||||
OF WARRANTY CONSTITUTES AN ESSENTIAL PART OF THIS
|
||||
LICENSE. NO USE OF ANY DOCUMENT OR MODIFIED
|
||||
VERSION OF THE DOCUMENT IS AUTHORIZED HEREUNDER
|
||||
EXCEPT UNDER THIS DISCLAIMER; AND
|
||||
</para>
|
||||
</listitem>
|
||||
<listitem>
|
||||
<para>UNDER NO CIRCUMSTANCES AND UNDER NO LEGAL
|
||||
THEORY, WHETHER IN TORT (INCLUDING NEGLIGENCE),
|
||||
CONTRACT, OR OTHERWISE, SHALL THE AUTHOR,
|
||||
INITIAL WRITER, ANY CONTRIBUTOR, OR ANY
|
||||
DISTRIBUTOR OF THE DOCUMENT OR MODIFIED VERSION
|
||||
OF THE DOCUMENT, OR ANY SUPPLIER OF ANY OF SUCH
|
||||
PARTIES, BE LIABLE TO ANY PERSON FOR ANY
|
||||
DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR
|
||||
CONSEQUENTIAL DAMAGES OF ANY CHARACTER
|
||||
INCLUDING, WITHOUT LIMITATION, DAMAGES FOR LOSS
|
||||
OF GOODWILL, WORK STOPPAGE, COMPUTER FAILURE OR
|
||||
MALFUNCTION, OR ANY AND ALL OTHER DAMAGES OR
|
||||
LOSSES ARISING OUT OF OR RELATING TO USE OF THE
|
||||
DOCUMENT AND MODIFIED VERSIONS OF THE DOCUMENT,
|
||||
EVEN IF SUCH PARTY SHALL HAVE BEEN INFORMED OF
|
||||
THE POSSIBILITY OF SUCH DAMAGES.
|
||||
</para>
|
||||
</listitem>
|
||||
</orderedlist>
|
||||
<para>
|
||||
Vous devriez avoir reçu une copie de la licence grand public GNU avec ce programme; sinon, écrivez à Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
</para>
|
||||
</legalnotice>
|
||||
|
||||
|
@ -1,75 +1,66 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<chapter id="gramps-mainwin">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003 Alexander Roitman
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
Permission is granted to copy, distribute and/or modify this
|
||||
document under the terms of the GNU Free Documentation
|
||||
License (GFDL), Version 1.1 or any later version published
|
||||
by the Free Software Foundation with no Invariant Sections,
|
||||
no Front-Cover Texts, and no Back-Cover Texts.
|
||||
A copy of the license is included in the file COPYING-DOCS
|
||||
distributed with this manual.
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<!-- ================ Main Window ================================ -->
|
||||
<sect1 id="gramps-mainwin">
|
||||
<title>Fenêtre principale</title>
|
||||
<para>La fenêtre suivante est affichée quand vous ouvrez une base de données
|
||||
(nouvelle ou existante).</para>
|
||||
<title>Fenêtre Principale</title>
|
||||
<para>La fenêtre suivante est affichée quand vous ouvrez une base de données (nouvelle ou existante).</para>
|
||||
|
||||
<!-- ==== Figure: Main Window ==== -->
|
||||
<figure id="mainwin-fig">
|
||||
<title>Fenêtre principale gramps</title>
|
||||
<title>Fenêtre principale de &app;</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/mainwin.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre la fenêtre principale de &app; . Comprend le titre, les barres de menu,
|
||||
d'outils, sidebar, la zone d'affichage, d'état, de progression
|
||||
et de défilement. La barre de menu comprend les menus Fichier, Edition, Affichage, Aller à, Signets,
|
||||
Editions, Outils, Paramètres et Aide. </phrase>
|
||||
<phrase>Cette fenêtre contient une barre de titre, une barre de menu,
|
||||
une barre d'outils, une barre latérale, une zone d'affichage, une barre d'état, une barre de progression
|
||||
et une barre de défilement. La barre de menu contient les menus : Fichier, Edition, Affichage, Aller à, Signets,
|
||||
Rapports, Outils, Fenêtre, et Aide.</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>La fenêtre de &app; contient les éléments suivants : </para>
|
||||
<para>La fenêtre de &app; contient les éléments suivants:</para>
|
||||
<variablelist>
|
||||
<varlistentry><term>Barre de menu</term>
|
||||
<listitem><para>La barre de menu est placée tout en haut de la fenêtre
|
||||
(juste à droite du titre de la fenêtre) et donne accès à toutes les fonctions de
|
||||
&app; à travers ses menus.</para></listitem>
|
||||
<varlistentry><term> Barre de menu</term>
|
||||
<listitem><para>
|
||||
La barre de menu est placée tout en haut de la fenêtre (juste à droite du titre de la fenêtre) et donne accès à toutes les fonctions de &app; à travers ses menus.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry><term>La barre d'outils</term>
|
||||
<listitem><para> La barre d'outils est placée juste sous la barre de menu.
|
||||
Elle donne accès aux fonctions les plus utilisées de
|
||||
&app;. Sa présentation peut être changée
|
||||
dans le menu <guilabel>Préférences</guilabel></para></listitem>
|
||||
<varlistentry><term>Barre d'outils</term>
|
||||
<listitem><para> La barre d'outils est placée juste sous la barre de menu. Elle donne accès aux fonctions les plus utilisées de &app;. Sa présentation peut être changée dans le menu <guilabel>Préferences</guilabel>
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry><term>Barre de progression</term>
|
||||
<listitem><para>La barre de progression se trouve en bas, à gauche de la fenêtre
|
||||
principale de &app; . Elle montre l'avancement des opérations longues
|
||||
comme le chargement ou l'écriture de grosses bases de données,
|
||||
l'importation ou l'exportation de données de et vers d'autres formats
|
||||
ou la génération de sites web, etc. </para></listitem>
|
||||
<listitem><para>La barre de progression se trouve en bas, à gauche de la fenêtre principale de &app;. Elle montre l'avancement des opérations longues comme le chargement ou l'écriture de grosses bases de données, l'importation ou l'exportation de données de et vers d'autres formats ou la génération de sites web, etc.</para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry><term>La barre d'état</term>
|
||||
<listitem><para>La barre d'état est placée à droite de la barre de progression,
|
||||
tout en bas de la fenêtre de &app; .
|
||||
Elle informe sur le travail en cours avec &app;
|
||||
et explique les éléments de menu.
|
||||
Son comportement peut être changé dans le dialogue
|
||||
<guilabel>Préférences</guilabel> . </para></listitem>
|
||||
<listitem><para>La barre d'état est placée à droite de la barre de progression, tout en bas de la fenêtre de &app; . Elle informe sur le travail en cours avec &app; et explique les éléments de menu. Son comportement peut être changé dans le dialogue
|
||||
<guilabel>Préferences</guilabel></para></listitem>
|
||||
</varlistentry>
|
||||
<varlistentry><term>Zone d'affichage</term>
|
||||
<listitem><para>Le plus grand espace dans la fenêtre de
|
||||
&app; est la zone d'affichage.
|
||||
Elle montre une vue des données généalogiques, selon le type
|
||||
d'affichage en cours. Les six types d'affichage suivants sont disponibles
|
||||
dans &app;:
|
||||
<listitem><para>Le plus grand espace dans la fenêtre de &app; est la zone d'affichage. Elle montre une vue des données généalogiques, selon le type d'affichage en cours.
|
||||
Les six types d'affichage suivants sont disponibles dans &app;:
|
||||
<itemizedlist>
|
||||
<listitem><para>Vue per Individus</para></listitem>
|
||||
<listitem><para>Vue par Individus</para></listitem>
|
||||
<listitem><para>Vue par Famille</para></listitem>
|
||||
<listitem><para>Vue par Arborescence</para></listitem>
|
||||
<listitem><para>Vue des Sources</para></listitem>
|
||||
@ -82,27 +73,21 @@
|
||||
</variablelist>
|
||||
|
||||
<!-- ================ Main Window Subsection -->
|
||||
<sect2 id="gramps-views">
|
||||
<sect1 id="gramps-views">
|
||||
<title>Vues</title>
|
||||
<para>Les vues sont les différentes façons d'afficher les données généalogiques.
|
||||
Comme l'information est vaste et hétérogène, il faut mieux en réaliser
|
||||
l'affichage en catégories homogènes plus restreintes.
|
||||
Chaque vue représente une de ces catégories.
|
||||
Le changement de vue est décrit ci-dessous, avant leur description
|
||||
détaillée. </para>
|
||||
<para>Les vues sont les différentes façons d'afficher les données généalogiques. Comme l'information est vaste et hétérogène, il faut mieux en réaliser l'affichage en catégories homogènes plus restreintes. Chaque vue représente une de ces catégories. Le changement de vue est décrit ci-dessous, avant leur description détaillée.</para>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="view-modes">
|
||||
<title>Le changement entre les vues et modes d'affichage</title>
|
||||
<para>Selon l'état de l'item de menu <menuchoice>
|
||||
<guimenu>Visualiser</guimenu><guimenuitem>Barre verticale</guimenuitem>
|
||||
</menuchoice> , le mode d'affichage peut être changé soit dans
|
||||
la barre verticale, soit dans les onglets en haut de la fenêtre.
|
||||
<sect2 id="view-modes">
|
||||
<title>Le changement entre les vues et les modes d'affichage</title>
|
||||
<para>Selon l'état du menu <menuchoice>
|
||||
<guimenu>Affichage</guimenu><guimenuitem>Barre latérale</guimenuitem>
|
||||
</menuchoice>, le mode d'affichage peut être changé soit dans la barre verticale,
|
||||
soit dans les onglets en haut de la fenêtre.
|
||||
</para>
|
||||
|
||||
<variablelist>
|
||||
<varlistentry><term>Pour changer de Vue dans la barre verticale,
|
||||
cliquez dans l'icône de la vue que vous désirez.</term>
|
||||
<varlistentry><term>Pour changer de Vue dans la barre latérale, cliquez sur l'icône de la vue que vous désirez.</term>
|
||||
<listitem>
|
||||
<!-- ==== Figure: Sidebar Mode ==== -->
|
||||
<figure id="side-nofilt-fig">
|
||||
@ -110,69 +95,90 @@
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/mainwin.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Mode avec barre latérale. </phrase>
|
||||
<phrase>Vue avec la barre latérale</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
</listitem></varlistentry>
|
||||
|
||||
<varlistentry><term>Pour changer de vue en mode "Onglet",
|
||||
cliquez sur l'onglet désiré.</term>
|
||||
<varlistentry><term>Pour changer de vue en mode "Onglet", cliquez sur l'onglet désiré.</term>
|
||||
<listitem>
|
||||
<!-- ==== Figure: Tabbed Notebook Mode ==== -->
|
||||
<figure id="noside-nofilt-fig">
|
||||
<title>Mode Onglets</title>
|
||||
<title>Mode Onglets </title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/noside-nofilt.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Mode Onglets. </phrase>
|
||||
<phrase>Vue en Mode Onglets</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
</listitem></varlistentry>
|
||||
</variablelist>
|
||||
|
||||
<para>Pour changer entre les modes avec barre latérale et Onglets
|
||||
choisissez <menuchoice> <guimenu>Affichage</guimenu>
|
||||
<para> Pour changer entre les modes avec barre latérale et Onglets choisissez
|
||||
<menuchoice> <guimenu>Affichage</guimenu>
|
||||
<guimenuitem>Barre latérale</guimenuitem>
|
||||
</menuchoice> dans le menu principal de &app; .</para>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="people-view">
|
||||
<title>Vue des individus</title>
|
||||
<para>Quand &app; ouvre une base de données,
|
||||
la Vue est celle des individus (<xref linkend="side-nofilt-fig"/>
|
||||
et <xref linkend="noside-nofilt-fig"/>). La Vue Individus liste
|
||||
les personnes dont les données sont enregistrées dans la base de données. </para>
|
||||
|
||||
<para> Les personnes sont présentées en arbre, selon leur nom de famille.
|
||||
Chaque nom est un noeud de l'arbre. Cliquer sur la croix à gauche du noeud
|
||||
le déploie ou le replie selon son état. Quand un arbre est déployé,
|
||||
le contenu du noeud est affiché. Quand il est replié, le contenu
|
||||
n'est pas visible. Les données sont cependant conservées, elles sont
|
||||
seulement masquées.
|
||||
<sect2 id="people-view">
|
||||
<title>Vue des Individus</title>
|
||||
<para>Quand &app; ouvre une base de données, la Vue est celle des individus
|
||||
(<xref linkend="side-nofilt-fig"/>
|
||||
et <xref linkend="noside-nofilt-fig"/>).La Vue Individus liste les personnes dont les données
|
||||
sont enregistrées dans la base de données.</para>
|
||||
|
||||
<para> Les personnes sont présentées en arbre, selon leur nom de famille.
|
||||
Chaque nom est un noeud de l'arbre. Cliquer sur la croix à gauche du noeud le déploie
|
||||
ou le replie selon son état. Quand un arbre est déployé, le contenu du noeud est affiché.
|
||||
Quand il est replié, le contenu n'est pas visible. Les données sont cependant conservées,
|
||||
elles sont seulement masquées.
|
||||
</para>
|
||||
|
||||
<para>La Vue des Individus montre les <guilabel>Noms</guilabel>,
|
||||
<guilabel>Identifiants</guilabel> &app;,
|
||||
|
||||
<para>La Vue des Individus montre les <guilabel>Noms</guilabel>,
|
||||
<guilabel>Identifiants &app;</guilabel>,
|
||||
<guilabel>Genre</guilabel>, et
|
||||
leurs dates de <guilabel>Naissance</guilabel> et <guilabel>Décès</guilabel>.
|
||||
La liste peut être triée par rapport à n'importe quel champ.</para>
|
||||
leurs dates de <guilabel>Naissance</guilabel> et de <guilabel>Décès</guilabel>.
|
||||
La liste peut être triée par rapport par n'importe quel champ.</para>
|
||||
|
||||
<tip id="columns-tip"><title>Liste ordonnée par la colonne choisie</title>
|
||||
<para>Par exemple, pour trier selon la colonne
|
||||
<guilabel>date de naissance</guilabel>, cliquer sur l'en-tête. Pour trier la liste dans l'ordre
|
||||
(décroissant), cliquer une fois de plus sur l'en-tête de colonne désirée. </para></tip>
|
||||
|
||||
<para>Exemple : pour trier la liste par date de naissance, cliquez sur
|
||||
l'en-tête de colonne <guilabel>Date de naissance</guilabel>. Pour trier par ordre
|
||||
inverse (décroissant), cliquez une autre fois sur l'en-tête de colonne. </para>
|
||||
<para>Les colonnes peuvent être ajoutées, enlevées, ou triées à nouveau dans une fenêtre de dialogue voir
|
||||
<xref linkend="column-editor-fig"/>.Seulement les colonnes vérifiées seront montrées dans la vue.
|
||||
Pour changer leur ordre, glisser n'importe quelle colonne à l' endroit désiré.
|
||||
Cliquer sur <guibutton>Valider</guibutton> reflétera les changements de la vue des individus.
|
||||
Pour appeler la <guilabel>Fenêtre d'édition de colonnes </guilabel>,
|
||||
choisissez <menuchoice><guimenu>Edition</guimenu><guimenuitem>Editeur de Colonnes</guimenuitem></menuchoice>.
|
||||
</para>
|
||||
|
||||
<tip id="columns-tip2"><title>D'autres Vues</title>
|
||||
<para>L'<guilabel>éditeur de colonnes</guilabel> est disponible et travaille de la même
|
||||
manière pour toutes les vues de liste, pas seulement vue des individus.</para> </tip>
|
||||
|
||||
<!-- ==== Figure: Enabled Filter ==== -->
|
||||
<figure id="column-editor-fig">
|
||||
<title>Fenêtre d'édition de Colonnes</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/column-editor.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Vue du dialogue d'édition des colonnes </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
|
||||
|
||||
<!-- ================ Main Window Sub-sub-subsection -->
|
||||
<sect4 id="filters">
|
||||
<sect3 id="filters">
|
||||
<title>Filtres</title>
|
||||
<para>Les bases de données généalogiques peuvent décrire beaucoup d'individus.
|
||||
<para>Les bases de données généalogiques peuvent décrire beaucoup d'individus.
|
||||
Comme les longues énumérations sont difficiles à traiter mentalement,
|
||||
&app; fournit une façon pratique pour réduire
|
||||
l'ensemble des données visibles avec un filtre. Pour économiser l'espace sur l'écran,
|
||||
les contrôles de filtre peuvent être cachés, selon l'état de l'item de menu
|
||||
<menuchoice> <guimenu>Visualiser</guimenu>
|
||||
<guimenuitem>Filtre</guimenuitem> </menuchoice> .</para>
|
||||
&app; fournit une façon pratique pour réduire l'ensemble des données visibles avec un filtre.
|
||||
Pour économiser l'espace sur l'écran, les contrôles de filtre peuvent être cachés, selon
|
||||
l'état du menu
|
||||
<menuchoice> <guimenu>Affichage</guimenu>
|
||||
<guimenuitem>Filtres</guimenuitem> </menuchoice></para>
|
||||
|
||||
<!-- ==== Figure: Enabled Filter ==== -->
|
||||
<figure id="side-filt-fig">
|
||||
@ -180,247 +186,183 @@
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/side-filt.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre le contrôle du filtre. </phrase>
|
||||
<phrase>Vue du dialogue de contrôle des filtres </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Quand &app; ouvre une base de données, le filtre
|
||||
est le filtre simple appelé <guilabel>Tout le monde</guilabel>,
|
||||
c'est à dire qu'il n'y a aucun filtrage. Pour choisir un filtre,
|
||||
utilisez le pop-up <guilabel>Filtre</guilabel> au-dessus de la
|
||||
liste des individus. Quand vous avez choisi le filtre, cliquez sur le bouton
|
||||
<guibutton>Appliquer</guibutton> en haut à droite de la fenêtre.
|
||||
Le filtre sera alors appliqué. Pour inverser la règle de filtrage
|
||||
cochez le choix <guilabel>Inverse</guilabel> à gauche du bouton
|
||||
<guibutton>Appliquer</guibutton>. </para>
|
||||
<para>Quand &app; ouvre une base de données, le filtre est le filtre
|
||||
simple appelé <guilabel>Tout le monde</guilabel>, c'est à dire qu'il n'y a aucun filtrage.
|
||||
Pour choisir un filtre, utilisez le pop-up <guilabel>Filtre</guilabel> au-dessus de la liste des individus.
|
||||
Quand vous avez choisi le filtre, cliquez sur le bouton
|
||||
<guibutton>Appliquer</guibutton> en haut à droite de la fenêtre.
|
||||
Le filtre sera alors appliqué. Pour inverser la règle de filtrage cochez le choix Inverse à gauche du bouton
|
||||
</para>
|
||||
|
||||
<para>Exemple : Pour voir les personnes sans enfants, choisissez le filtre
|
||||
<guilabel>Individus ayant des enfants</guilabel>, cochez la case
|
||||
<guilabel>Inverse</guilabel>, puis cliquez sur le bouton
|
||||
<guibutton>Appliquer</guibutton>. Pour annuler le filtrage, sélectionnez
|
||||
le filtre <guilabel>Tout le monde</guilabel>
|
||||
puis cliquez sur le bouton <guibutton>Appliquer</guibutton>. </para>
|
||||
<tip id="filt-tip"><title>Exemple d'utilisation de filtre</title>
|
||||
<para>Pour montrer seulement les hommes, choisissez le filtre
|
||||
<guilabel>Hommes</guilabel> puis cliquer sur le bouton
|
||||
<guibutton>Appliquer</guibutton> button. Pour décommander le filtrage, placez le filtre
|
||||
sur <guilabel>Toute la base de données</guilabel>
|
||||
et cliquer sur <guibutton>Appliquer</guibutton>.</para>
|
||||
</tip>
|
||||
|
||||
<note id="filt-note">
|
||||
<title>Le filtrage est persistant</title>
|
||||
<para> Même si le contrôle de filtre n'est pas affiché,
|
||||
(<menuchoice> <guimenu>Affichage</guimenu>
|
||||
<guimenuitem>Filtre</guimenuitem> </menuchoice> , le filtrage est activé.
|
||||
En d'autres termes, que le contrôle du filtre soit affiché ou pas n'a pas de rapport
|
||||
avec l'effet du filtre.</para>
|
||||
|
||||
<para>Cela peut prêter à confusion quand vous activez le
|
||||
filtre puis que vous cachez son contrôle.
|
||||
En cas de problème, affichez le contrôle du filtre par <menuchoice> <guimenu>Affichage</guimenu>
|
||||
<guimenuitem>Filtre</guimenuitem> </menuchoice> puis vérifiez que le filtre est actif.</para>
|
||||
</note>
|
||||
</sect3>
|
||||
|
||||
<para>Note : même si le contrôle de filtre n'est pas affiché,
|
||||
(<menuchoice> <guimenu>Visualiser</guimenu>
|
||||
<guimenuitem>Filtre</guimenuitem> </menuchoice> n'est pas coché),
|
||||
le filtrage est activé. En d'autres termes,
|
||||
que le contrôle du filtre soit affiché ou pas n'a pas de rapport avec
|
||||
l'effet du filtre. Cela peut prêter à confusion quand vous activez le filtre
|
||||
puis que vous cachez son contrôle. En cas de problème, affichez
|
||||
le contrôle du filtre par
|
||||
<menuchoice> <guimenu>Visualiser</guimenu>
|
||||
<guimenuitem>Filtre</guimenuitem> </menuchoice> puis vérifiez quel filtre
|
||||
est actif. </para>
|
||||
</sect4>
|
||||
|
||||
<!-- ================ Main Window Sub-sub-subsection -->
|
||||
<sect4 id="alpha-tabs">
|
||||
<title>Onglets Alphabetiques</title>
|
||||
<para>&app; propose une autre façon de gérer de longues listes de personnes :
|
||||
les onglets alphabétiques. Lors du chargement d'une base de données,
|
||||
&app; examine les noms de famille et sépare la liste complète des personnes
|
||||
en sous-ensembles, selon l'initiale du nom de famille.
|
||||
Les onglets alphabétiques sont affichés en bas de la fenêtre de &app;.
|
||||
Le dernier onglet, <guilabel>Autre</guilabel>, désigne les caractères non identifiés :
|
||||
tous les éléments non rattachés aux autres onglets.
|
||||
En particulier, les individus sans nom de famille y sont rattachés.</para>
|
||||
</sect4>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="family-view">
|
||||
<sect2 id="family-view">
|
||||
<title>Vue des Familles</title>
|
||||
<para>L'affichage par famille montre les informations autour
|
||||
de la personne sélectionnée (ou Active). En particulier, cette vue montre
|
||||
les relations (c'est à dire les mariages ou concubinages, etc.) de la personne active,
|
||||
ses parents (ou beaux-parents, or tuteurs, etc), ainsi que
|
||||
ses enfants (que ce soit des enfants directs, de conjoint ou bien adoptés, etc.).
|
||||
<para>L'affichage par famille montre les informations autour de la personne sélectionnée
|
||||
(ou Active). En particulier, cette vue montre les relations
|
||||
(c'est à dire les mariages ou concubinages, etc.) de la personne active, ses parents
|
||||
(ou beaux-parents, or tuteurs, etc), ainsi que ses enfants
|
||||
(que ce soit des enfants directs, de conjoint ou bien adoptés, etc.).
|
||||
</para>
|
||||
|
||||
<!-- ==== Figure: Family View ==== -->
|
||||
<figure id="family-fig">
|
||||
<title>Vue Famille</title>
|
||||
<title>Vue des Familles</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/family.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre le Vue Famille. </phrase>
|
||||
<phrase>Vue des Familles </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Les données de la personne active sont dans le haut, à gauche
|
||||
de la fenêtre. Juste en dessous, une autre boîte montre ses époux,
|
||||
épouses (ou toutes autres personnes en relation familiale).
|
||||
La double flèche dans le bouton à droite de la personne active
|
||||
fait échanger la personne active et son époux ou épouse sélectionné(e).
|
||||
Vous pouvez modifier la relation entre la personne active et son
|
||||
époux ou épouse sélectionnée en double-cliquant sur la personne
|
||||
active. Vous pouvez modifier les données de l'époux ou épouse sélectionnée
|
||||
en shift-cliquant sur lui ou elle. </para>
|
||||
<para>Les données de la personne active sont dans le haut, à gauche de la fenêtre. Juste en dessous, une autre boîte montre ses époux, épouses (ou toutes autres personnes en relation familiale). La double flèche dans le bouton à droite de la personne active fait échanger la personne active et son époux ou épouse sélectionné(e). Vous pouvez modifier la relation entre la personne active et son époux ou épouse sélectionnée en double-cliquant sur la personne active. Vous pouvez modifier les données de l'époux ou épouse sélectionnée en shift-cliquant sur lui ou elle.</para>
|
||||
|
||||
<para>Pour ajouter une nouvelle relation depuis la personne active,
|
||||
utilisez un des boutons du haut, à droite de la boîte de l'époux
|
||||
ou de l'épouse. Celui du haut ajoute une nouvelle personne dans
|
||||
la base de données et la relation avec la personne active. Celui du milieu
|
||||
crée une relation entre la personne active et une personne déjà déclarée
|
||||
dans la base de données. Le bouton du bas (<guibutton>-</guibutton>) à droite
|
||||
de la boîte de l'époux ou de l'épouse retire la relation avec cette personne.
|
||||
La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton
|
||||
droit de la souris dans la boîte de l'époux ou de l'épouse, puis
|
||||
en sélectionnant l'action voulue dans le menu contextuel ainsi
|
||||
activé. </para>
|
||||
<para> Pour ajouter une nouvelle relation depuis la personne active, utilisez un des boutons du haut, à droite de la boîte de l'époux ou de l'épouse. Celui du haut ajoute une nouvelle personne dans la base de données et la relation avec la personne active. Celui du milieu crée une relation entre la personne active et une personne déjà déclarée dans la base de données.
|
||||
Le bouton du bas (<guibutton>-</guibutton>) à droite de la boîte de l'époux ou de l'épouse retire la relation avec cette personne. La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton droit de la souris dans la boîte de l'époux ou de l'épouse, puis en sélectionnant l'action voulue dans le menu contextuel ainsi activé.</para>
|
||||
|
||||
<para>Les parents de la personne active ainsi que de la personne sélectionnée en relation
|
||||
sont affichés dans la partie droite de la fenêtre. Ceux de la personne active
|
||||
sont en haut, ceux de la personne en relation en bas. Leurs boîtes
|
||||
ont chacune un ensemble de trois boutons à droite.
|
||||
Les boutons <guibutton>+</guibutton> et <guibutton>-</guibutton>
|
||||
vous permettent d'ajouter ou de retirer des parents de la personne correspondante
|
||||
(active ou époux). La flèche vers la droite change de famille courante,
|
||||
en mettant la famille correspondante comme famille courante. Celà
|
||||
met comme personne active le père sélectionné, et comme épouse la mère.
|
||||
La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton
|
||||
droit de la souris dans la boîte des parents de l'époux ou de l'épouse, puis
|
||||
en sélectionnant l'action voulue dans le menu contextuel ainsi
|
||||
activé. </para>
|
||||
<para>Les parents de la personne active ainsi que de la personne sélectionnée en relation sont affichés dans la partie droite de la fenêtre. Ceux de la personne active sont en haut, ceux de la personne en relation en bas. Leurs boîtes ont chacune un ensemble de trois boutons à droite. Les boutons <guibutton>+</guibutton> et <guibutton>-</guibutton>
|
||||
vous permettent d'ajouter ou de retirer des parents de la personne correspondante (active ou époux). La flèche vers la droite change de famille courante, en mettant la famille correspondante comme famille courante. Celà met comme personne active le père sélectionné, et comme épouse la mère. La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton droit de la souris dans la boîte des parents de l'époux ou de l'épouse, puis en sélectionnant l'action voulue dans le menu contextuel ainsi activé. </para>
|
||||
|
||||
<para>La boîte du bas liste les enfants de la personne active et de
|
||||
la relation courante (sélectionnée). La liste des enfants peut être
|
||||
triée par date de naissance comme d'habitude, en cliquant dans l'en-tête de colonne
|
||||
<guilabel>Date de naissance</guilabel>.
|
||||
En plus des colonnes <guilabel>Nom</guilabel>,
|
||||
<guilabel>Identification</guilabel>, <guilabel>Genre</guilabel> et
|
||||
<guilabel>Date de naissance</guilabel>, la liste comprend une colonne
|
||||
<guilabel>Statut</guilabel>. Les deux mots de statut décrivent la relation
|
||||
entre l'enfant et son père ou sa mère (comme Naissance, Adoption...).
|
||||
Quatre boutons sont disponibles à droite de la liste des enfants.
|
||||
Celui du haut (flèche vers la gauche) met l'enfant sélectionné comme
|
||||
personne active. Les deux suivants ajoutent une personne dans la famille :
|
||||
celui du haut crée une personne tandis que celui du bas met une personne
|
||||
déjà déclarée dans la base de données comme enfant dans cette famille.
|
||||
Enfin, le bouton tout en bas <guibutton>-</guibutton>
|
||||
retire l'enfant sélectionné de la famille. Notez que ceci ne supprime
|
||||
pas la personne de la base de données.
|
||||
La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton
|
||||
droit de la souris dans la boîte des enfants, puis
|
||||
en sélectionnant l'action voulue dans le menu contextuel ainsi
|
||||
activé. </para>
|
||||
<para>La boîte du bas liste les enfants de la personne active et de la relation courante (sélectionnée). La liste des enfants peut être triée par date de naissance comme d'habitude, en cliquant dans l'en-tête de colonne
|
||||
<guilabel>Date de Naissance</guilabel>. En plus des colonnes <guilabel>Nom</guilabel>,
|
||||
<guilabel>Identifiant</guilabel>, <guilabel>Genre</guilabel>, et
|
||||
<guilabel>Date de Naissance</guilabel> , la vue comprend une ligne
|
||||
<guilabel>Statut</guilabel>. Les deux mots de statut décrivent la relation entre l'enfant et son père ou sa mère (comme Naissance, Adoption...).
|
||||
L'<guilabel>éditeur de colonnes</guilabel> peut être utilisé pour modifier l'affichage des colonnes.
|
||||
Quatre boutons sont disponibles à droite de la liste des enfants. Celui du haut (flèche vers la gauche) met l'enfant sélectionné comme personne active. Les deux suivants ajoutent une personne dans la famille : celui du haut crée une personne tandis que celui du bas met une personne déjà déclarée dans la base de données comme enfant dans cette famille. Enfin, le bouton tout en bas
|
||||
<guibutton>-</guibutton> retire l'enfant sélectionné de la famille. Notez que ceci ne supprime pas la personne de la base de données. La plupart de ces fonctions sont aussi disponibles en cliquant avec le bouton droit de la souris dans la boîte des enfants, puis en sélectionnant l'action voulue dans le menu contextuel ainsi activé.</para>
|
||||
|
||||
<para>La disposition de la Vue Famille peut être changé entre la disposition
|
||||
de gauche à droite décrite ci-dessus et la disposition de haut en bas
|
||||
décrite ci-dessous. Ceci se fait dans la section
|
||||
<guilabel>Affichage</guilabel> du dialogue
|
||||
<guilabel>Préférences</guilabel>. La disposition de haut en bas
|
||||
propose les mêmes fonctions que la disposition de gauche à droite. </para>
|
||||
<para>La disposition de la Vue Famille peut être changé entre la disposition de gauche à droite décrite ci-dessus et la disposition de haut en bas décrite ci-dessous.
|
||||
Ceci se fait dans la section
|
||||
<guilabel>Affichages</guilabel> du dialogue
|
||||
<guilabel>Préferences</guilabel>. La disposition de haut en bas propose les mêmes fonctions
|
||||
que la disposition de gauche à droite.</para>
|
||||
|
||||
<!-- ==== Figure: Family View ==== -->
|
||||
<figure id="family-alt-fig">
|
||||
<title>Autre Vue Famille</title>
|
||||
<title>Vue Alternative des Familles</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/family-alt.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre l'autre Vue Famille. </phrase>
|
||||
<phrase>Vue Alternative des Familles </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="pedigree-view">
|
||||
<title>Vue d'Arborescence</title>
|
||||
<sect2 id="pedigree-view">
|
||||
<title>Vue de l'Arborescence</title>
|
||||
|
||||
<!-- ==== Figure: Pedigree View ==== -->
|
||||
<figure id="pedigree-fig">
|
||||
<title>Vue d'Arborescence</title>
|
||||
<figure id="pedigree-fig">
|
||||
<title>Vue de l'Arborescence</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/pedigree.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre la Vue en Arborescence. </phrase>
|
||||
<phrase>Vue de l'Arborescence</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>La vue en Arborescence vous aide à voir la place de la personne active
|
||||
dans l'arbre de ses ancêtres. Elle montre quatre générations, de la personne
|
||||
active vers ses parents, ses grands-parents et ses arrière grands-parents.
|
||||
Chaque personne est représentée par un rectangle portant
|
||||
son nom. Deux lignes relient la personne à son père (ligne supérieure) et sa
|
||||
mère (ligne inférieure). Les lignes continues figurent les liens
|
||||
de filiation tandis que les lignes pointillées représentent les autres liens
|
||||
(adoption, beau-père ou belle-mère, tuteurs).
|
||||
Quand le pointeur de la souris passe sur une personne, son rectangle
|
||||
s'agrandit pour afficher ses dates de naissance et de décès.
|
||||
Quand le pointeur de la souris passe sur une ligne de famille, celle-ci
|
||||
est mise en évidence. Double-cliquer sur la ligne met alors le parent correspondant comme
|
||||
personne active. Tout l'affichage change alors en conséquence. </para>
|
||||
<para>La vue en Arborescence vous aide à voir la place de la personne active dans l'arbre de ses ancêtres. Elle montre quatre générations,
|
||||
de la personne active
|
||||
<guilabel>1</guilabel>vers ses parents <guilabel>2</guilabel>,
|
||||
ses grands-parents <guilabel>3</guilabel> et ses arrière grands-parents
|
||||
<guilabel>4</guilabel>.
|
||||
Chaque personne est représentée par un rectangle portant son nom. Deux lignes relient la personne à son père (ligne supérieure) et sa mère (ligne inférieure). Les lignes continues figurent les liens de filiation tandis que les lignes pointillées représentent les autres liens (adoption, beau-père ou belle-mère, tuteurs). Quand le pointeur de la souris passe sur une personne, son rectangle s'agrandit pour afficher ses dates de naissance et de décès. Quand le pointeur de la souris passe sur une ligne de famille, celle-ci est mise en évidence. Double-cliquer sur la ligne met alors le parent correspondant comme personne active.
|
||||
Tout l'affichage change alors en conséquence.</para>
|
||||
|
||||
<!-- ==== Figure: Pedigree View ==== -->
|
||||
<figure id="pedigree-child-cut-fig">
|
||||
<title>Menu des enfants</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/pedigree-child-cut.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre le menu des enfants dans la vue en arbre. </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
<!-- ==== Figure: Pedigree View ==== -->
|
||||
<figure id="pedigree-child-cut-fig">
|
||||
<title>Menu des Enfants</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/pedigree-child-cut.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>La vue des Enfants dans l'arborescence </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Une flèche vers la gauche est affichée dans la partie gauche de la fenêtre.
|
||||
En cliquant dessus, un menu comprenant les enfants de la personne active
|
||||
apparait. Sélectionner un des enfants le met alors comme personne active.
|
||||
Le nom de chaque enfant est affiché différemment selon que la personne est
|
||||
une feuille de l'arbre (sans enfants connus) ou bien a des enfants connus.
|
||||
Le nom d'une personne dont on connait des enfants apparaît en caractères
|
||||
gras et italiques au lieu d'être affiché en caractères normaux.
|
||||
Si la personne active n'a qu'un enfant, aucun menu ne sera affiché puisqu'il
|
||||
n'y a pas de choix possible. Dans ce cas, l'unique enfant devient la personne
|
||||
active dès que l'on a cliqué sur le bouton. </para>
|
||||
<para>Une flèche vers la gauche est affichée dans la partie gauche de la fenêtre. En cliquant dessus, un menu comprenant les enfants de la personne active apparait. Sélectionner un des enfants le met alors comme personne active. Le nom de chaque enfant est affiché différemment selon que la personne est une feuille de l'arbre (sans enfants connus) ou bien a des enfants connus. Le nom d'une personne dont on connait des enfants apparaît en caractères gras et italiques au lieu d'être affiché en caractères normaux. Si la personne active n'a qu'un enfant, aucun menu ne sera affiché puisqu'il n'y a pas de choix possible. Dans ce cas, l'unique enfant devient la personne active dès que l'on a cliqué sur le bouton.</para>
|
||||
|
||||
<para>Deux flèches vers la droite sont affichées dans la partie droite de la fenêtre.
|
||||
Celle du haut prend comme personne active le père de la personne active.
|
||||
Celle du bas met comme nouvelle personne active la mère de la personne
|
||||
active.
|
||||
Comme précédemment, tout l'affichage change alors en conséquence. </para>
|
||||
<para>Deux flèches vers la droite sont affichées dans la partie droite de la fenêtre. Celle du haut prend comme personne active le père de la personne active. Celle du bas met comme nouvelle personne active la mère de la personne active. Comme précédemment, tout l'affichage change alors en conséquence.</para>
|
||||
|
||||
<!-- ==== Figure: Pedigree View ==== -->
|
||||
<figure id="pedigree-anchor-fig">
|
||||
<title>Vue en arborescence avec ancrage</title>
|
||||
<figure id="pedigree-siblings-cut-fig">
|
||||
<title>Menu Personnel Contextuel</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/pedigree-siblings-cut.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Vue du menu Personnel Contextuel dans l'arborescence</phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>
|
||||
Un clic-droit appelle un menu contextuel.
|
||||
Ce menu indique si l'individu a des <guilabel>Conjoints</guilabel>,
|
||||
des <guilabel>Enfants de mêmes parents</guilabel>,
|
||||
des <guilabel>Enfants</guilabel> et des <guilabel>Parents</guilabel>.
|
||||
Le sous-menus peut indiquer l'absence des données dans la catégorie appropriée.
|
||||
</para>
|
||||
|
||||
|
||||
<!-- ==== Figure: Pedigree View ==== -->
|
||||
<figure id="pedigree-anchor-fig">
|
||||
<title>Vue de l'Arbre avec l'ancre</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/pedigree-anchor.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Shows Pedigree View with the anchor set. </phrase>
|
||||
<phrase>Vue de l'Arbre avec l'ancre </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>Un principe avancé de numérotation des générations existe dans
|
||||
la vue arborescente. Il est rendu disponible en jetant l'ancre
|
||||
sur la personne active. Si l'ancre est jetée, les générations sont étiquetées
|
||||
comme suit : la personne active et toutes celles de sa génération sont
|
||||
<para>Un principe avancé de numérotation des générations existe dans la vue arborescente. Il est rendu disponible en jetant l'ancre sur la personne active. Si l'ancre est jetée, les générations sont étiquetées comme suit : la personne active et toutes celles de sa génération sont
|
||||
étiquetées <guilabel>0</guilabel>.
|
||||
Les ancêtres sont numérotés avec des nombres positifs
|
||||
Les ancêtres sont numérotés avec des nombres positifs
|
||||
(<guilabel>1</guilabel>, <guilabel>2</guilabel>, <guilabel>3</guilabel>,
|
||||
etc.) et les descendants sont numérotés avec des nombres négatifs
|
||||
(<guilabel>-1</guilabel>, <guilabel>-2</guilabel>, <guilabel>-3</guilabel>,
|
||||
etc.). Dans tous les cas, l'étiquette représente le nombre de générations
|
||||
entre la génération étiquetée et la personne active lors du jet de l'ancre.
|
||||
Dans ce mode, vous pouvez vous déplacer dans l'arbre des générations et
|
||||
les compter depuis la personne active.</para>
|
||||
etc.). Dans tous les cas, l'étiquette représente le nombre de générations entre la génération étiquetée et la personne active lors du jet de l'ancre. Dans ce mode, vous pouvez vous déplacer dans l'arbre des générations et les compter depuis la personne active.</para>
|
||||
|
||||
<para>Pour placer l'ancre, choisissez <guilabel>Jeter l'ancre</guilabel> dans
|
||||
le menu contextuel (clic droit) quand la personne voulue est la personne
|
||||
active à la racine de la vue arborescente. Les étiquettes changeront alors
|
||||
et le nom de la personne-ancre sera affiché en bas à gauche de la vue arborescente.
|
||||
La personne-ancre le restera jusqu'à ce que l'ancre soit retirée
|
||||
(choix <guilabel>Lever l'ancre</guilabel> dans le menu contextuel) ou
|
||||
ou encore que la personne active ne soit plus en relation avec la personne-ancre.
|
||||
Ce dernier cas arrive par l'utilisation des outils de déplacement avancé
|
||||
de &app;. Voir <xref linkend="gramps-nav"/> pour plus de détails.
|
||||
<para>Pour placer l'ancre, choisissez <guilabel>Jeter l'ancre</guilabel> dans le menu contextuel (clic droit) quand la personne voulue est la personne active à la racine de la vue arborescente. Les étiquettes changeront alors et le nom de la personne-ancre sera affiché en bas à gauche de la vue arborescente. The labels will change immediately,
|
||||
and the name of the anchor person will appear at the lower left corner
|
||||
of the display area. La personne-ancre le restera jusqu'à ce que l'ancre soit retirée (choix
|
||||
<guilabel>Lever l'ancre</guilabel> dans le menu contextuel) ou ou encore que la personne active ne soit plus en relation avec la personne-ancre. Ce dernier cas arrive par l'utilisation des outils de déplacement avancé de &app;. Voir
|
||||
<xref linkend="gramps-nav"/> pour plus de détails.
|
||||
</para>
|
||||
|
||||
</sect3>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="sources-view">
|
||||
<title>Vue des Sources</title>
|
||||
<sect2 id="sources-view">
|
||||
<title>Sources View</title>
|
||||
|
||||
<!-- ==== Figure: Sources View ==== -->
|
||||
<figure id="sources-fig">
|
||||
@ -428,25 +370,19 @@
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/sources.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre la Vue des Sources. </phrase>
|
||||
<phrase>Vue des Sources </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>La Vue Sources présente les sources d'information conservées dans la
|
||||
base de données. Ceci peut couvrir des documents variés comme les actes de naissance, décès,
|
||||
mariage, livres, journaux, journaux personnels. En fait tout document peut
|
||||
être pris comme une source d'information. Les sources peuvent être utilisée comme référence
|
||||
pour n'importe quel évènement conservé dans la base de données.
|
||||
La Vue Sources présente pour chaque source le
|
||||
<guilabel>Titre</guilabel>, l'<guilabel>Identifiant</guilabel>, et
|
||||
l'<guilabel>Auteur</guilabel>. Le tri peut être fait par rapport
|
||||
à n'importe quelle colonne. Il se fait comme d'habitude : un clic dans
|
||||
l'en-tête de la colonne pour trier en ordre ascendant, un autre clic
|
||||
pour trier dans l'ordre descendant. </para>
|
||||
</sect3>
|
||||
<para>La Vue des Sources présente les sources d'information conservées dans la base de données. Ceci peut couvrir des documents variés comme les actes de naissance, décès, mariage, livres, journaux, journaux personnels. En fait tout document peut être pris comme une source d'information. Les sources peuvent être utilisée comme référence pour n'importe quel évènement conservé dans la base de données. La Vue Sources présente pour chacune le
|
||||
<guilabel>Titre</guilabel>, l'<guilabel>Identifiant</guilabel>, et l'
|
||||
<guilabel>Auteur</guilabel>. Le tri peut être fait par rapport à n'importe quelle colonne. Il se fait comme d'habitude : un clic dans l'en-tête de la colonne pour trier en ordre ascendant, un autre clic pour trier dans l'ordre descendant.
|
||||
L'<guilabel>Editeur de colonnes</guilabel> peut être utilisé pour l'affichage des colonnes.
|
||||
</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="places-view">
|
||||
<sect2 id="places-view">
|
||||
<title>Vue des Lieux</title>
|
||||
|
||||
<!-- ==== Figure: Places View ==== -->
|
||||
@ -455,50 +391,40 @@
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/places.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre la Vue des Lieux. </phrase>
|
||||
<phrase>Vue des Lieux </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>La Vue des Lieux présente la liste des endroits géographiques
|
||||
où se sont passés les évènements enregistrés dans la base de données.
|
||||
Cela peut être les lieux de naissance, mariage, décès des individus,
|
||||
aussi bien que leur lieu d'habitation, de travail ou d'études comme
|
||||
n'importe quelle référence géographique. La Vue des Lieux affiche
|
||||
pour chaque lieu son <guilabel>Nom</guilabel>,
|
||||
<guilabel>Identifiant</guilabel>, <guilabel>Paroisse</guilabel>,
|
||||
<guilabel>Ville</guilabel>, <guilabel>Département</guilabel>,
|
||||
<guilabel>Région</guilabel>, et <guilabel>Pays</guilabel>. Toutes ces colonnes
|
||||
peuvent servir de critère de tri comme d'habitude. </para>
|
||||
</sect3>
|
||||
<para>La Vue des Lieux présente la liste des endroits géographiques où se sont passés les évènements enregistrés dans la base de données. Cela peut être les lieux de naissance, mariage, décès des individus, aussi bien que leur lieu d'habitation, de travail ou d'études comme n'importe quelle référence géographique. La Vue des Lieux affiche pour chaque lieu son
|
||||
<guilabel>Nom</guilabel>,
|
||||
son <guilabel>Identifiant</guilabel>, sa <guilabel>Paroisse</guilabel>,
|
||||
sa <guilabel>Ville</guilabel>, son <guilabel>Département</guilabel>,
|
||||
sa <guilabel>Région</guilabel> et son <guilabel>Pays</guilabel>.
|
||||
Toutes ces colonnes peuvent servir de règle de tri.
|
||||
L'<guilabel>Editeur de colonnes</guilabel> peut être utilisé pour l'affichage des colonnes.</para>
|
||||
</sect2>
|
||||
|
||||
<!-- ================ Main Window Sub-subsection -->
|
||||
<sect3 id="media-view">
|
||||
<title>Vue des Medias</title>
|
||||
<sect2 id="media-view">
|
||||
<title>Media View</title>
|
||||
|
||||
<!-- ==== Figure: Media View ==== -->
|
||||
<figure id="media-fig">
|
||||
<title>Vue des Medias</title>
|
||||
<title>Vue des Médias</title>
|
||||
<screenshot><mediaobject><imageobject><imagedata
|
||||
fileref="figures/media.png" format="PNG"/></imageobject>
|
||||
<textobject>
|
||||
<phrase>Montre la Vue des Medias. </phrase>
|
||||
<phrase>Vue des Médias </phrase>
|
||||
</textobject></mediaobject></screenshot></figure>
|
||||
<!-- ==== End of Figure ==== -->
|
||||
|
||||
<para>La Vue des Medias présente la liste des objets multimedia
|
||||
utilisés dans la base de données. Les objets multimedia sont
|
||||
des fichiers liés aux données de la base généalogique. Techniquement,
|
||||
on peut mettre n'importe quel fichier en objet multimedia.
|
||||
Habituellement, on y met des images, des enregistrements audio ou video.
|
||||
La liste présente pour chaque objet multimedia son
|
||||
<guilabel>Titre</guilabel>,
|
||||
<guilabel>Identifiant</guilabel>, <guilabel>Type</guilabel> et
|
||||
<para>La Vue des Medias présente la liste des objets multimedia utilisés dans la base de données. Les objets multimedia sont des fichiers liés aux données de la base généalogique. Techniquement, on peut mettre n'importe quel fichier en objet multimedia. Habituellement, on y met des images, des enregistrements audio ou video. La liste présente pour chaque objet multimedia son
|
||||
<guilabel>Nom</guilabel>,
|
||||
son <guilabel>Identifiant</guilabel>, son <guilabel>Type</guilabel>, et son
|
||||
<guilabel>Chemin d'accès</guilabel>.
|
||||
Toutes ces colonnes peuvent servir de critère de tri comme d'habitude.
|
||||
La partie supérieure de la fenêtre montre une prévisualisation
|
||||
quand c'est possible ainsi que les informations sur l'objet multimedia
|
||||
sélectionné. </para>
|
||||
</sect3>
|
||||
Toutes ces colonnes peuvent servir de règle de tri.
|
||||
La partie supérieure de la fenêtre montre une prévisualisation quand c'est possible ainsi que les informations sur l'objet multimedia sélectionné. </para>
|
||||
</sect2>
|
||||
|
||||
</sect2>
|
||||
</sect1> <!-- ================ End Main Window ===================== -->
|
||||
</sect1>
|
||||
</chapter>
|
||||
|
181
doc/gramps-manual/fr/preface.xml
Normal file
@ -0,0 +1,181 @@
|
||||
<preface id="gramps-preface">
|
||||
|
||||
<!--
|
||||
User Manual for Gramps - a GTK+/GNOME based genealogy program
|
||||
|
||||
Copyright (C) 2003-2005 Alexander Roitman
|
||||
|
||||
This document 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 document 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$ -->
|
||||
|
||||
<title>Préface</title>
|
||||
<para> &app; est une application de généalogie. &app; est l'acronyme de Genealogical Research and Analysis Management Programming System (Systeme de Programmation pour Recherche, Analyse et Gestion de données généalogiques). En bref, il vous permet de conserver, modifier et chercher des données de
|
||||
généalogie à l'aide d'un ordinateur. Il est semblable à d'autres programmes de généalogie mais il offre en plus des possibilités qui lui sont uniques</para>
|
||||
|
||||
<sect1 id="why-gramps">
|
||||
<title>Pourquoi &app;?</title>
|
||||
<para> &app; a été pensé avec l'idée que la plupart des logiciels de généalogie permettent de saisir des données. Ils suivent en général le modèle de données standard Gedcom. Habituellement, on peut afficher des arbres ascendants ou descendants sur l'écran ou bien les imprimer. On peut ajouter des images aux données. On peut souvent saisir des informations sur des personnes ou des familles non obligatoirement liées avec l'objet de la recherche. D'autres extensions portent sur l'importation ou l'exportation de données ainsi que sur les impressions d'états.
|
||||
<para> &app; cherche à fournir toutes les fonctions communes de ces logiciels et aussi la capacité d'intégrer des informations éparses directement, puis de traiter/réorganiser n'importe quel évènement et/ou donnée dans toute la base de
|
||||
données, pour aider l'utilisateur dans ses recherches, analyses, recoupements et éventuellement mises en relation de données. En bref, cet outil traite toutes les données en un lieu unique avec l'aide de l'ordinateur, en remplaçant le crayon et les montagnes de papier. </para>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 id="whats-new">
|
||||
<title> Ce qu'il y a de neuf depuis la version 1.X</title>
|
||||
<para>Cette section énumère les changements les plus notables par rapport à la dernière branche stable de &app;, la 1.X</para>
|
||||
|
||||
<variablelist>
|
||||
|
||||
<varlistentry><term>Base de données Berkeley </term>
|
||||
<listitem><para>Le format de &app; est maintenant la base de données BSDDB. Ce changement nous a permis de surmonter des issues d'exécution et les conditions de mémoire de la branche 1.0.X. Avec ce format, une base de données de 100 000 individus ne présentent pas un obstacle important.</para>
|
||||
|
||||
<para>
|
||||
Ce nouveau format est ouvert et entièrement documenté dans la référence de l'api distribuée avec la source de &app;
|
||||
</para>
|
||||
|
||||
<para>Une conséquence de la nouvelle base de données reste que les changements, une fois approuvés par l'utilisateur, sont appliqués immédiatement. En bref, une fois que vous cliquez OK chez la personne, la famille, source, lieux, objet médias, ou un événement, tous les changements faits sont enregistrés dans la base de données. Aucun enregistrement n'est nécessaire (ou même possible). En outre, il est possible de défaire des actions récentes.
|
||||
</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Améliorations de l'interface</term>
|
||||
<listitem><para>
|
||||
Il y a de nombreux changements dans l'interface. La plupart d'entre eux sont des améliorations subtiles et tous ne peuvent pas être énumérés ici. Les changements les plus apparents sont:
|
||||
<itemizedlist>
|
||||
<listitem><para>Disparition des étiquettes alphabétiques</para></listitem>
|
||||
<listitem><para>Possibilités d'ajouter/supprimer/modifier la vue des listes</para></listitem>
|
||||
<listitem><para>Disparition des fonctions d'enregistrement et ajout d'une fonction "retour à la dernière version"</para></listitem>
|
||||
<listitem><para>Gestion et déplacements appropriés de la plupart des fenêtres</para></listitem>
|
||||
<listitem><para>Soutien de l'astuce du jour</para></listitem>
|
||||
<listitem><para>menu Personnel contextuel (clic de droit) les parents, les enfants et les conjoints peuvent être affichés dans l'arborescence</para></listitem>
|
||||
<listitem><para>Magicien d'exportation</para></listitem>
|
||||
<listitem><para>Fonction intégrée de recherche dans les vues de liste</para></listitem>
|
||||
<listitem><para>Dialogue de sélecteur de date</para></listitem>
|
||||
<listitem><para>Perfectionnements dans l'édition des noms : les patronymes et les chaînes non transférées </para></listitem>
|
||||
<listitem><para>Ajout du fichier récent (gramps et menu de GNOME)</para></listitem>
|
||||
</itemizedlist>
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Les autres base de données</term>
|
||||
<listitem><para>
|
||||
Avec BSDDB, la base de données est en mémoire, de même que pour le format GRAMPS XML et les GEDCOM. Il est maintenant possible d'ouvrir de façon "indigènes", des données dans ces deux formats (bien que préférant le format par défaut : grdb), sans installer nécessairement une base de données vide et l'importer. Cette approche exige de contenir toutes les données en mémoire, ainsi il est seulement utile pour de petites bases de données (selon la capacité de la mémoire disponible). En un tel mode, les données sont automatiquement sauvées sur la sortie, pour imiter la fonctionnalité de la vraie base de données.
|
||||
|
||||
<warning id="gedcom-inmem1-warn">
|
||||
<title>Edition de GEDCOM</title>
|
||||
<para>
|
||||
Maintenez svp à l'esprit que l'information du fichier GEDCOM peut être perdue pendant l'importation dans &app;. Simplement l'ouverture et le visionnement du dossier ne le changeront pas. Cependant, si des changements étaient faits et ils n'étaient pas exportés, sortir de &app; sauvera les données, avec la perte possible de données.
|
||||
</para>
|
||||
</warning>
|
||||
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Importation et exportation</term>
|
||||
<listitem><para>
|
||||
Les nouveaux filtres d'importation et d'exportation disponibles pour GeneWeb.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Rapports</term>
|
||||
<listitem><para>
|
||||
Un nouveau rapport -- diagramme de statistiques -- a été ajouté à &app;.
|
||||
</para>
|
||||
|
||||
<para>Un changement global du cadre entier de rapport a été accomplis. Tous les rapports se rappellent maintenant leurs options. Il est possible de produire des rapports en ligne de commande, sans lancer la session interactive de &app;. Le rapport api est beaucoup plus simple maintenant, le rendant facile d'écriture. Un exemple simple de code peut être employé pour un rapport autonome, un article de livre, et un rapport en ligne de commande.</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Ligne de commande</term>
|
||||
<listitem><para>La nouvelle fonctionnalité de ligne de commande inclut d'ouvrir l'argument de nom de fichier non donné sans aucun drapeau, aussi bien que de nouveaux drapeaux et options pour la production d'états. En outre, l'addition de nouveaux formats mène à l'addition des options de format disponible.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Internationalisation</term>
|
||||
<listitem><para>
|
||||
L'approche pour écrire et montrer des dates a été complètement retouchée. En particulier, le nouveau cadre tient compte d'une localisation plus profonde des dates montrées, ce qui n'était jamais possible en utilisant les chaînes traduisibles.</para>
|
||||
|
||||
<para>L'internationalisation des noms ont été également améliorées. Des noms peuvent être groupés sous une chaîne non-transférée. Les Patronymes sont soutenus, et il est facile de programmer de nouvelles manières pour montrer des noms, comme celà peut être exigé par diverses cultures et langues.
|
||||
</para></listitem>
|
||||
</varlistentry>
|
||||
|
||||
<varlistentry><term>Intégration de bureau</term>
|
||||
<listitem><para>Tous les formats connus de &app; sont maintenant enregistrés comme types-MIME, chacun avec son icône et &app; en tant que programme par défaut. Double-cliquer sur un dossier avec n'importe lequel de ces formats lancera &app; et ouvrira la base. &app; a également ajouté le soutien des documents récents. Présent dans le menu GNOME et dans &app;.
|
||||
</para>
|
||||
<para>Les préférences sont maintenant correctement en magasin en utilisant GConf, avec des schémas, la division des clefs dans de plus petits annuaires, la vérification des erreurs, et l'avis.</para>
|
||||
</listitem>
|
||||
</varlistentry>
|
||||
|
||||
</variablelist>
|
||||
</sect1>
|
||||
|
||||
|
||||
<sect1 id="typography">
|
||||
<title> Conventions typographiques</title>
|
||||
<para>
|
||||
Dans ce manuel, nous utilisons des mots identifiés par la typographie spéciale:
|
||||
<itemizedlist>
|
||||
<listitem><application>Applications</application></listitem>
|
||||
<listitem><command>Commandes</command> à lancer à la ligne de commande</listitem>
|
||||
<listitem><filename>Nom_de_fichier</filename></listitem>
|
||||
<listitem><replaceable>Texte remplaçable</replaceable></listitem>
|
||||
<listitem><guilabel>Icônes/Onglets</guilabel> pour les boutons et d'autres parties de l'interface graphique</listitem>
|
||||
|
||||
<listitem> Le choix du menu :
|
||||
<menuchoice>
|
||||
<guimenu>Menu</guimenu>
|
||||
<guisubmenu>Sous-menu</guisubmenu>
|
||||
<guimenuitem>Article du Menu</guimenuitem>
|
||||
</menuchoice>
|
||||
</listitem>
|
||||
<listitem><guibutton>Boutons</guibutton> que vous pouvez cliquer</listitem>
|
||||
<listitem><userinput> Quelque chose que vous saisissez</userinput></listitem>
|
||||
</itemizedlist>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
Nous fournissons également des informations additionnelles dans les astuces et les notes, comme suit.
|
||||
|
||||
<tip id="example-tip">
|
||||
<title>Astuce</title>
|
||||
<para>
|
||||
Les astuces et le peu d'information supplémentaire ressembleront à ceci.
|
||||
</para>
|
||||
</tip>
|
||||
|
||||
<note id="example-note">
|
||||
<title>Note</title>
|
||||
<para>
|
||||
Les notes ressembleront à ceci.
|
||||
</para>
|
||||
</note>
|
||||
</para>
|
||||
|
||||
<para>
|
||||
En conclusion, nous avons également des avertissements :
|
||||
|
||||
<warning id="example-warning">
|
||||
<title>Avertissement d'exemple</title>
|
||||
<para>
|
||||
Si vous courrez un ennui, nous vous avertirons à l'avance.
|
||||
</para>
|
||||
</warning>
|
||||
</para>
|
||||
</sect1>
|
||||
|
||||
</preface>
|
@ -1,4 +1,4 @@
|
||||
.TH gramps 1 "@VERSION@" "May 2005" "@VERSION@"
|
||||
.TH gramps 1 "@VERSION@" "August 2005" "@VERSION@"
|
||||
.SH NAME
|
||||
gramps \- Genealogical Research and Analysis Management Programming System.
|
||||
|
||||
@ -59,8 +59,8 @@ the format of that file is guessed according to its extension.
|
||||
|
||||
Formats
|
||||
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).
|
||||
\fB.grdb\fR), \fBgramps\-xml\fR (guessed if \fIFILE\fR ends with
|
||||
\fB.gramps\fR), and \fBgedcom\fR (guessed if \fIFILE\fR ends with \fB.ged\fR).
|
||||
.br
|
||||
|
||||
Formats
|
||||
@ -80,10 +80,6 @@ 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
|
||||
@ -91,11 +87,7 @@ 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 \fBgrdb\fR, \fBgedcom\fR, \fBgramps\-pkg\fR, and \fBgeneweb\fR,
|
||||
the \fIFILE\fR is
|
||||
the name of the corresponding file.
|
||||
Import data from \fIFILE\fR.
|
||||
.br
|
||||
|
||||
When more than one input file is given, each has to be preceded by \fB\-i\fR
|
||||
@ -106,9 +98,9 @@ gramps IDs in the resulting database.
|
||||
|
||||
.TP
|
||||
.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 \fBgrdb\fR, \fBgedcom\fR, \fBwft\fR, \fBgramps\-pkg\fR,
|
||||
Export data into \fIFILE\fR. For \fBiso\fR format, the \fIFILE\fR is actually
|
||||
the name of directory the gramps database will be written into.
|
||||
For \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR, \fBwft\fR, \fBgramps\-pkg\fR,
|
||||
and \fBgeneweb\fR, the \fIFILE\fR is the name of the resulting file.
|
||||
.br
|
||||
|
||||
@ -205,16 +197,16 @@ of \fIstdout\fR and \fIstderr\fR to save messages and errors in files.
|
||||
.SH EXAMPLES
|
||||
.TP
|
||||
To import four databases (whose formats can be determined from their names) and then check the resulting database for errors, one may type:
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3\fR \fB\-i\fR \fIfile4.wft\fR \fB\-a\fR \fIcheck\fR
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-i\fR \fIfile4.wft\fR \fB\-a\fR \fIcheck\fR
|
||||
.TP
|
||||
To explicitly specify the formats in the above example, append filenames with appropriate \fB\-f\fR options:
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-f\fR \fIgedcom\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-f\fR \fIgramps-pkg\fR \fB\-i\fR \fI~/db3\fR \fB\-f\fR \fIgramps\fR \fB\-i\fR \fIfile4.wft\fR \fB\-f\fR \fIwft\fR \fB\-a\fR \fIcheck\fR
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-f\fR \fIgedcom\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-f\fR \fIgramps-pkg\fR \fB\-i\fR \fI~/db3.gramps\fR \fB\-f\fR \fIgramps-xml\fR \fB\-i\fR \fIfile4.wft\fR \fB\-f\fR \fIwft\fR \fB\-a\fR \fIcheck\fR
|
||||
.TP
|
||||
To record the database resulting from all imports, supply \fB\-o\fR flag (use \fB\-f\fR if the filename does not allow gramps to guess the format):
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-o\fR \fI~/new-package\fR \fB\-f\fR \fIgramps-pkg\fR
|
||||
.TP
|
||||
To import three databases and start interactive gramps session with the result:
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3\fR
|
||||
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR
|
||||
.TP
|
||||
Finally, to start normal interactive session type:
|
||||
\fBgramps\fR
|
||||
|
@ -86,8 +86,8 @@ rm -rf $RPM_BUILD_ROOT
|
||||
%{_datadir}/mime/packages/gramps.xml
|
||||
|
||||
%post
|
||||
GCONF_CONFIG_SOURCE=`gconftool-2 --get-default-source` \
|
||||
gconftool-2 --makefile-install-rule \
|
||||
GCONF_CONFIG_SOURCE=`@GCONFTOOL@ --get-default-source` \
|
||||
@GCONFTOOL@ --makefile-install-rule \
|
||||
%{_sysconfdir}/gconf/schemas/gramps.schemas > /dev/null
|
||||
/usr/bin/update-desktop-database %{_datadir}/applications &> /dev/null
|
||||
/usr/bin/update-mime-database %{_datadir}/mime &> /dev/null
|
||||
|
@ -406,7 +406,8 @@ class AddSpouse:
|
||||
#-------------------------------------------------------------------------
|
||||
class LikelyFilter(GenericFilter.Rule):
|
||||
|
||||
category = _('General filters')
|
||||
labels = [ 'Person handle', 'Person gender' ]
|
||||
category = _('General filters')
|
||||
|
||||
def prepare(self,db):
|
||||
person = db.get_person_from_handle(self.list[0])
|
||||
|
@ -52,6 +52,7 @@ import RelLib
|
||||
import Sources
|
||||
import DateEdit
|
||||
import DateHandler
|
||||
import Spell
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -95,6 +96,7 @@ class AddressEditor:
|
||||
self.postal = self.top.get_widget("postal")
|
||||
self.phone = self.top.get_widget("phone")
|
||||
self.note_field = self.top.get_widget("addr_note")
|
||||
self.spell = Spell.Spell(self.note_field)
|
||||
self.priv = self.top.get_widget("priv")
|
||||
self.slist = self.top.get_widget("slist")
|
||||
self.sources_label = self.top.get_widget("sources_tab")
|
||||
|
@ -128,7 +128,8 @@ class ArgHandler:
|
||||
o,v = options[opt_ix]
|
||||
if o in ( '-O', '--open'):
|
||||
fname = v
|
||||
ftype = GrampsMime.get_type(os.path.abspath(os.path.expanduser(fname)))
|
||||
ftype = GrampsMime.get_type(
|
||||
os.path.abspath(os.path.expanduser(fname)))
|
||||
if opt_ix<len(options)-1 \
|
||||
and options[opt_ix+1][0] in ( '-f', '--format'):
|
||||
format = options[opt_ix+1][1]
|
||||
@ -138,7 +139,7 @@ class ArgHandler:
|
||||
continue
|
||||
elif ftype == const.app_gedcom:
|
||||
format = 'gedcom'
|
||||
elif ftype == "x-directory/normal":
|
||||
elif ftype == const.app_gramps_xml:
|
||||
format = 'gramps-xml'
|
||||
elif ftype == const.app_gramps:
|
||||
format = 'grdb'
|
||||
@ -149,11 +150,16 @@ class ArgHandler:
|
||||
self.open = (fname,format)
|
||||
elif o in ( '-i', '--import'):
|
||||
fname = v
|
||||
ftype = GrampsMime.get_type(os.path.abspath(os.path.expanduser(fname)))
|
||||
ftype = GrampsMime.get_type(
|
||||
os.path.abspath(os.path.expanduser(fname)))
|
||||
if opt_ix<len(options)-1 \
|
||||
and options[opt_ix+1][0] in ( '-f', '--format'):
|
||||
format = options[opt_ix+1][1]
|
||||
if format not in ('gedcom','gramps-xml','gramps-pkg','grdb','geneweb'):
|
||||
if format not in ('gedcom',
|
||||
'gramps-xml',
|
||||
'gramps-pkg',
|
||||
'grdb',
|
||||
'geneweb'):
|
||||
print "Invalid format: %s" % format
|
||||
print "Ignoring input file: %s" % fname
|
||||
continue
|
||||
@ -161,7 +167,7 @@ class ArgHandler:
|
||||
format = 'gedcom'
|
||||
elif ftype == const.app_gramps_package:
|
||||
format = 'gramps-pkg'
|
||||
elif ftype == "x-directory/normal":
|
||||
elif ftype == const.app_gramps_xml:
|
||||
format = 'gramps-xml'
|
||||
elif ftype == const.app_gramps:
|
||||
format = 'grdb'
|
||||
@ -177,7 +183,13 @@ class ArgHandler:
|
||||
if opt_ix<len(options)-1 \
|
||||
and options[opt_ix+1][0] in ( '-f', '--format'):
|
||||
outformat = options[opt_ix+1][1]
|
||||
if outformat not in ('gedcom','gramps-xml','gramps-pkg','grdb','iso','wft','geneweb'):
|
||||
if outformat not in ('gedcom',
|
||||
'gramps-xml',
|
||||
'gramps-pkg',
|
||||
'grdb',
|
||||
'iso',
|
||||
'wft',
|
||||
'geneweb'):
|
||||
print "Invalid format: %s" % outformat
|
||||
print "Ignoring output file: %s" % outfname
|
||||
continue
|
||||
@ -189,14 +201,7 @@ class ArgHandler:
|
||||
outformat = 'wft'
|
||||
elif outfname[-2:].upper() == "GW":
|
||||
outformat = 'geneweb'
|
||||
elif not os.path.isfile(outfname):
|
||||
if not os.path.isdir(outfname):
|
||||
try:
|
||||
os.makedirs(outfname,0700)
|
||||
except:
|
||||
print "Cannot create directory %s" % outfname
|
||||
print "Ignoring output file: %s" % outfname
|
||||
continue
|
||||
elif outfname[-6:].upper() == "GRAMPS":
|
||||
outformat = 'gramps-xml'
|
||||
elif fname[-3:].upper() == "GRDB":
|
||||
format = 'grdb'
|
||||
@ -276,7 +281,8 @@ class ArgHandler:
|
||||
if not prompter.chooser():
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("New GRAMPS database was not set up"),
|
||||
_('GRAMPS cannot open non-native data without setting up new GRAMPS database.'))
|
||||
_('GRAMPS cannot open non-native data '
|
||||
'without setting up new GRAMPS database.'))
|
||||
print "Cannot continue without native database. Exiting..."
|
||||
os._exit(1)
|
||||
elif filetype == const.app_gramps_package:
|
||||
@ -287,7 +293,9 @@ class ArgHandler:
|
||||
print "Unknown file type: %s" % filetype
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("Could not open file: %s") % filename,
|
||||
_('File type "%s" is unknown to GRAMPS.\n\nValid types are: GRAMPS database, GRAMPS XML, GRAMPS package, and GEDCOM.') % filetype)
|
||||
_('File type "%s" is unknown to GRAMPS.\n\n'
|
||||
'Valid types are: GRAMPS database, GRAMPS XML, '
|
||||
'GRAMPS package, and GEDCOM.') % filetype)
|
||||
print "Exiting..."
|
||||
os._exit(1)
|
||||
if success:
|
||||
@ -333,7 +341,8 @@ class ArgHandler:
|
||||
|
||||
# Create dir for imported database(s)
|
||||
self.impdir_path = os.path.expanduser("~/.gramps/import" )
|
||||
self.imp_db_path = os.path.expanduser("~/.gramps/import/import_db.grdb" )
|
||||
self.imp_db_path = os.path.expanduser(
|
||||
"~/.gramps/import/import_db.grdb" )
|
||||
if not os.path.isdir(self.impdir_path):
|
||||
try:
|
||||
os.mkdir(self.impdir_path,0700)
|
||||
@ -418,8 +427,7 @@ class ArgHandler:
|
||||
os._exit(1)
|
||||
elif format == 'gramps-xml':
|
||||
try:
|
||||
dbname = os.path.join(filename,const.xmlFile)
|
||||
ReadXML.importData(self.parent.db,dbname,None,self.parent.cl)
|
||||
ReadXML.importData(self.parent.db,filename,None,self.parent.cl)
|
||||
except:
|
||||
print "Error importing %s" % filename
|
||||
os._exit(1)
|
||||
@ -438,7 +446,8 @@ class ArgHandler:
|
||||
try:
|
||||
os.mkdir(tmpdir_path,0700)
|
||||
except:
|
||||
print "Could not create temporary directory %s" % tmpdir_path
|
||||
print "Could not create temporary directory %s" \
|
||||
% tmpdir_path
|
||||
os._exit(1)
|
||||
elif not os.access(tmpdir_path,os.W_OK):
|
||||
print "Temporary directory %s is not writable" % tmpdir_path
|
||||
@ -496,12 +505,11 @@ class ArgHandler:
|
||||
os._exit(1)
|
||||
elif format == 'gramps-xml':
|
||||
filename = os.path.normpath(os.path.abspath(filename))
|
||||
dbname = os.path.join(filename,const.xmlFile)
|
||||
if filename:
|
||||
try:
|
||||
import WriteXML
|
||||
g = WriteXML.XmlWriter(self.parent.db,None,1,1)
|
||||
ret = g.write(dbname)
|
||||
ret = g.write(filename)
|
||||
except:
|
||||
print "Error exporting %s" % filename
|
||||
os._exit(1)
|
||||
@ -532,7 +540,8 @@ class ArgHandler:
|
||||
elif format == 'geneweb':
|
||||
import WriteGeneWeb
|
||||
try:
|
||||
writer = WriteGeneWeb.GeneWebWriter(self.parent.db,None,1,filename)
|
||||
writer = WriteGeneWeb.GeneWebWriter(self.parent.db,
|
||||
None,1,filename)
|
||||
ret = writer.export_data()
|
||||
except:
|
||||
print "Error exporting %s" % filename
|
||||
@ -585,7 +594,8 @@ class ArgHandler:
|
||||
options_class = item[3]
|
||||
if category in (const.CATEGORY_BOOK,const.CATEGORY_CODE,
|
||||
const.CATEGORY_WEB):
|
||||
options_class(self.parent.db,name,category,options_str_dict)
|
||||
options_class(self.parent.db,name,
|
||||
category,options_str_dict)
|
||||
else:
|
||||
Report.cl_report(self.parent.db,name,category,
|
||||
report_class,options_class,options_str_dict)
|
||||
|
@ -53,6 +53,8 @@ import Utils
|
||||
import Sources
|
||||
import AutoComp
|
||||
import RelLib
|
||||
import Spell
|
||||
|
||||
from QuestionDialog import WarningDialog
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -64,7 +66,7 @@ class AttributeEditor:
|
||||
"""
|
||||
Displays a dialog that allows the user to edit an attribute.
|
||||
"""
|
||||
def __init__(self, parent, attrib, title, list, callback,
|
||||
def __init__(self, parent, attrib, title, data_list, callback,
|
||||
parent_window=None):
|
||||
"""
|
||||
Displays the dialog box.
|
||||
@ -88,12 +90,13 @@ class AttributeEditor:
|
||||
self.attrib = attrib
|
||||
self.callback = callback
|
||||
self.child_windows = {}
|
||||
self.alist = list
|
||||
self.alist = data_list
|
||||
|
||||
self.top = gtk.glade.XML(const.dialogFile, "attr_edit","gramps")
|
||||
self.slist = self.top.get_widget("slist")
|
||||
self.value_field = self.top.get_widget("attr_value")
|
||||
self.note_field = self.top.get_widget("attr_note")
|
||||
self.spell = Spell.Spell(self.note_field)
|
||||
self.attrib_menu = self.top.get_widget("attr_menu")
|
||||
# self.type_field = self.attrib_menu.child
|
||||
self.source_field = self.top.get_widget("attr_source")
|
||||
|
110
src/Bookmarks.py
@ -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
|
||||
@ -25,6 +25,13 @@
|
||||
__author__ = "Donald N. Allingham"
|
||||
__version__ = "$Revision$"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Standard python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GTK/Gnome modules
|
||||
@ -38,8 +45,8 @@ import gnome
|
||||
# gramps modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
import NameDisplay
|
||||
import ListModel
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -51,7 +58,7 @@ class Bookmarks :
|
||||
|
||||
def __init__(self,db,bookmarks,menu,callback):
|
||||
"""
|
||||
Creates a the bookmark editor
|
||||
Creates a the bookmark editor.
|
||||
|
||||
bookmarks - list of People
|
||||
menu - parent menu to attach users
|
||||
@ -81,6 +88,21 @@ class Bookmarks :
|
||||
self.bookmarks.append(person_handle)
|
||||
self.redraw()
|
||||
|
||||
def remove_people(self,person_handle_list):
|
||||
"""
|
||||
Removes people from the list of bookmarked people.
|
||||
|
||||
This function is for use *outside* the bookmark editor
|
||||
(removal when person is deleted or merged away).
|
||||
"""
|
||||
modified = False
|
||||
for person_handle in person_handle_list:
|
||||
if person_handle in self.bookmarks:
|
||||
self.bookmarks.remove(person_handle)
|
||||
modified = True
|
||||
if modified:
|
||||
self.redraw()
|
||||
|
||||
def add_to_menu(self,person_handle):
|
||||
"""adds a person's name to the drop down menu"""
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
@ -98,12 +120,18 @@ class Bookmarks :
|
||||
self.top.set_default_size(400,350)
|
||||
self.top.set_has_separator(False)
|
||||
self.top.vbox.set_spacing(5)
|
||||
label = gtk.Label('<span size="larger" weight="bold">%s</span>' % _("Edit Bookmarks"))
|
||||
label = gtk.Label('<span size="larger" weight="bold">%s</span>'
|
||||
% _("Edit Bookmarks"))
|
||||
label.set_use_markup(True)
|
||||
self.top.vbox.pack_start(label,0,0,5)
|
||||
box = gtk.HBox()
|
||||
self.top.vbox.pack_start(box,1,1,5)
|
||||
self.namelist = gtk.CList(1)
|
||||
|
||||
name_titles = [(_('Name'),-1,-1),(_('ID'),-1,-1),('',-1,0)]
|
||||
self.namelist = gtk.TreeView()
|
||||
self.namemodel = ListModel.ListModel(self.namelist,name_titles)
|
||||
self.namemodel_cols = len(name_titles)
|
||||
|
||||
slist = gtk.ScrolledWindow()
|
||||
slist.add_with_viewport(self.namelist)
|
||||
slist.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
||||
@ -111,20 +139,13 @@ class Bookmarks :
|
||||
bbox = gtk.VButtonBox()
|
||||
bbox.set_layout(gtk.BUTTONBOX_START)
|
||||
bbox.set_spacing(6)
|
||||
up = gtk.Button()
|
||||
up.set_label(gtk.STOCK_GO_UP)
|
||||
up.set_use_stock(1)
|
||||
down = gtk.Button()
|
||||
down.set_label(gtk.STOCK_GO_DOWN)
|
||||
down.set_use_stock(1)
|
||||
delete = gtk.Button()
|
||||
delete.set_label(gtk.STOCK_REMOVE)
|
||||
delete.set_use_stock(1)
|
||||
up = gtk.Button(stock=gtk.STOCK_GO_UP)
|
||||
down = gtk.Button(stock=gtk.STOCK_GO_DOWN)
|
||||
delete = gtk.Button(stock=gtk.STOCK_REMOVE)
|
||||
up.connect('clicked', self.up_clicked)
|
||||
down.connect('clicked',self.down_clicked)
|
||||
delete.connect('clicked',self.delete_clicked)
|
||||
self.top.add_button(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL)
|
||||
self.top.add_button(gtk.STOCK_OK,gtk.RESPONSE_OK)
|
||||
self.top.add_button(gtk.STOCK_CLOSE,gtk.RESPONSE_CLOSE)
|
||||
self.top.add_button(gtk.STOCK_HELP,gtk.RESPONSE_HELP)
|
||||
bbox.add(up)
|
||||
bbox.add(down)
|
||||
@ -142,50 +163,53 @@ class Bookmarks :
|
||||
list is not empty, or -1 if it is.
|
||||
"""
|
||||
self.draw_window()
|
||||
index = 0
|
||||
for person_handle in self.bookmarks:
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
name = NameDisplay.displayer.display(person)
|
||||
self.namelist.append([name])
|
||||
self.namelist.set_row_data(index,person_handle)
|
||||
index = index + 1
|
||||
if person:
|
||||
name = NameDisplay.displayer.display(person)
|
||||
gramps_id = person.get_gramps_id()
|
||||
new_iter = self.namemodel.add([name,gramps_id,person_handle])
|
||||
self.namemodel.connect_model()
|
||||
|
||||
self.response = self.top.run()
|
||||
if self.response == gtk.RESPONSE_OK:
|
||||
self.ok_clicked()
|
||||
elif self.response == gtk.RESPONSE_HELP:
|
||||
if self.response == gtk.RESPONSE_HELP:
|
||||
self.help_clicked()
|
||||
self.top.destroy()
|
||||
|
||||
def delete_clicked(self,obj):
|
||||
"""Removes the current selection from the list"""
|
||||
if len(self.namelist.selection) > 0:
|
||||
self.namelist.remove(self.namelist.selection[0])
|
||||
store,the_iter = self.namemodel.get_selected()
|
||||
if not the_iter:
|
||||
return
|
||||
row = self.namemodel.get_selected_row()
|
||||
self.bookmarks.pop(row)
|
||||
self.namemodel.remove(the_iter)
|
||||
|
||||
def up_clicked(self,obj):
|
||||
"""Moves the current selection up one row"""
|
||||
if len(self.namelist.selection) > 0:
|
||||
index = self.namelist.selection[0]
|
||||
self.namelist.swap_rows(index-1,index)
|
||||
row = self.namemodel.get_selected_row()
|
||||
if not row or row == -1:
|
||||
return
|
||||
store,the_iter = self.namemodel.get_selected()
|
||||
data = self.namemodel.get_data(the_iter,range(self.namemodel_cols))
|
||||
self.namemodel.remove(the_iter)
|
||||
self.namemodel.insert(row-1,data,None,1)
|
||||
handle = self.bookmarks.pop(row)
|
||||
self.bookmarks.insert(row-1,handle)
|
||||
|
||||
def down_clicked(self,obj):
|
||||
"""Moves the current selection down one row"""
|
||||
if len(self.namelist.selection) > 0:
|
||||
index = self.namelist.selection[0]
|
||||
if index != self.namelist.rows-1:
|
||||
self.namelist.swap_rows(index+1,index)
|
||||
|
||||
def ok_clicked(self):
|
||||
"""Saves the current bookmarks from the list"""
|
||||
del self.bookmarks[0:]
|
||||
for index in range(0,self.namelist.rows):
|
||||
person_handle = self.namelist.get_row_data(index)
|
||||
if person_handle:
|
||||
self.bookmarks.append(person_handle)
|
||||
self.redraw()
|
||||
row = self.namemodel.get_selected_row()
|
||||
if row + 1 >= self.namemodel.count or row == -1:
|
||||
return
|
||||
store,the_iter = self.namemodel.get_selected()
|
||||
data = self.namemodel.get_data(the_iter,range(self.namemodel_cols))
|
||||
self.namemodel.remove(the_iter)
|
||||
self.namemodel.insert(row+1,data,None,1)
|
||||
handle = self.bookmarks.pop(row)
|
||||
self.bookmarks.insert(row+1,handle)
|
||||
|
||||
def help_clicked(self):
|
||||
"""Display the relevant portion of GRAMPS manual"""
|
||||
gnome.help_display('gramps-manual','gramps-nav')
|
||||
self.response = self.top.run()
|
||||
|
||||
|
@ -120,8 +120,8 @@ class ChooseParents:
|
||||
self.all_females_filter = GenericFilter.GenericFilter()
|
||||
self.all_females_filter.add_rule(GenericFilter.IsFemale([]))
|
||||
|
||||
bh = person.birth_handle
|
||||
if bh and self.db.get_event_from_handle(bh).date.sortval != 0:
|
||||
bev = self.db.get_event_from_handle(person.birth_handle)
|
||||
if bev and bev.date and bev.date.sortval != 0:
|
||||
self.likely_females_filter = self.build_likely(False)
|
||||
self.likely_males_filter = self.build_likely(True)
|
||||
else:
|
||||
@ -571,20 +571,21 @@ class ChooseParents:
|
||||
self.type = CIVIL_UNION_REL
|
||||
father_handle = self.father.get_handle()
|
||||
mother_handle = self.mother.get_handle()
|
||||
self.family = self.find_family(father_handle,mother_handle,trans)
|
||||
else:
|
||||
self.family = None
|
||||
|
||||
if self.family:
|
||||
if self.person.get_handle() in (father_handle,mother_handle):
|
||||
ErrorDialog(_("Error selecting a child"),
|
||||
_("A person cannot be linked as his/her own parent"),
|
||||
self.window)
|
||||
return
|
||||
if self.person.get_handle() in (father_handle,mother_handle):
|
||||
ErrorDialog(_("Error selecting a child"),
|
||||
_("A person cannot be linked as his/her own parent"),
|
||||
self.window)
|
||||
return
|
||||
|
||||
if father_handle or mother_handle:
|
||||
self.family = self.find_family(father_handle,mother_handle,trans)
|
||||
self.family.add_child_handle(self.person.get_handle())
|
||||
self.family.set_relationship(self.type)
|
||||
self.change_family_type(self.family,mother_rel,father_rel)
|
||||
self.db.commit_family(self.family,trans)
|
||||
else:
|
||||
self.family = None
|
||||
self.db.transaction_commit(trans,_("Choose Parents"))
|
||||
self.close(None)
|
||||
|
||||
@ -822,7 +823,8 @@ class ModifyParents:
|
||||
#-------------------------------------------------------------------------
|
||||
class LikelyFilter(GenericFilter.Rule):
|
||||
|
||||
category = _('General filters')
|
||||
labels = [ 'Person handle' ]
|
||||
category = _('General filters')
|
||||
|
||||
def prepare(self,db):
|
||||
person = db.get_person_from_handle(self.list[0])
|
||||
|
@ -137,9 +137,9 @@ class DateParser:
|
||||
}
|
||||
|
||||
french_to_int = {
|
||||
u'vend\xc3\xa9miaire' : 1, 'brumaire' : 2,
|
||||
u'vend\xc3\xa9miaire' : 1, 'brumaire' : 2,
|
||||
'frimaire' : 3, u'niv\xc3\xb4se ': 4,
|
||||
u'pluvi\xc3\xb4se' : 5, u'vent\xc3\xb4se' : 6,
|
||||
u'pluvi\xc3\xb4se' : 5, u'vent\xc3\xb4se' : 6,
|
||||
'germinal' : 7, u'flor\xc3\xa9al' : 8,
|
||||
'prairial' : 9, 'messidor' : 10,
|
||||
'thermidor' : 11, 'fructidor' : 12,
|
||||
@ -239,6 +239,7 @@ class DateParser:
|
||||
self._mod_str = '(' + '|'.join(
|
||||
[ key.replace('.','\.') for key in self.modifier_to_int.keys() ]
|
||||
) + ')'
|
||||
|
||||
# Need to reverse-sort the keys, so that April matches before Apr does.
|
||||
# Otherwise, 'april 2000' would be matched as 'apr' + garbage ('il 2000')
|
||||
_month_keys = self.month_to_int.keys()
|
||||
@ -263,6 +264,7 @@ class DateParser:
|
||||
re.IGNORECASE)
|
||||
self._modifier = re.compile('%s\s+(.*)' % self._mod_str,
|
||||
re.IGNORECASE)
|
||||
self._abt2 = re.compile('<(.*)>',re.IGNORECASE)
|
||||
self._text = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._text2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
@ -283,8 +285,6 @@ class DateParser:
|
||||
re.IGNORECASE)
|
||||
self._itext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._imon_str,
|
||||
re.IGNORECASE)
|
||||
self._range2 = re.compile('%s\s+(\d+)-(\d+)\s*,?\s*((\d+)(/\d+)?)?' % self._mon_str,
|
||||
re.IGNORECASE)
|
||||
self._numeric = re.compile("((\d+)[/\.])?((\d+)[/\.])?(\d+)")
|
||||
self._iso = re.compile("(\d+)-(\d+)-(\d+)")
|
||||
self._rfc = re.compile("(%s,)?\s+(\d|\d\d)\s+%s\s+(\d+)\s+\d\d:\d\d(:\d\d)?\s+(\+|-)\d\d\d\d"
|
||||
@ -474,31 +474,6 @@ class DateParser:
|
||||
return 1
|
||||
return 0
|
||||
|
||||
def match_range2(self,text,cal,qual,date):
|
||||
"""
|
||||
Try matching numerical range date.
|
||||
|
||||
On success, set the date and return 1. On failure return 0.
|
||||
"""
|
||||
match = self._range2.match(text)
|
||||
if match:
|
||||
grps = match.groups()
|
||||
m = self.month_to_int[grps[0].lower()]
|
||||
|
||||
d0 = self._get_int(grps[1])
|
||||
d1 = self._get_int(grps[2])
|
||||
|
||||
if grps[3] == None:
|
||||
y = 0
|
||||
s = None
|
||||
else:
|
||||
y = int(grps[3])
|
||||
s = grps[4] != None
|
||||
date.set(qual,Date.MOD_RANGE,Date.CAL_GREGORIAN,
|
||||
(d0,m,y,s,d1,m,y,s))
|
||||
return 1
|
||||
return 0
|
||||
|
||||
def match_bce(self,text):
|
||||
"""
|
||||
Try matching BCE qualifier.
|
||||
@ -527,8 +502,18 @@ class DateParser:
|
||||
date.set(qual,mod,cal,self.invert_year(start))
|
||||
else:
|
||||
date.set(qual,mod,cal,start)
|
||||
return 1
|
||||
return 0
|
||||
return True
|
||||
match = self._abt2.match(text)
|
||||
if match:
|
||||
grps = match.groups()
|
||||
start = self._parse_subdate(grps[0])
|
||||
mod = Date.MOD_ABOUT
|
||||
if bc:
|
||||
date.set(qual,mod,cal,self.invert_year(start))
|
||||
else:
|
||||
date.set(qual,mod,cal,start)
|
||||
return True
|
||||
return False
|
||||
|
||||
def set_date(self,date,text):
|
||||
"""
|
||||
@ -544,8 +529,6 @@ class DateParser:
|
||||
return
|
||||
if self.match_range(text,cal,qual,date):
|
||||
return
|
||||
if self.match_range2(text,cal,qual,date):
|
||||
return
|
||||
|
||||
(text,bc) = self.match_bce(text)
|
||||
if self.match_modifier(text,cal,qual,bc,date):
|
||||
|
@ -28,6 +28,7 @@
|
||||
import os
|
||||
import locale
|
||||
import ListBox
|
||||
import sets
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -60,6 +61,7 @@ import DateHandler
|
||||
import NameDisplay
|
||||
import NameEdit
|
||||
import NoteEdit
|
||||
import Spell
|
||||
|
||||
from QuestionDialog import WarningDialog, ErrorDialog, SaveDialog, QuestionDialog2
|
||||
|
||||
@ -97,6 +99,7 @@ class EditPerson:
|
||||
|
||||
self.dp = DateHandler.parser
|
||||
self.dd = DateHandler.displayer
|
||||
self.nd = NameDisplay.displayer
|
||||
self.orig_handle = person.get_handle()
|
||||
# UGLY HACK to refresh person object from handle if that exists
|
||||
# done to ensure that the person object is not stale, as it could
|
||||
@ -117,7 +120,6 @@ class EditPerson:
|
||||
self.lists_changed = False
|
||||
self.pdmap = {}
|
||||
self.add_places = []
|
||||
self.name_display = NameDisplay.displayer
|
||||
self.should_guess_gender = (not person.get_gramps_id() and
|
||||
person.get_gender () ==
|
||||
RelLib.Person.UNKNOWN)
|
||||
@ -165,6 +167,7 @@ class EditPerson:
|
||||
|
||||
self.notes_field = self.get_widget("personNotes")
|
||||
self.notes_field.set_editable(mod)
|
||||
self.spell_notes = Spell.Spell(self.notes_field)
|
||||
self.flowed = self.get_widget("flowed")
|
||||
self.flowed.set_sensitive(mod)
|
||||
self.preform = self.get_widget("preform")
|
||||
@ -455,20 +458,20 @@ class EditPerson:
|
||||
self.window.destroy()
|
||||
|
||||
def add_itself_to_winsmenu(self):
|
||||
## self.parent_window.child_windows[self.orig_handle] = self
|
||||
## win_menu_label = self.name_display.display(self.person)
|
||||
## if not win_menu_label.strip():
|
||||
## win_menu_label = _("New Person")
|
||||
## self.win_menu_item = gtk.MenuItem(win_menu_label)
|
||||
## self.win_menu_item.set_submenu(gtk.Menu())
|
||||
## self.win_menu_item.show()
|
||||
## self.uistate.winsmenu.append(self.win_menu_item)
|
||||
## self.winsmenu = self.win_menu_item.get_submenu()
|
||||
## self.menu_item = gtk.MenuItem(_('Edit Person'))
|
||||
## self.menu_item.connect("activate",self.present)
|
||||
## self.menu_item.show()
|
||||
## self.winsmenu.append(self.menu_item)
|
||||
return
|
||||
self.parent_window.child_windows[self.orig_handle] = self
|
||||
win_menu_label = self.name_display.display(self.person)
|
||||
if not win_menu_label.strip():
|
||||
win_menu_label = _("New Person")
|
||||
self.win_menu_item = gtk.MenuItem(win_menu_label)
|
||||
self.win_menu_item.set_submenu(gtk.Menu())
|
||||
self.win_menu_item.show()
|
||||
self.uistate.winsmenu.append(self.win_menu_item)
|
||||
self.winsmenu = self.win_menu_item.get_submenu()
|
||||
self.menu_item = gtk.MenuItem(_('Edit Person'))
|
||||
self.menu_item.connect("activate",self.present)
|
||||
self.menu_item.show()
|
||||
self.winsmenu.append(self.menu_item)
|
||||
|
||||
def remove_itself_from_winsmenu(self):
|
||||
return
|
||||
@ -692,7 +695,7 @@ class EditPerson:
|
||||
the close window"""
|
||||
|
||||
if self.did_data_change() and not GrampsKeys.get_dont_ask():
|
||||
n = "<i>%s</i>" % self.person.get_primary_name().get_regular_name()
|
||||
n = "<i>%s</i>" % self.nd.display(self.person)
|
||||
SaveDialog(_('Save changes to %s?') % n,
|
||||
_('If you close without saving, the changes you '
|
||||
'have made will be lost'),
|
||||
@ -708,7 +711,7 @@ class EditPerson:
|
||||
"""If the data has changed, give the user a chance to cancel
|
||||
the close window"""
|
||||
if self.did_data_change() and not GrampsKeys.get_dont_ask():
|
||||
n = "<i>%s</i>" % self.person.get_primary_name().get_regular_name()
|
||||
n = "<i>%s</i>" % self.nd.display(self.person)
|
||||
SaveDialog(_('Save Changes to %s?') % n,
|
||||
_('If you close without saving, the changes you '
|
||||
'have made will be lost'),
|
||||
@ -909,7 +912,7 @@ class EditPerson:
|
||||
if not person:
|
||||
self.person.set_gramps_id(idval)
|
||||
else:
|
||||
n = self.name_display.display(person)
|
||||
n = self.nd.display(person)
|
||||
msg1 = _("GRAMPS ID value was not changed.")
|
||||
msg2 = _("You have attempted to change the GRAMPS ID to a value "
|
||||
"of %(grampsid)s. This value is already used by %(person)s.") % {
|
||||
@ -946,11 +949,6 @@ class EditPerson:
|
||||
|
||||
self.build_pdmap()
|
||||
|
||||
# if not self.orig_birth.are_equal(self.birth):
|
||||
# if self.orig_birth.is_empty():
|
||||
# self.db.add_event(self.birth,trans)
|
||||
# self.person.set_birth_handle(self.birth.get_handle())
|
||||
# self.db.commit_event(self.birth,trans)
|
||||
|
||||
# Update each of the families child lists to reflect any
|
||||
# change in ordering due to the new birth date
|
||||
@ -1047,7 +1045,8 @@ class EditPerson:
|
||||
if not self.person.get_gramps_id():
|
||||
self.person.set_gramps_id(self.db.find_next_person_gramps_id())
|
||||
self.db.commit_person(self.person, trans)
|
||||
n = self.person.get_primary_name().get_regular_name()
|
||||
|
||||
n = self.nd.display(self.person)
|
||||
|
||||
for (event_ref,event) in self.event_box.get_changed_objects():
|
||||
self.db.commit_event(event,trans)
|
||||
|
@ -48,6 +48,7 @@ import Utils
|
||||
import Sources
|
||||
import ImageSelect
|
||||
import NameDisplay
|
||||
import Spell
|
||||
|
||||
from DdTargets import DdTargets
|
||||
|
||||
@ -117,6 +118,7 @@ class EditPlace:
|
||||
self.latitude.set_editable(mode)
|
||||
self.note = self.top_window.get_widget("place_note")
|
||||
self.note.set_editable(mode)
|
||||
self.spell = Spell.Spell(self.note)
|
||||
|
||||
self.web_list = self.top_window.get_widget("web_list")
|
||||
self.web_url = self.top_window.get_widget("web_url")
|
||||
|
@ -48,6 +48,7 @@ import ListModel
|
||||
import RelLib
|
||||
import NameDisplay
|
||||
import RepositoryRefEdit
|
||||
import Spell
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -207,6 +208,7 @@ class EditSource:
|
||||
self.abbrev = self.top_window.get_widget("abbrev")
|
||||
self.note = self.top_window.get_widget("source_note")
|
||||
self.note.set_editable(mode)
|
||||
self.spell = Spell.Spell(self.note)
|
||||
self.notes_buffer = self.note.get_buffer()
|
||||
self.gallery_label = self.top_window.get_widget("source_edit_gallery")
|
||||
self.refs_label = self.top_window.get_widget("source_edit_refs")
|
||||
|
@ -26,6 +26,7 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
import sets
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -51,6 +52,8 @@ import Date
|
||||
from DateHandler import parser as _dp, displayer as _dd
|
||||
import ImageSelect
|
||||
import DateEdit
|
||||
import Spell
|
||||
|
||||
from QuestionDialog import WarningDialog, ErrorDialog
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -109,6 +112,15 @@ class EventEditor:
|
||||
self.plist = []
|
||||
self.pmap = {}
|
||||
|
||||
self.dp = DateHandler.parser
|
||||
self.dd = DateHandler.displayer
|
||||
|
||||
# build list for menu
|
||||
values = sets.Set(elist)
|
||||
values.union(self.get_event_names())
|
||||
self.elist = list(values)
|
||||
self.elist.sort()
|
||||
|
||||
for key in self.db.get_place_handles():
|
||||
title = self.db.get_place_from_handle(key).get_title()
|
||||
self.pmap[title] = key
|
||||
@ -141,6 +153,7 @@ class EventEditor:
|
||||
self.descr_field.set_editable(not noedit)
|
||||
self.note_field = self.top.get_widget("eventNote")
|
||||
self.note_field.set_editable(not noedit)
|
||||
self.spell = Spell.Spell(self.note_field)
|
||||
self.event_menu = self.top.get_widget("personal_events")
|
||||
self.priv = self.top.get_widget("priv")
|
||||
self.priv.set_sensitive(not noedit)
|
||||
@ -401,6 +414,15 @@ class EventEditor:
|
||||
else:
|
||||
Utils.unbold_label(self.notes_label)
|
||||
|
||||
def commit(self,event,trans):
|
||||
self.db.commit_event(event,trans)
|
||||
|
||||
def get_event_names(self):
|
||||
data = sets.Set(self.db.get_family_event_types())
|
||||
data.union(self.db.get_person_event_types())
|
||||
return list(data)
|
||||
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# EventRefEditor class
|
||||
|
@ -712,6 +712,9 @@ class FamilyView:
|
||||
family.set_handle(fhandle)
|
||||
family.set_gramps_id(self.parent.db.find_next_family_gramps_id())
|
||||
|
||||
if fhandle in old_person.get_family_handle_list():
|
||||
return
|
||||
|
||||
old_person.add_family_handle(fhandle)
|
||||
new_person.add_family_handle(fhandle)
|
||||
|
||||
@ -853,7 +856,7 @@ class FamilyView:
|
||||
|
||||
# commit the transaction
|
||||
self.parent.db.commit_person(child,trans)
|
||||
n = child.get_primary_name().get_regular_name()
|
||||
n = NameDisplay.displayer.display(child)
|
||||
self.parent.db.transaction_commit(trans,_("Remove Child (%s)") % n)
|
||||
self.parent.db.enable_all_signals()
|
||||
self.parent.db.emit('family-update',([family.get_handle()],))
|
||||
@ -904,7 +907,7 @@ class FamilyView:
|
||||
|
||||
person_id = cur_person.get_handle()
|
||||
self.person = self.parent.db.get_person_from_handle(person_id)
|
||||
n = self.person.get_primary_name().get_regular_name()
|
||||
n = NameDisplay.displayer.display(self.person)
|
||||
self.parent.db.transaction_commit(trans,_("Remove Spouse (%s)") % n)
|
||||
|
||||
if len(self.person.get_family_handle_list()) <= 1:
|
||||
@ -1430,7 +1433,7 @@ class FamilyView:
|
||||
self.parent.db.remove_family(fam,trans)
|
||||
|
||||
self.parent.db.commit_person(person,trans)
|
||||
n = person.get_primary_name().get_regular_name()
|
||||
n = NameDisplay.displayer.display(person)
|
||||
self.parent.db.transaction_commit(trans,_("Remove Parents (%s)") % n)
|
||||
|
||||
self.load_family()
|
||||
|
@ -102,6 +102,9 @@ class Rule:
|
||||
|
||||
def set_list(self,list):
|
||||
assert type(list) == type([]) or list == None, "Argument is not a list"
|
||||
assert len(list) == len(self.labels), \
|
||||
"Number of arguments does not match number of labels.\n"\
|
||||
"list: %s\nlabels: %s" % (list,self.labels)
|
||||
self.list = list
|
||||
|
||||
def values(self):
|
||||
@ -999,10 +1002,10 @@ class HasEvent(Rule):
|
||||
description = _("Matches people with a personal event of a particular value")
|
||||
category = _('Event filters')
|
||||
|
||||
def prepare(self,list):
|
||||
def prepare(self,db):
|
||||
self.date = None
|
||||
try:
|
||||
if self.list and self.list[1]:
|
||||
if self.list[1]:
|
||||
self.date = DateHandler.parser.parse(self.list[1])
|
||||
except: pass
|
||||
|
||||
@ -1048,12 +1051,13 @@ class HasFamilyEvent(Rule):
|
||||
description = _("Matches people with a family event of a particular value")
|
||||
category = _('Event filters')
|
||||
|
||||
def prepare(self,list):
|
||||
def prepare(self,db):
|
||||
self.date = None
|
||||
try:
|
||||
if self.list and self.list[1]:
|
||||
if self.list[1]:
|
||||
self.date = DateHandler.parser.parse(self.list[1])
|
||||
except: pass
|
||||
except:
|
||||
pass
|
||||
|
||||
def apply(self,db,person):
|
||||
for f_id in person.get_family_handle_list():
|
||||
@ -1071,12 +1075,16 @@ class HasFamilyEvent(Rule):
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()):
|
||||
val = 0
|
||||
pl_id = event.get_place_handle()
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title()
|
||||
if self.list[2] and pn.find(self.list[2].upper()) == -1:
|
||||
if self.list[2]:
|
||||
pl_id = event.get_place_handle()
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title().upper()
|
||||
if pn.find(self.list[2].upper()) == -1:
|
||||
val = 0
|
||||
else:
|
||||
val = 0
|
||||
|
||||
if val == 1:
|
||||
return True
|
||||
return False
|
||||
@ -1105,7 +1113,7 @@ class HasRelationship(Rule):
|
||||
for f_id in person.get_family_handle_list():
|
||||
f = db.get_family_from_handle(f_id)
|
||||
cnt = cnt + len(f.get_child_handle_list())
|
||||
if self.list[1] and int(self.list[1]) == f.get_relationship():
|
||||
if self.list[1] and int(self.list[1]) == f.get_relationship():
|
||||
rel_type = 1
|
||||
|
||||
# if number of relations specified
|
||||
@ -1147,7 +1155,7 @@ class HasBirth(Rule):
|
||||
|
||||
def __init__(self,list):
|
||||
Rule.__init__(self,list)
|
||||
if self.list and self.list[0]:
|
||||
if self.list[0]:
|
||||
self.date = DateHandler.parser.parse(self.list[0])
|
||||
else:
|
||||
self.date = None
|
||||
@ -1158,16 +1166,20 @@ class HasBirth(Rule):
|
||||
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:
|
||||
if self.list[2] \
|
||||
and ed.find(self.list[2].upper())==-1:
|
||||
return False
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()) == 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:
|
||||
if self.list[1]:
|
||||
pl_id = event.get_place_handle()
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title().upper()
|
||||
if pn.find(self.list[1].upper()) == -1:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
||||
@ -1186,7 +1198,7 @@ class HasDeath(Rule):
|
||||
|
||||
def __init__(self,list):
|
||||
Rule.__init__(self,list)
|
||||
if self.list and self.list[0]:
|
||||
if self.list[0]:
|
||||
self.date = DateHandler.parser.parse(self.list[0])
|
||||
else:
|
||||
self.date = None
|
||||
@ -1197,16 +1209,20 @@ class HasDeath(Rule):
|
||||
return False
|
||||
event = db.get_event_from_handle(event_handle)
|
||||
ed = event.get_description().upper()
|
||||
if self.list[2] and ed.find(self.list[2].upper())==-1:
|
||||
if self.list[2] \
|
||||
and ed.find(self.list[2].upper())==-1:
|
||||
return False
|
||||
if self.date:
|
||||
if date_cmp(self.date,event.get_date_object()) == 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 self.list[1] and pn.find(self.list[1].upper()) == -1:
|
||||
if self.list[1]:
|
||||
pl_id = event.get_place_handle()
|
||||
if pl_id:
|
||||
pl = db.get_place_from_handle(pl_id)
|
||||
pn = pl.get_title().upper()
|
||||
if self.list[1] and pn.find(self.list[1].upper()) == -1:
|
||||
return False
|
||||
else:
|
||||
return False
|
||||
return True
|
||||
|
||||
@ -1591,21 +1607,17 @@ class IsWitness(Rule):
|
||||
return person.handle in self.map
|
||||
|
||||
def build_witness_list(self):
|
||||
event_type = None
|
||||
if self.list and self.list[0]:
|
||||
event_type = self.list[0]
|
||||
if not self.list or event_type:
|
||||
for person_handle in self.db.get_person_handles():
|
||||
p = self.db.get_person_from_handle(person_handle)
|
||||
self.get_witness_of_events( event_type,
|
||||
p.get_event_list()+[p.get_birth_handle(), p.get_death_handle()])
|
||||
event_type = None
|
||||
if self.list and self.list[1]:
|
||||
event_type = self.list[1]
|
||||
if not self.list or event_type:
|
||||
for family_handle in self.db.get_family_handles():
|
||||
f = self.db.get_family_from_handle(family_handle)
|
||||
self.get_witness_of_events(event_type, f.get_event_list())
|
||||
for person_handle in self.db.get_person_handles():
|
||||
p = self.db.get_person_from_handle(person_handle)
|
||||
self.get_witness_of_events(self.list[0],
|
||||
p.get_event_list()+
|
||||
[p.get_birth_handle(),
|
||||
p.get_death_handle()]
|
||||
)
|
||||
|
||||
for family_handle in self.db.get_family_handles():
|
||||
f = self.db.get_family_from_handle(family_handle)
|
||||
self.get_witness_of_events(self.list[1],f.get_event_list())
|
||||
|
||||
def get_witness_of_events(self, event_type, event_list):
|
||||
if not event_list:
|
||||
@ -1672,7 +1684,7 @@ class HasTextMatchingSubstringOf(Rule):
|
||||
|
||||
def apply(self,db,person):
|
||||
if person.handle in self.person_map: # Cached by matching Source?
|
||||
return self.person_map[handle]
|
||||
return self.person_map[person.handle]
|
||||
if self.match_object(person): # first match the person itself
|
||||
return True
|
||||
for event_handle in person.get_event_list()+[person.get_birth_handle(), person.get_death_handle()]:
|
||||
@ -1854,7 +1866,7 @@ class HasNoteMatchingSubstringOf(Rule):
|
||||
def apply(self,db,person):
|
||||
n = person.get_note()
|
||||
if n:
|
||||
return n.find(self.list[0]) != -1
|
||||
return n.upper().find(self.list[0].upper()) != -1
|
||||
return False
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -2269,8 +2281,12 @@ class FilterParser(handler.ContentHandler):
|
||||
|
||||
def endElement(self,tag):
|
||||
if tag == "rule" and self.r != None:
|
||||
rule = self.r(self.a)
|
||||
self.f.add_rule(rule)
|
||||
if len(self.r.labels) != len(self.a):
|
||||
print "ERROR: Invalid number of arguments in filter '%s'!" %\
|
||||
self.f.get_name()
|
||||
else:
|
||||
rule = self.r(self.a)
|
||||
self.f.add_rule(rule)
|
||||
|
||||
def characters(self, data):
|
||||
pass
|
||||
@ -2287,7 +2303,15 @@ class ParamFilter(GenericFilter):
|
||||
|
||||
def apply(self,db,id_list=None):
|
||||
for rule in self.flist:
|
||||
rule.set_list(self.param_list)
|
||||
#rule.set_list(self.param_list)
|
||||
#
|
||||
# The above breaks filters with more than one param
|
||||
# Need to change existing params one by one to keep
|
||||
# the correct number of arguments
|
||||
new_list = rule.list[:]
|
||||
for ix in range(len(self.param_list)):
|
||||
new_list[ix] = self.param_list[ix]
|
||||
rule.set_list(new_list)
|
||||
for rule in self.flist:
|
||||
rule.prepare(db)
|
||||
result = GenericFilter.apply(self,db,id_list)
|
||||
@ -2369,7 +2393,7 @@ class GrampsFilterComboBox(gtk.ComboBox):
|
||||
active = self.get_active()
|
||||
if active < 0:
|
||||
return None
|
||||
key = unicode(self.store[active][0])
|
||||
key = self.store[active][0]
|
||||
return self.map[key]
|
||||
|
||||
|
||||
|
@ -32,6 +32,7 @@ Provides the Berkeley DB (BSDDB) database backend for GRAMPS
|
||||
import os
|
||||
import time
|
||||
import locale
|
||||
import sets
|
||||
from gettext import gettext as _
|
||||
from bsddb import dbshelve, db
|
||||
|
||||
@ -137,6 +138,7 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.env.open(os.path.dirname(name), flags)
|
||||
|
||||
name = os.path.basename(name)
|
||||
self.save_name = name
|
||||
|
||||
self.family_map = self.dbopen(name, "family")
|
||||
self.place_map = self.dbopen(name, "places")
|
||||
@ -206,12 +208,15 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.place_map.associate(self.pid_trans, find_idmap, openflags)
|
||||
self.media_map.associate(self.oid_trans, find_idmap, openflags)
|
||||
self.source_map.associate(self.sid_trans, find_idmap, openflags)
|
||||
self.event_map.associate(self.eventnames, find_eventname, openflags)
|
||||
self.undodb = db.DB()
|
||||
self.undodb.open(self.undolog, db.DB_RECNO, db.DB_CREATE)
|
||||
|
||||
self.metadata = self.dbopen(name, "meta")
|
||||
self.bookmarks = self.metadata.get('bookmarks')
|
||||
self.family_event_names = sets.Set(self.metadata.get('fevent_names',[]))
|
||||
self.individual_event_names = sets.Set(self.metadata.get('pevent_names',[]))
|
||||
self.family_attributes = sets.Set(self.metadata.get('fattr_names',[]))
|
||||
self.individual_attributes = sets.Set(self.metadata.get('pattr_names',[]))
|
||||
|
||||
gstats = self.metadata.get('gender_stats')
|
||||
|
||||
@ -227,6 +232,99 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.genderStats = GenderStats(gstats)
|
||||
return 1
|
||||
|
||||
def rebuild_secondary(self,callback=None):
|
||||
|
||||
# Repair secondary indices related to person_map
|
||||
|
||||
self.id_trans.close()
|
||||
self.surnames.close()
|
||||
|
||||
self.id_trans = db.DB(self.env)
|
||||
self.id_trans.set_flags(db.DB_DUP)
|
||||
self.id_trans.open(self.save_name, "idtrans", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.id_trans.truncate()
|
||||
|
||||
self.surnames = db.DB(self.env)
|
||||
self.surnames.set_flags(db.DB_DUP)
|
||||
self.surnames.open(self.save_name, "surnames", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.surnames.truncate()
|
||||
|
||||
self.person_map.associate(self.surnames, find_surname, db.DB_CREATE)
|
||||
self.person_map.associate(self.id_trans, find_idmap, db.DB_CREATE)
|
||||
|
||||
for key in self.person_map.keys():
|
||||
if callback:
|
||||
callback()
|
||||
self.person_map[key] = self.person_map[key]
|
||||
|
||||
self.person_map.sync()
|
||||
|
||||
# Repair secondary indices related to family_map
|
||||
|
||||
self.fid_trans.close()
|
||||
self.fid_trans = db.DB(self.env)
|
||||
self.fid_trans.set_flags(db.DB_DUP)
|
||||
self.fid_trans.open(self.save_name, "fidtrans", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.fid_trans.truncate()
|
||||
self.family_map.associate(self.fid_trans, find_idmap, db.DB_CREATE)
|
||||
|
||||
for key in self.family_map.keys():
|
||||
if callback:
|
||||
callback()
|
||||
self.family_map[key] = self.family_map[key]
|
||||
self.family_map.sync()
|
||||
|
||||
# Repair secondary indices related to place_map
|
||||
|
||||
self.pid_trans.close()
|
||||
self.pid_trans = db.DB(self.env)
|
||||
self.pid_trans.set_flags(db.DB_DUP)
|
||||
self.pid_trans.open(self.save_name, "pidtrans", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.pid_trans.truncate()
|
||||
self.place_map.associate(self.pid_trans, find_idmap, db.DB_CREATE)
|
||||
|
||||
for key in self.place_map.keys():
|
||||
if callback:
|
||||
callback()
|
||||
self.place_map[key] = self.place_map[key]
|
||||
self.place_map.sync()
|
||||
|
||||
# Repair secondary indices related to media_map
|
||||
|
||||
self.oid_trans.close()
|
||||
self.oid_trans = db.DB(self.env)
|
||||
self.oid_trans.set_flags(db.DB_DUP)
|
||||
self.oid_trans.open(self.save_name, "oidtrans", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.oid_trans.truncate()
|
||||
self.media_map.associate(self.oid_trans, find_idmap, db.DB_CREATE)
|
||||
|
||||
for key in self.media_map.keys():
|
||||
if callback:
|
||||
callback()
|
||||
self.media_map[key] = self.media_map[key]
|
||||
self.media_map.sync()
|
||||
|
||||
# Repair secondary indices related to source_map
|
||||
|
||||
self.sid_trans.close()
|
||||
self.sid_trans = db.DB(self.env)
|
||||
self.sid_trans.set_flags(db.DB_DUP)
|
||||
self.sid_trans.open(self.save_name, "sidtrans", db.DB_HASH,
|
||||
flags=db.DB_CREATE)
|
||||
self.sid_trans.truncate()
|
||||
self.source_map.associate(self.sid_trans, find_idmap, db.DB_CREATE)
|
||||
|
||||
for key in self.source_map.keys():
|
||||
if callback:
|
||||
callback()
|
||||
self.source_map[key] = self.source_map[key]
|
||||
self.source_map.sync()
|
||||
|
||||
def abort_changes(self):
|
||||
while self.undo():
|
||||
pass
|
||||
@ -246,6 +344,10 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
if not self.readonly:
|
||||
self.metadata['bookmarks'] = self.bookmarks
|
||||
self.metadata['gender_stats'] = self.genderStats.save_stats()
|
||||
self.metadata['fevent_names'] = list(self.family_event_names)
|
||||
self.metadata['pevent_names'] = list(self.individual_event_names)
|
||||
self.metadata['fattr_names'] = list(self.family_attributes)
|
||||
self.metadata['pattr_names'] = list(self.individual_attributes)
|
||||
self.metadata.close()
|
||||
self.surnames.close()
|
||||
self.eventnames.close()
|
||||
@ -305,6 +407,7 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.name_group.delete(name)
|
||||
else:
|
||||
self.name_group[name] = group
|
||||
self.emit('person-rebuild')
|
||||
|
||||
def get_surname_list(self):
|
||||
names = self.surnames.keys()
|
||||
@ -319,7 +422,6 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
names = self.eventnames.keys()
|
||||
a = {}
|
||||
for name in names:
|
||||
|
||||
a[unicode(name)] = 1
|
||||
vals = a.keys()
|
||||
vals.sort()
|
||||
@ -496,7 +598,6 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.sid_trans.sync()
|
||||
self.rid_trans.sync()
|
||||
self.oid_trans.sync()
|
||||
self.eventnames.sync()
|
||||
self.undodb.sync()
|
||||
|
||||
def upgrade(self):
|
||||
@ -519,10 +620,8 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
if version < 7:
|
||||
self.upgrade_7()
|
||||
if version < 8:
|
||||
#self.upgrade_7()
|
||||
raise Exception("Currently there is no database upgrade available")
|
||||
else:
|
||||
print 'Successfully finished all upgrades'
|
||||
self.upgrade_9()
|
||||
|
||||
self.metadata['version'] = _DBVERSION
|
||||
|
||||
def upgrade_2(self,child_rel_notrans):
|
||||
@ -866,6 +965,34 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
|
||||
def upgrade_8(self):
|
||||
print "Upgrading to DB version 8"
|
||||
cursor = self.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,val = data
|
||||
handle_list = val[8]
|
||||
if type(handle_list) == list:
|
||||
# Check to prevent crash on corrupted data (event_list=None)
|
||||
for handle in handle_list:
|
||||
event = self.get_event_from_handle(handle)
|
||||
self.individual_event_names.add(event.name)
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
cursor = self.get_family_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
handle,val = data
|
||||
handle_list = val[6]
|
||||
if type(handle_list) == list:
|
||||
# Check to prevent crash on corrupted data (event_list=None)
|
||||
for handle in handle_list:
|
||||
event = self.get_event_from_handle(handle)
|
||||
self.family_event_names.add(event.name)
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
def upgrade_9(self):
|
||||
print "Upgrading to DB version 9"
|
||||
# First, make sure the stored default person handle is str, not unicode
|
||||
try:
|
||||
handle = self.metadata['default']
|
||||
@ -887,4 +1014,4 @@ class GrampsBSDDB(GrampsDbBase):
|
||||
self.commit_source(source,trans)
|
||||
data = cursor.next()
|
||||
cursor.close()
|
||||
self.transaction_commit(trans,"Upgrade to DB version 7")
|
||||
self.transaction_commit(trans,"Upgrade to DB version 9")
|
||||
|
@ -36,6 +36,7 @@ import random
|
||||
import locale
|
||||
import re
|
||||
from sys import maxint
|
||||
import sets
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -174,6 +175,11 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
self.omap_index = 0
|
||||
self.rmap_index = 0
|
||||
|
||||
self.family_event_names = sets.Set()
|
||||
self.individual_event_names = sets.Set()
|
||||
self.individual_attributes = sets.Set()
|
||||
self.family_attributes = sets.Set()
|
||||
|
||||
self.set_person_id_prefix(GrampsKeys.get_person_id_prefix())
|
||||
self.set_object_id_prefix(GrampsKeys.get_object_id_prefix())
|
||||
self.set_family_id_prefix(GrampsKeys.get_family_id_prefix())
|
||||
@ -201,7 +207,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
self.repository_map = None
|
||||
self.media_map = None
|
||||
self.event_map = None
|
||||
self.eventnames = None
|
||||
self.metadata = None
|
||||
self.name_group = None
|
||||
self.undo_callback = None
|
||||
@ -217,6 +222,9 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
self.place2title = {}
|
||||
self.name_group = {}
|
||||
|
||||
def rebuild_secondary(self,callback=None):
|
||||
pass
|
||||
|
||||
def version_supported(self):
|
||||
""" Returns True when the file has a supported version"""
|
||||
return True
|
||||
@ -330,7 +338,10 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
self.genderStats.count_person(person,self)
|
||||
else:
|
||||
self.genderStats.count_person(person,self)
|
||||
|
||||
|
||||
for attr in person.attribute_list:
|
||||
self.individual_attributes.add(attr.type)
|
||||
|
||||
def commit_media_object(self,obj,transaction,change_time=None):
|
||||
"""
|
||||
Commits the specified MediaObject to the database, storing the changes
|
||||
@ -358,6 +369,14 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
transaction.place_update, transaction.place_add,
|
||||
transaction, change_time)
|
||||
|
||||
def commit_personal_event(self,event,transaction,change_time=None):
|
||||
self.individual_event_names.add(event.name)
|
||||
self.commit_event(event,transaction,change_time)
|
||||
|
||||
def commit_family_event(self,event,transaction,change_time=None):
|
||||
self.family_event_names.add(event.name)
|
||||
self.commit_event(event,transaction,change_time)
|
||||
|
||||
def commit_event(self,event,transaction,change_time=None):
|
||||
"""
|
||||
Commits the specified Event to the database, storing the changes
|
||||
@ -376,6 +395,9 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
transaction.family_update, transaction.family_add,
|
||||
transaction, change_time)
|
||||
|
||||
for attr in family.attribute_list:
|
||||
self.family_attributes.add(attr.type)
|
||||
|
||||
def commit_repository(self,repository,transaction,change_time=None):
|
||||
"""
|
||||
Commits the specified Repository to the database, storing the changes
|
||||
@ -740,6 +762,36 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
"""
|
||||
return len(self.person_map)
|
||||
|
||||
def get_number_of_families(self):
|
||||
"""
|
||||
Returns the number of families currently in the databse.
|
||||
"""
|
||||
return len(self.family_map)
|
||||
|
||||
def get_number_of_events(self):
|
||||
"""
|
||||
Returns the number of events currently in the databse.
|
||||
"""
|
||||
return len(self.event_map)
|
||||
|
||||
def get_number_of_places(self):
|
||||
"""
|
||||
Returns the number of places currently in the databse.
|
||||
"""
|
||||
return len(self.place_map)
|
||||
|
||||
def get_number_of_sources(self):
|
||||
"""
|
||||
Returns the number of sources currently in the databse.
|
||||
"""
|
||||
return len(self.source_map)
|
||||
|
||||
def get_number_of_media_objects(self):
|
||||
"""
|
||||
Returns the number of media objects currently in the databse.
|
||||
"""
|
||||
return len(self.media_map)
|
||||
|
||||
def get_person_handles(self,sort_handles=True):
|
||||
"""
|
||||
Returns a list of database handles, one handle for each Person in
|
||||
@ -1082,7 +1134,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
Returns the list of personal event types contained within the
|
||||
database. The function must be overridden in the derived class.
|
||||
"""
|
||||
assert False, "Needs to be overridden in the derived class"
|
||||
return list(self.individual_event_names)
|
||||
|
||||
def get_bookmarks(self):
|
||||
"""returns the list of Person handles in the bookmarks"""
|
||||
@ -1130,22 +1182,23 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
|
||||
def get_person_event_types(self):
|
||||
"""returns a list of all Event types assocated with Person
|
||||
instances in the database"""
|
||||
return []
|
||||
return list(self.individual_event_names)
|
||||
|
||||
def get_person_attribute_types(self):
|
||||
"""returns a list of all Attribute types assocated with Person
|
||||
instances in the database"""
|
||||
return []
|
||||
return list(self.individual_attributes)
|
||||
|
||||
def get_family_attribute_types(self):
|
||||
"""returns a list of all Attribute types assocated with Family
|
||||
instances in the database"""
|
||||
return []
|
||||
return list(self.family_attributes)
|
||||
|
||||
def get_family_event_types(self):
|
||||
"""returns a list of all Event types assocated with Family
|
||||
instances in the database"""
|
||||
return []
|
||||
return list(self.family_event_names)
|
||||
|
||||
|
||||
def get_media_attribute_types(self):
|
||||
"""returns a list of all Attribute types assocated with Media
|
||||
|
@ -34,6 +34,7 @@ from bsddb import dbshelve, db
|
||||
#-------------------------------------------------------------------------
|
||||
from RelLib import *
|
||||
from GrampsDbBase import *
|
||||
import sets
|
||||
|
||||
class GrampsInMemCursor(GrampsCursor):
|
||||
"""
|
||||
@ -120,6 +121,9 @@ class GrampsInMemDB(GrampsDbBase):
|
||||
def get_media_cursor(self):
|
||||
return GrampsInMemCursor(self.media_map)
|
||||
|
||||
def get_event_cursor(self):
|
||||
return GrampsInMemCursor(self.event_map)
|
||||
|
||||
def close(self):
|
||||
if not self.readonly:
|
||||
self.undodb.close()
|
||||
@ -164,7 +168,18 @@ class GrampsInMemDB(GrampsDbBase):
|
||||
vals.sort()
|
||||
return vals
|
||||
|
||||
|
||||
#FIXME: WHICH one to keep?
|
||||
def _del_person(self,handle):
|
||||
#def remove_person(self,handle,transaction):
|
||||
if self.readonly or not handle or str(handle) not in self.person_map:
|
||||
return
|
||||
person = self.get_person_from_handle(handle)
|
||||
self.genderStats.uncount_person (person)
|
||||
if transaction != None:
|
||||
old_data = self.person_map.get(handle)
|
||||
transaction.add(PERSON_KEY,handle,old_data)
|
||||
self.emit('person-delete',([handle],))
|
||||
del self.id_trans[person.get_gramps_id()]
|
||||
del self.person_map[handle]
|
||||
|
||||
|
@ -58,6 +58,7 @@ import DateEdit
|
||||
import DateHandler
|
||||
import Date
|
||||
import ImgManip
|
||||
import Spell
|
||||
from QuestionDialog import ErrorDialog
|
||||
from DdTargets import DdTargets
|
||||
|
||||
@ -283,10 +284,18 @@ class Gallery(ImageSelect):
|
||||
int(event.x),int(event.y)):
|
||||
self.drag_item = widget.get_item_at(self.remember_x,
|
||||
self.remember_y)
|
||||
icon_index = self.get_index(widget,event.x,event.y)-1
|
||||
icon_index = self.get_index(widget,event.x,event.y)
|
||||
if icon_index == -1:
|
||||
return
|
||||
for i in self.dataobj.get_media_list():
|
||||
handle = i.get_reference_handle()
|
||||
m = self.db.get_object_from_handle(handle)
|
||||
|
||||
self.sel_obj = self.dataobj.get_media_list()[icon_index]
|
||||
|
||||
handle = self.sel_obj.get_reference_handle()
|
||||
media_obj = self.db.get_object_from_handle(handle)
|
||||
|
||||
if self.drag_item:
|
||||
widget.drag_begin([DdTargets.MEDIAOBJ.target()]+_drag_targets,
|
||||
gtk.gdk.ACTION_COPY|gtk.gdk.ACTION_MOVE,
|
||||
@ -328,13 +337,6 @@ class Gallery(ImageSelect):
|
||||
return True
|
||||
elif event.type == gtk.gdk.BUTTON_RELEASE:
|
||||
self.button = 0
|
||||
# elif event.type == gtk.gdk._2BUTTON_PRESS and event.button == 1:
|
||||
# item = widget.get_item_at(event.x,event.y)
|
||||
# if item:
|
||||
# (i,t,b,self.photo,oid) = self.p_map[item]
|
||||
# LocalMediaProperties(self.photo,self.path,self,self.parent_window)
|
||||
# self.in_event = 0
|
||||
# return True
|
||||
elif event.type == gtk.gdk.MOTION_NOTIFY:
|
||||
if event.state & gtk.gdk.BUTTON1_MASK:
|
||||
# Get the new position and move by the difference
|
||||
@ -453,9 +455,9 @@ class Gallery(ImageSelect):
|
||||
Utils.unbold_label(self.parent.gallery_label)
|
||||
|
||||
def get_index(self,obj,x,y):
|
||||
x_offset = x/(_IMAGEX+_PAD)
|
||||
y_offset = y/(_IMAGEY+_PAD)
|
||||
index = (y_offset*(1+self.max))+x_offset
|
||||
x_offset = int(x)/(_IMAGEX+_PAD)
|
||||
y_offset = int(y)/(_IMAGEY+_PAD)
|
||||
index = (y_offset*(self.max))+x_offset
|
||||
return min(index,len(self.dataobj.get_media_list()))
|
||||
|
||||
def on_photolist_drag_data_received(self,w, context, x, y, data, info, time):
|
||||
@ -712,6 +714,7 @@ class LocalMediaProperties:
|
||||
mt = Utils.get_mime_description(mtype)
|
||||
self.change_dialog.get_widget("type").set_text(mt)
|
||||
self.notes = self.change_dialog.get_widget("notes")
|
||||
self.spell = Spell.Spell(self.notes)
|
||||
if self.photo.get_note():
|
||||
self.notes.get_buffer().set_text(self.photo.get_note())
|
||||
Utils.bold_label(self.notes_label)
|
||||
@ -732,7 +735,9 @@ class LocalMediaProperties:
|
||||
})
|
||||
|
||||
media_obj = self.db.get_object_from_handle(self.photo.get_reference_handle())
|
||||
global_note = self.change_dialog.get_widget('global_notes').get_buffer()
|
||||
gnote = self.change_dialog.get_widget('global_notes')
|
||||
spell = Spell.Spell(gnote)
|
||||
global_note = gnote.get_buffer()
|
||||
global_note.insert_at_cursor(media_obj.get_note())
|
||||
|
||||
self.redraw_attr_list()
|
||||
@ -920,15 +925,14 @@ class GlobalMediaProperties:
|
||||
|
||||
self.notes = self.change_dialog.get_widget("notes")
|
||||
self.notes.set_editable(mode)
|
||||
|
||||
self.spell = Spell.Spell(self.notes)
|
||||
|
||||
self.date_edit = self.change_dialog.get_widget("date_edit")
|
||||
self.date_edit.set_sensitive(mode)
|
||||
|
||||
self.date_check = DateEdit.DateEdit(
|
||||
self.date_object,
|
||||
self.date_entry,
|
||||
self.date_edit,
|
||||
self.window)
|
||||
self.date_object, self.date_entry,
|
||||
self.date_edit, self.window)
|
||||
|
||||
self.pixmap = self.change_dialog.get_widget("pixmap")
|
||||
self.attr_type = self.change_dialog.get_widget("attr_type")
|
||||
|
@ -120,3 +120,9 @@ def get_thumbnail_image(path):
|
||||
return gtk.gdk.pixbuf_new_from_file(filename)
|
||||
except gobject.GError:
|
||||
return None
|
||||
|
||||
def get_thumbnail_path(path):
|
||||
filename = _build_thumb_path(path)
|
||||
if not os.path.isfile(filename):
|
||||
set_thumbnail_image(path)
|
||||
return filename
|
||||
|
@ -1,10 +1,12 @@
|
||||
# $Id$
|
||||
|
||||
# This is the src level Makefile for Gramps
|
||||
SUBDIRS = docgen plugins dates data po
|
||||
|
||||
# For intl. support, how do we compile?
|
||||
MOSTLYCLEANFILES =
|
||||
CLEANFILES = const.pyc const.pyo
|
||||
|
||||
# What are the PYTHON scripts for this package that need to be handled?
|
||||
#
|
||||
# We only want optimized byte-compiled (.pyo) versions, no .pyc
|
||||
@ -123,7 +125,8 @@ gdir_PYTHON = \
|
||||
ReadGrdb.py\
|
||||
WriteGrdb.py\
|
||||
EventView.py\
|
||||
SelectEvent.py
|
||||
SelectEvent.py\
|
||||
Spell.py
|
||||
|
||||
# Could use GNU make's ':=' syntax for nice wildcard use.
|
||||
# If not using GNU make, then list all files individually
|
||||
|
@ -27,6 +27,7 @@
|
||||
#-------------------------------------------------------------------------
|
||||
import cPickle as pickle
|
||||
from gettext import gettext as _
|
||||
import sets
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -58,6 +59,7 @@ import NameDisplay
|
||||
import Date
|
||||
import DateEdit
|
||||
import DateHandler
|
||||
import Spell
|
||||
|
||||
from QuestionDialog import QuestionDialog, WarningDialog, SaveDialog
|
||||
from DdTargets import DdTargets
|
||||
@ -161,6 +163,7 @@ class Marriage:
|
||||
self.type_field.set_sensitive(mode)
|
||||
self.notes_field = self.get_widget("marriageNotes")
|
||||
self.notes_field.set_editable(mode)
|
||||
self.spell = Spell.Spell(self.notes_field)
|
||||
self.gid = self.get_widget("gid")
|
||||
self.gid.set_editable(mode)
|
||||
self.attr_list = self.get_widget("attr_list")
|
||||
@ -805,9 +808,9 @@ class Marriage:
|
||||
name = NameDisplay.displayer.display(father)
|
||||
else:
|
||||
name = NameDisplay.displayer.display(mother)
|
||||
attr_list = list(sets.Set(const.familyAttributes + self.db.get_family_attribute_types()))
|
||||
AttrEdit.AttributeEditor(
|
||||
self, attr, name, const.familyAttributes,
|
||||
self.attr_edit_callback, self.window)
|
||||
self, attr, name, attr_list, self.attr_edit_callback, self.window)
|
||||
|
||||
def on_delete_attr_clicked(self,obj):
|
||||
if Utils.delete_selected(obj,self.alist):
|
||||
@ -828,9 +831,9 @@ class Marriage:
|
||||
name = NameDisplay.displayer.display(father)
|
||||
else:
|
||||
name = NameDisplay.displayer.display(mother)
|
||||
attr_list = list(sets.Set(const.familyAttributes + self.db.get_family_attribute_types()))
|
||||
AttrEdit.AttributeEditor(
|
||||
self, None, name, const.familyAttributes,
|
||||
self.attr_edit_callback, self.window)
|
||||
self, None, name, attr_list, self.attr_edit_callback, self.window)
|
||||
|
||||
def move_element(self,list,src,dest):
|
||||
if src == -1:
|
||||
|
@ -172,4 +172,3 @@ class MediaView(PageView.ListView):
|
||||
import NoteEdit
|
||||
NoteEdit.NoteEditor(obj,self.parent,self.topWindow,
|
||||
self.note_callback)
|
||||
|
||||
|
@ -26,6 +26,7 @@
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
import sets
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -47,6 +48,7 @@ import Utils
|
||||
import NameDisplay
|
||||
import const
|
||||
import DateHandler
|
||||
import QuestionDialog
|
||||
|
||||
sex = ( _("female"), _("male"), _("unknown"))
|
||||
|
||||
@ -80,13 +82,26 @@ class Compare:
|
||||
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)
|
||||
|
||||
if check_for_spouse(self.p1,self.p2):
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("Cannot merge people"),
|
||||
_("Spouses cannot be merged. To merge these people, "
|
||||
"you must first break the relationship between them."))
|
||||
elif check_for_child(self.p1,self.p2):
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("Cannot merge people"),
|
||||
_("A parent and child cannot be merged. To merge these "
|
||||
"people, you must first break the relationship between "
|
||||
"them."))
|
||||
else:
|
||||
merge = MergePeople(self.db,self.p2,self.p1)
|
||||
self.top.destroy()
|
||||
merge.merge()
|
||||
self.update()
|
||||
if self.glade.get_widget('select1').get_active():
|
||||
merge = MergePeople(self.db,self.p1,self.p2)
|
||||
else:
|
||||
merge = MergePeople(self.db,self.p2,self.p1)
|
||||
self.top.destroy()
|
||||
merge.merge()
|
||||
self.update()
|
||||
|
||||
def add(self, tobj, tag, text):
|
||||
text += "\n"
|
||||
@ -214,6 +229,23 @@ class Compare:
|
||||
return ""
|
||||
|
||||
|
||||
def check_for_spouse(p1, p2):
|
||||
|
||||
f1 = sets.Set(p1.get_family_handle_list())
|
||||
f2 = sets.Set(p2.get_family_handle_list())
|
||||
|
||||
return len(f1.intersection(f2)) != 0
|
||||
|
||||
def check_for_child(p1, p2):
|
||||
|
||||
fs1 = sets.Set(p1.get_family_handle_list())
|
||||
fp1 = sets.Set(map(lambda x: x[0], p1.get_parent_family_handle_list()))
|
||||
|
||||
fs2 = sets.Set(p2.get_family_handle_list())
|
||||
fp2 = sets.Set(map(lambda x: x[0], p2.get_parent_family_handle_list()))
|
||||
|
||||
return len(fs1.intersection(fp2)) != 0 or len(fs2.intersection(fp1))
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Merge People UI
|
||||
@ -239,12 +271,25 @@ class MergePeopleUI:
|
||||
ret = top.run()
|
||||
|
||||
if ret == gtk.RESPONSE_OK:
|
||||
if p1.get_active():
|
||||
merge = MergePeople(db,person1,person2)
|
||||
|
||||
if check_for_spouse(person1,person2):
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("Cannot merge people"),
|
||||
_("Spouses cannot be merged. To merge these people, "
|
||||
"you must first break the relationship between them."))
|
||||
elif check_for_child(person1,person2):
|
||||
QuestionDialog.ErrorDialog(
|
||||
_("Cannot merge people"),
|
||||
_("A parent and child cannot be merged. To merge these "
|
||||
"people, you must first break the relationship between "
|
||||
"them."))
|
||||
else:
|
||||
merge = MergePeople(db,person2,person1)
|
||||
merge.merge()
|
||||
update()
|
||||
if p1.get_active():
|
||||
merge = MergePeople(db,person1,person2)
|
||||
else:
|
||||
merge = MergePeople(db,person2,person1)
|
||||
merge.merge()
|
||||
update()
|
||||
top.destroy()
|
||||
|
||||
def help(self,obj):
|
||||
|
@ -83,8 +83,12 @@ class NameDisplay:
|
||||
@rtype: str
|
||||
"""
|
||||
name = person.get_primary_name()
|
||||
if name.get_sort_as() == RelLib.Name.FNLN:
|
||||
if name.sort_as == RelLib.Name.FNLN:
|
||||
return self._fnln(name)
|
||||
elif name.sort_as == RelLib.Name.PTFN:
|
||||
return self._ptfn(name)
|
||||
elif name.sort_as == RelLib.Name.FN:
|
||||
return name.first_name
|
||||
else:
|
||||
return self._lnfn(name)
|
||||
|
||||
@ -99,8 +103,12 @@ class NameDisplay:
|
||||
@returns: Returns the L{RelLib.Name} string representation
|
||||
@rtype: str
|
||||
"""
|
||||
if name.get_sort_as() == RelLib.Name.FNLN:
|
||||
if name.sort_as == RelLib.Name.FNLN:
|
||||
return self._fnln(name)
|
||||
elif name.sort_as == RelLib.Name.PTFN:
|
||||
return self._ptfn(name)
|
||||
elif name.sort_as == RelLib.Name.FN:
|
||||
return name.first_name
|
||||
else:
|
||||
return self._lnfn(name)
|
||||
|
||||
@ -136,9 +144,37 @@ class NameDisplay:
|
||||
return ""
|
||||
elif name.display_as == RelLib.Name.LNFN:
|
||||
return self._lnfn(name)
|
||||
elif name.display_as == RelLib.Name.PTFN:
|
||||
return self._ptfn(name)
|
||||
else:
|
||||
return self._fnln(name)
|
||||
|
||||
def _ptfn(self,name):
|
||||
"""
|
||||
Prints the Western style first name, last name style.
|
||||
Typically this is::
|
||||
|
||||
SurnamePrefix Patronymic SurnameSuffix, FirstName
|
||||
"""
|
||||
|
||||
first = name.first_name
|
||||
|
||||
if self.force_upper:
|
||||
last = name.patronymic.upper()
|
||||
else:
|
||||
last = name.patronymic
|
||||
|
||||
if name.suffix == "":
|
||||
if name.prefix:
|
||||
return "%s %s, %s" % (name.prefix, last, first)
|
||||
else:
|
||||
return "%s, %s" % (last, first)
|
||||
else:
|
||||
if name.prefix:
|
||||
return "%s %s %s, %s" % (name.prefix, last, name.suffix, first)
|
||||
else:
|
||||
return "%s %s, %s" % (last, name.suffix, first)
|
||||
|
||||
def _fnln(self,name):
|
||||
"""
|
||||
Prints the Western style first name, last name style.
|
||||
@ -166,6 +202,21 @@ class NameDisplay:
|
||||
return "%s %s %s, %s" % (first, name.prefix, last, name.suffix)
|
||||
else:
|
||||
return "%s %s, %s" % (first, last, name.suffix)
|
||||
|
||||
def name_grouping(self,db,person):
|
||||
return self.name_grouping_name(db,person.primary_name)
|
||||
|
||||
def name_grouping_name(self,db,pn):
|
||||
sv = pn.sort_as
|
||||
if pn.group_as:
|
||||
return pn.group_as
|
||||
if sv <= RelLib.Name.LNFN:
|
||||
val = pn.surname
|
||||
elif sv == RelLib.Name.PTFN:
|
||||
val = pn.patronymic
|
||||
else:
|
||||
val = pn.first_name
|
||||
return db.get_name_group_mapping(val)
|
||||
|
||||
def _lnfn(self,name):
|
||||
"""
|
||||
|
@ -49,6 +49,7 @@ import NameDisplay
|
||||
import Date
|
||||
import DateEdit
|
||||
import DateHandler
|
||||
import Spell
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -103,6 +104,8 @@ class NameEditor:
|
||||
|
||||
self.type_combo = self.top.get_widget("name_type")
|
||||
self.note_field = self.top.get_widget("alt_note")
|
||||
self.spell = Spell.Spell(self.note_field)
|
||||
|
||||
self.slist = self.top.get_widget('slist')
|
||||
self.priv = self.top.get_widget("priv")
|
||||
self.general_label = self.top.get_widget("general_tab")
|
||||
@ -189,7 +192,8 @@ class NameEditor:
|
||||
if self.name and self.name.get_group_as() != self.name.get_surname():
|
||||
val = self.name.get_group_as()
|
||||
else:
|
||||
val = self.db.get_name_group_mapping(self.surname_field.get_text())
|
||||
name = unicode(self.surname_field.get_text())
|
||||
val = self.db.get_name_group_mapping(name)
|
||||
self.group_as.set_text(val)
|
||||
|
||||
def on_group_over_toggled(self,obj):
|
||||
@ -197,7 +201,9 @@ class NameEditor:
|
||||
self.group_as.set_sensitive(True)
|
||||
self.group_as.set_editable(True)
|
||||
else:
|
||||
self.group_as.set_text(self.db.get_name_group_mapping(self.surname_field.get_text()))
|
||||
field_value = unicode(self.surname_field.get_text())
|
||||
mapping = self.db.get_name_group_mapping(field_value)
|
||||
self.group_as.set_text(mapping)
|
||||
self.group_as.set_sensitive(False)
|
||||
self.group_as.set_editable(False)
|
||||
|
||||
@ -269,8 +275,8 @@ class NameEditor:
|
||||
|
||||
self.name.set_source_reference_list(self.srcreflist)
|
||||
|
||||
grp_as = self.group_as.get_text()
|
||||
srn = self.surname_field.get_text()
|
||||
grp_as = unicode(self.group_as.get_text())
|
||||
srn = unicode(self.surname_field.get_text())
|
||||
|
||||
if self.name.get_display_as() != self.display_as.get_active():
|
||||
self.name.set_display_as(self.display_as.get_active())
|
||||
|
@ -36,6 +36,7 @@ import gtk.glade
|
||||
from gettext import gettext as _
|
||||
import const
|
||||
import Utils
|
||||
import Spell
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -80,6 +81,7 @@ class NoteEditor:
|
||||
self.entry = self.glade.get_widget('note')
|
||||
self.entry.get_buffer().set_text(self.data.get_note())
|
||||
self.entry.set_editable(not self.readonly)
|
||||
self.spellcheck = Spell.Spell(self.entry)
|
||||
|
||||
cancel_button = self.glade.get_widget('cancel')
|
||||
ok_button = self.glade.get_widget('ok')
|
||||
|
@ -30,6 +30,7 @@ import time
|
||||
import locale
|
||||
import cgi
|
||||
import sets
|
||||
import sys
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
@ -72,6 +73,25 @@ _EVENT_COL = 8
|
||||
_FAMILY_COL= 9
|
||||
_CHANGE_COL= 21
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# python 2.3 has a bug in the unicode sorting using locale.strcoll. Seems
|
||||
# to have a buffer overrun. We can convince it to do the right thing by
|
||||
# forcing the string to be nul terminated, sorting, then stripping off the
|
||||
# nul.
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
|
||||
if sys.version_info[0:2] == (2,3):
|
||||
def locale_sort(mylist):
|
||||
mylist = map(lambda x: x + "\x00", mylist)
|
||||
mylist.sort(locale.strcoll)
|
||||
return map(lambda x: x[:-1], mylist)
|
||||
else:
|
||||
def locale_sort(mylist):
|
||||
mylist.sort(locale.strcoll)
|
||||
return mylist
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# PeopleModel
|
||||
@ -122,27 +142,25 @@ class PeopleModel(gtk.GenericTreeModel):
|
||||
self.sortnames = {}
|
||||
cursor = self.db.get_person_cursor()
|
||||
node = cursor.next()
|
||||
|
||||
ngn = NameDisplay.displayer.name_grouping_name
|
||||
nsn = NameDisplay.displayer.sorted_name
|
||||
while node:
|
||||
if node[0] in flist:
|
||||
primary_name = node[1][_NAME_COL]
|
||||
if primary_name.group_as:
|
||||
surname = primary_name.group_as
|
||||
else:
|
||||
surname = self.db.get_name_group_mapping(primary_name.surname)
|
||||
self.sortnames[node[0]] = primary_name.sname
|
||||
|
||||
surname = unicode(ngn(self.db,primary_name))
|
||||
self.sortnames[node[0]] = unicode(nsn(primary_name))
|
||||
if self.temp_sname_sub.has_key(surname):
|
||||
self.temp_sname_sub[surname].append(node[0])
|
||||
else:
|
||||
self.temp_sname_sub[surname] = [node[0]]
|
||||
node = cursor.next()
|
||||
cursor.close()
|
||||
|
||||
self.temp_top_path2iter = self.temp_sname_sub.keys()
|
||||
self.temp_top_path2iter.sort(locale.strcoll)
|
||||
|
||||
self.temp_top_path2iter = locale_sort(self.temp_sname_sub.keys())
|
||||
for name in self.temp_top_path2iter:
|
||||
self.build_sub_entry(name)
|
||||
|
||||
|
||||
def build_sub_entry(self,name):
|
||||
slist = map(lambda x: (self.sortnames[x],x),self.temp_sname_sub[name])
|
||||
slist.sort(self.byname)
|
||||
|
@ -52,6 +52,7 @@ from gtk.gdk import ACTION_COPY, BUTTON1_MASK
|
||||
#-------------------------------------------------------------------------
|
||||
import PeopleModel
|
||||
import GenericFilter
|
||||
import NameDisplay
|
||||
from DdTargets import DdTargets
|
||||
|
||||
column_names = [
|
||||
@ -165,9 +166,9 @@ class PeopleView:
|
||||
index += 1
|
||||
|
||||
def build_tree(self):
|
||||
self.person_model = PeopleModel.PeopleModel(self.parent.db,
|
||||
self.DataFilter,
|
||||
self.parent.filter_invert.get_active())
|
||||
self.person_model = PeopleModel.PeopleModel(
|
||||
self.parent.db,self.DataFilter,
|
||||
self.parent.filter_invert.get_active())
|
||||
self.person_tree.set_model(self.person_model)
|
||||
|
||||
def get_selected_objects(self):
|
||||
@ -251,7 +252,7 @@ class PeopleView:
|
||||
p = self.state.active
|
||||
try:
|
||||
path = self.person_model.on_get_path(p.get_handle())
|
||||
group_name = p.get_primary_name().get_group_name()
|
||||
group_name = NameDisplay.displayer.name_grouping(self.state.db,p)
|
||||
top_name = self.state.db.get_name_group_mapping(group_name)
|
||||
top_path = self.person_model.on_get_path(top_name)
|
||||
self.person_tree.expand_row(top_path,0)
|
||||
@ -330,7 +331,7 @@ class PeopleView:
|
||||
def person_added(self,handle_list):
|
||||
for node in handle_list:
|
||||
person = self.parent.db.get_person_from_handle(node)
|
||||
top = person.get_primary_name().get_group_name()
|
||||
top = NameDisplay.displayer.name_grouping(self.parent.db,person)
|
||||
self.person_model.rebuild_data(self.DataFilter)
|
||||
if not self.person_model.is_visable(node):
|
||||
continue
|
||||
@ -348,7 +349,7 @@ class PeopleView:
|
||||
person = self.parent.db.get_person_from_handle(node)
|
||||
if not self.person_model.is_visable(node):
|
||||
continue
|
||||
top = person.get_primary_name().get_group_name()
|
||||
top = NameDisplay.displayer.name_grouping(self.parent.db,person)
|
||||
mylist = self.person_model.sname_sub.get(top,[])
|
||||
if mylist:
|
||||
try:
|
||||
@ -373,11 +374,7 @@ class PeopleView:
|
||||
|
||||
# calculate the new data
|
||||
|
||||
if person.primary_name.group_as:
|
||||
surname = person.primary_name.group_as
|
||||
else:
|
||||
surname = self.parent.db.get_name_group_mapping(person.primary_name.surname)
|
||||
|
||||
surname = NameDisplay.displayer.name_grouping(self.parent.db,person)
|
||||
|
||||
if oldpath[0] == surname:
|
||||
self.person_model.build_sub_entry(surname)
|
||||
|
@ -335,7 +335,7 @@ class PersonView(PageView.PersonNavView):
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People with names containing..."))
|
||||
all.add_rule(GenericFilter.SearchName([]))
|
||||
all.add_rule(GenericFilter.SearchName(['']))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.GenericFilter()
|
||||
@ -385,7 +385,7 @@ class PersonView(PageView.PersonNavView):
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People probably alive"))
|
||||
all.add_rule(GenericFilter.ProbablyAlive([]))
|
||||
all.add_rule(GenericFilter.ProbablyAlive(['']))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.GenericFilter()
|
||||
@ -395,17 +395,17 @@ class PersonView(PageView.PersonNavView):
|
||||
|
||||
all = GenericFilter.GenericFilter()
|
||||
all.set_name(_("Witnesses"))
|
||||
all.add_rule(GenericFilter.IsWitness([]))
|
||||
all.add_rule(GenericFilter.IsWitness(['','']))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People with records containing..."))
|
||||
all.add_rule(GenericFilter.HasTextMatchingSubstringOf([]))
|
||||
all.add_rule(GenericFilter.HasTextMatchingSubstringOf(['',0,0]))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People with records matching regular expression..."))
|
||||
all.add_rule(GenericFilter.HasTextMatchingRegexpOf([]))
|
||||
all.add_rule(GenericFilter.HasTextMatchingRegexpOf(['',0,1]))
|
||||
filter_list.append(all)
|
||||
|
||||
all = GenericFilter.GenericFilter()
|
||||
@ -415,7 +415,7 @@ class PersonView(PageView.PersonNavView):
|
||||
|
||||
all = GenericFilter.ParamFilter()
|
||||
all.set_name(_("People with notes containing..."))
|
||||
all.add_rule(GenericFilter.HasNoteMatchingSubstringOf([]))
|
||||
all.add_rule(GenericFilter.HasNoteMatchingSubstringOf(['']))
|
||||
filter_list.append(all)
|
||||
|
||||
self.filter_model = GenericFilter.FilterStore(filter_list)
|
||||
|
@ -917,7 +917,7 @@ class GedcomParser:
|
||||
self.db.add_event(event,self.trans)
|
||||
self.family.add_event_handle(event.get_handle())
|
||||
self.parse_family_event(event,2)
|
||||
self.db.commit_event(event, self.trans)
|
||||
self.db.commit_family_event(event, self.trans)
|
||||
del event
|
||||
|
||||
def parse_note_base(self,matches,obj,level,old_note,task):
|
||||
@ -1004,8 +1004,10 @@ class GedcomParser:
|
||||
self.person.set_gender(RelLib.Person.UNKNOWN)
|
||||
elif matches[2][0] == "M":
|
||||
self.person.set_gender(RelLib.Person.MALE)
|
||||
else:
|
||||
elif matches[2][0] == "F":
|
||||
self.person.set_gender(RelLib.Person.FEMALE)
|
||||
else:
|
||||
self.person.set_gender(RelLib.Person.UNKNOWN)
|
||||
elif matches[1] in [ "BAPL", "ENDL", "SLGC" ]:
|
||||
lds_ord = RelLib.LdsOrd()
|
||||
if matches[1] == "BAPL":
|
||||
@ -1063,14 +1065,14 @@ class GedcomParser:
|
||||
event.set_name("Birth")
|
||||
self.person.set_birth_handle(event.get_handle())
|
||||
self.parse_person_event(event,2)
|
||||
self.db.commit_event(event, self.trans)
|
||||
self.db.commit_personal_event(event, self.trans)
|
||||
elif matches[1] == "ADOP":
|
||||
event = RelLib.Event()
|
||||
self.db.add_event(event, self.trans)
|
||||
event.set_name("Adopted")
|
||||
self.person.add_event_handle(event.get_handle())
|
||||
self.parse_adopt_event(event,2)
|
||||
self.db.commit_event(event, self.trans)
|
||||
self.db.commit_personal_event(event, self.trans)
|
||||
elif matches[1] == "DEAT":
|
||||
event = RelLib.Event()
|
||||
if matches[2]:
|
||||
@ -1083,7 +1085,7 @@ class GedcomParser:
|
||||
event.set_name("Death")
|
||||
self.person.set_death_handle(event.get_handle())
|
||||
self.parse_person_event(event,2)
|
||||
self.db.commit_event(event, self.trans)
|
||||
self.db.commit_personal_event(event, self.trans)
|
||||
elif matches[1] == "EVEN":
|
||||
event = RelLib.Event()
|
||||
if matches[2]:
|
||||
|
@ -1202,7 +1202,6 @@ class GrampsParser:
|
||||
'family' : Utils.family_name(self.family,self.db),
|
||||
}
|
||||
self.event.set_description(text)
|
||||
|
||||
else:
|
||||
ref = RelLib.EventRef()
|
||||
ref.set_reference_handle(self.event.get_handle())
|
||||
@ -1240,8 +1239,10 @@ class GrampsParser:
|
||||
self.name = None
|
||||
|
||||
def stop_ref(self,tag):
|
||||
## # FIXME: Work this out when Witness is working again
|
||||
## person = self.find_person_by_gramps_id(self.map_gid(tag))
|
||||
## self.witness = RelLib.Witness(RelLib.Event.ID,person.get_handle())
|
||||
return
|
||||
self.witness = RelLib.Witness(RelLib.Event.ID,tag)
|
||||
|
||||
def stop_place(self,tag):
|
||||
if self.placeobj == None:
|
||||
|
@ -3729,8 +3729,10 @@ class Name(PrivateSourceNote,DateBase):
|
||||
that one name throughout his or her life."""
|
||||
|
||||
DEF = 0 # locale default
|
||||
LNFN = 1 # last name, first name
|
||||
FNLN = 2 # first name, last name
|
||||
LNFN = 1 # last name first name [patronymic]
|
||||
FNLN = 2 # first name last name
|
||||
PTFN = 3 # patronymic last name
|
||||
FN = 4 # first name
|
||||
|
||||
UNKNOWN = -1
|
||||
CUSTOM = 0
|
||||
@ -4003,24 +4005,6 @@ class Name(PrivateSourceNote,DateBase):
|
||||
else:
|
||||
return "%s %s, %s" % (first, self.surname, self.suffix)
|
||||
|
||||
def get_regular_upper_name(self):
|
||||
"""returns a name string built from the components of the Name
|
||||
instance, in the form of Firstname surname"""
|
||||
if self.patronymic:
|
||||
first = "%s %s" % (self.first_name, self.patronymic)
|
||||
else:
|
||||
first = self.first_name
|
||||
if (self.suffix == ""):
|
||||
if self.prefix:
|
||||
return "%s %s %s" % (first, self.prefix.upper(), self.surname.upper())
|
||||
else:
|
||||
return "%s %s" % (first, self.surname.upper())
|
||||
else:
|
||||
if self.prefix:
|
||||
return "%s %s %s, %s" % (first, self.prefix.upper(), self.surname.upper(), self.suffix)
|
||||
else:
|
||||
return "%s %s, %s" % (first, self.surname.upper(), self.suffix)
|
||||
|
||||
def is_equal(self,other):
|
||||
"""
|
||||
compares to names to see if they are equal, return 0 if they
|
||||
|
@ -252,6 +252,18 @@ class Report:
|
||||
put at the top of the contents of the dialog box."""
|
||||
return ("%s - GRAMPS" % _("Progress Report"), _("Working"))
|
||||
|
||||
def progress_bar_title(self,name,length):
|
||||
markup = '<span size="larger" weight="bold">%s</span>'
|
||||
self.lbl.set_text(markup % name)
|
||||
self.lbl.set_use_markup(True)
|
||||
self.pbar.set_fraction(0.0)
|
||||
|
||||
progress_steps = length
|
||||
if length > 1:
|
||||
progress_steps = progress_steps+1
|
||||
progress_steps = progress_steps+1
|
||||
self.pbar_max = length
|
||||
|
||||
def progress_bar_setup(self,total):
|
||||
"""Create a progress dialog. This routine calls a
|
||||
customization function to find out how to fill out the dialog.
|
||||
@ -265,10 +277,12 @@ class Report:
|
||||
self.ptop = gtk.Dialog()
|
||||
self.ptop.set_has_separator(False)
|
||||
self.ptop.set_title(title)
|
||||
lbl = gtk.Label(header)
|
||||
lbl.set_use_markup(True)
|
||||
self.ptop.vbox.add(lbl)
|
||||
self.ptop.set_border_width(12)
|
||||
self.lbl = gtk.Label(header)
|
||||
self.lbl.set_use_markup(True)
|
||||
self.ptop.vbox.add(self.lbl)
|
||||
self.ptop.vbox.set_spacing(10)
|
||||
self.ptop.vbox.set_border_width(24)
|
||||
self.pbar = gtk.ProgressBar()
|
||||
self.pbar_max = total
|
||||
self.pbar_index = 0.0
|
||||
@ -288,6 +302,8 @@ class Report:
|
||||
|
||||
self.pbar.set_text("%d of %d (%.1f%%)" % (self.pbar_index,self.pbar_max,(val*100)))
|
||||
self.pbar.set_fraction(val)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def progress_bar_done(self):
|
||||
"""Done with the progress bar. It can be destroyed now."""
|
||||
@ -522,7 +538,7 @@ class BareReportDialog:
|
||||
"""Set up the title bar of the dialog. This function relies
|
||||
on the get_title() customization function for what the title
|
||||
should be."""
|
||||
self.name = self.person.get_primary_name().get_regular_name()
|
||||
self.name = NameDisplay.displayer.display(self.person)
|
||||
self.window.set_title(self.get_title())
|
||||
|
||||
def setup_header(self):
|
||||
@ -545,7 +561,7 @@ class BareReportDialog:
|
||||
label.set_use_markup(1)
|
||||
label.set_alignment(0.0,0.5)
|
||||
self.tbl.set_border_width(12)
|
||||
self.tbl.attach(label,0,4,self.col,self.col+1)
|
||||
self.tbl.attach(label, 0, 4, self.col, self.col+1, gtk.FILL|gtk.EXPAND)
|
||||
self.col += 1
|
||||
|
||||
def setup_center_person(self):
|
||||
@ -559,7 +575,7 @@ class BareReportDialog:
|
||||
self.tbl.attach(center_label,0,4,self.col,self.col+1)
|
||||
self.col += 1
|
||||
|
||||
name = self.person.get_primary_name().get_regular_name()
|
||||
name = NameDisplay.displayer.display(self.person)
|
||||
self.person_label = gtk.Label( "%s" % name )
|
||||
self.person_label.set_alignment(0.0,0.5)
|
||||
self.tbl.attach(self.person_label,2,3,self.col,self.col+1)
|
||||
@ -698,8 +714,9 @@ class BareReportDialog:
|
||||
self.extra_menu.set_sensitive(len(extra_map) > 1)
|
||||
self.add_tooltip(self.extra_menu,em_tip)
|
||||
table.attach(self.extra_menu_label, 1, 2, row, row+1,
|
||||
gtk.SHRINK|gtk.FILL)
|
||||
table.attach(self.extra_menu,2,3,row,row+1)
|
||||
gtk.SHRINK|gtk.FILL, gtk.SHRINK)
|
||||
table.attach(self.extra_menu, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
row += 1
|
||||
|
||||
# Now the "extra" text box
|
||||
@ -716,8 +733,9 @@ class BareReportDialog:
|
||||
self.extra_textbox.set_editable(1)
|
||||
self.add_tooltip(self.extra_textbox,et_tip)
|
||||
table.attach(self.extra_textbox_label, 1, 2, row, row+1,
|
||||
gtk.SHRINK|gtk.FILL)
|
||||
table.attach(swin,2,3,row,row+1)
|
||||
gtk.SHRINK|gtk.FILL,gtk.SHRINK)
|
||||
table.attach(swin, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
row += 1
|
||||
|
||||
# Setup requested widgets
|
||||
@ -725,10 +743,13 @@ class BareReportDialog:
|
||||
if text:
|
||||
text_widget = gtk.Label("%s:" % text)
|
||||
text_widget.set_alignment(0.0,0.0)
|
||||
table.attach(text_widget,1,2,row,row+1,gtk.SHRINK|gtk.FILL)
|
||||
table.attach(widget,2,3,row,row+1)
|
||||
table.attach(text_widget, 1, 2, row, row+1,
|
||||
gtk.SHRINK|gtk.FILL, gtk.SHRINK)
|
||||
table.attach(widget, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
else:
|
||||
table.attach(widget,2,3,row,row+1)
|
||||
table.attach(widget, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
row += 1
|
||||
|
||||
def setup_other_frames(self):
|
||||
@ -747,10 +768,13 @@ class BareReportDialog:
|
||||
if text:
|
||||
text_widget = gtk.Label('%s:' % text)
|
||||
text_widget.set_alignment(0.0,0.5)
|
||||
table.attach(text_widget,1,2,row,row+1,gtk.SHRINK|gtk.FILL)
|
||||
table.attach(widget,2,3,row,row+1)
|
||||
table.attach(text_widget, 1, 2, row, row+1,
|
||||
gtk.SHRINK|gtk.FILL, gtk.SHRINK)
|
||||
table.attach(widget, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
else:
|
||||
table.attach(widget,2,3,row,row+1)
|
||||
table.attach(widget, 2, 3, row, row+1,
|
||||
yoptions=gtk.SHRINK)
|
||||
row = row + 1
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
@ -810,9 +834,13 @@ class BareReportDialog:
|
||||
self.options.handler.set_report_generations(self.max_gen,self.pg_brk)
|
||||
|
||||
if self.filter_combo:
|
||||
self.filter = self.filter_combo.get_value()
|
||||
active = self.filter_combo.get_active()
|
||||
self.options.handler.set_filter_number(active)
|
||||
try:
|
||||
self.filter = self.filter_combo.get_value()
|
||||
active = self.filter_combo.get_active()
|
||||
self.options.handler.set_filter_number(active)
|
||||
except:
|
||||
print "Error setting filter. Proceeding with 'Everyone'"
|
||||
self.filter = GenericFilter.Everyone([])
|
||||
else:
|
||||
self.filter = None
|
||||
|
||||
@ -869,7 +897,7 @@ class BareReportDialog:
|
||||
new_person = sel_person.run()
|
||||
if new_person:
|
||||
self.new_person = new_person
|
||||
new_name = new_person.get_primary_name().get_regular_name()
|
||||
new_name = NameDisplay.displayer.display(new_person)
|
||||
if new_name:
|
||||
self.person_label.set_text( "<i>%s</i>" % new_name )
|
||||
self.person_label.set_use_markup(True)
|
||||
@ -1079,7 +1107,7 @@ class ReportDialog(BareReportDialog):
|
||||
label.set_use_markup(1)
|
||||
label.set_alignment(0.0,0.5)
|
||||
self.tbl.set_border_width(12)
|
||||
self.tbl.attach(label,0,4,self.col,self.col+1)
|
||||
self.tbl.attach(label, 0, 4, self.col, self.col+1, gtk.FILL)
|
||||
self.col += 1
|
||||
|
||||
hid = self.get_stylesheet_savefile()
|
||||
@ -1090,13 +1118,15 @@ class ReportDialog(BareReportDialog):
|
||||
|
||||
if self.get_target_is_directory():
|
||||
self.target_fileentry.set_directory_entry(1)
|
||||
label = gtk.Label("%s:" % _("Directory"))
|
||||
self.doc_label = gtk.Label("%s:" % _("Directory"))
|
||||
else:
|
||||
label = gtk.Label("%s:" % _("Filename"))
|
||||
label.set_alignment(0.0,0.5)
|
||||
self.doc_label = gtk.Label("%s:" % _("Filename"))
|
||||
self.doc_label.set_alignment(0.0,0.5)
|
||||
|
||||
self.tbl.attach(label,1,2,self.col,self.col+1,gtk.SHRINK|gtk.FILL)
|
||||
self.tbl.attach(self.target_fileentry,2,4,self.col,self.col+1)
|
||||
self.tbl.attach(self.doc_label, 1, 2, self.col, self.col+1,
|
||||
gtk.SHRINK|gtk.FILL)
|
||||
self.tbl.attach(self.target_fileentry, 2, 4, self.col, self.col+1,
|
||||
gtk.EXPAND|gtk.FILL)
|
||||
self.col += 1
|
||||
|
||||
spath = self.get_default_directory()
|
||||
@ -1332,7 +1362,7 @@ class ReportDialog(BareReportDialog):
|
||||
_('_Change filename'),None)
|
||||
|
||||
if a.get_response() == gtk.RESPONSE_YES:
|
||||
return
|
||||
return None
|
||||
|
||||
self.set_default_directory(os.path.dirname(self.target_path) + os.sep)
|
||||
self.options.handler.output = self.target_path
|
||||
@ -1406,7 +1436,7 @@ class ReportDialog(BareReportDialog):
|
||||
|
||||
# Is there a filename? This should also test file permissions, etc.
|
||||
if not self.parse_target_frame():
|
||||
return
|
||||
self.window.run()
|
||||
|
||||
# Preparation
|
||||
self.parse_format_frame()
|
||||
@ -1567,7 +1597,7 @@ class CommandLineReport:
|
||||
'style' : self.option_class.handler.get_default_stylesheet_name(),
|
||||
'papers' : self.option_class.handler.get_paper_name(),
|
||||
'papero' : self.option_class.handler.get_orientation(),
|
||||
'template' : self.option_class.handler.get_orientation(),
|
||||
'template' : self.option_class.handler.get_template_name(),
|
||||
'id' : ''
|
||||
}
|
||||
|
||||
|
@ -295,7 +295,6 @@ def sanitize_person(db,person):
|
||||
name = person.get_primary_name()
|
||||
if name.get_privacy() or person.get_privacy():
|
||||
name = RelLib.Name()
|
||||
name.set_first_name(_('Private'))
|
||||
name.set_surname(_('Private'))
|
||||
else:
|
||||
new_person.set_nick_name(person.get_nick_name())
|
||||
@ -309,7 +308,6 @@ def sanitize_person(db,person):
|
||||
for item in person.get_parent_family_handle_list():
|
||||
new_person.add_parent_family_handle(item[0],item[1],item[2])
|
||||
|
||||
|
||||
if person.get_privacy():
|
||||
return new_person
|
||||
|
||||
@ -348,6 +346,11 @@ def sanitize_person(db,person):
|
||||
if not attribute.get_privacy():
|
||||
new_person.add_attribute(RelLib.Attribute(attribute))
|
||||
|
||||
# copy source references
|
||||
for ref in person.get_source_references():
|
||||
if not ref.get_privacy():
|
||||
new_person.add_source_reference(RelLib.SourceRef(ref))
|
||||
|
||||
# copy URL list
|
||||
for url in person.get_url_list():
|
||||
if not url.get_privacy():
|
||||
@ -369,9 +372,61 @@ def sanitize_person(db,person):
|
||||
ordinance = person.get_lds_sealing()
|
||||
if ordinance:
|
||||
new_person.set_lds_sealing(ordinance)
|
||||
|
||||
new_person.set_note(person.get_note())
|
||||
|
||||
return new_person
|
||||
|
||||
def dont_restrict(db,person):
|
||||
return person
|
||||
|
||||
def restrict_with_names(db,person):
|
||||
return restrict_person(db,person,False)
|
||||
|
||||
def restrict_no_names(db,person):
|
||||
return restrict_person(db,person,True)
|
||||
|
||||
def restrict_person(db,person,no_names=False):
|
||||
"""
|
||||
Creates a new Person instance based off the passed Person
|
||||
instance. The returned instance has all private records
|
||||
removed from it.
|
||||
|
||||
@param db: GRAMPS database to which the Person object belongs
|
||||
@type db: GrampsDbBase
|
||||
@param person: source Person object that will be copied with
|
||||
privacy records removed
|
||||
@type person: Person
|
||||
@returns: 'cleansed' Person object
|
||||
@rtype: Person
|
||||
"""
|
||||
new_person = RelLib.Person()
|
||||
|
||||
# copy gender
|
||||
new_person.set_gender(person.get_gender())
|
||||
new_person.set_gramps_id(person.get_gramps_id())
|
||||
new_person.set_handle(person.get_handle())
|
||||
|
||||
# copy names if not private
|
||||
if no_names:
|
||||
name = RelLib.Name()
|
||||
name.set_surname(_('Private'))
|
||||
else:
|
||||
name = person.get_primary_name()
|
||||
name.set_source_reference_list([])
|
||||
|
||||
new_person.set_primary_name(name)
|
||||
|
||||
# copy Family reference list
|
||||
for handle in person.get_family_handle_list():
|
||||
new_person.add_family_handle(handle)
|
||||
|
||||
# copy Family reference list
|
||||
for item in person.get_parent_family_handle_list():
|
||||
new_person.add_parent_family_handle(item[0],item[1],item[2])
|
||||
|
||||
return new_person
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# Roman numbers
|
||||
|
@ -248,7 +248,7 @@ class SelectChild:
|
||||
|
||||
self.db.commit_person(select_child,trans)
|
||||
self.db.commit_family(self.family,trans)
|
||||
n = select_child.get_primary_name().get_regular_name()
|
||||
n = NameDisplay.displayer.display(select_child)
|
||||
self.db.transaction_commit(trans,_("Add Child to Family (%s)") % n)
|
||||
self.close(obj)
|
||||
self.callback()
|
||||
@ -317,7 +317,8 @@ class SelectChild:
|
||||
#-------------------------------------------------------------------------
|
||||
class LikelyFilter(GenericFilter.Rule):
|
||||
|
||||
category = _('General filters')
|
||||
labels = [ 'Person handle' ]
|
||||
category = _('General filters')
|
||||
|
||||
def prepare(self,db):
|
||||
person = db.get_person_from_handle(self.list[0])
|
||||
|
@ -123,7 +123,10 @@ class SelectObject:
|
||||
self.preview.set_from_pixbuf(image)
|
||||
|
||||
self.object_handle.set_text(obj.get_gramps_id())
|
||||
self.object_type.set_text(the_type)
|
||||
if the_type:
|
||||
self.object_type.set_text(the_type)
|
||||
else:
|
||||
self.object_type.set_text("")
|
||||
self.object_desc.set_text(obj.get_description())
|
||||
if len(path) == 0:
|
||||
self.object_path.set_text(_("The file no longer exists"))
|
||||
|
15
src/Sort.py
@ -67,14 +67,14 @@ class Sort:
|
||||
name1 = first.get_primary_name()
|
||||
name2 = second.get_primary_name()
|
||||
|
||||
fsn = name1.get_surname().upper()
|
||||
ssn = name2.get_surname().upper()
|
||||
fsn = name1.get_surname()
|
||||
ssn = name2.get_surname()
|
||||
|
||||
if fsn == ssn :
|
||||
ffn = name1.get_first_name().upper()
|
||||
sfn = name2.get_first_name().upper()
|
||||
ffn = name1.get_first_name()
|
||||
sfn = name2.get_first_name()
|
||||
if ffn == sfn:
|
||||
return locale.strcoll(name1.get_suffix().upper(), name2.get_suffix().upper())
|
||||
return locale.strcoll(name1.get_suffix(), name2.get_suffix())
|
||||
else:
|
||||
return locale.strcoll(ffn, sfn)
|
||||
else:
|
||||
@ -111,7 +111,10 @@ class Sort:
|
||||
else:
|
||||
date2 = Date.Date()
|
||||
|
||||
val = cmp(date1,date2)
|
||||
dsv1 = date1.get_sort_value()
|
||||
dsv2 = date2.get_sort_value()
|
||||
|
||||
val = cmp(dsv1,dsv2)
|
||||
if val == 0:
|
||||
return self.by_last_name(first_id,second_id)
|
||||
return val
|
||||
|
@ -51,6 +51,7 @@ import Date
|
||||
import DateEdit
|
||||
import DateHandler
|
||||
import GrampsDBCallback
|
||||
import Spell
|
||||
|
||||
from DdTargets import DdTargets
|
||||
|
||||
@ -418,6 +419,12 @@ class SourceEditor:
|
||||
self.date_obj, self.date_entry_field,
|
||||
date_stat, self.sourceDisplay)
|
||||
|
||||
self.spage = self.get_widget("spage")
|
||||
self.scom = self.get_widget("scomment")
|
||||
self.spell1 = Spell.Spell(self.scom)
|
||||
self.stext = self.get_widget("stext")
|
||||
self.spell2 = Spell.Spell(self.stext)
|
||||
|
||||
self.draw(self.active_source,fresh=True)
|
||||
self.set_button()
|
||||
if self.parent:
|
||||
@ -477,9 +484,9 @@ class SourceEditor:
|
||||
|
||||
def set_button(self):
|
||||
if self.active_source:
|
||||
self.ok.set_sensitive(1)
|
||||
self.ok.set_sensitive(True)
|
||||
else:
|
||||
self.ok.set_sensitive(0)
|
||||
self.ok.set_sensitive(False)
|
||||
|
||||
def get_widget(self,name):
|
||||
"""returns the widget associated with the specified name"""
|
||||
@ -487,14 +494,10 @@ class SourceEditor:
|
||||
|
||||
def draw(self,sel=None,fresh=False):
|
||||
if self.source_ref and fresh:
|
||||
spage = self.get_widget("spage")
|
||||
spage.get_buffer().set_text(self.source_ref.get_page())
|
||||
self.spage.get_buffer().set_text(self.source_ref.get_page())
|
||||
|
||||
text = self.get_widget("stext")
|
||||
text.get_buffer().set_text(self.source_ref.get_text())
|
||||
|
||||
scom = self.get_widget("scomment")
|
||||
scom.get_buffer().set_text(self.source_ref.get_note())
|
||||
self.stext.get_buffer().set_text(self.source_ref.get_text())
|
||||
self.scom.get_buffer().set_text(self.source_ref.get_note())
|
||||
idval = self.source_ref.get_base_handle()
|
||||
src = self.db.get_source_from_handle(idval)
|
||||
self.active_source = src
|
||||
@ -545,15 +548,15 @@ class SourceEditor:
|
||||
|
||||
conf = self.get_widget("conf").get_active()
|
||||
|
||||
buf = self.get_widget("scomment").get_buffer()
|
||||
buf = self.scom.get_buffer()
|
||||
comments = unicode(buf.get_text(buf.get_start_iter(),
|
||||
buf.get_end_iter(),False))
|
||||
|
||||
buf = self.get_widget("stext").get_buffer()
|
||||
buf = self.stext.get_buffer()
|
||||
text = unicode(buf.get_text(buf.get_start_iter(),
|
||||
buf.get_end_iter(),False))
|
||||
|
||||
buf = self.get_widget('spage').get_buffer()
|
||||
buf = self.spage.get_buffer()
|
||||
page = unicode(buf.get_text(buf.get_start_iter(),
|
||||
buf.get_end_iter(),False))
|
||||
|
||||
|
60
src/Spell.py
Normal file
@ -0,0 +1,60 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# Copyright (C) 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$
|
||||
|
||||
"""
|
||||
Provide an interface to the gtkspell interface. This requires
|
||||
python-gnome-extras package. If the gtkspell package is not
|
||||
present, we default to no spell checking.
|
||||
|
||||
"""
|
||||
|
||||
#### FIXME: Uncomment after 2.0.6 is released.
|
||||
|
||||
## success = False
|
||||
## try:
|
||||
## import gtk
|
||||
## import gtkspell
|
||||
## import locale
|
||||
|
||||
## text_view = gtk.TextView()
|
||||
## spell = gtkspell.Spell(text_view)
|
||||
## lang = locale.getlocale()[0]
|
||||
## spell.set_language(lang)
|
||||
## success = True
|
||||
|
||||
## except ImportError, msg:
|
||||
## print "Spell.py:", msg
|
||||
## except RuntimeError,msg:
|
||||
## print "Spell.py:", msg
|
||||
## except SystemError,msg:
|
||||
## print "Spell.py:", msg
|
||||
|
||||
if False:
|
||||
class Spell:
|
||||
def __init__(self,obj):
|
||||
self.spell = gtkspell.Spell(obj)
|
||||
lang = locale.getlocale()[0]
|
||||
self.spell.set_language(lang)
|
||||
else:
|
||||
class Spell:
|
||||
def __init__(self,obj):
|
||||
pass
|
68
src/Utils.py
@ -481,8 +481,8 @@ def view_photo(photo):
|
||||
_icon_theme = gtk.icon_theme_get_default()
|
||||
|
||||
def find_mime_type_pixbuf(mime_type):
|
||||
icontmp = mime_type.replace('/','-')
|
||||
try:
|
||||
icontmp = mime_type.replace('/','-')
|
||||
newicon = "gnome-mime-%s" % icontmp
|
||||
try:
|
||||
return _icon_theme.load_icon(newicon,48,0)
|
||||
@ -715,7 +715,7 @@ def probably_alive(person,db,current_year=None):
|
||||
death = db.get_event_from_handle(person.death_ref.ref)
|
||||
if death.get_date_object().get_start_date() != Date.EMPTY:
|
||||
death_year = death.get_date_object().get_year()
|
||||
if death.get_date_object().get_year() < current_year:
|
||||
if death_year < current_year:
|
||||
return False
|
||||
|
||||
# Look for Cause Of Death, Burial or Cremation events.
|
||||
@ -1051,3 +1051,67 @@ def strip_context(msgid,sep='|'):
|
||||
if msgval == msgid and sep_idx != -1:
|
||||
msgval = msgid[sep_idx+1:]
|
||||
return msgval
|
||||
|
||||
class ProgressMeter:
|
||||
"""
|
||||
Progress meter class for GRAMPS.
|
||||
"""
|
||||
def __init__(self,title,header=''):
|
||||
"""
|
||||
Specify the title and the current pass header.
|
||||
"""
|
||||
self.ptop = gtk.Dialog()
|
||||
self.ptop.set_has_separator(False)
|
||||
self.ptop.set_title(title)
|
||||
self.ptop.set_border_width(12)
|
||||
self.ptop.vbox.set_spacing(10)
|
||||
lbl = gtk.Label('<span size="larger" weight="bold">%s</span>' % title)
|
||||
lbl.set_use_markup(True)
|
||||
self.lbl = gtk.Label(header)
|
||||
self.lbl.set_use_markup(True)
|
||||
self.ptop.vbox.add(lbl)
|
||||
self.ptop.vbox.add(self.lbl)
|
||||
self.ptop.vbox.set_border_width(24)
|
||||
self.pbar = gtk.ProgressBar()
|
||||
|
||||
self.ptop.set_size_request(350,125)
|
||||
self.ptop.vbox.add(self.pbar)
|
||||
self.ptop.show_all()
|
||||
if header == '':
|
||||
self.lbl.hide()
|
||||
|
||||
def set_pass(self,header,total):
|
||||
"""
|
||||
Reset for another pass. Provide a new header and define number
|
||||
of steps to be used.
|
||||
"""
|
||||
if header == '':
|
||||
self.lbl.hide()
|
||||
else:
|
||||
self.lbl.show()
|
||||
self.pbar_max = total
|
||||
self.pbar_index = 0.0
|
||||
self.lbl.set_text(header)
|
||||
self.pbar.set_fraction(0.0)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def step(self):
|
||||
"""Click the progress bar over to the next value. Be paranoid
|
||||
and insure that it doesn't go over 100%."""
|
||||
self.pbar_index = self.pbar_index + 1.0
|
||||
if (self.pbar_index > self.pbar_max):
|
||||
self.pbar_index = self.pbar_max
|
||||
|
||||
val = self.pbar_index/self.pbar_max
|
||||
|
||||
self.pbar.set_text("%d of %d (%.1f%%)" % (self.pbar_index,self.pbar_max,(val*100)))
|
||||
self.pbar.set_fraction(val)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def close(self):
|
||||
"""
|
||||
Close the progress meter
|
||||
"""
|
||||
self.ptop.destroy()
|
||||
|
@ -165,14 +165,15 @@ class WitnessEditor:
|
||||
self.idval = self.ref.get_value()
|
||||
if self.db.has_person_handle(self.idval):
|
||||
person = self.db.get_person_from_handle(self.idval)
|
||||
self.name.set_text(person.get_primary_name().get_regular_name())
|
||||
self.in_db.set_active(1)
|
||||
name = NameDisplay.displayer.display(person)
|
||||
self.name.set_text(name)
|
||||
self.in_db.set_active(True)
|
||||
else:
|
||||
self.name.set_text(_("Unknown"))
|
||||
self.in_db.set_active(0)
|
||||
self.in_db.set_active(False)
|
||||
else:
|
||||
self.name.set_text(self.ref.get_value())
|
||||
self.in_db.set_active(0)
|
||||
self.in_db.set_active(False)
|
||||
self.comment.get_buffer().set_text(self.ref.get_comment())
|
||||
self.private.set_active(self.ref.get_privacy())
|
||||
|
||||
@ -213,24 +214,25 @@ class WitnessEditor:
|
||||
|
||||
def choose(self,obj):
|
||||
import SelectPerson
|
||||
sel_person = SelectPerson.SelectPerson(self.db,_('Select Person'),parent_window=self.window)
|
||||
sel_person = SelectPerson.SelectPerson(self.db,_('Select Person'),
|
||||
parent_window=self.window)
|
||||
new_person = sel_person.run()
|
||||
if new_person:
|
||||
self.new_person = new_person
|
||||
self.idval = new_person.get_handle()
|
||||
new_name = new_person.get_primary_name().get_regular_name()
|
||||
new_name = NameDisplay.displayer.display(new_person)
|
||||
if new_name:
|
||||
self.name.set_text(new_name)
|
||||
|
||||
def on_toggled(self,obj):
|
||||
if self.in_db.get_active():
|
||||
self.name.set_editable(0)
|
||||
self.name.set_sensitive(0)
|
||||
self.select.set_sensitive(1)
|
||||
self.name.set_editable(False)
|
||||
self.name.set_sensitive(False)
|
||||
self.select.set_sensitive(True)
|
||||
else:
|
||||
self.name.set_editable(1)
|
||||
self.name.set_sensitive(1)
|
||||
self.select.set_sensitive(0)
|
||||
self.name.set_editable(True)
|
||||
self.name.set_sensitive(True)
|
||||
self.select.set_sensitive(False)
|
||||
|
||||
def ok_clicked(self,obj):
|
||||
if not self.ref:
|
||||
|
@ -29,6 +29,7 @@
|
||||
import os
|
||||
import time
|
||||
import re
|
||||
import shutil
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -53,7 +54,7 @@ import Errors
|
||||
import ansel_utf8
|
||||
import Utils
|
||||
import NameDisplay
|
||||
from QuestionDialog import ErrorDialog
|
||||
from QuestionDialog import ErrorDialog, WarningDialog
|
||||
|
||||
def keep_utf8(s):
|
||||
return s
|
||||
@ -129,6 +130,11 @@ def add_familys_sources(db,family_handle,slist,private):
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
def add_persons_sources(db,person,slist,private):
|
||||
for source_ref in person.get_source_references():
|
||||
sbase = source_ref.get_base_handle()
|
||||
if sbase != None and not slist.has_key(sbase):
|
||||
slist[sbase] = 1
|
||||
|
||||
elist = person.get_event_list()[:]
|
||||
|
||||
elist.append(person.get_birth_handle())
|
||||
@ -916,8 +922,7 @@ class GedcomWriter:
|
||||
else:
|
||||
self.writeln("1 EVEN")
|
||||
if value:
|
||||
self.writeln("2 TYPE %s %s" % (self.cnvtxt(name), value
|
||||
))
|
||||
self.writeln("2 TYPE %s %s" % (self.cnvtxt(name), value))
|
||||
else:
|
||||
self.writeln("2 TYPE %s" % self.cnvtxt(name))
|
||||
if attr.get_note():
|
||||
@ -966,28 +971,33 @@ class GedcomWriter:
|
||||
continue
|
||||
photo_obj_id = photo.get_reference_handle()
|
||||
photo_obj = self.db.get_object_from_handle(photo_obj_id)
|
||||
print photo_obj, photo_obj.get_mime_type()
|
||||
if photo_obj and photo_obj.get_mime_type() == "image/jpeg":
|
||||
path = photo_obj.get_path ()
|
||||
imgdir = os.path.join(self.dirname,self.images_path)
|
||||
if not os.path.isfile(path):
|
||||
continue
|
||||
try:
|
||||
if not os.path.isdir(imgdir):
|
||||
os.makedirs(imgdir)
|
||||
except:
|
||||
continue
|
||||
basename = os.path.basename(path)
|
||||
dest = os.path.join (imgdir, basename)
|
||||
try:
|
||||
shutil.copyfile(path, dest)
|
||||
except (IOError,OSError),msg:
|
||||
msg2 = _("Could not create %s") % dest
|
||||
WarningDialog(msg2,str(msg))
|
||||
continue
|
||||
|
||||
self.writeln('1 OBJE')
|
||||
self.writeln('2 FORM jpeg')
|
||||
dirname = os.path.join (self.dirname, self.images_path)
|
||||
basename = os.path.basename (path)
|
||||
self.writeln('2 FILE %s' % os.path.join(self.images_path,
|
||||
basename))
|
||||
try:
|
||||
if not os.path.isdir(dirname):
|
||||
os.mkdir (dirname)
|
||||
except:
|
||||
continue
|
||||
dest = os.path.join (dirname, basename)
|
||||
try:
|
||||
os.link (path, dest)
|
||||
except OSError:
|
||||
file (dest,
|
||||
"wb").writelines (file (path,
|
||||
"rb").xreadlines ())
|
||||
|
||||
|
||||
for family in person.get_parent_family_handle_list():
|
||||
if self.flist.has_key(family[0]):
|
||||
|
@ -6,8 +6,14 @@ pkgdatadir = $(datadir)/@PACKAGE@/data
|
||||
|
||||
dist_pkgdata_DATA = \
|
||||
gedcom.xml \
|
||||
somerights20.gif \
|
||||
papersize.xml \
|
||||
tips.xml
|
||||
tips.xml\
|
||||
main1.css\
|
||||
main2.css\
|
||||
main3.css\
|
||||
main4.css\
|
||||
main5.css
|
||||
|
||||
EXTRA_DIST = \
|
||||
gramps.desktop \
|
||||
@ -34,12 +40,12 @@ if !PACKAGER_MODE
|
||||
if GCONF_SCHEMAS_INSTALL
|
||||
GCONF_SCHEMAS_INSTALLATION += \
|
||||
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
|
||||
gconftool-2 --makefile-install-rule $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas ;\
|
||||
$(GCONFTOOL) --makefile-install-rule $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas ;\
|
||||
pkill gconfd ; echo Restarting gconfd
|
||||
|
||||
GCONF_SCHEMAS_UNINSTALLATION += \
|
||||
GCONF_CONFIG_SOURCE=$(GCONF_SCHEMA_CONFIG_SOURCE) \
|
||||
gconftool-2 --makefile-uninstall-rule $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas
|
||||
$(GCONFTOOL) --makefile-uninstall-rule $(DESTDIR)$(GCONF_SCHEMA_FILE_DIR)/gramps.schemas
|
||||
endif
|
||||
if SHARED_MIME_INSTALL
|
||||
SHARED_MIME_INSTALLATION += \
|
||||
|
238
src/data/main1.css
Executable file
@ -0,0 +1,238 @@
|
||||
|
||||
/* GRAMPS Cascading Style Sheet */
|
||||
|
||||
/* Standard Tags {{{1
|
||||
*/
|
||||
BODY {
|
||||
font-family: "Arial", "Helvetica", sans-serif;
|
||||
background-color: #ffffff;
|
||||
|
||||
}
|
||||
|
||||
P,BLOCKQUOTE {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
DIV {
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
TD {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-size: 160%;
|
||||
margin: 2px;
|
||||
}
|
||||
H2 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-style: italic;
|
||||
font-size: 150%;
|
||||
}
|
||||
H3 {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
}
|
||||
H4 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.3em;
|
||||
padding-left: 4px;
|
||||
|
||||
|
||||
}
|
||||
H5 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
H6 {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 100%;
|
||||
margin-left: 1em;
|
||||
margin-top: 1.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
HR {
|
||||
height: 1px;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 0;
|
||||
padding: 0;
|
||||
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
|
||||
border-color: #000;
|
||||
}
|
||||
|
||||
A:link {
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:visited {
|
||||
color: #333;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:hover {
|
||||
background-color: #eee;
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:active {
|
||||
background-color: #eee;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
SUP {
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
|
||||
/* Custom {{{1
|
||||
*/
|
||||
|
||||
.navheader {
|
||||
padding: 2px;
|
||||
|
||||
margin: 2px;
|
||||
}
|
||||
.navtitle {
|
||||
font-size: 130%;
|
||||
color: #999;
|
||||
margin: 3px;
|
||||
|
||||
|
||||
|
||||
}
|
||||
.navbyline {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
padding-right: 10px;
|
||||
|
||||
}
|
||||
.nav {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 1px;
|
||||
font-size: 12px;
|
||||
font-weight: bold;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.summaryarea {
|
||||
min-height: 100px;
|
||||
/* Hack: IE Dynamic Expression to set the width */
|
||||
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
|
||||
}
|
||||
|
||||
.portrait {
|
||||
justify: center;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
border-color: #000;
|
||||
border-width: 1px;
|
||||
}
|
||||
.snapshot {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
}
|
||||
.thumbnail {
|
||||
height: 100px;
|
||||
border-color: #000;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.leftwrap {
|
||||
float: left;
|
||||
margin: 2px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.rightwrap {
|
||||
float: right;
|
||||
margin: 2px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
TABLE.infolist {
|
||||
border: 0;
|
||||
/*width: 100%;*/
|
||||
font-size: 14px;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.img_navbar {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
TD.category {
|
||||
|
||||
padding: 1px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
|
||||
/*width: 10%;*/
|
||||
font-weight: bold;
|
||||
}
|
||||
TD.field {
|
||||
|
||||
padding: 1px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 15%;*/
|
||||
|
||||
}
|
||||
TD.data {
|
||||
|
||||
padding: 1px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
|
||||
|
||||
font-weight: bold;
|
||||
|
||||
}
|
||||
|
||||
|
||||
.pedigree {
|
||||
margin: 0;
|
||||
margin-left: 2em;
|
||||
padding: 0;
|
||||
background-color: #eeeeee;
|
||||
border: 1px;
|
||||
}
|
||||
.pedigreeind {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 2em;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.footer {
|
||||
margin: 1em;
|
||||
font-size: 12px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
|
||||
/* 1}}}
|
||||
vim:foldmethod=marker
|
||||
/*
|
222
src/data/main2.css
Executable file
@ -0,0 +1,222 @@
|
||||
|
||||
/* GRAMPS Cascading Style Sheet */
|
||||
|
||||
/* Standard Tags {{{1
|
||||
*/
|
||||
BODY {
|
||||
font-family: "Arial", "Helvetica", sans-serif;
|
||||
background-color: #fafaff;
|
||||
color: #003;
|
||||
}
|
||||
|
||||
P,BLOCKQUOTE {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
DIV {
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
TD {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-size: 160%;
|
||||
margin: 2px;
|
||||
}
|
||||
H2 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-style: italic;
|
||||
font-size: 150%;
|
||||
}
|
||||
H3 {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
color: #336;
|
||||
}
|
||||
H4 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.3em;
|
||||
padding-left: 4px;
|
||||
background-color: #667;
|
||||
color: #fff;
|
||||
}
|
||||
H5 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
H6 {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 100%;
|
||||
margin-left: 1em;
|
||||
margin-top: 1.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
HR {
|
||||
height: 0;
|
||||
width: 0;
|
||||
margin: 0;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
padding: 0;
|
||||
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
|
||||
border-color: #e0e0e9;
|
||||
}
|
||||
|
||||
A:link {
|
||||
color: #006;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:visited {
|
||||
color: #669;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:hover {
|
||||
background-color: #eef;
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:active {
|
||||
background-color: #eef;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
SUP {
|
||||
line-height: 0;
|
||||
}
|
||||
|
||||
/* Custom {{{1
|
||||
*/
|
||||
|
||||
.navheader {
|
||||
padding: 4px;
|
||||
background-color: #e0e0e9;
|
||||
margin: 2px;
|
||||
}
|
||||
.navtitle {
|
||||
font-size: 160%;
|
||||
color: #669;
|
||||
margin: 2px;
|
||||
|
||||
}
|
||||
.navbyline {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
margin: 2px;
|
||||
padding: 4px;
|
||||
}
|
||||
.nav {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 0;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.summaryarea {
|
||||
min-height: 100px;
|
||||
/* Hack: IE Dynamic Expression to set the width */
|
||||
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
|
||||
}
|
||||
|
||||
.portrait {
|
||||
justify: center;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
border-color: #336;
|
||||
border-width: 1px;
|
||||
}
|
||||
.snapshot {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
}
|
||||
.thumbnail {
|
||||
height: 100px;
|
||||
border-color: #336;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.leftwrap {
|
||||
float: left;
|
||||
margin: 2px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.rightwrap {
|
||||
float: right;
|
||||
margin: 2px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
TABLE.infolist {
|
||||
border: 0;
|
||||
/*width: 100%;*/
|
||||
font-size: 14px;
|
||||
}
|
||||
.img_navbar {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
TD.category {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 10%;*/
|
||||
font-weight: bold;
|
||||
}
|
||||
TD.field {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 15%;*/
|
||||
|
||||
}
|
||||
TD.data {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.pedigree {
|
||||
margin: 0;
|
||||
margin-left: 2em;
|
||||
padding: 0;
|
||||
background-color: #e0e0e9;
|
||||
border: 1px;
|
||||
}
|
||||
.pedigreeind {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 2em;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.footer {
|
||||
margin: 1em;
|
||||
font-size: 12px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
|
||||
/* 1}}}
|
||||
vim:foldmethod=marker
|
||||
/*
|
221
src/data/main3.css
Executable file
@ -0,0 +1,221 @@
|
||||
|
||||
/* GRAMPS Cascading Style Sheet */
|
||||
|
||||
/* Standard Tags {{{1
|
||||
*/
|
||||
BODY {
|
||||
font-family: "Bitstream Vera Serif", "Times New Roman", "Times", serif;
|
||||
background-color: #fffffd;
|
||||
|
||||
}
|
||||
|
||||
P,BLOCKQUOTE {
|
||||
font-size: 14px;
|
||||
}
|
||||
|
||||
DIV {
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
TD {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-weight: bolder;
|
||||
font-size: 160%;
|
||||
margin: 2px;
|
||||
}
|
||||
H2 {
|
||||
font-weight: bolder;
|
||||
font-style: italic;
|
||||
font-size: 150%;
|
||||
}
|
||||
H3 {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
padding-left: 2em;
|
||||
padding-bottom: 10px;
|
||||
|
||||
}
|
||||
H4 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0.3em;
|
||||
padding-left: 2em;
|
||||
|
||||
|
||||
}
|
||||
H5 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
H6 {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 100%;
|
||||
margin-left: 1em;
|
||||
margin-top: 1.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
HR {
|
||||
height: 0;
|
||||
width: 0;
|
||||
margin: 0;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
padding: 0;
|
||||
border-top: 1; /* Hack: Mozilla work-around to eliminate "groove" */
|
||||
border-color: #ccf;
|
||||
}
|
||||
|
||||
A:link {
|
||||
color: #110;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:visited {
|
||||
color: #665;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:hover {
|
||||
background-color: #eed;
|
||||
color: #110;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:active {
|
||||
background-color: #eee;
|
||||
color: #110;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
SUP {
|
||||
line-height: 0;
|
||||
}
|
||||
/* Custom {{{1
|
||||
*/
|
||||
|
||||
.navheader {
|
||||
padding: 4px;
|
||||
|
||||
margin: 2px;
|
||||
}
|
||||
.navtitle {
|
||||
font-size: 160%;
|
||||
color: #998;
|
||||
margin: 2px;
|
||||
text-align: center;
|
||||
}
|
||||
.navbyline {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
margin: 2px;
|
||||
padding: 4px;
|
||||
}
|
||||
.nav {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 0px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
padding: 4px;
|
||||
background-color: #ddddcc;
|
||||
}
|
||||
|
||||
|
||||
.summaryarea {
|
||||
min-height: 100px;
|
||||
/* Hack: IE Dynamic Expression to set the width */
|
||||
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
|
||||
}
|
||||
|
||||
.portrait {
|
||||
justify: center;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
border-color: #110;
|
||||
border-width: 1px;
|
||||
}
|
||||
.snapshot {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
}
|
||||
.thumbnail {
|
||||
height: 100px;
|
||||
border-color: #110;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.leftwrap {
|
||||
float: left;
|
||||
margin: 2px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.rightwrap {
|
||||
float: right;
|
||||
margin: 2px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
TABLE.infolist {
|
||||
border: 0;
|
||||
/*width: 100%;*/
|
||||
font-size: 14px;
|
||||
}
|
||||
.img_navbar {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
TD.category {
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 10%;*/
|
||||
font-weight: bold;
|
||||
}
|
||||
TD.field {
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 20%;*/
|
||||
background-color: #f6f6f0;
|
||||
}
|
||||
TD.data {
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.pedigree {
|
||||
margin: 0;
|
||||
margin-left: 2em;
|
||||
padding: 0;
|
||||
background-color: #f6f6f0;
|
||||
border: 1px;
|
||||
}
|
||||
.pedigreeind {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 2em;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.footer {
|
||||
margin: 1em;
|
||||
margin-left: 2em;
|
||||
font-size: 12px;
|
||||
/*float: right;*/
|
||||
}
|
||||
|
||||
|
||||
/* 1}}}
|
||||
vim:foldmethod=marker
|
||||
/*
|
241
src/data/main4.css
Executable file
@ -0,0 +1,241 @@
|
||||
|
||||
/* GRAMPS Cascading Style Sheet */
|
||||
|
||||
/* Standard Tags {{{1
|
||||
*/
|
||||
BODY {
|
||||
font-family: "Times New Roman", "Times", serif;
|
||||
background-color: #fff;
|
||||
color: #320;
|
||||
font-size: 16px;
|
||||
|
||||
}
|
||||
|
||||
P,BLOCKQUOTE {
|
||||
}
|
||||
|
||||
DIV {
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
TD {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-family: "Georgia", "Bistream Vera Serif", "Times New Roman", "Times", serif;
|
||||
font-weight: bolder;
|
||||
font-size: 160%;
|
||||
margin: 2px;
|
||||
}
|
||||
H2 {
|
||||
font-family: "Georgia", "Bistream Vera Serif", "Times New Roman", "Times", serif;
|
||||
font-weight: bolder;
|
||||
font-style: italic;
|
||||
font-size: 150%;
|
||||
}
|
||||
H3 {
|
||||
font-weight: bold;
|
||||
font-size: 130%;
|
||||
margin: 0;
|
||||
margin-top: 8px;
|
||||
/*padding-left: 2em;*/
|
||||
padding-bottom: 10px;
|
||||
|
||||
}
|
||||
H4 {
|
||||
margin-top: 1em;
|
||||
margin-bottom: 0;
|
||||
padding: 0;
|
||||
/*padding-left: 2em;*/
|
||||
font-size: 110%;
|
||||
|
||||
}
|
||||
H5 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
H6 {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 100%;
|
||||
margin-left: 1em;
|
||||
margin-top: 1.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
HR {
|
||||
height: 6px;
|
||||
width: 100%;
|
||||
margin: 0;
|
||||
color: #a97;
|
||||
|
||||
|
||||
|
||||
padding: 2px;
|
||||
/*border-top: 0; |+ Hack: Mozilla work-around to eliminate "groove" +|*/
|
||||
border-color: #a97;
|
||||
background-color: #a97;
|
||||
}
|
||||
|
||||
A:link {
|
||||
color: #430;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:visited {
|
||||
color: #654;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:hover {
|
||||
background-color: #f6f0ee;
|
||||
color: #210;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:active {
|
||||
background-color: #f6f0ee;
|
||||
color: #210;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
SUP {
|
||||
line-height: 0;
|
||||
}
|
||||
/* Custom {{{1
|
||||
*/
|
||||
|
||||
.navheader {
|
||||
padding: 4px;
|
||||
|
||||
margin: 0;
|
||||
|
||||
}
|
||||
.navtitle {
|
||||
font-size: 160%;
|
||||
color: #fff;
|
||||
margin: 0;
|
||||
padding: 4px;
|
||||
padding-left: 10px;
|
||||
background-color: #542;
|
||||
}
|
||||
.navbyline {
|
||||
float: right;
|
||||
|
||||
margin: 2px;
|
||||
padding: 4px;
|
||||
padding-right: 10px;
|
||||
color: #fff;
|
||||
}
|
||||
.nav {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 1px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.summaryarea {
|
||||
min-height: 100px;
|
||||
/* Hack: IE Dynamic Expression to set the width */
|
||||
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
|
||||
}
|
||||
|
||||
.portrait {
|
||||
justify: center;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
border-color: #986;
|
||||
border-width: 3px;
|
||||
}
|
||||
.snapshot {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
}
|
||||
.thumbnail {
|
||||
height: 100px;
|
||||
border-color: #986;
|
||||
border-width: 3px;
|
||||
}
|
||||
|
||||
.leftwrap {
|
||||
float: left;
|
||||
margin: 2px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
.rightwrap {
|
||||
float: right;
|
||||
margin: 2px;
|
||||
margin-left: 10px;
|
||||
}
|
||||
|
||||
TABLE.infolist {
|
||||
border: 0;
|
||||
padding; 0;
|
||||
margin: 0;
|
||||
margin-left: 2em;
|
||||
margin-top: 8px;
|
||||
}
|
||||
.img_navbar {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
TD.category {
|
||||
margin: 0;
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 10%;*/
|
||||
font-weight: bold;
|
||||
}
|
||||
TD.field {
|
||||
margin: 0;
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 20%;*/
|
||||
|
||||
}
|
||||
TD.data {
|
||||
margin: 0;
|
||||
padding: 4px; /* Defines spacing between rows */
|
||||
padding-left: 10px;
|
||||
padding-right: 3em;
|
||||
font-weight: bold;
|
||||
background-color: #f0ece6;
|
||||
}
|
||||
|
||||
|
||||
.pedigree {
|
||||
margin: 0;
|
||||
margin-left: 2em;
|
||||
padding: 0;
|
||||
background-color: #f0ece6;
|
||||
border: 1px;
|
||||
}
|
||||
.pedigreeind {
|
||||
|
||||
margin: 0;
|
||||
padding: 2em;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.footer {
|
||||
margin: 1em;
|
||||
font-size: 12px;
|
||||
float: right;
|
||||
}
|
||||
|
||||
|
||||
/* 1}}}
|
||||
vim:foldmethod=marker
|
||||
/*
|
242
src/data/main5.css
Executable file
@ -0,0 +1,242 @@
|
||||
|
||||
/* GRAMPS Cascading Style Sheet */
|
||||
|
||||
/* Standard Tags {{{1
|
||||
*/
|
||||
BODY {
|
||||
font-family: "Bistream Vera Sans", "Arial", "Arial", "Helvetica", sans-serif;
|
||||
text-align: justify;
|
||||
background-color: #fff;
|
||||
color: #010;
|
||||
}
|
||||
|
||||
P,BLOCKQUOTE {
|
||||
font-size: 14px;
|
||||
margin-left: 7em;
|
||||
margin-right: 7em;
|
||||
}
|
||||
|
||||
DIV {
|
||||
margin: 2px;
|
||||
padding: 2px;
|
||||
}
|
||||
|
||||
TD {
|
||||
vertical-align: top;
|
||||
}
|
||||
|
||||
H1 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-size: 160%;
|
||||
margin: 2px;
|
||||
}
|
||||
H2 {
|
||||
font-family: "Verdana", "Bistream Vera Sans", "Arial", "Helvetica", sans-serif;
|
||||
font-weight: bolder;
|
||||
font-style: italic;
|
||||
font-size: 150%;
|
||||
}
|
||||
H3 {
|
||||
font-weight: bold;
|
||||
margin: 0;
|
||||
margin-left: 5em;
|
||||
margin-right: 5em;
|
||||
padding-top: 10px;
|
||||
padding-bottom: 10px;
|
||||
color: #232;
|
||||
}
|
||||
H4 {
|
||||
margin-top: 2em;
|
||||
margin-bottom: 0.3em;
|
||||
padding: 5px;
|
||||
padding-left: 2em;
|
||||
background-color: #e0e6e0;
|
||||
color: #232;
|
||||
}
|
||||
H5 {
|
||||
margin-bottom: 0.5em;
|
||||
}
|
||||
H6 {
|
||||
font-weight: normal;
|
||||
font-style: italic;
|
||||
font-size: 100%;
|
||||
margin-left: 1em;
|
||||
margin-top: 1.3em;
|
||||
margin-bottom: 0.8em;
|
||||
}
|
||||
|
||||
HR {
|
||||
height: 0;
|
||||
width: 0;
|
||||
margin: 0;
|
||||
margin-top: 1px;
|
||||
margin-bottom: 1px;
|
||||
padding: 0;
|
||||
border-top: 0; /* Hack: Mozilla work-around to eliminate "groove" */
|
||||
border-color: #e0e6e0;
|
||||
}
|
||||
|
||||
A:link {
|
||||
color: #252;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:visited {
|
||||
color: #565;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:hover {
|
||||
background-color: #eaf0ea;
|
||||
color: #000;
|
||||
text-decoration: underline;
|
||||
}
|
||||
A:active {
|
||||
background-color: #eaf0ea;
|
||||
color: #000;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
SUP {
|
||||
line-height: 0;
|
||||
}
|
||||
/* Custom {{{1
|
||||
*/
|
||||
|
||||
.navheader {
|
||||
padding: 4px;
|
||||
background-color: #e0e6e0;
|
||||
margin: 2px;
|
||||
}
|
||||
.navtitle {
|
||||
font-size: 160%;
|
||||
color: #e0e6e0;
|
||||
margin: 2px;
|
||||
background-color: #454;
|
||||
padding: 4px;
|
||||
padding-left: 3.5em;
|
||||
|
||||
}
|
||||
.navbyline {
|
||||
float: right;
|
||||
font-size: 14px;
|
||||
margin: 2px;
|
||||
padding: 0;
|
||||
padding-top: 1em;
|
||||
padding-right: 7em;
|
||||
color: #e0e6e0;
|
||||
}
|
||||
.nav {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 0;
|
||||
padding-left: 6.5em;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
.summaryarea {
|
||||
min-height: 100px;
|
||||
/* Hack: IE Dynamic Expression to set the width */
|
||||
height: expression(document.body.clientHeight < 1 ? "100px" : "100px" );
|
||||
}
|
||||
|
||||
.portrait {
|
||||
justify: center;
|
||||
margin: 5px;
|
||||
margin-right: 20px;
|
||||
padding: 3px;
|
||||
border-color: #363;
|
||||
border-width: 1px;
|
||||
}
|
||||
.snapshot {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
|
||||
padding: 3px;
|
||||
padding-right: 6em;
|
||||
|
||||
}
|
||||
.thumbnail {
|
||||
height: 100px;
|
||||
border-color: #363;
|
||||
border-width: 1px;
|
||||
}
|
||||
|
||||
.leftwrap {
|
||||
float: left;
|
||||
margin: 5px;
|
||||
margin-right: 1em;
|
||||
margin-left: 6em;
|
||||
}
|
||||
.rightwrap {
|
||||
float: right;
|
||||
margin: 5px;
|
||||
margin-left: 1em;
|
||||
margin-right: 6em;
|
||||
}
|
||||
|
||||
TABLE.infolist {
|
||||
border: 0;
|
||||
/*width: 100%;*/
|
||||
font-size: 14px;
|
||||
margin-left: 7em;
|
||||
margin-right: 7em;
|
||||
}
|
||||
.img_navbar {
|
||||
margin: 0;
|
||||
margin-bottom: 4px;
|
||||
padding: 10px;
|
||||
font-size: 14px;
|
||||
font-weight: bold;
|
||||
text-align: center;
|
||||
}
|
||||
TD.category {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 10%;*/
|
||||
font-weight: bold;
|
||||
}
|
||||
TD.field {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
/*width: 15%;*/
|
||||
|
||||
}
|
||||
TD.data {
|
||||
padding: 3px; /* Defines spacing between rows */
|
||||
padding-right: 3em;
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
|
||||
.pedigree {
|
||||
margin: 0;
|
||||
margin-left: 7em;
|
||||
padding: 0;
|
||||
background-color: #e0e6e0;
|
||||
border: 1px;
|
||||
}
|
||||
.pedigreeind {
|
||||
font-size: 14px;
|
||||
margin: 0;
|
||||
padding: 2em;
|
||||
padding-top: 0.25em;
|
||||
padding-bottom: 0.5em;
|
||||
}
|
||||
|
||||
|
||||
.footer {
|
||||
margin: 1em;
|
||||
font-size: 12px;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
/* 1}}}
|
||||
vim:foldmethod=marker
|
||||
/*
|
||||
|
BIN
src/data/somerights20.gif
Normal file
After Width: | Height: | Size: 1.8 KiB |
@ -119,7 +119,7 @@ class DateDisplayES(DateDisplay):
|
||||
|
||||
_mod_str = ("",u"antes de ",u"después de ",u"hacia ","","","")
|
||||
|
||||
_qual_str = ("","calculado ","estimado ")
|
||||
_qual_str = ("","estimado ","calculado ")
|
||||
|
||||
formats = (
|
||||
"AAAA-MM-DD (ISO)", "Numérica", "Mes Día, Año",
|
||||
|
@ -113,7 +113,7 @@ class DateDisplayFR(DateDisplay):
|
||||
|
||||
_mod_str = ("",u"avant ",u"après ",u"vers ","","","")
|
||||
|
||||
_qual_str = ("","calculated ","estimated ")
|
||||
_qual_str = ("","estimated ","calculated ")
|
||||
|
||||
formats = (
|
||||
"AAAA-MM-DD (ISO)", "Numérique", "Mois Jour, Année",
|
||||
|
@ -52,10 +52,18 @@ from ReportUtils import pt2cm
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
from gettext import gettext as _
|
||||
|
||||
from xml.sax.saxutils import escape
|
||||
|
||||
_apptype = 'application/vnd.sun.xml.writer'
|
||||
|
||||
_esc_map = {
|
||||
'\x1a' : '',
|
||||
'\x0c' : '',
|
||||
'\n' : '<text:line-break/>',
|
||||
'<super>' : '<text:span text:style-name="GSuper">',
|
||||
'</super>' : '</text:span>',
|
||||
}
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# OpenOfficeDoc
|
||||
@ -152,9 +160,9 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.cntnt.write('draw:fill-color="#%02x%02x%02x" ' % style.get_fill_color())
|
||||
|
||||
if style.get_line_style() == BaseDoc.DASHED:
|
||||
self.cntnt.write('draw:color="#cccccc" ')
|
||||
self.cntnt.write('svg:stroke-color="#cccccc" ')
|
||||
else:
|
||||
self.cntnt.write('draw:color="#%02x%02x%02x" ' % style.get_color())
|
||||
self.cntnt.write('svg:stroke-color="#%02x%02x%02x" ' % style.get_color())
|
||||
|
||||
if style.get_line_width():
|
||||
self.cntnt.write('draw:stroke="solid" ')
|
||||
@ -304,10 +312,10 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
|
||||
#Begin photo style
|
||||
self.cntnt.write('<style:style style:name="Left" style:family="graphics"')
|
||||
self.cntnt.write(' style:parent-name="photo">')
|
||||
self.cntnt.write(' style:parent-style-name="photo">')
|
||||
self.cntnt.write('<style:properties style:run-through="foreground"')
|
||||
self.cntnt.write(' style:wrap="parallel"')
|
||||
self.cntnt.write(' style:numer-wrapped-paragraphs="no-limit"')
|
||||
self.cntnt.write(' style:number-wrapped-paragraphs="no-limit"')
|
||||
self.cntnt.write(' style:wrap-contour="false" style:vertical-pos="from-top"')
|
||||
self.cntnt.write(' style:vertical-rel="paragraph-content"')
|
||||
self.cntnt.write(' style:horizontal-pos="left"')
|
||||
@ -320,10 +328,10 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.cntnt.write('</style:style>\n')
|
||||
|
||||
self.cntnt.write('<style:style style:name="Right" style:family="graphics"')
|
||||
self.cntnt.write(' style:parent-name="photo">')
|
||||
self.cntnt.write(' style:parent-style-name="photo">')
|
||||
self.cntnt.write('<style:properties style:run-through="foreground"')
|
||||
self.cntnt.write(' style:wrap="parallel"')
|
||||
self.cntnt.write(' style:numer-wrapped-paragraphs="no-limit"')
|
||||
self.cntnt.write(' style:number-wrapped-paragraphs="no-limit"')
|
||||
self.cntnt.write(' style:wrap-contour="false" style:vertical-pos="from-top"')
|
||||
self.cntnt.write(' style:vertical-rel="paragraph-content"')
|
||||
self.cntnt.write(' style:horizontal-pos="right"')
|
||||
@ -336,7 +344,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.cntnt.write('</style:style>\n')
|
||||
|
||||
self.cntnt.write('<style:style style:name="Single" style:family="graphics"')
|
||||
self.cntnt.write(' style:parent-name="Graphics">')
|
||||
self.cntnt.write(' style:parent-style-name="Graphics">')
|
||||
self.cntnt.write('<style:properties style:vertical-pos="from-top"')
|
||||
self.cntnt.write(' style:mirror="none" fo:clip="rect(0cm 0cm 0cm 0cm)"')
|
||||
self.cntnt.write(' draw:luminance="0%" draw:contrast="0" draw:red="0%"')
|
||||
@ -346,7 +354,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.cntnt.write('</style:style>\n')
|
||||
|
||||
self.cntnt.write('<style:style style:name="Row" style:family="graphics"')
|
||||
self.cntnt.write(' style:parent-name="Graphics">')
|
||||
self.cntnt.write(' style:parent-style-name="Graphics">')
|
||||
self.cntnt.write('<style:properties style:vertical-pos="from-top"')
|
||||
self.cntnt.write(' style:vertical-rel="paragraph"')
|
||||
self.cntnt.write(' style:horizontal-pos="from-left"')
|
||||
@ -512,7 +520,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.sfile.write('xmlns:math="http://www.w3.org/1998/Math/MathML" ')
|
||||
self.sfile.write('xmlns:form="http://openoffice.org/2000/form" ')
|
||||
self.sfile.write('xmlns:script="http://openoffice.org/2000/script" ')
|
||||
self.sfile.write('office:class="text" office:version="0.9">\n')
|
||||
self.sfile.write('office:version="0.9">\n')
|
||||
self.sfile.write('<office:font-decls>\n')
|
||||
self.sfile.write('<style:font-decl style:name="Times New Roman" ')
|
||||
self.sfile.write('fo:font-family="'Times New Roman'" ')
|
||||
@ -629,22 +637,15 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.sfile.write('</style:page-master>\n')
|
||||
self.sfile.write('</office:automatic-styles>\n')
|
||||
self.sfile.write('<office:master-styles>\n')
|
||||
self.sfile.write('<draw:layer-set>\n')
|
||||
self.sfile.write('<draw:layer draw:name="layout"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="background"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="backgroundobjects"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="controls"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="measurelines"/>\n')
|
||||
self.sfile.write('</draw:layer-set>\n')
|
||||
self.sfile.write('<style:master-page style:name="Standard" ')
|
||||
self.sfile.write('style:page-master-name="pm1"/>\n')
|
||||
self.sfile.write('<draw:layer-set>\n')
|
||||
self.sfile.write('<draw:layer draw:name="layout" draw:locked="false" ')
|
||||
self.sfile.write('draw:printable="true" draw:visible="true"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="background" draw:locked="false" ')
|
||||
self.sfile.write('draw:printable="true" draw:visible="true"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="backgroundobjects" ')
|
||||
self.sfile.write('draw:locked="false" draw:printable="true" draw:visible="true"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="controls" draw:locked="false" ')
|
||||
self.sfile.write('draw:printable="true" draw:visible="true"/>\n')
|
||||
self.sfile.write('<draw:layer draw:name="measurelines" draw:locked="false" ')
|
||||
self.sfile.write('draw:printable="true" draw:visible="true"/>\n')
|
||||
self.sfile.write('</draw:layer-set>\n')
|
||||
self.sfile.write('<style:master-page style:name="Home" ')
|
||||
self.sfile.write('style:page-master-name="PM0" draw:style-name="dp1"/>\n')
|
||||
self.sfile.write('</office:master-styles>\n')
|
||||
self.sfile.write('</office:document-styles>\n')
|
||||
|
||||
@ -711,14 +712,12 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.end_paragraph()
|
||||
|
||||
def write_text(self,text):
|
||||
text = text.replace('&','&') # Must be first
|
||||
text = text.replace('<','<')
|
||||
text = text.replace('>','>')
|
||||
text = text.replace('\n','<text:line-break/>')
|
||||
text = text.replace('<super>',
|
||||
'<text:span text:style-name="GSuper">')
|
||||
text = text.replace('</super>','</text:span>')
|
||||
self.cntnt.write(text)
|
||||
"""
|
||||
Uses the xml.sax.saxutils.escape function to convert XML
|
||||
entities. The _esc_map dictionary allows us to add our own
|
||||
mappings.
|
||||
"""
|
||||
self.cntnt.write(escape(text,_esc_map))
|
||||
|
||||
def _write_manifest(self):
|
||||
self.mfile = StringIO()
|
||||
@ -755,7 +754,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.meta.write('xmlns:xlink="http://www.w3.org/1999/xlink" ')
|
||||
self.meta.write('xmlns:dc="http://purl.org/dc/elements/1.1/" ')
|
||||
self.meta.write('xmlns:meta="http://openoffice.org/2000/meta" ')
|
||||
self.meta.write('office:class="text" office:version="0.9">\n');
|
||||
self.meta.write('office:version="0.9">\n');
|
||||
self.meta.write('<office:meta>\n')
|
||||
self.meta.write('<meta:generator>')
|
||||
self.meta.write(const.progName + ' ' + const.version)
|
||||
@ -834,7 +833,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
y = int((miny)*1000)
|
||||
|
||||
self.cntnt.write('svg:x="%d" svg:y="%d" ' % (x,y))
|
||||
self.cntnt.write('svg:viewBox="0 0 %d %d" ' % (int(maxx-minx)*1000,int(maxy-miny)*1000))
|
||||
self.cntnt.write('svg:viewBox="0 0 %d %d" ' % (int((maxx-minx)*1000),int((maxy-miny)*1000)))
|
||||
self.cntnt.write('svg:width="%.4fcm" ' % (maxx-minx))
|
||||
self.cntnt.write('svg:height="%.4fcm" ' % (maxy-miny))
|
||||
|
||||
@ -850,7 +849,7 @@ class OpenOfficeDoc(BaseDoc.BaseDoc):
|
||||
self.cntnt.write('"/>\n')
|
||||
|
||||
def draw_line(self,style,x1,y1,x2,y2):
|
||||
self.cntnt.write('<draw:line draw:style="%s" '% style)
|
||||
self.cntnt.write('<draw:line draw:style-name="%s" '% style)
|
||||
self.cntnt.write('svg:x1="%.3fcm" ' % x1)
|
||||
self.cntnt.write('svg:y1="%.3fcm" ' % y1)
|
||||
self.cntnt.write('svg:x2="%.3fcm" ' % x2)
|
||||
|
@ -192,6 +192,12 @@ class Gramps:
|
||||
if GrampsKeys.get_usetips():
|
||||
TipOfDay.TipOfDay(self)
|
||||
|
||||
## # FIXME: THESE will have to be added (ViewManager?)
|
||||
## # once bookmarks work again
|
||||
## self.db.set_researcher(GrampsCfg.get_researcher())
|
||||
## self.db.connect('person-delete',self.on_remove_bookmark)
|
||||
## self.db.connect('person-update',self.on_update_bookmark)
|
||||
|
||||
def welcome(self):
|
||||
if GrampsKeys.get_welcome() >= 200:
|
||||
return
|
||||
|
@ -351,10 +351,10 @@ class ComprehensiveAncestorsReport (Report.Report):
|
||||
|
||||
spouse = []
|
||||
if from_family:
|
||||
from_family_father = from_family.get_father_handle ()
|
||||
from_family_mother = from_family.get_mother_handle ()
|
||||
from_family_father_id = from_family.get_father_handle ()
|
||||
from_family_mother_id = from_family.get_mother_handle ()
|
||||
else:
|
||||
from_family_father = from_family_mother = None
|
||||
from_family_father_id = from_family_mother = None
|
||||
|
||||
for family_handle in person.get_family_handle_list ():
|
||||
family = self.database.get_family_from_handle(family_handle)
|
||||
@ -365,8 +365,8 @@ class ComprehensiveAncestorsReport (Report.Report):
|
||||
continue
|
||||
|
||||
if (suppress_children or
|
||||
(partner != from_family_father and
|
||||
partner != from_family_mother)):
|
||||
(partner_id != from_family_father_id and
|
||||
partner_id != from_family_mother_id)):
|
||||
for media_ref in partner.get_media_list ()[:1]:
|
||||
object_handle = media_ref.get_reference_handle()
|
||||
mobject = self.database.get_object_from_handle(object_handle)
|
||||
|
@ -79,14 +79,20 @@ class ChangeNames:
|
||||
return
|
||||
self.win_key = self.__class__
|
||||
self.name_list = []
|
||||
self.progress = Utils.ProgressMeter(_('Checking family names'),'')
|
||||
|
||||
|
||||
self.progress.set_pass(_('Searching family names'),
|
||||
len(self.db.get_surname_list()))
|
||||
for name in self.db.get_surname_list():
|
||||
if name != name.capitalize():
|
||||
self.name_list.append(name)
|
||||
self.progress.step()
|
||||
|
||||
if self.name_list:
|
||||
self.display()
|
||||
else:
|
||||
self.progress.close()
|
||||
OkDialog(_('No modifications made'),
|
||||
_("No capitalization changes were detected."))
|
||||
|
||||
@ -126,12 +132,15 @@ class ChangeNames:
|
||||
self.list.set_model(self.model)
|
||||
|
||||
self.iter_list = []
|
||||
self.progress.set_pass(_('Building display'),len(self.name_list))
|
||||
for name in self.name_list:
|
||||
handle = self.model.append()
|
||||
self.model.set_value(handle,0,1)
|
||||
self.model.set_value(handle,1,name)
|
||||
self.model.set_value(handle,2,name.capitalize())
|
||||
self.iter_list.append(handle)
|
||||
self.progress.step()
|
||||
self.progress.close()
|
||||
|
||||
self.add_itself_to_menu()
|
||||
self.window.show()
|
||||
@ -186,6 +195,7 @@ class ChangeNames:
|
||||
self.db.transaction_commit(self.trans,_("Capitalization changes"))
|
||||
self.db.enable_signals()
|
||||
self.db.request_rebuild()
|
||||
self.parent.bookmarks.redraw()
|
||||
self.close(obj)
|
||||
self.cb(None,1)
|
||||
|
||||
|
@ -128,6 +128,8 @@ class ChangeTypes:
|
||||
original = unicode(self.auto1.child.get_text())
|
||||
new = unicode(self.auto2.child.get_text())
|
||||
|
||||
progress = Utils.ProgressMeter(_('Analyzing events'),'')
|
||||
progress.set_pass('',self.db.get_number_of_people())
|
||||
for person_handle in self.db.get_person_handles(sort_handles=False):
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
for event_handle in person.get_event_list():
|
||||
@ -138,13 +140,15 @@ class ChangeTypes:
|
||||
event.set_name(new)
|
||||
modified = modified + 1
|
||||
self.db.commit_event(event,self.trans)
|
||||
progress.step()
|
||||
progress.close()
|
||||
|
||||
if modified == 1:
|
||||
msg = _("1 event record was modified")
|
||||
else:
|
||||
msg = _("%d event records were modified") % modified
|
||||
|
||||
OkDialog(_('Change types'),msg,self.parent)
|
||||
OkDialog(_('Change types'),msg,self.parent.topWindow)
|
||||
self.db.transaction_commit(self.trans,_('Change types'))
|
||||
self.close(None)
|
||||
|
||||
|
@ -29,6 +29,7 @@
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import cStringIO
|
||||
import sets
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
@ -77,6 +78,7 @@ def runTool(database,active_person,callback,parent=None):
|
||||
checker.check_for_broken_family_links()
|
||||
checker.check_parent_relationships()
|
||||
checker.cleanup_empty_families(0)
|
||||
checker.cleanup_duplicate_spouses()
|
||||
|
||||
total = checker.family_errors()
|
||||
|
||||
@ -110,6 +112,7 @@ class CheckIntegrity:
|
||||
self.removed_photo = []
|
||||
self.empty_family = []
|
||||
self.broken_links = []
|
||||
self.duplicate_links = []
|
||||
self.broken_parent_links = []
|
||||
self.fam_rel = []
|
||||
self.invalid_events = []
|
||||
@ -117,13 +120,42 @@ class CheckIntegrity:
|
||||
self.invalid_death_events = []
|
||||
self.invalid_place_references = []
|
||||
self.invalid_source_references = []
|
||||
self.progress = Utils.ProgressMeter(_('Checking database'),'')
|
||||
|
||||
def family_errors(self):
|
||||
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family)
|
||||
return len(self.broken_parent_links) + len(self.broken_links) + len(self.empty_family) + len(self.duplicate_links)
|
||||
|
||||
def cleanup_duplicate_spouses(self):
|
||||
|
||||
self.progress.set_pass(_('Looking for duplicate spouses'),
|
||||
self.db.get_number_of_people())
|
||||
|
||||
cursor = self.db.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
(handle,value) = data
|
||||
p = RelLib.Person(value)
|
||||
splist = p.get_family_handle_list()
|
||||
if len(splist) != len(sets.Set(splist)):
|
||||
new_list = []
|
||||
for value in splist:
|
||||
if value not in new_list:
|
||||
new_list.append(value)
|
||||
self.duplicate_links.append((handle,value))
|
||||
p.set_family_handle_list(new_list)
|
||||
self.db.commit_person(p,self.trans)
|
||||
data = cursor.next()
|
||||
self.progress.step()
|
||||
cursor.close()
|
||||
|
||||
def check_for_broken_family_links(self):
|
||||
# Check persons referenced by the family objects
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
self.progress.set_pass(_('Looking for broken family links'),
|
||||
len(fhandle_list) + self.db.get_number_of_people())
|
||||
|
||||
for family_handle in fhandle_list:
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
father_handle = family.get_father_handle()
|
||||
mother_handle = family.get_mother_handle()
|
||||
@ -172,7 +204,8 @@ class CheckIntegrity:
|
||||
family.remove_child_handle(child_handle)
|
||||
self.db.commit_family(family,self.trans)
|
||||
self.broken_links.append((child_handle,family_handle))
|
||||
|
||||
self.progress.step()
|
||||
|
||||
# Check persons membership in referenced families
|
||||
for person_handle in self.db.get_person_handles():
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
@ -206,8 +239,13 @@ class CheckIntegrity:
|
||||
person.remove_family_handle(family_handle)
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.broken_links.append((person_handle,family_handle))
|
||||
self.progress.step()
|
||||
|
||||
def cleanup_missing_photos(self,cl=0):
|
||||
|
||||
self.progress.set_pass(_('Looking for unused objects'),
|
||||
len(self.db.get_media_object_handles()))
|
||||
|
||||
missmedia_action = 0
|
||||
#-------------------------------------------------------------------------
|
||||
def remove_clicked():
|
||||
@ -297,9 +335,17 @@ class CheckIntegrity:
|
||||
leave_clicked()
|
||||
elif missmedia_action == 3:
|
||||
select_clicked()
|
||||
self.progress.step()
|
||||
|
||||
def cleanup_empty_families(self,automatic):
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
|
||||
self.progress.set_pass(_('Looking for empty families'),
|
||||
len(fhandle_list))
|
||||
for family_handle in fhandle_list:
|
||||
self.progress.step()
|
||||
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
father_handle = family.get_father_handle()
|
||||
mother_handle = family.get_mother_handle()
|
||||
@ -331,7 +377,12 @@ class CheckIntegrity:
|
||||
self.db.remove_family(family_handle,self.trans)
|
||||
|
||||
def check_parent_relationships(self):
|
||||
for family_handle in self.db.get_family_handles():
|
||||
|
||||
fhandle_list = self.db.get_family_handles()
|
||||
self.progress.set_pass(_('Looking for broken parent relationships'),
|
||||
len(fhandle_list))
|
||||
|
||||
for family_handle in fhandle_list:
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
mother_handle = family.get_mother_handle()
|
||||
father_handle = family.get_father_handle()
|
||||
@ -379,13 +430,20 @@ class CheckIntegrity:
|
||||
self.db.commit_family(family,self.trans)
|
||||
|
||||
def check_events(self):
|
||||
self.progress.set_pass(_('Looking for event problems'),
|
||||
self.db.get_number_of_people()
|
||||
+self.db.get_number_of_families())
|
||||
|
||||
for key in self.db.get_person_handles(sort_handles=False):
|
||||
self.progress.step()
|
||||
|
||||
person = self.db.get_person_from_handle(key)
|
||||
birth_handle = person.get_birth_handle()
|
||||
if birth_handle:
|
||||
birth = self.db.get_event_from_handle(birth_handle)
|
||||
if not birth:
|
||||
# The birth event referenced by the birth handle does not exist in the database
|
||||
# The birth event referenced by the birth handle
|
||||
# does not exist in the database
|
||||
person.set_birth_handle("")
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
@ -399,7 +457,8 @@ class CheckIntegrity:
|
||||
if death_handle:
|
||||
death = self.db.get_event_from_handle(death_handle)
|
||||
if not death:
|
||||
# The death event referenced by the death handle does not exist in the database
|
||||
# The death event referenced by the death handle
|
||||
# does not exist in the database
|
||||
person.set_death_handle("")
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
@ -409,18 +468,50 @@ class CheckIntegrity:
|
||||
death.set_name("Death");
|
||||
self.db.commit_event(death,self.trans)
|
||||
self.invalid_death_events.append(key)
|
||||
|
||||
if person.get_event_list():
|
||||
for event_handle in person.get_event_list():
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if not event:
|
||||
# The event referenced by the person does not exist in the database
|
||||
# The event referenced by the person
|
||||
# does not exist in the database
|
||||
#TODO: There is no better way?
|
||||
person.set_event_list( person.get_event_list().remove(event_handle))
|
||||
person.set_event_list(
|
||||
person.get_event_list().remove(event_handle))
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
elif type(person.get_event_list()) != list:
|
||||
# event_list is None or other garbage
|
||||
person.set_event_list([])
|
||||
self.db.commit_person(person,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
|
||||
for key in self.db.get_family_handles():
|
||||
self.progress.step()
|
||||
family = self.db.get_family_from_handle(key)
|
||||
if family.get_event_list():
|
||||
for event_handle in family.get_event_list():
|
||||
event = self.db.get_event_from_handle(event_handle)
|
||||
if not event:
|
||||
# The event referenced by the family
|
||||
# does not exist in the database
|
||||
family.set_event_list(
|
||||
family.get_event_list().remove(event_handle))
|
||||
self.db.commit_family(family,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
elif type(family.get_event_list()) != list:
|
||||
# event_list is None or other garbage
|
||||
family.set_event_list([])
|
||||
self.db.commit_family(family,self.trans)
|
||||
self.invalid_events.append(key)
|
||||
|
||||
def check_place_references(self):
|
||||
for key in self.db.get_event_handles():
|
||||
elist = self.db.get_event_handles()
|
||||
|
||||
self.progress.set_pass(_('Looking for place reference problems'),
|
||||
len(elist))
|
||||
|
||||
for key in elist:
|
||||
event = self.db.get_event_from_handle(key)
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
@ -433,10 +524,19 @@ class CheckIntegrity:
|
||||
|
||||
def check_source_references(self):
|
||||
known_handles = self.db.get_source_handles()
|
||||
|
||||
total = self.db.get_number_of_people() + self.db.get_number_of_families() + \
|
||||
self.db.get_number_of_events() + self.db.get_number_of_places() + \
|
||||
self.db.get_number_of_media_objects() + \
|
||||
self.db.get_number_of_sources()
|
||||
|
||||
self.progress.set_pass(_('Looking for source reference problems'),
|
||||
total)
|
||||
|
||||
cursor = self.db.get_person_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
person = RelLib.Person()
|
||||
person.unserialize(info)
|
||||
@ -456,6 +556,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_family_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
family = RelLib.Family()
|
||||
family.unserialize(info)
|
||||
@ -475,6 +576,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_place_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
place = RelLib.Place()
|
||||
place.unserialize(info)
|
||||
@ -494,6 +596,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_source_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
source = RelLib.Source()
|
||||
source.unserialize(info)
|
||||
@ -513,6 +616,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_media_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
obj = RelLib.MediaObject()
|
||||
obj.unserialize(info)
|
||||
@ -532,6 +636,7 @@ class CheckIntegrity:
|
||||
cursor = self.db.get_event_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
handle,info = data
|
||||
event = RelLib.Event()
|
||||
event.unserialize(info)
|
||||
@ -549,6 +654,7 @@ class CheckIntegrity:
|
||||
cursor.close()
|
||||
|
||||
def build_report(self,cl=0):
|
||||
self.progress.close()
|
||||
bad_photos = len(self.bad_photo)
|
||||
replaced_photos = len(self.replaced_photo)
|
||||
removed_photos = len(self.removed_photo)
|
||||
@ -556,6 +662,7 @@ class CheckIntegrity:
|
||||
efam = len(self.empty_family)
|
||||
blink = len(self.broken_links)
|
||||
plink = len(self.broken_parent_links)
|
||||
slink = len(self.duplicate_links)
|
||||
rel = len(self.fam_rel)
|
||||
event_invalid = len(self.invalid_events)
|
||||
birth_invalid = len(self.invalid_birth_events)
|
||||
@ -615,6 +722,25 @@ class CheckIntegrity:
|
||||
self.text.write('\t')
|
||||
self.text.write(_("%s was restored to the family of %s\n") % (cn,pn))
|
||||
|
||||
if slink > 0:
|
||||
if slink == 1:
|
||||
self.text.write(_("1 duplicate spouse/family link was found\n"))
|
||||
else:
|
||||
self.text.write(_("%d duplicate spouse/family links were found\n") % slink)
|
||||
for (person_handle,family_handle) in self.broken_parent_links:
|
||||
person = self.db.get_person_from_handle(person_handle)
|
||||
if person:
|
||||
cn = person.get_primary_name().get_name()
|
||||
else:
|
||||
cn = _("Non existing person")
|
||||
family = self.db.get_family_from_handle(family_handle)
|
||||
if family:
|
||||
pn = Utils.family_name(family,self.db)
|
||||
else:
|
||||
pn = family.gramps_id
|
||||
self.text.write('\t')
|
||||
self.text.write(_("%s was restored to the family of %s\n") % (cn,pn))
|
||||
|
||||
if efam == 1:
|
||||
self.text.write(_("1 empty family was found\n"))
|
||||
elif efam > 1:
|
||||
@ -727,6 +853,6 @@ from PluginMgr import register_tool
|
||||
register_tool(
|
||||
runTool,
|
||||
_("Check and repair database"),
|
||||
category=_("Database Processing"),
|
||||
category=_("Database Repair"),
|
||||
description=_("Checks the database for integrity problems, fixing the problems that it can")
|
||||
)
|
||||
|
@ -116,6 +116,8 @@ class Checkpoint:
|
||||
"""
|
||||
(archive_base,ext) = os.path.splitext(self.db.get_save_path())
|
||||
|
||||
comment = self.timestamp()
|
||||
|
||||
archive = archive_base + ",v"
|
||||
if not os.path.exists(archive):
|
||||
proc = popen2.Popen3('rcs -i -U -q -t-"GRAMPS database" %s' % archive,True)
|
||||
@ -131,8 +133,6 @@ class Checkpoint:
|
||||
xmlwrite = WriteXML.XmlWriter(self.db,self.callback,False,False)
|
||||
xmlwrite.write(archive_base)
|
||||
|
||||
comment = self.timestamp()
|
||||
|
||||
proc = popen2.Popen3("ci %s" % archive_base,True)
|
||||
proc.tochild.write(comment)
|
||||
proc.tochild.close()
|
||||
|
@ -50,6 +50,7 @@ import const
|
||||
import ReportUtils
|
||||
from DateHandler import displayer as _dd
|
||||
from NameDisplay import displayer as _nd
|
||||
import cStringIO
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -108,6 +109,9 @@ class DetAncestorReport(Report.Report):
|
||||
self.dupPerson = options_class.handler.options_dict['omitda']
|
||||
self.childRef = options_class.handler.options_dict['desref']
|
||||
self.addImages = options_class.handler.options_dict['incphotos']
|
||||
self.includeNames = options_class.handler.options_dict['incnames']
|
||||
self.includeEvents = options_class.handler.options_dict['incevents']
|
||||
self.includeSources= options_class.handler.options_dict['incsources']
|
||||
|
||||
self.gen_handles = {}
|
||||
self.prev_gen_handles= {}
|
||||
@ -122,6 +126,9 @@ class DetAncestorReport(Report.Report):
|
||||
else:
|
||||
self.EMPTY_PLACE = ""
|
||||
|
||||
self.sref_map = {}
|
||||
self.sref_index = 0
|
||||
|
||||
def apply_filter(self,person_handle,index):
|
||||
if (not person_handle) or (index >= 2**self.max_generations):
|
||||
return
|
||||
@ -174,6 +181,9 @@ class DetAncestorReport(Report.Report):
|
||||
family = self.database.get_family_from_handle(family_handle)
|
||||
self.write_children(family)
|
||||
|
||||
if self.includeSources:
|
||||
self.write_endnotes()
|
||||
|
||||
def write_person(self, key):
|
||||
"""Output birth, death, parentage, marriage and notes information """
|
||||
|
||||
@ -210,6 +220,8 @@ class DetAncestorReport(Report.Report):
|
||||
self.doc.end_paragraph()
|
||||
return 1 # Duplicate person
|
||||
|
||||
# Output the global source references for this person
|
||||
self.endnotes(person)
|
||||
# Check birth record
|
||||
birth_handle = person.get_birth_handle()
|
||||
if birth_handle:
|
||||
@ -217,18 +229,26 @@ class DetAncestorReport(Report.Report):
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
self.endnotes(self.database.get_event_from_handle(birth_handle))
|
||||
else:
|
||||
self.doc.write_text('. ')
|
||||
else:
|
||||
self.doc.write_text('. ')
|
||||
|
||||
if person.get_death_handle():
|
||||
death_handle = person.get_death_handle()
|
||||
if death_handle:
|
||||
age,units = self.calc_age(person)
|
||||
text = ReportUtils.died_str(self.database,person,firstName,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE,age,units)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
self.endnotes(self.database.get_event_from_handle(death_handle))
|
||||
|
||||
text = ReportUtils.buried_str(self.database,person,firstName,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
# Missing source reference for burial
|
||||
|
||||
self.write_parents(person, firstName)
|
||||
self.write_marriage(person)
|
||||
@ -245,6 +265,65 @@ class DetAncestorReport(Report.Report):
|
||||
self.doc.end_paragraph()
|
||||
self.doc.write_note(person.get_note(),person.get_note_format(),"DAR-Entry")
|
||||
|
||||
first = 1
|
||||
if self.includeNames:
|
||||
for alt_name in person.get_alternate_names():
|
||||
if first:
|
||||
self.doc.start_paragraph('DAR-MoreHeader')
|
||||
self.doc.write_text(_('More about %(person_name)s:') % {
|
||||
'person_name' : name })
|
||||
self.doc.end_paragraph()
|
||||
first = 0
|
||||
self.doc.start_paragraph('DAR-MoreDetails')
|
||||
self.doc.write_text(_('%(name_kind)s: %(name)s%(endnotes)s') % {
|
||||
'name_kind' : const.NameTypesMap.find_value(alt_name.get_type()),
|
||||
'name' : alt_name.get_regular_name(),
|
||||
'endnotes' : self.endnotes(alt_name),
|
||||
})
|
||||
self.doc.end_paragraph()
|
||||
|
||||
if self.includeEvents:
|
||||
for event_handle in person.get_event_list():
|
||||
event = self.database.get_event_from_handle(event_handle)
|
||||
date = event.get_date()
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.database.get_place_from_handle(place_handle).get_title()
|
||||
else:
|
||||
place = u''
|
||||
|
||||
if first:
|
||||
self.doc.start_paragraph('DAR-MoreHeader')
|
||||
self.doc.write_text(_('More about %(person_name)s:') % {
|
||||
'person_name' : person.get_primary_name().get_regular_name() })
|
||||
self.doc.end_paragraph()
|
||||
first = 0
|
||||
|
||||
|
||||
self.doc.start_paragraph('DAR-MoreDetails')
|
||||
if date and place:
|
||||
self.doc.write_text(_('%(event_name)s: %(date)s, %(place)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'date' : date,
|
||||
'endnotes' : self.endnotes(event),
|
||||
'place' : place })
|
||||
elif date:
|
||||
self.doc.write_text(_('%(event_name)s: %(date)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'endnotes' : self.endnotes(event),
|
||||
'date' : date})
|
||||
elif place:
|
||||
self.doc.write_text(_('%(event_name)s: %(place)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'endnotes' : self.endnotes(event),
|
||||
'place' : place })
|
||||
else:
|
||||
self.doc.write_text(_('%(event_name)s: ') % {
|
||||
'event_name' : _(event.get_name())})
|
||||
if event.get_description():
|
||||
self.doc.write_text(event.get_description())
|
||||
self.doc.end_paragraph()
|
||||
|
||||
return 0 # Not duplicate person
|
||||
|
||||
def write_parents(self, person, firstName):
|
||||
@ -283,7 +362,7 @@ class DetAncestorReport(Report.Report):
|
||||
text = ""
|
||||
if marriage_event:
|
||||
text = ReportUtils.married_str(self.database,person,spouse,
|
||||
marriage_event,None,
|
||||
marriage_event,self.endnotes,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE,
|
||||
is_first)
|
||||
else:
|
||||
@ -405,6 +484,74 @@ class DetAncestorReport(Report.Report):
|
||||
else:
|
||||
return (0,0)
|
||||
|
||||
def write_endnotes(self):
|
||||
keys = self.sref_map.keys()
|
||||
if not keys:
|
||||
return
|
||||
|
||||
self.doc.start_paragraph('DAR-Endnotes-Header')
|
||||
self.doc.write_text(_('Endnotes'))
|
||||
self.doc.end_paragraph()
|
||||
|
||||
keys.sort()
|
||||
for key in keys:
|
||||
srcref = self.sref_map[key]
|
||||
base = self.database.get_source_from_handle(srcref.get_base_handle())
|
||||
|
||||
self.doc.start_paragraph('DAR-Endnotes',"%d." % key)
|
||||
self.doc.write_text(base.get_title())
|
||||
|
||||
for item in [ base.get_author(), base.get_publication_info(), base.get_abbreviation(),
|
||||
_dd.display(srcref.get_date_object()),]:
|
||||
if item:
|
||||
self.doc.write_text('; %s' % item)
|
||||
|
||||
item = srcref.get_text()
|
||||
if item:
|
||||
self.doc.write_text('; ')
|
||||
self.doc.write_text(_('Text:'))
|
||||
self.doc.write_text(' ')
|
||||
self.doc.write_text(item)
|
||||
|
||||
item = srcref.get_note()
|
||||
if item:
|
||||
self.doc.write_text('; ')
|
||||
self.doc.write_text(_('Comments:'))
|
||||
self.doc.write_text(' ')
|
||||
self.doc.write_text(item)
|
||||
|
||||
self.doc.write_text('.')
|
||||
self.doc.end_paragraph()
|
||||
|
||||
def endnotes(self,obj):
|
||||
if not self.includeSources:
|
||||
return ""
|
||||
msg = cStringIO.StringIO()
|
||||
slist = obj.get_source_references()
|
||||
if slist:
|
||||
msg.write('<super>')
|
||||
first = 1
|
||||
for ref in slist:
|
||||
if not first:
|
||||
msg.write(',')
|
||||
first = 0
|
||||
ref_base = ref.get_base_handle()
|
||||
the_key = 0
|
||||
for key in self.sref_map.keys():
|
||||
if ref_base == self.sref_map[key].get_base_handle():
|
||||
the_key = key
|
||||
break
|
||||
if the_key:
|
||||
msg.write("%d" % the_key)
|
||||
else:
|
||||
self.sref_index += 1
|
||||
self.sref_map[self.sref_index] = ref
|
||||
msg.write("%d" % self.sref_index)
|
||||
msg.write('</super>')
|
||||
str = msg.getvalue()
|
||||
msg.close()
|
||||
return str
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -432,6 +579,9 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
'omitda' : 1,
|
||||
'desref' : 1,
|
||||
'incphotos' : 0,
|
||||
'incnames' : 0,
|
||||
'incevents' : 0,
|
||||
'incsources' : 0,
|
||||
}
|
||||
self.options_help = {
|
||||
'firstnameiop' : ("=0/1","Whether to use first names instead of pronouns",
|
||||
@ -464,6 +614,15 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
'incphotos' : ("=0/1","Whether to include images.",
|
||||
["Do not include images","Include images"],
|
||||
True),
|
||||
'incnames' : ("=0/1","Whether to include other names.",
|
||||
["Do not include other names","Include other names"],
|
||||
True),
|
||||
'incevents' : ("=0/1","Whether to include events.",
|
||||
["Do not include events","Include events"],
|
||||
True),
|
||||
'incsources' : ("=0/1","Whether to include source references.",
|
||||
["Do not include sources","Include sources"],
|
||||
True),
|
||||
}
|
||||
|
||||
def enable_options(self):
|
||||
@ -525,6 +684,36 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
para.set_description(_('The style used for the first personal entry.'))
|
||||
default_style.add_style("DAR-First-Entry",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(bold=1)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set(first_indent=0.0,lmargin=0.0,pad=0.25)
|
||||
para.set_description(_('The style used for the More About header.'))
|
||||
default_style.add_style("DAR-MoreHeader",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(face=BaseDoc.FONT_SANS_SERIF,size=9)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set(first_indent=0.0,lmargin=1.0,pad=0.25)
|
||||
para.set_description(_('The style used for additional detail data.'))
|
||||
default_style.add_style("DAR-MoreDetails",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set_header_level(2)
|
||||
para.set(pad=0.5)
|
||||
para.set_description(_('The style used for the generation header.'))
|
||||
default_style.add_style("DAR-Endnotes-Header",para)
|
||||
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set(first_indent=0.5,lmargin=1.0,pad=0.25)
|
||||
para.set_description(_('The basic style used for the endnotes text display.'))
|
||||
default_style.add_style("DAR-Endnotes",para)
|
||||
|
||||
def add_user_options(self,dialog):
|
||||
"""
|
||||
Override the base class add_user_options task to add a menu that allows
|
||||
@ -571,6 +760,18 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
self.image_option = gtk.CheckButton(_("Include Photo/Images from Gallery"))
|
||||
self.image_option.set_active(self.options_dict['incphotos'])
|
||||
|
||||
# Print alternative names
|
||||
self.include_names_option = gtk.CheckButton(_("Include alternative names"))
|
||||
self.include_names_option.set_active(self.options_dict['incnames'])
|
||||
|
||||
# Print events
|
||||
self.include_events_option = gtk.CheckButton(_("Include events"))
|
||||
self.include_events_option.set_active(self.options_dict['incevents'])
|
||||
|
||||
# Print sources
|
||||
self.include_sources_option = gtk.CheckButton(_("Include sources"))
|
||||
self.include_sources_option.set_active(self.options_dict['incsources'])
|
||||
|
||||
# Add new options. The first argument is the tab name for grouping options.
|
||||
# if you want to put everyting in the generic "Options" category, use
|
||||
# self.add_option(text,widget) instead of self.add_frame_option(category,text,widget)
|
||||
@ -585,6 +786,9 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
dialog.add_frame_option(_('Content'),'',self.dupPersons_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.childRef_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.image_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_names_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_events_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_sources_option)
|
||||
|
||||
def parse_user_options(self,dialog):
|
||||
"""
|
||||
@ -601,6 +805,9 @@ class DetAncestorOptions(ReportOptions.ReportOptions):
|
||||
self.options_dict['omitda'] = int(self.dupPersons_option.get_active())
|
||||
self.options_dict['desref'] = int(self.childRef_option.get_active())
|
||||
self.options_dict['incphotos'] = int(self.image_option.get_active())
|
||||
self.options_dict['incnames'] = int(self.include_names_option.get_active())
|
||||
self.options_dict['incevents'] = int(self.include_events_option.get_active())
|
||||
self.options_dict['incsources'] = int(self.include_sources_option.get_active())
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
|
@ -52,6 +52,7 @@ import ReportUtils
|
||||
import const
|
||||
from DateHandler import displayer as _dd
|
||||
from NameDisplay import displayer as _nd
|
||||
import cStringIO
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
@ -110,6 +111,9 @@ class DetDescendantReport(Report.Report):
|
||||
self.dupPerson = options_class.handler.options_dict['omitda']
|
||||
self.childRef = options_class.handler.options_dict['desref']
|
||||
self.addImages = options_class.handler.options_dict['incphotos']
|
||||
self.includeNames = options_class.handler.options_dict['incnames']
|
||||
self.includeEvents = options_class.handler.options_dict['incevents']
|
||||
self.includeSources= options_class.handler.options_dict['incsources']
|
||||
|
||||
self.gen_handles = {}
|
||||
self.prev_gen_handles= {}
|
||||
@ -125,6 +129,9 @@ class DetDescendantReport(Report.Report):
|
||||
else:
|
||||
self.EMPTY_PLACE = ""
|
||||
|
||||
self.sref_map = {}
|
||||
self.sref_index = 0
|
||||
|
||||
def apply_filter(self,person_handle,index,cur_gen=1):
|
||||
if (not person_handle) or (cur_gen > self.max_generations):
|
||||
return
|
||||
@ -149,6 +156,7 @@ class DetDescendantReport(Report.Report):
|
||||
name = _nd.display_name(self.start_person.get_primary_name())
|
||||
|
||||
spouseName = ""
|
||||
nspouses = 0
|
||||
for family_handle in self.start_person.get_family_handle_list():
|
||||
family = self.database.get_family_from_handle(family_handle)
|
||||
if self.start_person.get_gender() == RelLib.Person.MALE:
|
||||
@ -156,11 +164,12 @@ class DetDescendantReport(Report.Report):
|
||||
else:
|
||||
spouse_handle = family.get_father_handle()
|
||||
if spouse_handle:
|
||||
nspouses += 1
|
||||
spouse = self.database.get_person_from_handle(spouse_handle)
|
||||
spouseName = _nd.display(spouse)
|
||||
|
||||
self.doc.start_paragraph("DDR-Title")
|
||||
if spouseName:
|
||||
if nspouses == 1:
|
||||
name = _("%(spouse_name)s and %(person_name)s") % {
|
||||
'spouse_name' : spouseName, 'person_name' : name }
|
||||
|
||||
@ -198,6 +207,9 @@ class DetDescendantReport(Report.Report):
|
||||
family = self.database.get_family_from_handle(family_handle)
|
||||
self.write_children(family)
|
||||
|
||||
if self.includeSources:
|
||||
self.write_endnotes()
|
||||
|
||||
def write_person(self, key):
|
||||
"""Output birth, death, parentage, marriage and notes information """
|
||||
|
||||
@ -233,6 +245,8 @@ class DetDescendantReport(Report.Report):
|
||||
self.doc.end_paragraph()
|
||||
return 1 # Duplicate person
|
||||
|
||||
# Output the global source references for this person
|
||||
self.endnotes(person)
|
||||
# Check birth record
|
||||
birth_handle = person.get_birth_handle()
|
||||
if birth_handle:
|
||||
@ -240,17 +254,25 @@ class DetDescendantReport(Report.Report):
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
if person.get_death_handle():
|
||||
self.endnotes(self.database.get_event_from_handle(birth_handle))
|
||||
else:
|
||||
self.doc.write_text(". ");
|
||||
else:
|
||||
self.doc.write_text(". ");
|
||||
death_handle = person.get_death_handle()
|
||||
if death_handle:
|
||||
age,units = self.calc_age(person)
|
||||
text = ReportUtils.died_str(self.database,person,firstName,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE,age,units)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
self.endnotes(self.database.get_event_from_handle(death_handle))
|
||||
|
||||
text = ReportUtils.buried_str(self.database,person,firstName,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
# Missing source reference for burial
|
||||
|
||||
self.write_parents(person, firstName)
|
||||
self.write_marriage(person)
|
||||
@ -266,6 +288,65 @@ class DetDescendantReport(Report.Report):
|
||||
self.doc.end_paragraph()
|
||||
self.doc.write_note(person.get_note(),person.get_note_format(),"DDR-Entry")
|
||||
|
||||
first = 1
|
||||
if self.includeNames:
|
||||
for alt_name in person.get_alternate_names():
|
||||
if first:
|
||||
self.doc.start_paragraph('DDR-MoreHeader')
|
||||
self.doc.write_text(_('More about %(person_name)s:') % {
|
||||
'person_name' : name })
|
||||
self.doc.end_paragraph()
|
||||
first = 0
|
||||
self.doc.start_paragraph('DDR-MoreDetails')
|
||||
self.doc.write_text(_('%(name_kind)s: %(name)s%(endnotes)s') % {
|
||||
'name_kind' : const.NameTypesMap.find_value(alt_name.get_type()),
|
||||
'name' : alt_name.get_regular_name(),
|
||||
'endnotes' : self.endnotes(alt_name),
|
||||
})
|
||||
self.doc.end_paragraph()
|
||||
|
||||
if self.includeEvents:
|
||||
for event_handle in person.get_event_list():
|
||||
event = self.database.get_event_from_handle(event_handle)
|
||||
date = event.get_date()
|
||||
place_handle = event.get_place_handle()
|
||||
if place_handle:
|
||||
place = self.database.get_place_from_handle(place_handle).get_title()
|
||||
else:
|
||||
place = u''
|
||||
|
||||
if first:
|
||||
self.doc.start_paragraph('DDR-MoreHeader')
|
||||
self.doc.write_text(_('More about %(person_name)s:') % {
|
||||
'person_name' : person.get_primary_name().get_regular_name() })
|
||||
self.doc.end_paragraph()
|
||||
first = 0
|
||||
|
||||
|
||||
self.doc.start_paragraph('DDR-MoreDetails')
|
||||
if date and place:
|
||||
self.doc.write_text(_('%(event_name)s: %(date)s, %(place)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'date' : date,
|
||||
'endnotes' : self.endnotes(event),
|
||||
'place' : place })
|
||||
elif date:
|
||||
self.doc.write_text(_('%(event_name)s: %(date)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'endnotes' : self.endnotes(event),
|
||||
'date' : date})
|
||||
elif place:
|
||||
self.doc.write_text(_('%(event_name)s: %(place)s%(endnotes)s. ') % {
|
||||
'event_name' : _(event.get_name()),
|
||||
'endnotes' : self.endnotes(event),
|
||||
'place' : place })
|
||||
else:
|
||||
self.doc.write_text(_('%(event_name)s: ') % {
|
||||
'event_name' : _(event.get_name())})
|
||||
if event.get_description():
|
||||
self.doc.write_text(event.get_description())
|
||||
self.doc.end_paragraph()
|
||||
|
||||
return 0 # Not duplicate person
|
||||
|
||||
def write_parents(self, person, firstName):
|
||||
@ -305,7 +386,7 @@ class DetDescendantReport(Report.Report):
|
||||
text = ""
|
||||
if marriage_event:
|
||||
text = ReportUtils.married_str(self.database,person,spouse,
|
||||
marriage_event,None,
|
||||
marriage_event,self.endnotes,
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE,
|
||||
is_first)
|
||||
else:
|
||||
@ -390,6 +471,8 @@ class DetDescendantReport(Report.Report):
|
||||
self.EMPTY_DATE,self.EMPTY_PLACE)
|
||||
if text:
|
||||
self.doc.write_text(text)
|
||||
else:
|
||||
self.doc.write_text(". ");
|
||||
|
||||
age,units = self.calc_age(ind)
|
||||
text = ReportUtils.died_str(self.database,ind,heshe,
|
||||
@ -406,9 +489,9 @@ class DetDescendantReport(Report.Report):
|
||||
|
||||
self.doc.end_paragraph()
|
||||
|
||||
if self.listChildren \
|
||||
and mate.get_gender() == RelLib.Person.MALE:
|
||||
self.write_children(family)
|
||||
# if self.listChildren \
|
||||
# and mate.get_gender() == RelLib.Person.MALE:
|
||||
# self.write_children(family)
|
||||
|
||||
def calc_age(self,ind):
|
||||
"""
|
||||
@ -426,6 +509,74 @@ class DetDescendantReport(Report.Report):
|
||||
else:
|
||||
return (0,0)
|
||||
|
||||
def write_endnotes(self):
|
||||
keys = self.sref_map.keys()
|
||||
if not keys:
|
||||
return
|
||||
|
||||
self.doc.start_paragraph('DDR-Endnotes-Header')
|
||||
self.doc.write_text(_('Endnotes'))
|
||||
self.doc.end_paragraph()
|
||||
|
||||
keys.sort()
|
||||
for key in keys:
|
||||
srcref = self.sref_map[key]
|
||||
base = self.database.get_source_from_handle(srcref.get_base_handle())
|
||||
|
||||
self.doc.start_paragraph('DDR-Endnotes',"%d." % key)
|
||||
self.doc.write_text(base.get_title())
|
||||
|
||||
for item in [ base.get_author(), base.get_publication_info(), base.get_abbreviation(),
|
||||
_dd.display(srcref.get_date_object()),]:
|
||||
if item:
|
||||
self.doc.write_text('; %s' % item)
|
||||
|
||||
item = srcref.get_text()
|
||||
if item:
|
||||
self.doc.write_text('; ')
|
||||
self.doc.write_text(_('Text:'))
|
||||
self.doc.write_text(' ')
|
||||
self.doc.write_text(item)
|
||||
|
||||
item = srcref.get_note()
|
||||
if item:
|
||||
self.doc.write_text('; ')
|
||||
self.doc.write_text(_('Comments:'))
|
||||
self.doc.write_text(' ')
|
||||
self.doc.write_text(item)
|
||||
|
||||
self.doc.write_text('.')
|
||||
self.doc.end_paragraph()
|
||||
|
||||
def endnotes(self,obj):
|
||||
if not self.includeSources:
|
||||
return ""
|
||||
msg = cStringIO.StringIO()
|
||||
slist = obj.get_source_references()
|
||||
if slist:
|
||||
msg.write('<super>')
|
||||
first = 1
|
||||
for ref in slist:
|
||||
if not first:
|
||||
msg.write(',')
|
||||
first = 0
|
||||
ref_base = ref.get_base_handle()
|
||||
the_key = 0
|
||||
for key in self.sref_map.keys():
|
||||
if ref_base == self.sref_map[key].get_base_handle():
|
||||
the_key = key
|
||||
break
|
||||
if the_key:
|
||||
msg.write("%d" % the_key)
|
||||
else:
|
||||
self.sref_index += 1
|
||||
self.sref_map[self.sref_index] = ref
|
||||
msg.write("%d" % self.sref_index)
|
||||
msg.write('</super>')
|
||||
str = msg.getvalue()
|
||||
msg.close()
|
||||
return str
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
@ -453,6 +604,9 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
'omitda' : 1,
|
||||
'desref' : 1,
|
||||
'incphotos' : 0,
|
||||
'incnames' : 0,
|
||||
'incevents' : 0,
|
||||
'incsources' : 0,
|
||||
}
|
||||
self.options_help = {
|
||||
'firstnameiop' : ("=0/1","Whether to use first names instead of pronouns",
|
||||
@ -485,6 +639,15 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
'incphotos' : ("=0/1","Whether to include images.",
|
||||
["Do not include images","Include images"],
|
||||
True),
|
||||
'incnames' : ("=0/1","Whether to include other names.",
|
||||
["Do not include other names","Include other names"],
|
||||
True),
|
||||
'incevents' : ("=0/1","Whether to include events.",
|
||||
["Do not include events","Include events"],
|
||||
True),
|
||||
'incsources' : ("=0/1","Whether to include source references.",
|
||||
["Do not include sources","Include sources"],
|
||||
True),
|
||||
}
|
||||
|
||||
def enable_options(self):
|
||||
@ -546,6 +709,36 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
para.set_description(_('The style used for the first personal entry.'))
|
||||
default_style.add_style("DDR-First-Entry",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(bold=1)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set(first_indent=0.0,lmargin=0.0,pad=0.25)
|
||||
para.set_description(_('The style used for the More About header.'))
|
||||
default_style.add_style("DDR-MoreHeader",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(face=BaseDoc.FONT_SANS_SERIF,size=9)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set(first_indent=0.0,lmargin=1.0,pad=0.25)
|
||||
para.set_description(_('The style used for additional detail data.'))
|
||||
default_style.add_style("DDR-MoreDetails",para)
|
||||
|
||||
font = BaseDoc.FontStyle()
|
||||
font.set(face=BaseDoc.FONT_SANS_SERIF,size=14,italic=1)
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set_font(font)
|
||||
para.set_header_level(2)
|
||||
para.set(pad=0.5)
|
||||
para.set_description(_('The style used for the generation header.'))
|
||||
default_style.add_style("DDR-Endnotes-Header",para)
|
||||
|
||||
para = BaseDoc.ParagraphStyle()
|
||||
para.set(first_indent=0.5,lmargin=1.0,pad=0.25)
|
||||
para.set_description(_('The basic style used for the endnotes text display.'))
|
||||
default_style.add_style("DDR-Endnotes",para)
|
||||
|
||||
def add_user_options(self,dialog):
|
||||
"""
|
||||
Override the base class add_user_options task to add a menu that allows
|
||||
@ -592,6 +785,18 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
self.image_option = gtk.CheckButton(_("Include Photo/Images from Gallery"))
|
||||
self.image_option.set_active(self.options_dict['incphotos'])
|
||||
|
||||
# Print alternative names
|
||||
self.include_names_option = gtk.CheckButton(_("Include alternative names"))
|
||||
self.include_names_option.set_active(self.options_dict['incnames'])
|
||||
|
||||
# Print events
|
||||
self.include_events_option = gtk.CheckButton(_("Include events"))
|
||||
self.include_events_option.set_active(self.options_dict['incevents'])
|
||||
|
||||
# Print sources
|
||||
self.include_sources_option = gtk.CheckButton(_("Include sources"))
|
||||
self.include_sources_option.set_active(self.options_dict['incsources'])
|
||||
|
||||
# Add new options. The first argument is the tab name for grouping options.
|
||||
# if you want to put everyting in the generic "Options" category, use
|
||||
# self.add_option(text,widget) instead of self.add_frame_option(category,text,widget)
|
||||
@ -606,6 +811,9 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
dialog.add_frame_option(_('Content'),'',self.dupPersons_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.childRef_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.image_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_names_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_events_option)
|
||||
dialog.add_frame_option(_('Content'),'',self.include_sources_option)
|
||||
|
||||
def parse_user_options(self,dialog):
|
||||
"""
|
||||
@ -622,6 +830,9 @@ class DetDescendantOptions(ReportOptions.ReportOptions):
|
||||
self.options_dict['omitda'] = int(self.dupPersons_option.get_active())
|
||||
self.options_dict['desref'] = int(self.childRef_option.get_active())
|
||||
self.options_dict['incphotos'] = int(self.image_option.get_active())
|
||||
self.options_dict['incnames'] = int(self.include_names_option.get_active())
|
||||
self.options_dict['incevents'] = int(self.include_events_option.get_active())
|
||||
self.options_dict['incsources'] = int(self.include_sources_option.get_active())
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
|
@ -201,7 +201,13 @@ class EventComparison:
|
||||
def on_apply_clicked(self,obj):
|
||||
cfilter = self.filter_menu.get_active().get_data("filter")
|
||||
|
||||
plist = cfilter.apply(self.db,self.db.get_person_handles(sort_handles=False))
|
||||
progress_bar = Utils.ProgressMeter(_('Comparing events'),'')
|
||||
progress_bar.set_pass(_('Selecting people'),1)
|
||||
|
||||
plist = cfilter.apply(self.db,
|
||||
self.db.get_person_handles(sort_handles=False))
|
||||
progress_bar.step()
|
||||
progress_bar.close()
|
||||
|
||||
if len(plist) == 0:
|
||||
WarningDialog(_("No matches were found"))
|
||||
@ -312,10 +318,17 @@ class DisplayChart:
|
||||
index = index + 1
|
||||
|
||||
self.list = ListModel.ListModel(self.eventlist,titles)
|
||||
|
||||
self.progress_bar.set_pass(_('Building display'),len(self.row_data))
|
||||
for data in self.row_data:
|
||||
self.list.add(data)
|
||||
self.progress_bar.step()
|
||||
self.progress_bar.close()
|
||||
|
||||
def build_row_data(self):
|
||||
self.progress_bar = Utils.ProgressMeter(_('Comparing events'),'')
|
||||
self.progress_bar.set_pass(_('Building data'),
|
||||
self.db.get_number_of_people())
|
||||
for individual_id in self.my_list:
|
||||
individual = self.db.get_person_from_handle(individual_id)
|
||||
name = individual.get_primary_name().get_name()
|
||||
@ -382,6 +395,7 @@ class DisplayChart:
|
||||
done = 1
|
||||
else:
|
||||
self.row_data.append(tlist)
|
||||
self.progress_bar.step()
|
||||
|
||||
def make_event_titles(self):
|
||||
"""Creates the list of unique event types, along with the person's
|
||||
|
@ -82,7 +82,7 @@ class CalendarWriterOptionBox:
|
||||
all.set_name(_("Entire Database"))
|
||||
all.add_rule(GenericFilter.Everyone([]))
|
||||
|
||||
if person:
|
||||
if self.person:
|
||||
des = GenericFilter.GenericFilter()
|
||||
des.set_name(_("Descendants of %s") %
|
||||
self.person.get_primary_name().get_name())
|
||||
|
@ -129,8 +129,7 @@ class GraphViz:
|
||||
rankdir - Graph direction
|
||||
color - Whether to use outline, colored outline or filled color in graph
|
||||
dashedl - Whether to use dashed lines for non-birth relationships.
|
||||
margtb - Top & bottom margins, in cm.
|
||||
marglr - Left & right margins, in cm.
|
||||
margin - Margins, in cm.
|
||||
pagesh - Number of pages in horizontal direction.
|
||||
pagesv - Number of pages in vertical direction.
|
||||
"""
|
||||
@ -157,8 +156,12 @@ class GraphViz:
|
||||
options = options_class.handler.options_dict
|
||||
self.hpages = options['pagesh']
|
||||
self.vpages = options['pagesv']
|
||||
self.lr_margin = options['marglr']
|
||||
self.tb_margin = options['margtb']
|
||||
margin_cm = options['margin']
|
||||
self.margin = round(margin_cm/2.54,2)
|
||||
if margin_cm > 0.1:
|
||||
self.margin_small = round((margin_cm-0.1)/2.54,2)
|
||||
else:
|
||||
self.margin_small = 0
|
||||
self.includeid = options['incid']
|
||||
self.includedates = options['incdate']
|
||||
self.includeurl = options['url']
|
||||
@ -203,15 +206,19 @@ class GraphViz:
|
||||
self.f.write("bgcolor=white;\n")
|
||||
self.f.write("rankdir=%s;\n" % self.rankdir)
|
||||
self.f.write("center=1;\n")
|
||||
self.f.write("margin=0.5;\n")
|
||||
self.f.write("margin=%3.2f;\n" % self.margin_small)
|
||||
self.f.write("ratio=fill;\n")
|
||||
self.f.write("size=\"%3.1f,%3.1f\";\n" % (
|
||||
(self.width*self.hpages)-(self.lr_margin*2)
|
||||
-((self.hpages-1)*1.0),
|
||||
(self.height*self.vpages)-(self.tb_margin*2)
|
||||
-((self.vpages-1)*1.0))
|
||||
)
|
||||
self.f.write("page=\"%3.1f,%3.1f\";\n" % (self.width,self.height))
|
||||
if self.orient == PAPER_LANDSCAPE:
|
||||
self.f.write("size=\"%3.2f,%3.2f\";\n" % (
|
||||
(self.height-self.margin*2)*self.hpages,
|
||||
(self.width-self.margin*2)*self.vpages
|
||||
))
|
||||
else:
|
||||
self.f.write("size=\"%3.2f,%3.2f\";\n" % (
|
||||
(self.width-self.margin*2)*self.hpages,
|
||||
(self.height-self.margin*2)*self.vpages
|
||||
))
|
||||
self.f.write("page=\"%3.2f,%3.2f\";\n" % (self.width,self.height))
|
||||
|
||||
if self.orient == PAPER_LANDSCAPE:
|
||||
self.f.write("rotate=90;\n")
|
||||
@ -400,12 +407,11 @@ class GraphViz:
|
||||
self.f.write(" * colorize : %s\n" % bool(self.colorize))
|
||||
self.f.write(" * dotted adoptions : %s\n" % bool(self.adoptionsdashed))
|
||||
self.f.write(" * show family nodes : %s\n" % bool(self.show_families))
|
||||
self.f.write(" * margins top/bottom : %s\n" % self.tb_margin)
|
||||
self.f.write(" * left/right : %s\n" % self.lr_margin)
|
||||
self.f.write(" * margin : %3.2fin\n" % self.margin_small)
|
||||
self.f.write(" * pages horizontal : %s\n" % self.hpages)
|
||||
self.f.write(" * vertical : %s\n" % self.vpages)
|
||||
self.f.write(" * page width : %sin\n" % self.width)
|
||||
self.f.write(" * height : %sin\n" % self.height)
|
||||
self.f.write(" * page width : %3.2fin\n" % self.width)
|
||||
self.f.write(" * height : %3.2fin\n" % self.height)
|
||||
self.f.write(" *\n")
|
||||
self.f.write(" * Generated on %s by GRAMPS\n" % asctime())
|
||||
self.f.write(" */\n\n")
|
||||
@ -439,8 +445,7 @@ class GraphVizOptions(ReportOptions.ReportOptions):
|
||||
'rankdir' : "LR",
|
||||
'color' : "filled",
|
||||
'dashedl' : 1,
|
||||
'margtb' : 0.5,
|
||||
'marglr' : 0.5,
|
||||
'margin' : 1.0,
|
||||
'pagesh' : 1,
|
||||
'pagesv' : 1,
|
||||
'gvof' : 'ps',
|
||||
@ -483,10 +488,8 @@ class GraphVizOptions(ReportOptions.ReportOptions):
|
||||
'dashedl' : ("=0/1","Whether to use dotted lines for non-birth relationships.",
|
||||
["Do not use dotted lines","Use dotted lines"],
|
||||
True),
|
||||
'margtb' : ("=num","Top & bottom margins.",
|
||||
"Floating point values, in cm"),
|
||||
'marglr' : ("=num","Left & right margins.",
|
||||
"Floating point values, in cm"),
|
||||
'margin' : ("=num","Margin size.",
|
||||
"Floating point value, in cm"),
|
||||
'pagesh' : ("=num","Number of pages in horizontal direction.",
|
||||
"Integer values"),
|
||||
'pagesv' : ("=num","Number of pages in vertical direction.",
|
||||
@ -678,20 +681,14 @@ class GraphVizOptions(ReportOptions.ReportOptions):
|
||||
"to parents and children."))
|
||||
|
||||
# Page options tab
|
||||
tb_margin_adj = gtk.Adjustment(value=self.options_dict['margtb'],
|
||||
lower=0.25, upper=100.0, step_incr=0.25)
|
||||
lr_margin_adj = gtk.Adjustment(value=self.options_dict['marglr'],
|
||||
lower=0.25, upper=100.0, step_incr=0.25)
|
||||
margin_adj = gtk.Adjustment(value=self.options_dict['margin'],
|
||||
lower=0.0, upper=10.0, step_incr=1.0)
|
||||
|
||||
self.tb_margin_sb = gtk.SpinButton(adjustment=tb_margin_adj, digits=2)
|
||||
self.lr_margin_sb = gtk.SpinButton(adjustment=lr_margin_adj, digits=2)
|
||||
self.margin_sb = gtk.SpinButton(adjustment=margin_adj, digits=1)
|
||||
|
||||
dialog.add_frame_option(_("Page Options"),
|
||||
_("Top & Bottom Margins"),
|
||||
self.tb_margin_sb)
|
||||
dialog.add_frame_option(_("Page Options"),
|
||||
_("Left & Right Margins"),
|
||||
self.lr_margin_sb)
|
||||
_("Margin size"),
|
||||
self.margin_sb)
|
||||
|
||||
hpages_adj = gtk.Adjustment(value=self.options_dict['pagesh'],
|
||||
lower=1, upper=25, step_incr=1)
|
||||
@ -724,8 +721,7 @@ class GraphVizOptions(ReportOptions.ReportOptions):
|
||||
def parse_user_options(self,dialog):
|
||||
self.options_dict['incdate'] = int(self.includedates_cb.get_active())
|
||||
self.options_dict['url'] = int(self.includeurl_cb.get_active())
|
||||
self.options_dict['margtb'] = self.tb_margin_sb.get_value()
|
||||
self.options_dict['marglr'] = self.lr_margin_sb.get_value()
|
||||
self.options_dict['margin'] = self.margin_sb.get_value()
|
||||
self.options_dict['dashedl'] = int(self.adoptionsdashed_cb.get_active())
|
||||
self.options_dict['pagesh'] = self.hpages_sb.get_value_as_int()
|
||||
self.options_dict['pagesv'] = self.vpages_sb.get_value_as_int()
|
||||
|
@ -21,8 +21,8 @@ pkgdata_PYTHON = \
|
||||
DetAncestralReport.py\
|
||||
DetDescendantReport.py\
|
||||
EventCmp.py\
|
||||
ExportVCalendar.py\
|
||||
ExportVCard.py\
|
||||
ExportVCalendar.py\
|
||||
ExportVCard.py\
|
||||
FamilyGroup.py\
|
||||
FanChart.py\
|
||||
FtmStyleAncestors.py\
|
||||
@ -31,10 +31,12 @@ pkgdata_PYTHON = \
|
||||
GraphViz.py\
|
||||
IndivComplete.py\
|
||||
IndivSummary.py\
|
||||
ImportvCard.py\
|
||||
ImportvCard.py\
|
||||
Merge.py\
|
||||
NavWebPage.py\
|
||||
PatchNames.py\
|
||||
ReadPkg.py\
|
||||
Rebuild.py\
|
||||
RelCalc.py\
|
||||
ReorderIds.py\
|
||||
SoundGen.py\
|
||||
|
@ -176,25 +176,21 @@ class Merge:
|
||||
else:
|
||||
self.show()
|
||||
|
||||
def progress_update(self,val):
|
||||
self.progress.set_fraction(val/100.0)
|
||||
while gtk.events_pending():
|
||||
gtk.main_iteration()
|
||||
|
||||
def find_potentials(self,thresh):
|
||||
top = gtk.glade.XML(self.glade_file,"message","gramps")
|
||||
self.topWin = top.get_widget("message")
|
||||
self.topWin.set_icon(self.parent.topWindow.get_icon())
|
||||
self.progress = top.get_widget("progressbar1")
|
||||
self.progress = Utils.ProgressMeter(_('Find duplicates'),
|
||||
_('Looking for duplicate people'))
|
||||
|
||||
Utils.set_titles(self.topWin,top.get_widget('title'),
|
||||
_('Determining possible merges'))
|
||||
|
||||
index = 0
|
||||
|
||||
males = {}
|
||||
females = {}
|
||||
|
||||
length = len(self.person_list)
|
||||
|
||||
self.progress.set_pass(_('Pass 1: Building preliminary lists'),
|
||||
length)
|
||||
|
||||
for p1_id in self.person_list:
|
||||
self.progress.step()
|
||||
p1 = self.db.get_person_from_handle(p1_id)
|
||||
key = self.gen_key(p1.get_primary_name().get_surname())
|
||||
if p1.get_gender() == RelLib.Person.MALE:
|
||||
@ -208,14 +204,12 @@ class Merge:
|
||||
else:
|
||||
females[key] = [p1_id]
|
||||
|
||||
length = len(self.person_list)
|
||||
self.progress.set_pass(_('Pass 2: Calculating potential matches'),
|
||||
length)
|
||||
|
||||
num = 0
|
||||
for p1key in self.person_list:
|
||||
self.progress.step()
|
||||
p1 = self.db.get_person_from_handle(p1key)
|
||||
if num % 25 == 0:
|
||||
self.progress_update((float(num)/float(length))*100)
|
||||
num = num + 1
|
||||
|
||||
key = self.gen_key(p1.get_primary_name().get_surname())
|
||||
if p1.get_gender() == RelLib.Person.MALE:
|
||||
@ -246,7 +240,7 @@ class Merge:
|
||||
self.list = self.map.keys()
|
||||
self.list.sort()
|
||||
self.length = len(self.list)
|
||||
self.topWin.destroy()
|
||||
self.progress.close()
|
||||
self.dellist = {}
|
||||
|
||||
def show(self):
|
||||
@ -602,8 +596,6 @@ class Merge:
|
||||
value = self.name_match(mname1,mname2)
|
||||
if value != -1:
|
||||
chance = chance + value
|
||||
|
||||
print p1.get_gramps_id(), p2.get_gramps_id(), chance
|
||||
return chance
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
|
@ -103,6 +103,11 @@ class PatchNames:
|
||||
self.prefix1_list = []
|
||||
self.prefix2_list = []
|
||||
|
||||
self.progress = Utils.ProgressMeter(
|
||||
_('Extracting information from names'),'')
|
||||
self.progress.set_pass(_('Analyzing names'),
|
||||
self.db.get_number_of_people())
|
||||
|
||||
for key in self.db.get_person_handles(sort_handles=False):
|
||||
|
||||
person = self.db.get_person_from_handle(key)
|
||||
@ -139,10 +144,12 @@ class PatchNames:
|
||||
if match:
|
||||
groups = match.groups()
|
||||
self.prefix2_list.append((key,groups[1],groups[0]))
|
||||
self.progress.step()
|
||||
|
||||
if self.nick_list or self.title_list or self.prefix1_list or self.prefix2_list:
|
||||
self.display()
|
||||
else:
|
||||
self.progress.close()
|
||||
OkDialog(_('No modifications made'),
|
||||
_("No titles or nicknames were found"))
|
||||
|
||||
@ -197,7 +204,11 @@ class PatchNames:
|
||||
self.title_hash = {}
|
||||
self.prefix1_hash = {}
|
||||
self.prefix2_hash = {}
|
||||
|
||||
|
||||
self.progress.set_pass(_('Bulding display'),
|
||||
len(self.nick_list)+len(self.title_list)
|
||||
+len(self.prefix1_list)+len(self.prefix2_list))
|
||||
|
||||
for (id,name,nick) in self.nick_list:
|
||||
p = self.db.get_person_from_handle(id)
|
||||
gid = p.get_gramps_id()
|
||||
@ -208,6 +219,7 @@ class PatchNames:
|
||||
self.model.set_value(handle,3,nick)
|
||||
self.model.set_value(handle,4,p.get_primary_name().get_name())
|
||||
self.nick_hash[id] = handle
|
||||
self.progress.step()
|
||||
|
||||
for (id,title,nick) in self.title_list:
|
||||
p = self.db.get_person_from_handle(id)
|
||||
@ -219,6 +231,7 @@ class PatchNames:
|
||||
self.model.set_value(handle,3,nick)
|
||||
self.model.set_value(handle,4,p.get_primary_name().get_name())
|
||||
self.title_hash[id] = handle
|
||||
self.progress.step()
|
||||
|
||||
for (id,prefix,fname) in self.prefix1_list:
|
||||
p = self.db.get_person_from_handle(id)
|
||||
@ -230,6 +243,7 @@ class PatchNames:
|
||||
self.model.set_value(handle,3,fname)
|
||||
self.model.set_value(handle,4,p.get_primary_name().get_name())
|
||||
self.prefix1_hash[id] = handle
|
||||
self.progress.step()
|
||||
|
||||
for (id,prefix,fname) in self.prefix2_list:
|
||||
p = self.db.get_person_from_handle(id)
|
||||
@ -241,7 +255,9 @@ class PatchNames:
|
||||
self.model.set_value(handle,3,fname)
|
||||
self.model.set_value(handle,4,p.get_primary_name().get_name())
|
||||
self.prefix2_hash[id] = handle
|
||||
self.progress.step()
|
||||
|
||||
self.progress.close()
|
||||
self.add_itself_to_menu()
|
||||
self.window.show()
|
||||
|
||||
|
93
src/plugins/Rebuild.py
Normal file
@ -0,0 +1,93 @@
|
||||
#
|
||||
# Gramps - a GTK+/GNOME based genealogy program
|
||||
#
|
||||
# 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
|
||||
# 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$
|
||||
|
||||
"Database Processing/Check and repair database"
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# python modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import os
|
||||
import cStringIO
|
||||
from gettext import gettext as _
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# gtk modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import gtk
|
||||
import gtk.glade
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# GRAMPS modules
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
import RelLib
|
||||
import Utils
|
||||
import const
|
||||
from QuestionDialog import OkDialog
|
||||
|
||||
#-------------------------------------------------------------------------
|
||||
#
|
||||
# runTool
|
||||
#
|
||||
#-------------------------------------------------------------------------
|
||||
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
|
||||
|
||||
total = database.get_number_of_people() + database.get_number_of_families() + \
|
||||
database.get_number_of_places() + database.get_number_of_sources() + \
|
||||
database.get_number_of_media_objects()
|
||||
|
||||
progress = Utils.ProgressMeter(_('Rebuilding Secondary Indices'))
|
||||
progress.set_pass('',total)
|
||||
database.disable_signals()
|
||||
database.rebuild_secondary(progress.step)
|
||||
database.enable_signals()
|
||||
progress.close()
|
||||
OkDialog(_("Secondary indices rebuilt"),
|
||||
_('All secondary indices have been rebuilt.'))
|
||||
except:
|
||||
import DisplayTrace
|
||||
DisplayTrace.DisplayTrace()
|
||||
|
||||
#------------------------------------------------------------------------
|
||||
#
|
||||
#
|
||||
#
|
||||
#------------------------------------------------------------------------
|
||||
from PluginMgr import register_tool
|
||||
|
||||
register_tool(
|
||||
runTool,
|
||||
_("Rebuild secondary indices"),
|
||||
category=_("Database Repair"),
|
||||
description=_("Rebuilds secondary indices")
|
||||
)
|
@ -93,7 +93,7 @@ class RelCalc:
|
||||
self.people = self.glade.get_widget("peopleList")
|
||||
|
||||
self.clist = ListModel.ListModel(self.people,
|
||||
[(_('Name'),3,150),(_('ID'),1,50),
|
||||
[(_('Name'),3,150),(_('Gender'),1,50),
|
||||
(_('Birth Date'),4,150),
|
||||
('',-1,0),('',-1,0)],
|
||||
self.on_apply_clicked)
|
||||
|
@ -70,23 +70,32 @@ class ReorderIds:
|
||||
|
||||
self.db = db
|
||||
|
||||
self.progress = Utils.ProgressMeter(_('Reordering GRAMPS IDs'),'')
|
||||
|
||||
self.trans = db.transaction_begin()
|
||||
|
||||
self.progress.set_pass(_('Reordering People IDs'),db.get_number_of_people())
|
||||
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.progress.set_pass(_('Reordering Family IDs'),db.get_number_of_families())
|
||||
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.progress.set_pass(_('Reordering Media Object IDs'),db.get_number_of_media_objects())
|
||||
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.progress.set_pass(_('Reordering Source IDs'),db.get_number_of_sources())
|
||||
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.progress.set_pass(_('Reordering Place IDs'),db.get_number_of_places())
|
||||
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"))
|
||||
self.progress.close()
|
||||
db.transaction_commit(self.trans,_("Reorder GRAMPS IDs"))
|
||||
|
||||
def reorder(self, class_type, find_from_id, find_from_handle, find_next_id, get_cursor, commit, prefix):
|
||||
dups = []
|
||||
@ -98,6 +107,7 @@ class ReorderIds:
|
||||
cursor = get_cursor()
|
||||
data = cursor.first()
|
||||
while data:
|
||||
self.progress.step()
|
||||
(handle,sdata) = data
|
||||
|
||||
obj = class_type()
|
||||
@ -134,7 +144,9 @@ class ReorderIds:
|
||||
# go through the duplicates, looking for the first availble
|
||||
# handle that matches the new scheme.
|
||||
|
||||
self.progress.set_pass(_('Finding and assigning unused IDs'),len(dups))
|
||||
for handle in dups:
|
||||
self.progress.step()
|
||||
obj = find_from_handle(handle)
|
||||
obj.set_gramps_id(find_next_id())
|
||||
commit(obj,self.trans)
|
||||
@ -148,8 +160,7 @@ from PluginMgr import register_tool
|
||||
|
||||
register_tool(
|
||||
runTool,
|
||||
_("Reorder gramps IDs"),
|
||||
_("Reorder GRAMPS IDs"),
|
||||
category=_("Database Processing"),
|
||||
description=_("Reorders the gramps IDs according to gramps' default rules.")
|
||||
)
|
||||
|
||||
|