Compare commits

..

753 Commits

Author SHA1 Message Date
Richard Taylor
20bac63011 SVN reorganisation: Move current maintenance branches
svn: r12907
2009-08-07 08:11:43 +00:00
Eero Tamminen
2bf08ece8f Major updates to GraphViz plugin.
Re-factoring:
- split large functions to smaller ones to make code more readable
- renamed few methods and variables to what they actually do
- collect the report text to a buffer first so that it can be
  converted to latin-1 at one go
- Move common style stuff to GraphViz header and remove from .dot
  comments stuff that's obvious from first .dot file settings
Fixes:
- latin-1 conversion option is explicit, not depending on font
- set the GraphViz charset attribute according to latin1
- quote node and edge identifiers
- rankdir options correspond now to TB and LR (earlier LR and RL)
New features:
- Use christening/burial dates if birth/death dates are missing
- User can add a (e.g. copyright) note to the graph and set its
  location (newlines and double quotes are automatically escaped)
- User can give the paging direction
- User can set the GraphViz aspect ratio setting
- The weight option (either for children or parents)
- Women have rounded boxes, except in filled mode
  (current GraphViz doesn't support boxes that are both rounded and filled)
New default settings:
- set the ratio to "compress" instead of "fill"
- "mclimit=2.0", prevents crossed lines
- minimum node separation is 0.25


svn: r6010
2006-02-27 22:02:27 +00:00
Alex Roitman
9209f7eca9 * configure.in: Bump up version number.
svn: r6009
2006-02-27 18:51:38 +00:00
Alex Roitman
d01c7bcfe5 * configure.in: Bump up release number.
* Release: Version 2.0.10 "Holy Hand Grenade of Antioch" released.


svn: r6007
2006-02-27 17:43:51 +00:00
Alex Roitman
80bc471b59 Update
svn: r6006
2006-02-27 16:24:11 +00:00
Martin Hawlisch
766bcc6060 translation update
svn: r6005
2006-02-27 14:25:19 +00:00
Julio Sánchez
267905f17d * src/po/es.po: Translation update
svn: r6004
2006-02-27 13:59:23 +00:00
Jérôme Rapinat
dd917aa4c5 * src/po/fr.po update translation
svn: r6003
2006-02-27 07:57:05 +00:00
Alex Roitman
8bae700b80 * src/po/template.po: Update.
* src/po/template.po: Update.


svn: r6002
2006-02-27 06:19:25 +00:00
Doug Blank
e697e7de4c Added (my first) Calendar.py edits
svn: r6001
2006-02-27 05:17:50 +00:00
Doug Blank
638fcd1b09 1) Fixed bug in primary family selection
2) Fixed reversed meaning in maiden name checkbox
3) Added translation gettext around "name and name" because "and" is english


svn: r6000
2006-02-27 05:12:37 +00:00
Don Allingham
bf25a9582b * src/EditPerson.py: strip names of trailing whitespace before
assigning them


svn: r5999
2006-02-27 03:29:31 +00:00
Don Allingham
94056f3602 * src/plugins/ImportGeneWeb.py: handle people with no firstname
or lastname, if encoding fails, attempt and iso-8859-1 conversion


svn: r5998
2006-02-26 23:52:43 +00:00
Alex Roitman
0043572c35 * gramps.sh.in: Update copyright year.
svn: r5996
2006-02-26 18:13:03 +00:00
Alex Roitman
877faeb4c4 * src/po/Makefile.am (.po.mo): Avoid using temp file as it breaks
distcheck -- use pipe instead.


svn: r5995
2006-02-26 18:07:44 +00:00
Alex Roitman
264d06b2a9 * src/plugins/Calendar.py (Widget.register): Do not add help
strings to style widgets.


svn: r5994
2006-02-26 16:44:48 +00:00
Alex Roitman
622c870879 * NEWS: Update.
svn: r5992
2006-02-25 07:08:05 +00:00
Alex Roitman
754cd97f3c * configure.in: Bump up the release number.
svn: r5991
2006-02-25 06:45:38 +00:00
Alex Roitman
ed287a85d3 * test/runtest.sh (GRPH_REP): Add calendar to the list of reports.
svn: r5990
2006-02-25 06:42:07 +00:00
Marcos Bedinelli
29a5a1397d Brazilian-Portuguese translation for GRAMPS 2.0.10
svn: r5988
2006-02-25 00:15:56 +00:00
Martin Hawlisch
a19bd16975 updated translation
svn: r5986
2006-02-24 21:54:07 +00:00
Alex Roitman
082b2a7b88 * src/plugins/Calendar.py: Remove the unsupported flag.
svn: r5985
2006-02-24 20:56:24 +00:00
Alex Roitman
ea72d0db93 * src/po/pt_BR.po: Update.
svn: r5982
2006-02-24 17:58:15 +00:00
Jérôme Rapinat
221a880136 * src/po/fr.po update translation
svn: r5981
2006-02-24 15:03:17 +00:00
Alex Roitman
cc7027ca56 * src/plugins/Calendar.py: Remove translation from help strings;
do not import unused modules.
* src/po/template.po: Update.


svn: r5978
2006-02-23 19:23:29 +00:00
Jérôme Rapinat
d6dce0ecff * src/po/fr.po update translation (2.0.10)
svn: r5977
2006-02-23 11:09:21 +00:00
Alex Roitman
8dc650bd01 Update
svn: r5974
2006-02-23 01:13:40 +00:00
Alex Roitman
4e5c3b529f * src/plugins/Calendar.py (Calendar.__getitem__,
Widget.__getitem__): No translation for exception messages.
* src/po/template.po: Update.
* src/po/ru.po: Update.


svn: r5973
2006-02-23 00:47:20 +00:00
Don Allingham
429cb7b4ee * src/dates/Date_lt.py: new Lithuanian date handler
* src/po/lt.po: updated Lithuanian translation


svn: r5972
2006-02-22 21:05:54 +00:00
Jérôme Rapinat
9fded8b80c * src/po/fr.po translation improvement
svn: r5965
2006-02-20 11:59:42 +00:00
Don Allingham
e8d471d4ee * src/WriteXML.py: encode paths for objects in XML to handle
&, > and < in paths.


svn: r5963
2006-02-19 22:23:47 +00:00
Don Allingham
acc52f6816 * src/ImageSelect.py: fix already_loaded initalization
svn: r5962
2006-02-19 18:40:30 +00:00
Don Allingham
5e7041cae4 added
svn: r5961
2006-02-19 17:54:19 +00:00
Don Allingham
e7b45e9937 Fix typo
svn: r5960
2006-02-19 17:49:57 +00:00
Jérôme Rapinat
219fa3312e * src/po/fr.po add Calendar.py translation
svn: r5959
2006-02-19 17:23:28 +00:00
Don Allingham
0daf58b604 * src/plugins/Makefile.am: added Calendary.py and
holidays.xml
* src/po/template.po: updated

* src/plugins/Calendar.py: added
* src/plugins/holidays.xml: added


svn: r5957
2006-02-19 05:25:29 +00:00
Don Allingham
95298549d8 added
svn: r5955
2006-02-19 00:52:49 +00:00
Jérôme Rapinat
1a7c66fa8d * src/po/fr.po update translation (with the new fixed template)
svn: r5954
2006-02-18 11:42:47 +00:00
Jérôme Rapinat
10deeaf7ac * src/po/fr.po translation improvement
svn: r5953
2006-02-18 11:05:43 +00:00
Martin Hawlisch
59c9e4802b updated translation
svn: r5951
2006-02-17 21:13:29 +00:00
Alex Roitman
96c3789009 * src/plugins/FamilyGroup.py (dump_parent): Translate event names.
svn: r5950
2006-02-17 17:46:33 +00:00
Don Allingham
ed4b649f39 typo fix
svn: r5949
2006-02-17 14:58:43 +00:00
Martin Hawlisch
b829978252 * src/po/de.po: Translation update
svn: r5948
2006-02-17 14:42:23 +00:00
Jérôme Rapinat
26baf4cbf6 * src/po/fr.po update translation (2.0.10)
svn: r5947
2006-02-17 11:14:49 +00:00
Don Allingham
f25bdabcb7 * src/po/template.po: update for the string freeze for 2.0.10
svn: r5946
2006-02-17 04:48:58 +00:00
Alex Roitman
bc75ced306 * src/plugins/FamilyGroup.py (add_user_options): Do not use _("")
to create empty checkbox.


svn: r5945
2006-02-16 22:17:13 +00:00
Don Allingham
a7b12c2ec0 * src/ReadGedcom.py: remove debugging statements
svn: r5944
2006-02-16 21:38:42 +00:00
Alex Roitman
7309f0234a * src/ReportUtils.py (old_calc_age): Correct the logic.
svn: r5941
2006-02-15 18:26:50 +00:00
Don Allingham
cb0ca84064 * src/plugins/NavWebPage.py: include more information about CC licenses
in the ALT and TITLE tags.


svn: r5940
2006-02-15 04:45:55 +00:00
Don Allingham
d445b84dac * src/plugins/GraphViz.py: use new style links for narrative web page
generator


svn: r5939
2006-02-15 04:16:22 +00:00
Don Allingham
810a80da51 * src/DbPrompter.py: Try to give a more intelligent error message on an
exception thrown in DbPrompter - don't give a traceback.
* src/MediaView.py: clear out details and image if unselected


svn: r5938
2006-02-14 19:27:03 +00:00
Alex Roitman
c1b12a893f * src/ReportUtils.py (buried_str): Change the logic to be the same
as in born_str: first test for modified date, then full date, then
partial.


svn: r5937
2006-02-14 19:03:58 +00:00
Alex Roitman
8c50ca9c9c * src/docgen/OpenSpreadSheet.py
(OpenSpreadSheet._write_meta_file): Properly reference creator string.
* src/plugins/EventCmp.py (DisplayChart.on_write_table): Set
document creator; write localized event names.
(DisplayChart.draw_clist_display): Display localized event names.
* src/plugins/ChangeTypes.py: Convert event names to English for
storage and comparison.


svn: r5936
2006-02-14 18:50:46 +00:00
Jérôme Rapinat
4eedcb1b35 * src/po/fr.po update translation for the tool Extracting information from name
svn: r5935
2006-02-14 11:01:05 +00:00
Alex Roitman
df630cee0d Update
svn: r5934
2006-02-14 05:34:45 +00:00
Don Allingham
2d39167929 * src/EditPerson.py: don't double add a place
svn: r5933
2006-02-14 04:34:13 +00:00
Alex Roitman
98aab9b503 * src/ReportUtils.py (buried_partial_date_no_place): Typo.
svn: r5932
2006-02-14 02:37:42 +00:00
Alex Roitman
16563fcf32 * src/ArgHandler.py (ArgHandler.cl_export): Do not strip path from
the media oject references.


svn: r5931
2006-02-14 01:48:01 +00:00
Stefan Bjork
c41fbcaf18 * src/po/sv.po: Minor update.
svn: r5930
2006-02-13 20:00:25 +00:00
Jérôme Rapinat
69d2994491 * src/po/fr.po fix mistake died on/died
svn: r5929
2006-02-13 11:11:54 +00:00
Don Allingham
312044b831 * src/EventEdit.py: don't report the false "new event added" message
svn: r5928
2006-02-13 03:58:25 +00:00
Don Allingham
f5f6442504 * src/EditPerson.py: display LDS temple correctly
* src/plugins/NavWebpage.py: print nickname


svn: r5927
2006-02-12 23:58:52 +00:00
Alex Roitman
524becc3cd * src/po/Makefile.am (.po.mo): Allow for parallel building.
svn: r5926
2006-02-12 22:03:07 +00:00
Alex Roitman
fa8dde68bc * src/AddrEdit.py: Make preformatetd note appear without wrapping.
* src/EditPerson.py: No wrapping for preformatted notes.
* src/EditPlace.py: No wrapping for preformatted notes.
* src/EditSource.py: No wrapping for preformatted notes.
* src/EventEdit.py: No wrapping for preformatted notes.
* src/ImageSelect.py: No wrapping for preformatted notes.
* src/NameEdit.py: No wrapping for preformatted notes.
* src/Marriage.py: No wrapping for preformatted notes.


svn: r5925
2006-02-12 20:39:52 +00:00
Alex Roitman
34e7c8c67d * src/plugins/ReadPkg.py (impData): Use persistent directory for
unpacking the tarball: we need images to stay there.


svn: r5924
2006-02-12 19:07:33 +00:00
Don Allingham
bc47111822 * src/GrampsMime.py: detect directory type
* src/ImageSelect.py: don't allow directory types to be added
* src/MediaView.py: don't allow directory types to be added


svn: r5923
2006-02-12 05:25:17 +00:00
Alex Roitman
64d8eb7417 * src/DbPrompter.py (open_native): Use empty GRDB when opening fails.
svn: r5922
2006-02-12 04:08:24 +00:00
Alex Roitman
c01f2f714e * src/plugins/DetDescendantReport.py
(DetDescendantReport.write_endnotes): Disable writing reference
details.
* src/plugins/DetAncestralReport.py
(DetAncestorReport.write_endnotes): Disable writing reference details.


svn: r5920
2006-02-10 19:58:41 +00:00
Alex Roitman
8a700ceabc * src/docgen/ODFDoc.py: Typo.
svn: r5919
2006-02-10 16:48:23 +00:00
Alex Roitman
cca81f693f * src/WriteGedcom.py (write_sources): Export data_map.
svn: r5911
2006-02-09 21:10:56 +00:00
Alex Roitman
fde077914c * src/data/gramps.desktop: Improve Russian string, add Office
category.


svn: r5910
2006-02-09 19:00:44 +00:00
Alex Roitman
d643aa3936 * src/QuestionDialog.py (MissingMediaDialog): Catch delete event
and warn the user.
* src/Utils.py (ProgressMeter) Catch delete event and warn the user.


svn: r5906
2006-02-09 03:04:33 +00:00
Alex Roitman
cb52b7d9c6 * src/WriteGedcom.py (write_source_ref): Write confidence level
(the QUAY tag) of the source reference into GEDCOM.


svn: r5905
2006-02-09 02:05:50 +00:00
Alex Roitman
de81e15969 * src/gramps.glade: Correct +/- tooltips for Data tab in Source Editor.
svn: r5904
2006-02-09 01:18:31 +00:00
Alex Roitman
bdf496ebb2 * src/plugins/Leak.py (display): Catch exception coming from
trying to call __repr__ on a closed db.DB.


svn: r5903
2006-02-09 01:10:10 +00:00
Don Allingham
18e8cb6478 * src/plugins/FamilyGroup.py: correctly put borders on the
children cells.

* src/plugins/DetDescendantReport.py: include spouse option


svn: r5896
2006-02-08 05:18:46 +00:00
Alex Roitman
556b5cd371 * src/docgen/ODFDoc.py: Correct typos.
svn: r5888
2006-02-05 19:16:12 +00:00
Alex Roitman
c284652cc3 * src/GrampsBSDDB.py (rebuild_secondary): properly rebuild
secondary indices relying on BSD DB rather than manually re-adding
every record.
* src/plugins/Rebuild.py (__init__): Use fixed 7 progress steps
for 1 removing step and 6 index rebuilds.


svn: r5870
2006-02-03 04:33:14 +00:00
Alex Roitman
f37c2d5ccb * src/docgen/ODFDoc.py (init): Correct name for parent style;
Use handling program name obtained from the mime system.


svn: r5835
2006-01-26 18:11:27 +00:00
Alex Roitman
92906e88cd * src/docgen/ODFDoc.py: Add new document generator.
* src/docgen/Makefile.am: Ship new file.
* src/po/fr.po, src/po/template.po: Add new format's name.


svn: r5832
2006-01-25 20:15:16 +00:00
Alex Roitman
e0aab07c3e * src/po/nl.po: Translation update.
svn: r5831
2006-01-25 19:49:33 +00:00
Don Allingham
d3753628c9 * src/plugings/FamiyGroup.py: options for "Recursive", "Generation
Number", "Parent Events", "Parent Addresses", "Parent Alternate
Names", "Parent Notes".


svn: r5830
2006-01-25 19:10:09 +00:00
Don Allingham
8eddbe7462 * src/plugins/DetDescendantReport.py: include spouse option
svn: r5793
2006-01-19 03:50:29 +00:00
Jérôme Rapinat
523af4b182 * /doc/gramps-manual/fr/cmdplug.xml: update
svn: r5779
2006-01-17 20:58:16 +00:00
Alex Roitman
b3bab9607d * src/EditPlace.py, src/EditSource.py, src/ImageSelect.py: Provide
default value for the second argument on close().


svn: r5763
2006-01-16 20:02:25 +00:00
Alex Roitman
8ba376dd86 * src/GenericFilter.py
(IsLessThanNthGenerationAncestorOfBookmarked): Typo.


svn: r5762
2006-01-16 19:39:35 +00:00
Jérôme Rapinat
882d9c0b17 * data\gramps.desktop: Add french entry and comment
* plugins\DetDescendantReport.py: Same patch as DetAncestralReport (age calculated bug)


svn: r5761
2006-01-16 15:17:37 +00:00
Don Allingham
28b56af746 * src/RelLib.py: improve Event is_equal method
svn: r5757
2006-01-16 02:24:05 +00:00
Frode Jemtland
481a797b28 Translated more strings. 85 fuzzy left. They are translated, need to be washed.
svn: r5717
2006-01-11 23:31:10 +00:00
Stefan Bjork
0574fd2489 * src/plugins/DetAncestralReport.py: Calculate age for indiviuals.
* src/po/sv.po: Updates.


svn: r5713
2006-01-11 13:27:14 +00:00
Frode Jemtland
dcfe9af6cb Changing "Hjemperson" to "Proband". This is the more correct name, I have learned during the last week.....
svn: r5706
2006-01-10 21:49:35 +00:00
Alex Roitman
f79520e845 * doc/man, doc/man/fr: Add directories.
* doc/man/Makefile.am, doc/man/fr/Makefile.am: Add files to CVS.
* configure: Generate makefiles for new directories.
* doc/man/gramps.1.in: move from doc.
* doc/Makefile.am: Remove stuff related to man pages.

* doc/man/fr/gramps.1.in: Add translated manpage.


svn: r5675
2006-01-05 19:49:43 +00:00
Stefan Bjork
654e2af90d * src/po/sv.po: Updates.
svn: r5672
2006-01-05 12:59:30 +00:00
Jérôme Rapinat
df4d3c3309 * doc/gramps-manual/fr/usage.xml: Add Sub-subsection Substitution Values
svn: r5665
2006-01-04 09:48:26 +00:00
Alex Roitman
9a357b844b * src/gedcomimport.glade: Make dialog non-resizable.
svn: r5660
2006-01-03 23:23:47 +00:00
Jérôme Rapinat
efb66d212f * src/po/fr.po fix mistake county/country
svn: r5659
2006-01-03 23:05:53 +00:00
Don Allingham
2700788f54 update
svn: r5657
2006-01-03 04:45:20 +00:00
Don Allingham
8c2563ad05 * doc/gramps-manual/C/usage.xml: more updates
svn: r5656
2006-01-03 04:38:20 +00:00
Jérôme Rapinat
6963b95eec # src\po\fr.po update french translation
svn: r5650
2006-01-01 13:14:16 +00:00
Frode Jemtland
9e8462bffa msgmerge with last template file..... 0 strings translated
svn: r5649
2005-12-30 23:18:36 +00:00
Don Allingham
840569cea7 * src/dates/Date_nl.py: fix index for "merz"
svn: r5635
2005-12-27 14:56:22 +00:00
Jérôme Rapinat
608960a3e2 updates
svn: r5630
2005-12-24 12:25:35 +00:00
Jérôme Rapinat
c43f8c61a5 add local and historical variants for months
svn: r5628
2005-12-23 22:43:05 +00:00
Alex Roitman
e96641fa81 * src/GrampsBSDDB.py (GrampsBSDDBCursor): add delete method;
(GrampsBSDDBDupCursor): Add class to handle duplicates.
* src/plugins/Check.py: Avoid cursors when modifying data;
(low_level): Add a low level repair routine, bypassing transactions.


svn: r5619
2005-12-23 00:17:33 +00:00
Don Allingham
be83003e5c * src/ReadGedcom.py: handle overlapping on source and family ID values
svn: r5602
2005-12-21 17:20:40 +00:00
Don Allingham
86835434c6 typo edits
svn: r5589
2005-12-20 04:11:36 +00:00
Don Allingham
4482378716 update
svn: r5582
2005-12-19 05:01:05 +00:00
Don Allingham
1c5ad3f57f * doc/gramps-manual/C/usage.xml: updates
* doc/gramps-manual/C/usage.xml: updates
* doc/gramps-manual/C/mainwin.xml: updates


svn: r5580
2005-12-18 02:44:05 +00:00
Alex Roitman
d6c4ffe649 * src/GrampsDbBase.py (transaction_commit): Typo.
svn: r5574
2005-12-17 21:37:33 +00:00
Don Allingham
a5e9312678 update
svn: r5568
2005-12-17 05:34:10 +00:00
Don Allingham
f3e2c25f21 update
svn: r5567
2005-12-17 05:26:38 +00:00
Don Allingham
f1de6cc347 * src/gramps-manual/C/usuage.xml: updates
svn: r5566
2005-12-17 04:52:17 +00:00
Don Allingham
751a7911fb * src/gramps-manual/C/mainwin.xml: updates
svn: r5565
2005-12-16 23:03:18 +00:00
Don Allingham
37bfa319a7 * doc/gramps-manual/C/getstart.xml: updates
* doc/gramps-manual/C/mainwin.xml: updates


svn: r5552
2005-12-15 04:51:09 +00:00
Alex Roitman
8c0ad73c2e * src/plugins/DescendReport.py (dump): Initialize child list for
each family.


svn: r5550
2005-12-15 00:00:47 +00:00
Alex Roitman
10b86050d1 * src/plugins/PatchNames.py: Fix title/name mixup, only detect new
title, keep old title, keep old prefix.


svn: r5549
2005-12-14 23:03:54 +00:00
Alex Roitman
4f5fc60743 * configure.in: bump up the version number.
svn: r5542
2005-12-12 08:11:39 +00:00
Alex Roitman
1a5b6ed229 Update
svn: r5540
2005-12-12 08:10:03 +00:00
Martin Hawlisch
839be34b3a corrected gender
svn: r5539
2005-12-11 12:17:24 +00:00
Alex Roitman
b3007e988b * src/po/it.po: Correct mismatched % parameters.
* src/po/de.po: Correct mismatched % parameters.
* src/po/eo.po: Correct mismatched % parameters.

* doc/gramps-manual/fr/cmdline.xml: Insert new section
.


svn: r5538
2005-12-11 07:29:12 +00:00
Alex Roitman
1def83d540 * src/po/fr.po: Translation update.
* src/dates/Date_fr.py (DateParserFR): Add more quality_to_int
pairs.


svn: r5537
2005-12-11 06:32:39 +00:00
Alex Roitman
bc89ce92c4 Update
svn: r5536
2005-12-11 06:25:53 +00:00
Don Allingham
4419567584 * doc/gramps-manual/C/getstart.xml: update
* doc/gramps-manual/C/preface.xml: update
* doc/gramps-manual/C/usage.xml: update


svn: r5535
2005-12-11 05:24:19 +00:00
Alex Roitman
da2fe09894 Update
svn: r5534
2005-12-10 07:10:38 +00:00
Alex Roitman
4ba38406b1 * test/det_descendant_report.sh: Add thorough test for the
Detailed Descendant Report.


svn: r5533
2005-12-10 07:09:42 +00:00
Alex Roitman
c1a3e73966 Update
svn: r5532
2005-12-10 07:00:12 +00:00
Alex Roitman
d6d122d418 * test/det_ancestor_report.sh: Add thorough test for the Detailed
Ancestor Report.


svn: r5531
2005-12-10 06:53:10 +00:00
Alex Roitman
858d19579a Update
svn: r5530
2005-12-10 02:48:20 +00:00
Alex Roitman
9542571af9 * doc/gramps-manual/fr/cmdplug.xml: Add file with new section.
* doc/gramps-manual/fr/gramps-manual.xml: Define entity for new
section.
* doc/gramps-manual/fr/cmdline.xml: Insert new section.
* doc/gramps-manual/fr/Makefile.am: Ship new file.


svn: r5529
2005-12-10 02:47:18 +00:00
Alex Roitman
ca992a7cd8 Update
svn: r5528
2005-12-10 02:22:48 +00:00
Frode Jemtland
67f36e7cba Got a little help from a friend ;)
J�rgen has helped me finished the rest.


svn: r5527
2005-12-09 23:03:04 +00:00
Alex Roitman
34d9a734eb to path when this options is turned on/off; (parse_style_frame):
save archive option as an integer; (setup_html_frame): set the
state for archive option.


svn: r5526
2005-12-09 22:21:20 +00:00
Jérôme Rapinat
fc37e66a7d add forgotten figures
svn: r5525
2005-12-09 21:51:17 +00:00
Martin Hawlisch
81d998c3ec small update
svn: r5524
2005-12-09 21:23:21 +00:00
Jérôme Rapinat
585a6c4a9d french translation update
svn: r5523
2005-12-09 21:20:41 +00:00
Martin Hawlisch
b9c1d2a458 * src/po/de.po: Translation update
svn: r5522
2005-12-09 21:07:18 +00:00
Alex Roitman
c0855147df * src/Report.py (parse_target_frame): Remove unneeded check; when
checking existing file/dir, make sure we requested file/dir,
correspondingly.
* src/plugins/NavWebPage (archive_toggle): Add/remove '.tar.gz'
to path when this options is turned on/off.


svn: r5520
2005-12-09 20:14:52 +00:00
Alex Roitman
7704cd4f54 Update
svn: r5518
2005-12-09 05:14:13 +00:00
Alex Roitman
d5547e337c Update
svn: r5517
2005-12-09 04:58:43 +00:00
Alex Roitman
65050b3a40 * src/Report.py (parse_target_frame): Check permissions for the
specified file.


svn: r5516
2005-12-09 04:49:49 +00:00
Don Allingham
c4d894920b * src/Merge.py: fix date comparison
svn: r5515
2005-12-09 04:14:24 +00:00
Don Allingham
f3ae05e28a update
svn: r5514
2005-12-09 03:20:06 +00:00
Don Allingham
29eecb3aa9 don't use system
svn: r5513
2005-12-09 03:18:54 +00:00
Don Allingham
b3ffa736ec fix typo
svn: r5512
2005-12-09 03:01:40 +00:00
Don Allingham
876885b3b1 run_browser added
svn: r5511
2005-12-09 02:55:04 +00:00
Don Allingham
f23b111374 * src/plugins/ChangeNames.py: call GrampsDisplay.help
* src/plugins/Checkpoint.py: call GrampsDisplay.help
* src/plugins/Desbrowser.py: call GrampsDisplay.help
* src/plugins/EventCmp.py: call GrampsDisplay.help
* src/plugins/FilterEditor.py: call GrampsDisplay.help
* src/plugins/Merge.py: call GrampsDisplay.help
* src/plugins/PatchNames.py: call GrampsDisplay.help
* src/plugins/Verify.py: call GrampsDisplay.help


svn: r5510
2005-12-09 02:33:55 +00:00
Don Allingham
a5b57b2dc1 * src/Utils.py: add xml:lang generation function
* src/docgen/AbiWord2Doc.py: set locale
* src/docgen/OpenOfficeDoc: set locale using xml_lang()
* src/plugins/NavWebPage.py: set locale


svn: r5509
2005-12-08 23:31:05 +00:00
Alex Roitman
aad34c7fbf * src/Utils.py (probably_alive): return False if any event
of the person happened over 150 years ago; (too_old): add
function; (not_too_old): require definite year for a positive
decision.


svn: r5508
2005-12-08 22:52:21 +00:00
Alex Roitman
54dbda9d9b Update
svn: r5507
2005-12-08 06:35:14 +00:00
Alex Roitman
bc1bb4bede * src/ReadGrdb.py: Disable signals and request rebuild at the end;
properly set transaction.


svn: r5506
2005-12-08 05:44:23 +00:00
Alex Roitman
681ac86b81 * doc/gramps-manual/Makefile.am: Remove existing link before
creating a new one.


svn: r5504
2005-12-08 02:37:15 +00:00
Alex Roitman
33bed034c8 * src/po/ru.po: Translation update.
svn: r5503
2005-12-08 02:06:28 +00:00
Alex Roitman
e1ff631002 Update
svn: r5502
2005-12-08 01:36:24 +00:00
Eero Tamminen
7ee331268e update Finnish translation
svn: r5501
2005-12-07 21:29:59 +00:00
Alex Roitman
04a6ea1d21 Update
svn: r5500
2005-12-07 18:58:26 +00:00
Don Allingham
f357f5e607 * src/Report.py: change from gtk.FILE_CHOOSER_CREATE_FOLDER to
gtl.FILE_CHOOSER_SELECT_FOLDER. GTK documentation error.


svn: r5499
2005-12-07 18:37:24 +00:00
Alex Roitman
ee63ee0204 * src/dates/Date_nl.py: Replace dashes with slashes, other
enhancements.


svn: r5498
2005-12-07 18:12:57 +00:00
Alex Roitman
a09e1818c7 * src/DateDisplay.py (_display_gregorian): Replace dashes with
slashes to prevent collision with the ISO format.


svn: r5497
2005-12-07 18:08:30 +00:00
Don Allingham
b43a0fcf46 * src/plugins/NavWebPage.py: restore .tar.gz archive option
svn: r5496
2005-12-07 18:02:17 +00:00
Alex Roitman
8504664356 * src/po/fr.po: Translation update.
svn: r5495
2005-12-07 16:51:43 +00:00
Alex Roitman
a5eac31a89 Update
svn: r5494
2005-12-07 05:12:50 +00:00
Alex Roitman
74133275e9 * src/plugins/NavWebPage.py (display_note_object,
ContactPage.__init__, display_spouse): Do not treat linebreaks in
the preformatted notes; (IndividualPage.__init__): restrict notes,
url list, and source on living people.


svn: r5493
2005-12-07 05:09:24 +00:00
Alex Roitman
b258b2ca85 * src/po/nl.po: Correct %s mismatches.
svn: r5491
2005-12-07 00:28:57 +00:00
Alex Roitman
2996eed36a * src/gramps.glade (date_edit): Allow negative year integers.
svn: r5490
2005-12-06 21:51:42 +00:00
Alex Roitman
873dbbb7d2 * src/po/fr.po: Partial translation update.
svn: r5488
2005-12-06 21:01:58 +00:00
Don Allingham
159be6cb06 * src/data/main*.css: fix H6 and SUP
svn: r5479
2005-12-06 01:06:23 +00:00
Alex Roitman
8dc6583ecd * src/po/fr.po: Partial translation update.
svn: r5478
2005-12-05 23:14:40 +00:00
Alex Roitman
e8d2d62ef8 * doc/gramps-manual/Makefile.am: Change symlink creation.
svn: r5475
2005-12-05 16:56:06 +00:00
Alex Roitman
ab2238d192 update
svn: r5473
2005-12-04 23:16:10 +00:00
Alex Roitman
0f3e2d8933 * src/po/ru.po: Partial translation update.
svn: r5472
2005-12-04 23:06:41 +00:00
Frode Jemtland
79e637295f Finished untranslated strings.....
svn: r5471
2005-12-03 22:21:09 +00:00
Julio Sánchez
0ead40054e * src/MergePeople.py: Avoid creating duplicate spouse-to-family links
* src/po/es.po: Partial translation update.


svn: r5470
2005-12-03 17:36:29 +00:00
Alex Roitman
0f5e8db002 * src/po/ru.po: Partial translation update.
svn: r5469
2005-12-03 05:24:15 +00:00
Don Allingham
578e659578 * src/ReportOptions.py: fix inheritence
svn: r5468
2005-12-03 04:44:42 +00:00
Frode Jemtland
ef290c3fdc Updated against template.po. Translated a couple of strings.
svn: r5467
2005-12-02 18:16:21 +00:00
Don Allingham
48283abac1 * various: pychecker fixes
svn: r5466
2005-12-02 05:08:01 +00:00
Alex Roitman
83353aa26f Update
svn: r5465
2005-12-02 01:34:46 +00:00
Alex Roitman
7a8f2a17a2 * src/plugins/BookReport.py (BookReportDialog.__init__):
Initialize page_html_added before instantiating dialog class.


svn: r5464
2005-12-02 01:30:55 +00:00
Alex Roitman
bc09713dbd * src/docgen/LaTeXDoc.py: support "____"; support roman numerals
in paragraph leaders.


svn: r5463
2005-12-02 01:15:20 +00:00
Alex Roitman
dbf29113ec Update
svn: r5462
2005-12-01 21:10:11 +00:00
Don Allingham
34b7b5cf28 * src/DateParser.py: properly call the date checking routine
svn: r5461
2005-12-01 20:52:12 +00:00
Alex Roitman
60c52bb9cf Update
svn: r5460
2005-12-01 19:21:10 +00:00
Alex Roitman
11d24648f9 * src/dates/Date_nl.py: Add to CVS (bmcage).
* src/dates/Makefile.am: Ship new file.


svn: r5459
2005-12-01 19:18:06 +00:00
Alex Roitman
8f84e924bb * src/ReportUtils.py (child_str): Initialize text.
svn: r5458
2005-12-01 16:06:51 +00:00
Don Allingham
070ce1bde1 * src/ReadGedcom.py: fix mixing note assignment
* src/PeopleModel.py: streamline display


svn: r5457
2005-12-01 04:52:16 +00:00
Don Allingham
e28b703de9 * src/Relationship.py: limit search depth to 15 generations.
svn: r5456
2005-11-30 05:02:42 +00:00
Alex Roitman
36807fe825 * src/plugins/Checkpoint.py: Replace combos with text entries.
* src/plugins/checkpoint.glade: Replace combos with text entries.


svn: r5455
2005-11-30 00:04:47 +00:00
Alex Roitman
cb2e27a673 Update
svn: r5454
2005-11-29 23:10:13 +00:00
Alex Roitman
6d5fa2aca7 * doc/xmldocs.make: Revert help path to keep under gramps dir.
* doc/gramps-manual/Makefile.am: Add symlink to keep all gnome
versions happy with the help path.
* src/po/de.po: Typos: missing "n".


svn: r5453
2005-11-29 20:05:10 +00:00
Don Allingham
c6bec2bc14 * src/GrampsBSDDB.py: change rebuilding of secondary indices
to use keys instead of cursors.


svn: r5452
2005-11-29 14:25:13 +00:00
Julio Sánchez
8d69ef84ae * NEWS: Better support for media objects in GEDCOM output
svn: r5451
2005-11-29 09:10:31 +00:00
Alex Roitman
96fc843582 Update
svn: r5450
2005-11-28 20:26:04 +00:00
Alex Roitman
a0faa8fc7c * src/GenericFilter.py (MatchesFilter.apply): Typo.
svn: r5449
2005-11-28 20:24:58 +00:00
Dionysios
725eeabbfb updated translation
svn: r5448
2005-11-28 17:46:47 +00:00
Dionysios
0d11732134 updated translation
svn: r5447
2005-11-28 17:41:13 +00:00
Martin Hawlisch
f6aead38f0 * src/FamilyView.py (change_families): Avoid exception if family does not contain parents
svn: r5446
2005-11-28 13:56:29 +00:00
Martin Hawlisch
d239c38730 * NEWS: Better support for unicode filenames
svn: r5445
2005-11-28 13:07:11 +00:00
Julio Sánchez
df1ba0e69c * src/DateParser.py: match modifiers in reverse length order so that
multiword modifiers work even if other modifier matches the first
words of the longer modifier
* src/ReadGedcom.py: be more tolerant w.r.t. whitespace in input,
to parse the output from tools that try (incorrectly) to make
the GEDCOM easier to read.  Gedcom.pm is one example.
* src/WriteGedcom.py: make sure referenced family sources are output


svn: r5444
2005-11-28 09:10:47 +00:00
Don Allingham
499aed0bd3 * src/MergeData.py: fix dangling family after a merge.
svn: r5443
2005-11-28 02:55:35 +00:00
Alex Roitman
41c69d9557 * src/po/template.po: Update.
svn: r5442
2005-11-28 00:10:19 +00:00
Don Allingham
516f12b46e * src/EditPerson.py: properly handled added name types for the
preferred name


svn: r5441
2005-11-27 03:58:04 +00:00
Alex Roitman
ea9e35399a * src/GenericFilter.py
(IsLessThanNthGenerationAncestorOfDefaultPerson): Add new filter rule.


svn: r5440
2005-11-26 03:09:48 +00:00
Don Allingham
2073b8ea41 * src/gramps.glade: enable word wrap on publication information
on the source display


svn: r5439
2005-11-25 21:52:54 +00:00
Martin Hawlisch
9629c6610f * src/GenericFilter.py (IsSpouseOfFilterMatch) Call prepare for recursive filter
svn: r5438
2005-11-25 21:01:11 +00:00
Martin Hawlisch
f221703095 * src/GenericFilter.py (HasCommonAncestorWith): Catch no longer existing person
svn: r5437
2005-11-25 16:39:51 +00:00
Don Allingham
63c4ca9553 * src/po/template.po: updated translation file
svn: r5436
2005-11-25 04:01:37 +00:00
Alex Roitman
f141edf70d * NEWS: Update.
* src/docgen/HtmlDoc.py (build_style_declaration): Use top- and
bottom- margins for paragraph styles.

* src/Utils.py (find_file): new method that tries to check the
  existance of a file by trying out multiple encoding variants for
  the filename.
  (cleanup_missing_photos) Use Utils.find_file to fix encoding problems
* src/gramps_main.py: Use Utils.find_file and Utils.find_folder to
  enable using unicode names for gramps databases


svn: r5435
2005-11-25 03:09:10 +00:00
Alex Roitman
14e674d5af * src/plugins/Checkpoint.py (rcs): Do not write comment on
initialization.
* test/tools.sh: Add test set for tools.


svn: r5434
2005-11-24 06:28:48 +00:00
Don Allingham
61865fed62 * src/docgen/KwordDoc.py: fix margins and fonts.
svn: r5433
2005-11-24 05:41:44 +00:00
Alex Roitman
22d8f9bed1 Update
svn: r5432
2005-11-24 05:41:11 +00:00
Alex Roitman
7e0ecb9806 * src/GenericFilter.py (IsLessThanNthGenerationAncestorOfBookmarked):
Add new filter rule.


svn: r5431
2005-11-24 05:10:37 +00:00
Alex Roitman
c175a467ab Update
svn: r5430
2005-11-24 04:26:35 +00:00
Alex Roitman
499da39245 * src/docgen/AsciiDoc.py (reformat_para): Add optional argument
for the first line indent; (start_paragraph): remove leader
handling; (end_paragraph): Handle all formatting, including leader
and first line indent.


svn: r5429
2005-11-24 03:25:45 +00:00
Alex Roitman
bf7c2849ae * src/docgen/PSDrawDoc.py (encode): Add tolerant encoder;
(patch_text): Remove unused method.


svn: r5428
2005-11-24 01:34:45 +00:00
Alex Roitman
3c426c0ffc * src/BaseDoc.py (SheetParser.startElement): Tolerate missing
tmargin and bmargin (when reading older style files).


svn: r5427
2005-11-23 22:14:56 +00:00
Alex Roitman
a9b53b1a9f Update
svn: r5426
2005-11-23 21:15:32 +00:00
Alex Roitman
ccef7e48c0 Update
svn: r5425
2005-11-23 20:38:20 +00:00
Alex Roitman
dc14e4de37 * src/ArgHandler.py (cl_export): Add grdb export from the CLI.
* src/plugins/Check.py (check_parent_relationships): Step through
the progress bar.
* test/runtest.sh: Add txt format and family_group report.
* test/impex.sh: Add import/export test set.
* example/gramps/example.gramps: Correct errors.


svn: r5424
2005-11-23 20:16:39 +00:00
Alex Roitman
31e94e89bd * test/runtest.sh: Switch to doing many reports in one call.
svn: r5423
2005-11-23 06:03:24 +00:00
Don Allingham
1fdfa0fd1a * src/docgen/AbiWord2Doc.py: fix spacing for top and bottom margin
svn: r5422
2005-11-23 04:48:01 +00:00
Don Allingham
0aedc53918 * src/ArgHandler.py: fix typo
* src/docgen/PSDrawDoc.py: removed print statements


svn: r5421
2005-11-23 04:07:39 +00:00
Don Allingham
3a7d7bd85c added
svn: r5420
2005-11-23 04:00:39 +00:00
Don Allingham
85e23601bc * src/plugins/DetDescendantReport.py: fixed insert_image
svn: r5419
2005-11-23 00:00:31 +00:00
Don Allingham
15932243e8 * src/ReadGedcom.py: Fix handling of CONT
svn: r5418
2005-11-22 21:56:17 +00:00
Alex Roitman
9642815c34 * src/Report.py: Better packing in vertical direction.
svn: r5417
2005-11-22 19:24:52 +00:00
Alex Roitman
ee731ba0f1 * src/plugins/DetDescendantReport.py (write_write_children):
Properly check for henry number; (write_mate): omit children list.


svn: r5416
2005-11-22 18:36:55 +00:00
Dionysios
c75ab29845 updated translation
svn: r5415
2005-11-22 17:36:24 +00:00
Don Allingham
cf726952ba * src/plugins/NavWebPage.py: Fix output_notebook remains.
svn: r5414
2005-11-22 15:38:37 +00:00
Martin Hawlisch
ed60e469f4 * src/AddrEdit.py,
* src/AttrEdit.py,
* src/EditPerson.py,
* src/EditPlace.py,
* src/EventEdit.py,
* src/FamilyView.py,
* src/MediaView.py,
* src/NameEdit.py,
* src/Sources.py: Better support for readonly DB;
* src/ImageSelect.py: Better support for readonly DB; dont crash if mimetype could not get retrieved
* src/Marriage.py: Better support for readonly DB; Avoid Traceback on DnD in empty list


svn: r5413
2005-11-22 11:21:24 +00:00
Don Allingham
1db9fea574 * src/ReadGedcom.py: Properly handle TEXT field in SOUR instances when
undefined or unhandled fields are present


svn: r5412
2005-11-21 22:42:05 +00:00
Martin Hawlisch
6da9e9b584 * src/FamilyView.py (drag_data_get): Avoid Traceback when dragging from empty list
* src/gramps_main.py (read_file): More changes to unicode filename support


svn: r5411
2005-11-21 09:27:06 +00:00
Martin Hawlisch
aed42dbb83 * src/MediaView.py (media_update): Redisplay the media object at the top
svn: r5410
2005-11-21 09:08:30 +00:00
Don Allingham
9c524ad869 * src/Report.py: shortened report dialog by making the Paper
Options a tab of the rest of the options
* src/plugins/AncestorReport.py: fix paragraph spacing
* src/plugins/Check.py: handle None for family
* src/plugins/DescendReport.py: fix paragraph spacing
* src/plugins/IndivComplete.py: fix paragraph spacing


svn: r5409
2005-11-20 23:17:37 +00:00
Martin Hawlisch
e0ccdacfbd * src/plugins/FilterEditor.py: Corrected plugin registration
* src/GrampsCfg.py: Add validation for GRAMPS ID prefixes


svn: r5408
2005-11-20 21:20:49 +00:00
Don Allingham
421cda654c * src/WriteGedcom.py: add space between given and surname in output.
* src/ReadGedcom.py: encoding list change
* src/DateParser.py: match end of string for regex matching


svn: r5407
2005-11-19 18:17:18 +00:00
Martin Hawlisch
fd10da84a2 * src/Utils.py (find_folder): new method
* src/gramps_main.py: Use Utils.find_file and Utils.find_folder to enable using unicode names for gramps databases


svn: r5406
2005-11-18 15:19:38 +00:00
Martin Hawlisch
86fa385a9b * src/Utils.py (find_file): new method that tries to check the existance of a file by trying out multiple encoding variants for the filename.
* src/ImgManip.py (get_thumbnail_image): Use Utils.find_file to fix encoding problems, additionally catch OSError
* src/ImageSelect.py (on_name_changed): Use Utils.find_file
* src/AddMedia.py (on_name_changed): Use Utils.find_file
* src/plugins/Check.py (encoding) dont encode a utf-8 string as again, (cleanup_missing_photos) Use Utils.find_file to fix encoding problems


svn: r5405
2005-11-18 13:56:37 +00:00
Martin Hawlisch
94d8d28cb0 * src/gramps.glade,
src/TipOfDay.py: Add window title


svn: r5404
2005-11-17 11:45:35 +00:00
Don Allingham
56f780b876 * src/DisplayModels.py: try to handle encoding errors
* src/ImageSelect.py: call fix_encoding to handle path names
* src/Utils.py: provide a routine to attempt to fix encoding of
str values
* src/plugins/Check.py: repair bad filenames


svn: r5403
2005-11-17 04:06:53 +00:00
Eero Tamminen
9f92d0ddbd update Finnish translation
svn: r5402
2005-11-16 21:57:19 +00:00
Alex Roitman
686912e885 * src/docgen/PdfDoc.py: Proper indentation for the first line with
and without bullets.


svn: r5401
2005-11-13 18:47:54 +00:00
Don Allingham
c57bc8375f * src/plugins/DetDescendantReport.py: add support for Henry
numbers for descendants


svn: r5400
2005-11-13 05:46:57 +00:00
Alex Roitman
656c742eed * src/docgen/PdfDoc.py: Minor fixes.
svn: r5399
2005-11-13 02:50:15 +00:00
Don Allingham
ee076d94bd * src/GraphLayout.py: removed, incorporated into DesGraph
* src/Makefile.am: removed GraphLayout.py
* src/Plugins.py: don't enter into menus if not in debug mode
* src/plugins/CmdRef.py: don't enter into menus if not in debug mode
* src/plugins/Eval.py: don't enter into menus if not in debug mode
* src/plugins/Leak.py: don't enter into menus if not in debug mode
* src/plugins/TestcaseGenerator.py: don't enter into menus if not
in debug mode
* src/plugins/DumpGenderStats.py: don't enter into menus if not
* src/AncestorChart.py: Move to unsupported
* src/DesGraph.py: Move to unsupported
* src/AncestorChart2.py: More consistent name
* src/DescendChart.py: More consistent name


svn: r5398
2005-11-11 04:53:58 +00:00
Don Allingham
052833510f * src/DisplayModels.py: fix datalist[0] problem running with accessbility enabled
svn: r5397
2005-11-10 22:05:59 +00:00
Alex Roitman
1daad9d817 * src/plugins/IndivSummary.py: Move to Unsupported (duplicates
a subset of the IndivComplete report functionality).
* src/plugins/IndivComplete.py: Add author.


svn: r5396
2005-11-10 20:26:32 +00:00
Alex Roitman
de8229a6d9 * src/po/nl.po: Typo.
svn: r5395
2005-11-10 20:06:33 +00:00
Don Allingham
5826783eb8 * doc/xmldocs.make: fix for GNOME 2.12 help path
* doc/gramps-manual/C/gramps-manual-C.omf: fix for GNOME 2.12 help path.


svn: r5394
2005-11-10 17:37:45 +00:00
Julio Sánchez
51e7041c5d * src/ReadGedcom.py: fix window object name
svn: r5393
2005-11-10 14:59:33 +00:00
Julio Sánchez
47e7ce1481 * src/ImageSelect.py: Recompute mime type in case of path change
svn: r5392
2005-11-10 09:58:38 +00:00
Julio Sánchez
8abcd6e233 * src/plugins/rel_es.py: More detail for some relationships
svn: r5391
2005-11-10 09:51:31 +00:00
Alex Roitman
2f5ea9d3b5 * NEWS: Update.
* example/gramps/*: Add new example data.


svn: r5390
2005-11-10 05:47:53 +00:00
Don Allingham
cebc3a3b37 * src/plugins/DetAncestralReport.py: fix spacing
svn: r5389
2005-11-10 04:21:46 +00:00
Alex Roitman
5884a15623 * src/docgen/LPRDoc.py: Remove extra line after the paragraph.
svn: r5388
2005-11-10 03:11:37 +00:00
Alex Roitman
ca1e39c4a9 * src/docgen/LPRDoc.py: Support post-leader directive.
svn: r5387
2005-11-10 02:03:31 +00:00
Alex Roitman
0adb92f1d7 * src/docgen/LPRDoc.py: Properly use space above/below.
svn: r5386
2005-11-09 22:34:39 +00:00
Alex Roitman
ebe0d065e6 * src/Report.py: Minor tweaks for file selection.
* src/docgen//OpenOfficeDoc.py: Correct output for spacing.


svn: r5385
2005-11-09 22:23:55 +00:00
Alex Roitman
3a107558ee * src/BaseDoc.py: Support space above/below paragraph.
* src/StyleEditor.py: Support space above/below paragraph.
* src/gramps.glade: Support space above/below paragraph.


svn: r5384
2005-11-09 21:55:29 +00:00
Don Allingham
aaaed40342 * src/Report.py: use filechooser for report dialog
* src/ReportUtils.py: use a single photo for image display


svn: r5383
2005-11-09 21:45:24 +00:00
Alex Roitman
229ff2f01c * src/docgen/LPRDoc.py: Use paragraph padding correctly.
svn: r5382
2005-11-09 19:56:54 +00:00
Martin Hawlisch
666cc08475 * src/DbPrompter.py (DbPrompter): Use Combo to list multiple rcecent files
* src/gramps.glade: Use Combo to list multiple rcecent files


svn: r5381
2005-11-09 11:26:22 +00:00
Alex Roitman
246aa995a6 Update
svn: r5380
2005-11-09 02:57:59 +00:00
Alex Roitman
8af6f927f4 Update
svn: r5379
2005-11-09 02:56:52 +00:00
Alex Roitman
8f5f54dabe Update
svn: r5378
2005-11-09 00:44:33 +00:00
Alex Roitman
9e1a4c4d15 * NEWS: Update.
svn: r5377
2005-11-09 00:34:36 +00:00
Martin Hawlisch
5b70ab3eb3 * src/DbPrompter.py (DbPrompter): Give possibility to open the recent file
* src/gramps.glade: Add recent file to DbPrompter


svn: r5376
2005-11-08 20:20:37 +00:00
Alex Roitman
0b94abb585 * src/Report.py (parse_report_options_frame): Do not allow
negative-numbered selection in the filter menu.


svn: r5375
2005-11-08 19:43:30 +00:00
Alex Roitman
841ecdb4c6 * src/EditPlace.py: Fix idle for new objects.
* src/EditSource.py: Fix idle for new objects.
* src/ImageSelect.py: Fix idle for new objects.


svn: r5374
2005-11-08 19:22:23 +00:00
Alex Roitman
d96e356850 * src/EditSource.py: Support editing Source from References tab.
* src/ImageSelect.py: Support editing objects through References.


svn: r5373
2005-11-07 23:18:26 +00:00
Alex Roitman
e43db997f9 Update
svn: r5372
2005-11-07 22:27:49 +00:00
Alex Roitman
aee6aa6ccb * src/gramps.glade: Replace TextView with TreeView.
svn: r5371
2005-11-07 22:11:46 +00:00
Alex Roitman
5a6ae0e05c * src/EditPlace.py: Convert References to the list view.
svn: r5370
2005-11-07 22:10:59 +00:00
Martin Hawlisch
287f109699 * src/gramps_main.py: Fix improper active person handling
svn: r5369
2005-11-07 15:44:54 +00:00
Alex Roitman
cb7d08a529 * src/EditSource.py (display_references): Return control if the
events are pending, not every 0.1 sec; Draw references as they
are found instead of deferring.
* src/EditPlace.py (display_references): Make nice.
* src/ImageSelect.py (GlobalMediaProperties.display_refs): Make nice.


svn: r5368
2005-11-07 06:08:21 +00:00
Alex Roitman
02d38aa799 Update
svn: r5367
2005-11-06 19:38:13 +00:00
Alex Roitman
fa066f35b6 * src/EditSource.py (display_references): Check for elapsed time
and return control to the main loop after 0.1 sec from the idle
callback; convert callback to being able to store its state and
continue from the middle.


svn: r5366
2005-11-06 10:36:47 +00:00
Alex Roitman
d8b729f326 Update
svn: r5365
2005-11-06 10:32:39 +00:00
Don Allingham
c58c75b482 * src/plugins/*.py: updated email addresses and status
svn: r5364
2005-11-06 04:59:23 +00:00
Alex Roitman
9042a74479 Update
svn: r5363
2005-11-06 03:28:07 +00:00
Alex Roitman
3d48664133 * src/PluginMgr.py: Add the optional argument indicating the
unsupported status to all registrations.
* src/Plugins.py: Reflect unsupported status in menus and trees.
* src/plugins/BookReport.py: Reflect unsupported status.
* src/plugins/WebPage.py, src/plugins/FtmStyleAncestors.py,
src/plugins/FtmStyleDescendants.py: Declare unsupported status.


svn: r5362
2005-11-06 02:25:24 +00:00
Alex Roitman
8e67461d3b * src/Witness.py (WitnessEditor.__init__): Typo.
* src/PluginMgr.py: Update all lists properly on any registration;
(purge_failed): Add function.
* src/Plugins.py (Reload.__init__): Purge plugins newly failed on
reload; Regenerate all menus after reload.
* src/gramps_main.py (build_plugin_menus): Add optional argument
indicating rebuild, do not load plugins on rebuild; (load_plugins)
factor out plugin loading routine.


svn: r5361
2005-11-05 06:23:17 +00:00
Martin Hawlisch
b79beef27b * src/ReportUtils.py (sanitize_person): Restrict Media reference list
* src/plugins/NavWebPage.py: Add many more filtering of private data


svn: r5360
2005-11-04 13:04:13 +00:00
Alex Roitman
9d9ad5d4fe * src/DbPrompter.py: Close database in all cases; close dialogs
prior to that.


svn: r5359
2005-11-03 04:40:50 +00:00
Don Allingham
b541a4eb06 * src/plugins/NavWebPage.py: fix surnames/surnames_count problem,
fix intro/home page naming issue


svn: r5358
2005-11-02 22:05:51 +00:00
Don Allingham
7e4e08340f * src/plugins/NavWebPage.py: fix surnames/surnames_count problem
svn: r5357
2005-11-02 16:34:03 +00:00
Don Allingham
8398c3df85 * src/plugins/NavWebPage.py: fix private family records
svn: r5356
2005-11-02 03:25:28 +00:00
Don Allingham
9cb96aba40 * src/plugins/NavWebPage.py: use builtin python tarfile module
svn: r5355
2005-11-01 04:46:07 +00:00
Don Allingham
6b9ae3aa7e * src/Sources.py: fix callback (caught by Martin)
svn: r5354
2005-10-30 03:03:57 +00:00
Alex Roitman
4b9fcf97d2 * src/plugins/TimeLine.py: Import strip_context correctly.
* src/plugins/SimpleBookText.py: Import strip_context correctly.
* src/plugins/StatisticsChart.py: Import strip_context correctly.


svn: r5353
2005-10-28 17:35:40 +00:00
Don Allingham
9be3d88c8e * src/AddSpouse.py: glade fixes caught by Martin
* src/AttrEdit.py: glade fixes caught by Martin
* src/EditPerson.py: glade fixes caught by Martin
* src/EditPlace.py: glade fixes caught by Martin
* src/Marriage.py: glade fixes caught by Martin
* src/SelectChild.py: glade fixes caught by Martin


svn: r5352
2005-10-27 23:37:42 +00:00
Alex Roitman
bbd14d34cd * src/plugins/CmdRef.py (write_ref): Only write itemizedlist if
there is any contents for it.
* doc/gramps-manual/C/cmdplug.xml: Update to a valid docbook.
* doc/gramps-manual/C/usage.xml: Add manual on the Narrative web
page generator.


svn: r5351
2005-10-27 04:14:53 +00:00
Don Allingham
10a9b1bb35 * src/latin_utf8.py: removed
* src/Makefile.am: remove latin_utf8.py


svn: r5350
2005-10-26 02:59:15 +00:00
Alex Roitman
b4237ed8df * src/ReadGedcom.py (parse_source_reference): Ignore empty QUAY.
svn: r5349
2005-10-25 22:33:12 +00:00
Don Allingham
8d466a146c * src/GrampsCfg.py: signal_autoconnect changes
* src/ImageSelect.py: signal_autoconnect changes
* src/ReadGedcom.py: signal_autoconnect changes
* src/WriteGedcom.py: signal_autoconnect changes
* src/gedcomimport.glade: signal_autoconnect changes
* src/gramps.glade: signal_autoconnect changes


svn: r5348
2005-10-25 02:29:12 +00:00
Julio Sánchez
df27ab97d1 * src/ImageSelect.py: signal fix
svn: r5347
2005-10-24 20:33:05 +00:00
Julio Sánchez
1e404f7146 * src/WriteGedcom.py: export more objects, better conformance with
the spec, preserve timestamps on objects
* src/const.py.in: add table of GEDCOM tags that take a value on the
same line


svn: r5346
2005-10-24 19:50:05 +00:00
Don Allingham
3aab27ab99 * src/ReadGedcom.py: handle progress bar
* src/gedcomimport.glade: add progress bar and expanders


svn: r5345
2005-10-24 03:53:35 +00:00
Julio Sánchez
1a4cc4810f * src/AddSpouse.py: signal fix
* src/EventEdit.py: signal fix


svn: r5344
2005-10-23 22:51:41 +00:00
Don Allingham
b3dae93c12 * src/AddMedia.py: signal_autoconnect changes
* src/AddSpouse.py: signal_autoconnect changes
* src/AttrEdit.py: signal_autoconnect changes
* src/Bookmarks.py: signal_autoconnect changes
* src/ChooseParents.py: signal_autoconnect changes
* src/DateEdit.py: signal_autoconnect changes
* src/EventEdit.py: signal_autoconnect changes
* src/Exporter.py: signal_autoconnect changes
* src/GenericFilter.py: signal_autoconnect changes
* src/ImageSelect.py: signal_autoconnect changes
* src/LocEdit.py: signal_autoconnect changes
* src/Marriage.py: signal_autoconnect changes
* src/MediaView.py: signal_autoconnect changes
* src/NameEdit.py: signal_autoconnect changes
* src/SelectChild.py: signal_autoconnect changes
* src/Sources.py: signal_autoconnect changes
* src/TransUtils.py: signal_autoconnect changes
* src/UrlEdit.py: signal_autoconnect changes
* src/Utils.py: signal_autoconnect changes
* src/Witness.py: signal_autoconnect changes
* src/gramps.glade: signal_autoconnect changes


svn: r5343
2005-10-23 04:06:36 +00:00
Julio Sánchez
e6159b281e * src/WriteGedcom.py: Media objects for families, preparation for
media objects for other entities


svn: r5342
2005-10-22 05:23:09 +00:00
Don Allingham
ac6ab25ef6 * src/plugins/DetDescendantReport.py: bring in line with
DetAncestralReport
* src/plugins/DetAncestralReport.py: remove firstname option


svn: r5341
2005-10-21 03:29:03 +00:00
Don Allingham
98361ec0b0 * src/plugins/DetAncestralReport.py: fix child strings
svn: r5340
2005-10-20 04:56:42 +00:00
Don Allingham
e2ad8af4bd * src/GrampsBSDDB.py: use cursors to rebuild secondary indices.
svn: r5339
2005-10-20 03:00:19 +00:00
Don Allingham
eb1a28d870 * src/Sources.py: fix typo on gladeif call
svn: r5338
2005-10-19 15:32:05 +00:00
Stefan Bjork
c40b2d3d75 * src/po/sv.po: Updates.
svn: r5337
2005-10-19 15:16:59 +00:00
Martin Hawlisch
86cdf6e0a8 * src/AttrEdit.py: escape xml-specialchars because of use_markup
* src/EditPerson.py: escape xml-specialchars because of use_markup
* src/EventEdit.py: escape xml-specialchars because of use_markup
* src/Marriage.py: escape xml-specialchars because of use_markup
* src/NameEdit.py: escape xml-specialchars because of use_markup
* src/PedView.py: escape xml-specialchars because of use_markup
* src/UrlEdit.py: escape xml-specialchars because of use_markup


svn: r5336
2005-10-19 10:38:45 +00:00
Martin Hawlisch
8a52407a00 * src/plugins/TestcaseGenerator.py: More randomisation; new test options
* src/RelLib.py (Source.get_text_data_list): Add missing fields


svn: r5335
2005-10-19 09:55:45 +00:00
Don Allingham
cf616ebcfb * src/Report.py: bumped the maximum generations to 999 from 31
svn: r5334
2005-10-19 03:24:18 +00:00
Martin Hawlisch
d7e373e05a * src/plugins/NavWebPage.py: Support side-by-side gallery images
* src/data/main*.css: Support side-by-side gallery images


svn: r5333
2005-10-18 20:52:57 +00:00
Alex Roitman
dc33238d74 * src/plugins/CmdRef.py: Use <para> withing the <listitem>.
* doc/graps-manual/C/cmdplug.xml: Update.


svn: r5330
2005-10-18 20:09:18 +00:00
Don Allingham
01fc24277b * src/gedcomimport.glade: use expanders for information and
warning windows.
refererencing notes, less obscure names


svn: r5329
2005-10-18 04:36:27 +00:00
Don Allingham
91645849db * src/AddSpouse.py: remove signal_autoconnect
* src/DisplayTrace.py: remove signal_autoconnect
* src/EditSource.py: remove signal_autoconnect
* src/ReadGedcom.py: two pass approach for handling forward
refererencing notes
* src/gramps.glade: remove signal mappings
* src/plugins.glade: remove signal mappings


svn: r5328
2005-10-18 03:02:19 +00:00
Julio Sánchez
677886956a * src/WriteGedcom.py: Add description and notes for media objects
svn: r5327
2005-10-17 22:57:58 +00:00
Stefan Bjork
c44700e541 * src/po/template.po: Broken and recreated.
svn: r5326
2005-10-17 07:21:54 +00:00
Stefan Bjork
ae96816ae5 m��n okt 17 09:22:15 CEST 2005
svn: r5325
2005-10-17 07:12:35 +00:00
Alex Roitman
501c8094b6 * doc/gramps-manual/*/gramps-manual-*.omf: Update.
svn: r5324
2005-10-16 23:31:52 +00:00
Don Allingham
c148569596 * src/EditPerson.py: remove signal_autoconnect to fix glade
memory leak
* src/EditPlace.py: remove signal_autoconnect to fix glade
memory leak
* src/GenericFilter.py: use TransUtils.py
* src/Makefile.am: add TransUtils.py and WindowUtils.py
* src/Marriage.py: remove signal_autoconnect to fix glade
memory leak
* src/Sources.py: remove signal_autoconnect to fix glade
memory leak
* src/Spell.py: import gettext
* src/Relationship.py: use TransUtils.py
* src/TransUtils.py: added to remove cyclic import
* src/WindowUtils.py: glade/signal interface class


svn: r5323
2005-10-15 04:29:19 +00:00
Martin Hawlisch
10b98b82e8 * src/plugins/TestcaseGenerator.py: Add unicode test
svn: r5322
2005-10-14 20:53:50 +00:00
Alex Roitman
b37fb2d07d * src/gramps.glade: Use spinbuttons for selection coords in the
media reference dialog.
* src/ImageSelect.py (LocalMediaProperties): Support selection.


svn: r5321
2005-10-14 20:08:52 +00:00
Alex Roitman
7441034117 * src/Date.py (is_empty): Consider non-text-only date with
empty numerical fields an empty date.


svn: r5320
2005-10-14 16:32:07 +00:00
Martin Hawlisch
23828c68ce * src/plugins/TestcaseGenerator.py: Randomize SourceRefs
svn: r5319
2005-10-14 11:28:49 +00:00
Julio Sánchez
916e94bdc3 * src/ChooseParents.py: give unknown sex to the new parent, so that
guessing works


svn: r5318
2005-10-14 08:28:29 +00:00
Don Allingham
b74de932ee * various: add explict calls to garbage collection
svn: r5317
2005-10-14 04:30:47 +00:00
Alex Roitman
d1a7272342 Update
svn: r5316
2005-10-14 04:21:08 +00:00
Alex Roitman
29022a6f1e * src/WriteXML.py (write_xml_data): Use ISO date in the created
attribute; (get_iso_date): Return empty string on empty date;
(write_date): Write quality attributes, if any.
* src/ReadXML.py (start_daterange,start_dateval): Parse quality
attributes.


svn: r5315
2005-10-14 00:25:22 +00:00
Alex Roitman
1edd0bf53d Update
svn: r5314
2005-10-13 21:36:18 +00:00
Alex Roitman
9307f2221a * example/gramps/data.gramps: Update example data to conform with
the format changes and the DTD.
* doc/grampsxml.dtd, doc/grampsxml.rng: Update.


svn: r5313
2005-10-13 20:02:48 +00:00
Martin Hawlisch
e9b39cf952 * src/plugins/TestcaseGenerator.py: Randomize more; Add LDS events
svn: r5312
2005-10-13 09:25:30 +00:00
Alex Roitman
fb6cc6e535 * doc/grampsxml.dtd: Typo.
svn: r5311
2005-10-13 07:03:22 +00:00
Alex Roitman
7e32722ae4 Update
svn: r5310
2005-10-13 07:01:49 +00:00
Don Allingham
28ce296be0 * src/plugins/NavWebPage.py: option for choosing the ancestor graph
svn: r5309
2005-10-13 04:17:56 +00:00
Alex Roitman
c81b8ca0b3 Update
svn: r5308
2005-10-13 00:42:39 +00:00
Alex Roitman
8c069a57ca * doc/grampsxml.rng: Add to CVS.
svn: r5307
2005-10-13 00:31:49 +00:00
Don Allingham
838406caa6 * src/data/main*.css: improved css styles for ancestor graphs
* src/plugins/NavWebPage.py: 4 generation ancestor graph


svn: r5306
2005-10-12 23:00:43 +00:00
Don Allingham
054497f793 * src/ReportUtils.py: handle "unknown_gender_name" in parameter arrays
svn: r5305
2005-10-12 14:27:52 +00:00
Don Allingham
8c2e2f357e * src/plugins/NavWebPage.py: first pass at ancestor map
* src/data/main*.css: ancestor css styles


svn: r5304
2005-10-12 03:46:11 +00:00
Don Allingham
ffed1c6ff2 * src/EditPerson.py: handle adding death/birth record correctly
svn: r5303
2005-10-11 20:39:32 +00:00
Alex Roitman
07e3140ff0 * src/plugins/GraphViz.py: Typos.
svn: r5302
2005-10-11 15:33:11 +00:00
Martin Hawlisch
c6de44d0de * src/plugins/TestcaseGenerator.py: Add some date events
svn: r5301
2005-10-11 11:02:15 +00:00
Don Allingham
ad49a9e202 * src/GrampsDBCallback.py: doc changes
* src/NameDisplay.py: remove nickname support
* src/QuestionDialog.py: handle missing icons for pychecker
* src/Report.py: set a default size for the window (600)
* src/ReportUtils.py: doc changes, add common_name
* src/plugins/DetAncestralReport.py:


svn: r5300
2005-10-11 03:56:53 +00:00
Don Allingham
69bc0f70b7 * src/Date.py: set default modifier properly, fix compare and sortval
assignment
* src/RelLib.py: fix source reference date comparison


svn: r5299
2005-10-10 22:00:29 +00:00
Julio Sánchez
91ed326d7a * src/WriteGedcom.py: fixed error caused by incomplete migration to
handle-based storage API


svn: r5298
2005-10-10 07:56:18 +00:00
Don Allingham
88f4a669de * src/Spell.py: give more intelligent error message if spelling
checker is not found.
* src/plugins/DescendChart.py: fixed type detection to handle both
unicode and str.


svn: r5297
2005-10-10 03:30:07 +00:00
Don Allingham
5993b7590f * src/plugins/NavWebPage.py: fixed typo in Creative Commons messages
svn: r5296
2005-10-10 02:18:09 +00:00
Don Allingham
9756ac2f7c * src/Bookmarks.py: use GrampsDisplay for help
* src/MergeData.py: use GrampsDisplay for help
* src/MergePeople.py: use GrampsDisplay for help


svn: r5295
2005-10-09 03:18:41 +00:00
Alex Roitman
f616218be0 update
svn: r5294
2005-10-07 21:48:48 +00:00
Alex Roitman
82442c587a Update
svn: r5293
2005-10-07 20:42:43 +00:00
Alex Roitman
aca6355453 Update
svn: r5292
2005-10-07 20:04:23 +00:00
Martin Hawlisch
11a576fc22 Feed in more data
svn: r5291
2005-10-07 19:52:15 +00:00
Alex Roitman
8fa8bb103b * doc/grampsxml.dtd: Fix order, add missing contents.
svn: r5290
2005-10-07 16:28:10 +00:00
Martin Hawlisch
d44d8c8277 * src/plugins/TestcaseGenerator.py: Feed in more data
svn: r5289
2005-10-07 13:37:59 +00:00
Alex Roitman
c3b626c960 * doc/gramps-manual/C/cmdplug.xml: Add new section documenting
plugin options (Reports and Tools).
* src/build_cmdplug: Add script to refresh the new doc section.
* doc/gramps-manual/C/Makefile.am: Ship new file.
* doc/gramps-manual/C/gramps-manual.xml: Define new entity.
* doc/gramps-manual/C/cmdline.xml: Include new section.
* src/Makefile.am: Define new make target (cmdplug).
* src/PluginMgr.py: Include human-readable names in CLI plugins
registration.
* src/Report.py: Allow instantiation of command-line report
without adding item-specific options.
* src/Tool.py: Allow instantiation of command-line tool
without adding item-specific options.
* src/plugins/CmdRef.py: Add options for inclusion into the manual
and the target filename; Use human-readable names for titles; Add
section with common options; Add name option.


svn: r5288
2005-10-07 07:14:09 +00:00
Alex Roitman
4d49d66df5 * src/WriteXML.py: Switch from preferred to alt name attribute.
* doc/grampsxml.dtd: Update.
* src/ReadXML.py: Bring in sync with format changes.


svn: r5287
2005-10-06 23:31:14 +00:00
Don Allingham
c21cf57674 * src/plugins/DetAncestralReport.py: fix margin on note paragraph
* src/DateEdit.py: try using standard icons


svn: r5286
2005-10-06 22:09:38 +00:00
Alex Roitman
4f86f7d28b * src/plugins/CmdRef.py: Work out Report docs.
* src/Report.py: Typo.


svn: r5285
2005-10-06 21:53:49 +00:00
Martin Hawlisch
038cbfa9bb Print out Reports as well
svn: r5284
2005-10-06 21:45:57 +00:00
Alex Roitman
bf8abfdf56 Update
svn: r5283
2005-10-06 20:50:50 +00:00
Martin Hawlisch
19db60b609 * src/plugins/CmdRef.py: New file. Work in progress.
svn: r5282
2005-10-06 20:07:25 +00:00
Don Allingham
d4dec7ff60 * src/docgen/AbiWord2Doc.py: handle superscript properly
* src/ReportUtils.py: remove name generation from list_person_str
* src/plugins/DetAncestralReport.py: fix child list, use roman numerals


svn: r5281
2005-10-06 20:03:21 +00:00
Alex Roitman
2d81701115 * src/ArgHandler.py: Do actions prior to exports.
* doc/gramps.1.in: Document new execution order.


svn: r5280
2005-10-06 19:49:25 +00:00
Alex Roitman
95c876e51d * src/TreeTips.py: Typo.
* src/plugins/ScratchPad.py: Convert to new API.
* src/plugins/DumpGenderStats.py: Convert to new API.


svn: r5279
2005-10-06 19:15:49 +00:00
Stefan Bjork
8cfdeab55c * src/plugins/rel_sv.py: Obviosly, level=1 to get_parents means
parents, not level=0.
* src/po/sv.po: Updates and changes.


svn: r5278
2005-10-06 15:37:35 +00:00
Alex Roitman
cd28f97e1e dialog; Convert plugin reloading tool to new API.
svn: r5277
2005-10-06 06:09:48 +00:00
Alex Roitman
b4426eb514 * src/Plugins.py: Factor out common code for plugins; fix tool
dialog.


svn: r5276
2005-10-06 05:57:29 +00:00
Don Allingham
65af1d8399 added
svn: r5275
2005-10-06 03:51:57 +00:00
Don Allingham
484a656897 * src/GrampsDisplay.py: move gnome help and url control into this
module
* various: switch from direct gnome calls to GrampsDisplay calls
* src/TreeTips.py: don't register type if pygtk > 2.8.0


svn: r5274
2005-10-06 00:44:52 +00:00
Alex Roitman
3daa4c40bc Update
svn: r5273
2005-10-06 00:01:27 +00:00
Alex Roitman
028fc7266b * doc/grampsxml.dtd: Add to CVS (replaces gramps.dtd).
* src/WriteXML.py: Bring in sync with the DTD:
  + add PUBLIC declaration of the DTD file
  + remove db stats as attributes of the database element
  + prepend all handles and hlinks with "_" (conform to XML ID)
  + replace "aka" with "name", "name" with "name preferred=1"


svn: r5272
2005-10-05 23:50:10 +00:00
Julio Sánchez
a0a164621b * src/plugins/ReorderIds.py: handle more cases correctly
svn: r5271
2005-10-05 20:58:44 +00:00
Alex Roitman
561716a398 * src/plugins/PatchNames.py: Convert to new API.
* src/plugins/RelCalc.py: Convert to new API.
* src/plugins/ReorderIds.py: Convert to new API.
* src/plugins/SoundGen.py: Convert to new API.
* src/plugins/Rebuild.py: Convert to new API.


svn: r5270
2005-10-05 04:39:17 +00:00
Don Allingham
278b7751ba * src/DateParser.py: handle non-matching dates as strings properly
svn: r5269
2005-10-04 15:48:58 +00:00
Stefan Bjork
2b60db6940 * src/dates/Date_sv.py: Fixes. No differences from english version
on test data.


svn: r5268
2005-10-04 12:48:28 +00:00
Alex Roitman
fbae0315da * src/plugins/EventCmp.py: Convert to new API.
* src/plugins/Merge.py: Convert to new API.


svn: r5267
2005-10-04 04:52:54 +00:00
Don Allingham
054a803b86 * src/Utils.py: grab the first word of a command line string
* src/plugins/DetAncestralReport.py: work on spouse information


svn: r5266
2005-10-04 03:41:41 +00:00
Don Allingham
569af0f288 * src/ReportUtils.py: add pronoun/name support to child strings
* src/plugin/DetAncestralReport.py: Add support for ReportUtils
* src/plugin/DetDescendantReport.py: Add support for ReportUtils
* src/plugins/ImportGenweb.py: fix date handling to support
date ranges and date modifiers.


svn: r5265
2005-10-02 18:25:39 +00:00
Martin Hawlisch
fa5fb849d9 * src/plugins/TestcaseGenerator.py: corrected options help dict
svn: r5264
2005-10-02 11:55:32 +00:00
Alex Roitman
dd697dcb69 * src/plugins/DesGraph.py: Use correct constant.
* src/plugins/Eval.py: Convert to new API.
* src/plugins/Leak.py: Convert to new API.


svn: r5263
2005-10-02 02:51:01 +00:00
Alex Roitman
2eef51be37 * src/plugins/Check.py: Convert to new API.
svn: r5262
2005-10-02 02:04:36 +00:00
Alex Roitman
66922b94cc Update
svn: r5261
2005-10-01 19:58:48 +00:00
Alex Roitman
cf92aa1fe4 * src/plugins/verigy.glade: Use separate windows for errors and
warnings.


svn: r5260
2005-10-01 19:32:03 +00:00
Alex Roitman
ece8b3cc0c * src/plugins/Verify.py: Convert to new API.
svn: r5259
2005-10-01 19:30:20 +00:00
Alex Roitman
b202b65f1c * src/docgen/KwordDoc.py: Remove unused latin_utf8 import.
* src/plugins/FilterEditor.py: Convert to new API.
* src/plugins/DesBrowse.py: Convert to new API.


svn: r5258
2005-10-01 06:08:50 +00:00
Don Allingham
a391498dc0 * src/docgen/AbiWord2Doc.py: fix latin encoding issues
* src/docgen/KwordDoc.py: fix latin encoding issues
* src/docgen/OpenSpreadSheet.py: fix latin encoding issues
* src/plugins/GraphViz.py: fix latin encoding issues


svn: r5257
2005-09-30 02:15:27 +00:00
Don Allingham
efc4e76449 * src/plugins/DetAncestralReport.py: Fixed generation string
* src/plugins/DetDescendantReport.py: Fixed generation string


svn: r5256
2005-09-30 00:46:51 +00:00
Martin Hawlisch
8d3d21436c * src/plugins/ExportVCalendar.py: Removed unused code
* src/plugins/ExportVCard.py: Removed unused code
* src/plugins/ImportGeneWeb.py: Removed unused code
* src/plugins/ImportvCard.py: Removed unused code
* src/plugins/TestcaseGenerator.py: Removed unused code
* src/plugins/WriteGeneWeb.py: Removed unused code


svn: r5255
2005-09-29 21:01:07 +00:00
Don Allingham
ebd9b9f7d9 * src/WriteGedcom.py: handle broken family
* src/ReportUtils.py: fix born_str to not depend on death date
* example/gedcom/sample.ged: remove broken refererence (I01)


svn: r5254
2005-09-29 18:58:11 +00:00
Don Allingham
91bc3c9bcb removed bug for lifelines
svn: r5253
2005-09-29 18:12:54 +00:00
Martin Hawlisch
8e82ce6149 * src/plugins/ImportGeneWeb.py: convert witout using latin_utf8.py
* src/plugins/ImportvCard.py: remove unused latin_utf8.py include
* src/plugins/TestcaseGenerator.py: remove unused latin_utf8.py include


svn: r5251
2005-09-29 13:13:51 +00:00
Don Allingham
b8034741df * src/NameDisplay.py: Add display_formal
* src/Report.py: remove generation strings
* src/docgen/OpenOfficeDoc.py: Fix leading space after tab.
* src/plugins/AncestorReport.py: Use ReportUtils strings
instead of local strings


svn: r5250
2005-09-29 04:28:36 +00:00
Eero Tamminen
411cae1644 Update Finnish translation
svn: r5249
2005-09-28 20:21:28 +00:00
Martin Hawlisch
b68d819ffd * src/plugins/TestcaseGenerator.py: Use new tool/option api
svn: r5248
2005-09-28 12:20:32 +00:00
Don Allingham
b18503a0c3 * src/ReadXML.py: store then restore read only flag on load
svn: r5247
2005-09-28 03:10:01 +00:00
Alex Roitman
013b9a7e14 Update
svn: r5246
2005-09-27 05:30:59 +00:00
Alex Roitman
1e67047f6c * src/const.py.in: Remove report and tool categories.
* src/Plugins.py: Switch report and tool category constants.
* src/PluginMgr.py: Switch report and tool category constants.
* src/Report.py, src/Tool.py: Move constants.
* src/plugins/ChangeNames.py, src/plugins/ChangeTypes.py,
src/plugins/Checkpoint.py: switch category constants.


svn: r5245
2005-09-27 05:10:54 +00:00
Alex Roitman
3ba7eed3e9 Update
svn: r5244
2005-09-27 05:00:23 +00:00
Alex Roitman
4d3a6ffae7 * all reports: switch categories from const to Report module.
svn: r5243
2005-09-27 04:54:17 +00:00
Don Allingham
f517351802 * src/docgen/PSDrawDoc.py: locale independent floating point
* src/DateDisplay.py: Better french republican date handling
* src/DateParser.py: Better french republican date handling


svn: r5242
2005-09-27 03:45:19 +00:00
Alex Roitman
56038d9b63 * src/plugins/Checkpoint.py: Convert to new scheme, improve.
* src/plugins/checkpoint.glade: Add to CVS.
* src/plugins/Makefile.am: Ship new glade file.


svn: r5241
2005-09-27 00:52:38 +00:00
Alex Roitman
1897c62962 Mon Sep 26 17:48:10 PDT 2005
svn: r5240
2005-09-27 00:48:10 +00:00
Alex Roitman
3c3aaaa807 Mon Sep 26 17:45:12 PDT 2005
svn: r5239
2005-09-27 00:45:13 +00:00
Alex Roitman
e2011abfd4 Mon Sep 26 17:39:24 PDT 2005
svn: r5238
2005-09-27 00:39:25 +00:00
Alex Roitman
cfb69f9e5a Mon Sep 26 17:13:29 PDT 2005
svn: r5237
2005-09-27 00:13:30 +00:00
Stefan Bjork
e346ae7a4f Manual update. Don't shoot the messenger.
svn: r5236
2005-09-26 21:13:03 +00:00
Alex Roitman
c3af4c65a0 * src/plugins/ChangeNames.py: Convert to the new scheme.
svn: r5235
2005-09-26 21:03:31 +00:00
Stefan Bjork
e93db84c8a Add file Date_sv.py.
svn: r5234
2005-09-25 19:18:31 +00:00
Stefan Bjork
26db425e33 A swedish date parser and displayer.
svn: r5233
2005-09-25 19:17:14 +00:00
Stefan Bjork
dc010c8a95 Updates and fixes for 2.0.9. A pretty quick and slovenly work, since
there were more than 300 fuzzy and some 200 untranslated
strings. Several strings need adjustmens and corrections for the
translation to be consequent.


svn: r5232
2005-09-25 19:07:42 +00:00
Don Allingham
e03996c6de * src/data/tips.xml: removed the tip mentioning column sorting
in people view.


svn: r5231
2005-09-25 04:01:46 +00:00
Don Allingham
1c60276c14 * src/latin_utf8.py: removed
* src/ReadGedcom.py: added latin_utf8 functions
* src/Spell.py: better error checking on import


svn: r5225
2005-09-24 16:41:17 +00:00
Alex Roitman
522d79a1f9 Update
svn: r5224
2005-09-24 04:46:45 +00:00
Don Allingham
b9adcb8f0e * doc/gramps-manual/C/faq.xml: more updates
* doc/gramps-manual/C/getstart.xml: more updates
* doc/gramps-manual/C/gramps-manual.xml: more updates
* doc/gramps-manual/C/mainwin.xml: more updates
* doc/gramps-manual/C/usage.xml: more updates


svn: r5223
2005-09-24 04:40:17 +00:00
Don Allingham
50f2226da6 * src/WriteGedcom.py: handle patronymics
svn: r5222
2005-09-24 02:24:26 +00:00
Martin Hawlisch
0fc8d53798 * src/GrampsDbBase.py: Properly validate ID prefix strings
svn: r5221
2005-09-23 22:06:01 +00:00
Alex Roitman
374e117c17 Merge changes done in the TOOL_OPT branch as follows:
* src/Tool.py: Add to CVS: Generic tool interface.
* src/ArgHandler.py: Support command line mode for tools.
* src/PluginMgr.py: New tool registration scheme.
* src/Plugins.py: Convert to tool registration scheme.
* src/const.py.in: Add tool categories.
* src/plugins/ChangeTypes.py: Convert to new scheme.
* src/Options.py: Add to CVS: generic options interface.
* src/ReportOptions.py: Keep only report-specific option
handling.
* src/Makefile.am: Ship new files.

* src/plugins/Checkpoint.py: Minor improvements for the RCS.
* src/plugins/Makefile.am: Ship Checkpoint.py.


svn: r5220
2005-09-23 21:41:23 +00:00
Alex Roitman
4f003d46b4 * src/plugins/Checkpoint.py: Minor improvements for the RCS.
* src/plugins/Makefile.am: Ship Checkpoint.py.


svn: r5219
2005-09-23 20:57:05 +00:00
Frode Jemtland
f819efd5c2 Some updates....
svn: r5218
2005-09-23 06:43:53 +00:00
Don Allingham
20fb8825cd * doc/gramps-manual/C/*.xml
svn: r5217
2005-09-23 04:50:31 +00:00
Don Allingham
0903bc88d2 * src/ReportUtils.py: More UNKNOWN gender handling, and more
complete burial strings
* src/plugins/DetAncestralReport.py: defer pronoun handling to
ReportUtils
* src/plugins/DetDescendantReport.py: defer pronoun handling to
ReportUtils


svn: r5216
2005-09-22 03:04:46 +00:00
Alex Roitman
3c8a820cf4 * src/ReportUtils.py: Add UNKNOWN gender case throughout.
svn: r5215
2005-09-21 22:16:48 +00:00
Martin Hawlisch
11e9730fb9 * src/dates/Date_de.py: Fix month name
svn: r5214
2005-09-21 20:59:19 +00:00
Don Allingham
693879e004 * src/ChooseParents.py: fix unbound variable when neither parents
exist.


svn: r5213
2005-09-21 19:09:26 +00:00
Don Allingham
e1ae9c619e * src/plugins/DetAncestralReport.py: fix endnotes for null sources
* src/plugins/DetDescendantReport.py: fix endnotes for null sources
* src/plugins/FtmStyleAncestors.py: fix endnotes for null sources


svn: r5212
2005-09-21 17:13:26 +00:00
Dionysios
8e49c55017 fixing bug
svn: r5211
2005-09-21 16:32:54 +00:00
Dionysios
ce8abaf772 updated translation
svn: r5210
2005-09-21 15:56:08 +00:00
Don Allingham
4c1680941d updated template
svn: r5209
2005-09-21 14:50:59 +00:00
Don Allingham
fd28cfeac7 * src/ReportUtils.py: fix typo
* src/plugins/NavWebPage.py: handle contact page issues, including
random commas and missing image.


svn: r5208
2005-09-21 14:20:46 +00:00
Don Allingham
089a8c4d06 * src/ImgManip.py: update thumbnail if out of date
svn: r5207
2005-09-21 03:58:10 +00:00
Alex Roitman
6e5c529ba1 * src/plugins/DetAncestralReport.py (write_person,write_children):
Remove boldface, since it should be handled by the style;
(make_default_style): handle boldface heading by the style.
* src/plugins/DetDescendantReport.py (write_person,
write_children): Remove boldface, since it should be handled by
the style; (make_default_style): handle boldface heading by the
style.


svn: r5206
2005-09-21 02:49:42 +00:00
Alex Roitman
d2acaa22e0 Update
svn: r5205
2005-09-20 23:05:12 +00:00
Alex Roitman
8a76c381cc * gramps.sh.in: Revert escaping the arguments, as this lumps all
the args into a single word. If filenames contain spaces then they
should be escaped by the user.


svn: r5204
2005-09-20 19:48:11 +00:00
Alex Roitman
8ddf81d04b * INSTALL: Provide correct examples for the local install.
svn: r5203
2005-09-20 17:58:26 +00:00
Don Allingham
7a72837537 * src/ReportUtils.py: better string handling
* doc/gramps-manual/C/getstart.xml: updates from editors
* doc/gramps-manual/C/mainwin.xml: updates from editors
* doc/gramps-manual/C/usage.xml: updates from editors


svn: r5202
2005-09-20 04:21:50 +00:00
Don Allingham
d0be789223 * src/DescendReport.py: fix indentation
svn: r5195
2005-09-16 04:11:48 +00:00
Don Allingham
012d4a68fd * src/CalSdn.py: fix Hebrew date parsing
* src/DescendReport.py: enhanced to add spouses and places


svn: r5193
2005-09-15 03:51:49 +00:00
Don Allingham
f99f517f04 * src/ReadGedcom.py: fix forward referencing named notes
svn: r5192
2005-09-14 14:34:13 +00:00
Don Allingham
b62eaef5fe * src/NameEdit.py: preserve custom name types
svn: r5191
2005-09-13 03:34:59 +00:00
Don Allingham
b779bc44a2 unicode conversion
svn: r5190
2005-09-12 20:57:46 +00:00
Don Allingham
83b7e669dc * src/plugins/ScratchPad.py: handle unicode better
* src/DdTargets.py: handle unicode better


svn: r5189
2005-09-12 20:38:59 +00:00
Don Allingham
1b7a21225f * src/NameDisplay: include nickname if available
* src/plugins/ScratchPad.py: Handle null handle


svn: r5188
2005-09-12 03:18:08 +00:00
Don Allingham
02d2c7cd73 * src/ImageSelect.py: fix adding a new image that is actually
already in the database.


svn: r5187
2005-09-11 03:08:49 +00:00
Don Allingham
d117110b4c * src/plugins/NavWebPage.py: suppress dates on list pages for restricted
people


svn: r5186
2005-09-07 01:43:03 +00:00
Don Allingham
757c3cae1f * doc/gramps-manual/C/getstart.xml: text and graphics improvements
* doc/gramps-manual/C/mainwin.xml: text and graphics improvements
* doc/gramps-manual/C/usage.xml: text and graphics improvements


svn: r5185
2005-09-07 00:42:19 +00:00
Eero Tamminen
8759066b4e inprove strings
svn: r5184
2005-09-06 19:17:22 +00:00
Don Allingham
1ca8867a78 * NEWS: update for 2.0.8
* src/data/Makefile.am: install main6.css
* src/plugins/NavWebPage.py: Catch exception if thumbnailer fails.


svn: r5182
2005-09-06 01:58:05 +00:00
Eero Tamminen
dc465ec4bf fix DateParser
svn: r5181
2005-09-05 18:52:21 +00:00
Don Allingham
d4181a3e1e * NEWS: update for 2.0.7 release
svn: r5180
2005-09-05 00:43:39 +00:00
Don Allingham
7c11d689e0 * src/DateDisplay.py: handle BCE better
svn: r5179
2005-09-05 00:06:17 +00:00
Don Allingham
1bf7432260 * src/ReadXML.py: read the patronymic portion of a name properly.
svn: r5178
2005-09-04 22:37:24 +00:00
Don Allingham
cb81a1a9f9 update
svn: r5177
2005-09-04 22:30:08 +00:00
Eero Tamminen
021141b84f Finish Finnish date support
svn: r5176
2005-09-04 20:22:39 +00:00
Don Allingham
e12a0862aa update
svn: r5175
2005-09-04 03:24:52 +00:00
Don Allingham
ecc2ab1c39 * src/GraphLayout.py: use recursion limit to detect db loops
* src/Utils.py: use recursion limit to detect db loops


svn: r5174
2005-09-04 03:00:33 +00:00
Julio Sánchez
590136f866 * src/po/es.po: Translation update
svn: r5173
2005-09-03 16:42:04 +00:00
Don Allingham
ca7a190a80 * doc/gramps-manual/C/mainwin.xml: wording fixes.
svn: r5172
2005-09-03 05:19:26 +00:00
Don Allingham
973f550d94 * src/GrampsBSDDB.py: fixed unicode/str problem
svn: r5171
2005-09-03 03:47:37 +00:00
Frode Jemtland
d3fe9044df Updates for the upcomming v2.7. Still missing almost 30 tip strings. Have a loth of fuzzy
svn: r5170
2005-09-02 22:47:03 +00:00
Don Allingham
622bb4dcec * doc/gramps-manual/C/preface.xml: wording fixes.
svn: r5169
2005-09-02 22:07:46 +00:00
Don Allingham
0b8c2d6d0a * src/docgen/OpenOfficeDoc.py: fix font point size handling
svn: r5168
2005-09-02 03:51:14 +00:00
Don Allingham
d526d508ce * src/Plugins.py: sort submenu entries properly
svn: r5167
2005-09-02 02:59:09 +00:00
Don Allingham
78e78d1ecf remove zn_CH iconv
svn: r5166
2005-09-02 02:40:55 +00:00
Don Allingham
a1d64c63a7 * src/PeopleView.py: replace unique string with one already translated
* src/gramps_main.py: replace unique string with one already translated
* src/plugins/Ancestors.py: replace unique string with one already translated
* src/plugins/Eval.py: replace unique string with one already translated
* src/plugins/WriteCD.py: replace unique string with one already translated
* src/po/check_po: produce a sorted list of used text strings,
split strings better


svn: r5165
2005-09-01 22:24:39 +00:00
Don Allingham
59172268eb * src/plugins/Verify.py: don't complain about difference in
ages between spouses if birth year is unknown.


svn: r5164
2005-09-01 20:25:55 +00:00
Don Allingham
36f08112f8 * src/ImageSelect.py: Local edit of a media Note type now
brings up the Note editor instead of the media editor.


svn: r5163
2005-09-01 18:58:30 +00:00
Martin Hawlisch
5a3fcbd65b * src/po/check_po: Support for multiple files as command line arguments; untranslated strings dont need mismatch tests
svn: r5162
2005-09-01 10:48:39 +00:00
Don Allingham
603deacb68 * src/plugins/RelCalc.py: use PeopleModel instead of ListModel,
check to the person being compared to him/herself
* src/plugins/relcalc.glade: increase the width of the window.


svn: r5161
2005-09-01 04:08:29 +00:00
Don Allingham
0ff17e104b * src/Report.py: Catch thrown Database error
* src/GraphLayout.py: catch database loops
* src/po/check_po: utility to look for problems in .po files


svn: r5160
2005-09-01 02:39:55 +00:00
Don Allingham
cbf80d0547 update
svn: r5159
2005-09-01 00:04:18 +00:00
Don Allingham
8554ae2004 * src/po/de.po: fix %()s mismatches
* src/po/ru.po: fix %()s mismatches


svn: r5158
2005-09-01 00:01:30 +00:00
Don Allingham
8ceaac3136 * src/PedView.py: force an update of the cached person
* src/gramps_main.py: force an update of the cached person
objects; thxumbnails are always png images


svn: r5157
2005-08-31 18:50:35 +00:00
Eero Tamminen
36f75e5bdf update fi.po for v2.0.7
svn: r5156
2005-08-31 18:22:30 +00:00
Don Allingham
941418dffe * src/ReadGedcom.py: handle attributes if value is on the same line as the
keyword


svn: r5155
2005-08-31 14:45:17 +00:00
Dionysios
ea8948dbfa updated translation
svn: r5154
2005-08-31 10:58:10 +00:00
Martin Hawlisch
f8f6f500ef * src/ReportUtils.py (insert_images): Warn about non existing files
svn: r5153
2005-08-31 08:57:49 +00:00
Alex Roitman
8c2906ef6e * src/po/ru.po: Translation update for 2.0.7.
svn: r5152
2005-08-31 04:07:03 +00:00
Don Allingham
5160ce313d * src/po/de.po: fixed parameter arguments
svn: r5151
2005-08-31 00:07:24 +00:00
Dionysios
4be6520c1c fixing bug
svn: r5150
2005-08-30 20:11:09 +00:00
Don Allingham
ce31ffcb84 * doc/gramps-manual/C/getstart.xml: fixed spelling
* doc/gramps-manual/C/mainwin.xml: fixed spelling
* src/Errors.py: Add a DatabaseError type
* src/Utils.py: detect database loops in descendants_too_old
* src/WriteGedcom.py: report error message when database loop is detected
* src/po/template.po: added new error message. May be too late for some
translations to get this message.


svn: r5149
2005-08-30 19:56:43 +00:00
Don Allingham
c6d2319c09 * src/ImageSelect.py: specify mime type to get_thumbnail_image
* src/ImgManip.py: make thumbnailing routine more generic
* src/SelectObject.py: specify mime type to get_thumbnail_image
* src/plugins/NavWebpage.py: produce larger preview images for media
pages if a thumbnailer exists
* src/plugins/SimpleBookTitle.py: specify mime type to get_thumbnail_image


svn: r5148
2005-08-30 18:18:15 +00:00
Martin Hawlisch
5a2cb0273e * src/plugins/NavWebPage.py: Encode using 'xmlcharrefreplace'
* src/plugins/WriteGeneWeb.py: Remove empty families before running the export. this gives now an error instead of writing an empty file; Encode using 'xmlcharrefreplace'


svn: r5147
2005-08-30 15:00:34 +00:00
Frode Jemtland
15dd5945cf Updated the po files with the new template, that is freezed for the 2.0.7 release
svn: r5146
2005-08-30 07:25:18 +00:00
Don Allingham
1e0db5610d * src/GenericFilter.py: fixed "only one" filter rule, and matching
the descendents of a filter
* src/SelectObject.py: Fix sorting order for title


svn: r5145
2005-08-30 04:15:07 +00:00
Don Allingham
12e95f2bf8 * src/plugins/WriteGeneWeb.py: use 'replace' for 'iso-8859-1' encoding
svn: r5144
2005-08-30 03:01:00 +00:00
Don Allingham
2feb950950 * src/po/fr.po: fix named parameter
svn: r5143
2005-08-30 02:36:40 +00:00
Don Allingham
61f74adc33 * src/ImageSelect.py: fix note media object added from a gallery
svn: r5142
2005-08-30 02:29:40 +00:00
Don Allingham
c994f1dbf1 * src/po/template.po: updated translation template
svn: r5141
2005-08-29 20:06:32 +00:00
Don Allingham
10e4f7338f * src/Utils.py: fix probably_alive to handle year offset properly
* src/plugins/NavWebPage.py: handle new probably_alive function


svn: r5140
2005-08-29 17:17:57 +00:00
Martin Hawlisch
a67f26ff8d * src/plugins/Check.py: Files of note-only objects are no longer reported as missing
svn: r5139
2005-08-29 13:00:59 +00:00
Martin Hawlisch
6e71f9a3a3 more optimisations
svn: r5138
2005-08-29 12:49:25 +00:00
Martin Hawlisch
e6f434a686 * src/plugins/NavWebPage.py: Correct link to Surname list page; Better handling for not existing media object files and note-only objects; thumbnails are always png images
svn: r5137
2005-08-29 12:41:04 +00:00
Don Allingham
59306cdf74 * src/plugins/NavWebPage.py: handle resticted living people
better, producing name and relationships instead of just Private.


svn: r5136
2005-08-29 04:13:12 +00:00
Don Allingham
ac1f811723 * src/plugins/AncestorChart2.py: add support for %n style
of keyword substitution


svn: r5135
2005-08-28 20:38:46 +00:00
Don Allingham
2cd3db64aa * src/data/Makefile.am: install document.png
* src/plugins/Makefile.am: install DescendChart.py


svn: r5134
2005-08-27 14:43:34 +00:00
Don Allingham
933a86ea78 * src/data/document.png: added
svn: r5133
2005-08-27 02:57:55 +00:00
Don Allingham
fc500580e2 fix shadown
svn: r5132
2005-08-26 21:17:52 +00:00
Martin Hawlisch
88d8e09768 * src/GrampsDbBase.py: Print transaction if GRAMPS_SIGNAL=1
svn: r5131
2005-08-26 21:09:47 +00:00
Martin Hawlisch
275c60a7c6 * src/plugins/TestcaseGenerator.py: Changed param handling; add more tests; make names shorter and configurable
svn: r5130
2005-08-26 20:50:56 +00:00
Don Allingham
4f2461aca5 added maximum number of generations, fixed shadow scaling
svn: r5129
2005-08-26 20:42:56 +00:00
Don Allingham
293f89e73b * src/plugins/DescendChart.py: Fix spacing and line drawing,
added maximum number of generations


svn: r5128
2005-08-26 20:10:56 +00:00
Don Allingham
15a3999422 * src/plugins/DescendChart.py: Fix spacing and line drawing
svn: r5127
2005-08-26 19:10:34 +00:00
Don Allingham
755c75a2c5 * src/SubstKeywords: Add new % options
* src/plugins/DescendChart.py: New descendant wall chart report


svn: r5126
2005-08-26 03:03:29 +00:00
Martin Hawlisch
59162682c0 * src/SelectChild.py (on_save_child_clicke): Dont add the same person multiple times as child
* src/gramps_main.py (delete_person_response): Purge empty family after the last child of a single-spouse family was deleted.


svn: r5125
2005-08-25 21:05:44 +00:00
Frode Jemtland
acedbb4417 Updated against new template filen.
Got corrections from Axel Bojer on my cvs commit on the skolelinux.no


svn: r5123
2005-08-25 12:23:41 +00:00
Don Allingham
40042df8f6 * src/ImgManip.py: convert to png instead of jpeg
* src/ReadGedcom.py: try to catch bad secondary index error.
* src/ReportUtils.py: provide privacy sanitation on a list
* src/NavWebPage.py: better handling of thumbnails, allow gallery
page to be disabled


svn: r5122
2005-08-25 01:42:58 +00:00
Martin Hawlisch
ee6ad290d1 * src/ImgManip.py: import Utils (required by get_thumbnail_image)
svn: r5121
2005-08-24 20:38:36 +00:00
Don Allingham
ba71b271c1 * src/data/main6.css: new "Sharp" style sheet
svn: r5120
2005-08-24 03:24:21 +00:00
Don Allingham
cc88a37d0b * gramps.sh.in: escape the arguments to prevent spaces in
filenames to be parsed as to seperate arguments
* src/ImageSelect.py: pass the mime_type to the thumbnail generator
* src/ImgManip.py: query the gconf database to find appropriate
thumbnail generators
* src/NameDisplay.py: don't force a comma if the last name does
not exist
* src/WriteGedcom.py: don't copy a file on top of itself
* src/plugins/Ancestors.py: verify the existance of a file
* src/plugins/NavWebPage.py: don't use HOME page if it would be
empty

* src/plugins/Ancestors.py: fix pagebreak and borders around image


svn: r5119
2005-08-24 03:14:12 +00:00
Martin Hawlisch
c2374c1ac5 * src/plugins/ExportVCard.py (write_person): Fix typo
svn: r5118
2005-08-22 08:36:18 +00:00
Don Allingham
37394a76ae * src/ImgManip.py: add support for PDF thumbnailing
* src/plugins/NavWebPage.py: Always use two levels instead of
one level of subdirectories, use subdirectories for thumbnails
and media objects


svn: r5117
2005-08-22 04:01:23 +00:00
Don Allingham
987a3cef7c * src/NameDisplay.py: handle patronymic names in given name
* src/plugins/NavWebPage.py: handle patronymic names in given name


svn: r5116
2005-08-20 03:20:17 +00:00
Don Allingham
f8710bae70 * src/GenericFilter.py: fix unicode problem with menu store
svn: r5115
2005-08-20 03:16:05 +00:00
Don Allingham
a51b4cdb9b * src/plugins/NavWebPage.py: code clean up
svn: r5108
2005-08-19 04:15:06 +00:00
Don Allingham
4f6f7eb94f * src/AddSpouse.py: remove unnecessary commit via add_family
* src/NavWebPage.py: move more HTML commands to CSS
* src/data/main*.css: add support for HTML control from NavWebPage


svn: r5107
2005-08-18 22:07:31 +00:00
Martin Hawlisch
6a4b19417d * doc/gramps-manual/C/custom.xml: Match against DTD
* doc/gramps-manual/C/usage.xml: Match against DTD
* doc/gramps-manual/C/preface.xml: Match against DTD


svn: r5106
2005-08-18 20:29:31 +00:00
Don Allingham
b35767c630 source page, check for bad file name if archive is used.
svn: r5104
2005-08-18 03:19:33 +00:00
Don Allingham
62d32ed08a * src/plugins/NavWebPage.py: fix source reference links on the
source page.


svn: r5103
2005-08-18 02:45:25 +00:00
Don Allingham
5df0a7c8a9 * src/FamilyView.py: commit person when removed from family
svn: r5102
2005-08-18 00:33:49 +00:00
Eero Tamminen
0693bfd63b Add header option to draw_legend() for StatisticsChart
svn: r5101
2005-08-17 22:44:40 +00:00
Eero Tamminen
c1ebc886ab add localization context to 'Title' for Finnish
svn: r5100
2005-08-17 22:43:41 +00:00
Eero Tamminen
b42c617c3f lots of updates to StatisticsChart
svn: r5099
2005-08-17 22:41:30 +00:00
Don Allingham
04afb37165 * src/Marriage.py: fix lds_data_object problem
svn: r5098
2005-08-17 22:01:15 +00:00
Don Allingham
9d1cb02e41 * src/GrampsDBCallback.py: look for GRAMPS_SIGNAL environment
variable equal to 1 to enable signal debugging


svn: r5097
2005-08-17 18:21:43 +00:00
Don Allingham
b2e194b8ec * src/ChooseParents.py: disconnect signals on close, do fewer
commits


svn: r5096
2005-08-17 16:53:21 +00:00
Richard Taylor
63a66789a8 2005-08-17 Richard Taylor <rjt-gramps@thegrindstone.me.uk>
* src/plugins/ExportVCalendar.py: fixed import for localtime,
        corrected type of Utils and params to Until.family_name
        made "Version" upper case as demanded by Korganiser and
        the spec (I think).


svn: r5091
2005-08-17 08:00:22 +00:00
Don Allingham
d51cd767e0 * src/EditPerson.py: hide LDS if not requested
* src/Marriage.py: hide LDS if not requested
* src/Spell.py: re-enable
* src/GrampsCfg.py: add support for spell checker
* src/GrampsGconfKeys.py: add support for spell checker
* src/GrampsIniKeys.py: add support for spell checker
* src/gramps.glade: add support for spell checker
* src/data/gramps.schemas: add support for spell checker


svn: r5090
2005-08-17 03:52:34 +00:00
Don Allingham
e72ca98e22 * src/MediaView.py: add mediaobj to DND types
* src/plugins/ScratchPad.py: fill out rest of media details (type,value)


svn: r5089
2005-08-16 22:49:33 +00:00
Don Allingham
ee20b5d115 * src/MergePeople.py: correctly handle selection of first person
svn: r5088
2005-08-16 22:29:37 +00:00
Eero Tamminen
7c0c620ccf Fix/improve Finnish translations
svn: r5087
2005-08-16 21:45:51 +00:00
Don Allingham
d6a9ffb2ef * src/Sources.py: Limit the source title to 40 characters
svn: r5086
2005-08-16 17:46:10 +00:00
Don Allingham
e7f27f4645 * src/plugins/NavWebPage.py: fix paths in surname page
svn: r5085
2005-08-16 16:32:27 +00:00
Don Allingham
e9ba16655d 2.0.6-2
svn: r5084
2005-08-16 03:46:38 +00:00
Don Allingham
22efc8316d 2.0.6
svn: r5082
2005-08-15 15:28:39 +00:00
Alex Roitman
7bebe8d394 * NEWS: Update.
svn: r5081
2005-08-15 12:50:28 +00:00
Alex Roitman
cb2c215cf7 * src/ReadXML.py (start_event): Correctly set event type.
* acinclude.m4, configure.in, gramps.spe.in, src/data/Makefile.am:
Properly test for gconftool-2 binary.


svn: r5079
2005-08-15 00:31:11 +00:00
Martin Hawlisch
7c1ce4296b * src/plugins/ExportVCalendar.py: Fix typo
svn: r5078
2005-08-14 19:35:33 +00:00
Alex Roitman
f29dea4a9f Add new files
svn: r5077
2005-08-14 19:27:22 +00:00
Alex Roitman
675c9b777b Update
svn: r5076
2005-08-14 17:56:55 +00:00
Alex Roitman
af2fe576d2 * doc/gramps-manual/fr/figures/comp-people.png,
doc/gramps-manual/fr/figures/date-selection.png,
doc/gramps-manual/fr/figures/merge-people.png,
doc/gramps-manual/fr/figures/merge-plc.png,
doc/gramps-manual/fr/figures/merge-src.png,
doc/gramps-manual/fr/figures/prefs.png,
doc/gramps-manual/fr/figures/scratch-pad.png,
doc/gramps-manual/fr/figures/find-people.png: Add figures.


svn: r5074
2005-08-13 18:22:35 +00:00
Don Allingham
1cffbd5998 fix path hierarchy
svn: r5072
2005-08-12 22:06:11 +00:00
Alex Roitman
ed41f66ebf Use translated event names; properly test for events.
svn: r5071
2005-08-12 21:32:56 +00:00
Alex Roitman
a672292d5d * src/plugins/NavWebPage.py (display_ind_events,display_spouse):
Use translated event names.


svn: r5070
2005-08-12 19:36:21 +00:00
Alex Roitman
c453822cc5 Typo
svn: r5068
2005-08-12 18:49:16 +00:00
Alex Roitman
324930e165 * src/GrampsBSDDB.py (upgrade_8): Insert check for event_list.
* src/plugins/Check.py (check_events): Add checks for family
events; Replace garbage event_list with empty list for both
types.


svn: r5067
2005-08-12 18:35:30 +00:00
Alex Roitman
234baa9682 * src/po/cs.po: Updated Czech translation.
svn: r5064
2005-08-12 16:45:51 +00:00
Don Allingham
0fa5fd601f surname page fix
svn: r5063
2005-08-12 16:38:48 +00:00
Alex Roitman
9f9edb8fe3 * src/po/nl.po: Updated Dutch translation
svn: r5060
2005-08-12 15:31:24 +00:00
Alex Roitman
45fd06cbb3 * doc/gramps-manual/fr/figures/column-editor.png: Add figure.
svn: r5051
2005-08-11 17:10:25 +00:00
Eero Tamminen
f4f38ca040 updated/fixed Finnish translations
svn: r5048
2005-08-10 20:52:31 +00:00
Alex Roitman
e7d9c8d676 * configure.in: Enable fr manual.
* doc/gramps-manual/Makefile.am: Enable fr manual.
* doc/gramps-manual/fr/Makefile.am: Add new files to the installed
list.
* doc/gramps-manual/fr/cmdline.xml,
doc/gramps-manual/fr/custom.xml,
doc/gramps-manual/fr/faq.xml, doc/gramps-manual/fr/filtref.xml
doc/gramps-manual/fr/getstart.xml,
doc/gramps-manual/fr/gramps-manual.xml,
doc/gramps-manual/fr/keybind.xml, doc/gramps-manual/fr/legal.xml,
doc/gramps-manual/fr/mainwin.xml, doc/gramps-manual/fr/usage.xml:
Update manual.


svn: r5047
2005-08-10 15:57:28 +00:00
Alex Roitman
e646023576 * src/po/nl.po: Typo.
svn: r5045
2005-08-10 14:52:26 +00:00
Dionysios
61ffdfb8c6 fixed problem
svn: r5039
2005-08-08 19:59:44 +00:00
Dionysios
c0cce73361 translating WGstrings
svn: r5038
2005-08-08 16:47:27 +00:00
Alex Roitman
96a9fa1bc8 Update
svn: r5037
2005-08-08 16:43:05 +00:00
Alex Roitman
94b1928fc0 * src/plugins/NavWebPage.py (add_user_options): Mark translatable
strings.
* src/po/template.po: Update template.
* src/po/ru.po: Translation update.


svn: r5036
2005-08-08 15:52:41 +00:00
Eero Tamminen
6d24f0d2f5 fix
svn: r5035
2005-08-07 22:43:06 +00:00
Eero Tamminen
16c656f266 Update fi translations to latest template
svn: r5034
2005-08-07 22:20:39 +00:00
Eero Tamminen
0940a97f43 update to template
svn: r5033
2005-08-07 22:16:52 +00:00
Dionysios
d96c499d02 updated translation
svn: r5032
2005-08-06 06:35:43 +00:00
Alex Roitman
d7463372c0 Update
svn: r5030
2005-08-05 22:39:11 +00:00
Alex Roitman
63543e41ef Update
svn: r5029
2005-08-05 20:55:58 +00:00
Alex Roitman
2f2c6bf1e6 * src/EditPerson.py (did_data_change,on_apply_person_clicked):
Convert date text to unicode before parsing.
* src/Spell.py: Comment out to disable spell-checking for 2.0.6.


svn: r5028
2005-08-05 20:49:10 +00:00
Dionysios
38fcd5aaa1 updated translation
svn: r5027
2005-08-05 20:47:40 +00:00
Alex Roitman
55be600dc2 Update
svn: r5026
2005-08-05 17:48:41 +00:00
Alex Roitman
035b13c4f8 Update
svn: r5025
2005-08-05 17:05:10 +00:00
Alex Roitman
abaa2f7a10 Update
svn: r5024
2005-08-05 16:12:33 +00:00
Alex Roitman
d2cf4f8668 * src/Spell.py: Make more robust to failure.
* src/Makefile.am: Ship new file.
* NEWS: Update.


svn: r5023
2005-08-05 15:34:53 +00:00
Martin Hawlisch
d575d56cba * src/plugins/Checkpoint.py (rcs): define variable comment before using it.
svn: r5022
2005-08-05 15:31:46 +00:00
Don Allingham
55447ac858 * src/Spell.py: Interface to gtkspell
* src/AttrEdit.py: add spell checker to notes
* src/EditPerson.py: add spell checker to notes
* src/EditPlace.py: add spell checker to notes
* src/EditSource.py: add spell checker to notes
* src/EventEdit.py: add spell checker to notes
* src/ImageSelect.py: add spell checker to notes
* src/Marriage.py: add spell checker to notes
* src/NameEdit.py: add spell checker to notes
* src/NoteEdit.py: add spell checker to notes
* src/Sources.py: add spell checker to notes


svn: r5021
2005-08-05 03:41:23 +00:00
Alex Roitman
ef444d3843 * src/po/ru.po: Partial update.
svn: r5020
2005-08-05 02:05:41 +00:00
Alex Roitman
02f7142364 * src/ArgHandler.py (parse_args): Use mime type to identify gramps
XML data.
* doc/gramps.1.in: Update man page.
* doc/gramps-manual/C/cmdline.xml: Update manual.

* src/PeopleModel.py: provide a work around for the python 2.3 bug
unicode sorting problem with locale.strcoll. For a nul termination
during sorting, strip it off after sorting. Only used for
python2.3, since this bug was fixed in python 2.4.


svn: r5019
2005-08-04 23:54:18 +00:00
Don Allingham
b6e123ed06 * src/ImageSelect.py: fixed thumbnail dnd selection
svn: r5018
2005-08-04 22:34:42 +00:00
Don Allingham
ac235ff7be * src/AttrEdit.py: don't used reserved word "list"
* src/EditPerson.py: Pass correct attribute list to editor
* src/GrampsBSDDB.py: persistently load/save attribute lists
* src/GrampsDbBase.py: update attributes on commit
* src/Marriage.py: Pass correct attribute list to editor


svn: r5017
2005-08-04 20:46:41 +00:00
Matthieu Pupate
db62a824fb Merged French translation
svn: r5016
2005-08-04 19:08:39 +00:00
Alex Roitman
d6fac942df Update
svn: r5015
2005-08-04 18:09:26 +00:00
Alex Roitman
4ac3779a96 * src/Report.py (parse_report_options_frame): Fallback to trivial
filter on filter failure.


svn: r5014
2005-08-04 18:05:43 +00:00
Alex Roitman
5374ed4b64 * NEWS: Update.
* src/MergePeople.py: Typos.
* src/plugins/NavWebPage.py: Typos.
* src/po/template.po: Update for upcoming 2.0.6.


svn: r5013
2005-08-04 16:18:24 +00:00
Don Allingham
335580cc90 * src/PeopleModel.py: provide a work around for the python 2.3 bug unicode
sorting problem with locale.strcoll. For a nul termination during sorting,
strip it off after sorting. Only used for python2.3, since this bug was
fixed in python 2.4.


svn: r5012
2005-08-04 15:53:38 +00:00
Don Allingham
ad2ef89450 * src/NavWebPage.py: use new ProgressMeter, add ability to
not generate a CSS style sheet.
* src/WebPage.py: add deprecation notice


svn: r5011
2005-08-04 04:20:17 +00:00
Alex Roitman
5eb6e7c97e * src/gramps_main.py (undo): Rebuild bookmarks menu on undo.
* src/plugins/ChangeNames.py: Add ProgressMeter.
* src/plugins/ChangeTypes.;y: Add ProgressMeter.
* src/plugins/Check.py: Mark translatable string.
* src/plugins/EventCmp.py: Add ProgressMeter.
* src/plugins/PatchNames.py: Add ProgressMeter.


svn: r5010
2005-08-03 22:17:10 +00:00
Don Allingham
1cc16595a9 ProgressMeter changes
svn: r5009
2005-08-03 21:10:11 +00:00
Don Allingham
ca4856adee ProgressMeter additions
svn: r5008
2005-08-03 19:25:03 +00:00
Alex Roitman
3816790b4f * src/Bookmarks.py: Convert from CList to ListModel and TreeView;
Remove Cancel and OK buttons, Add Close button; make all changes
immediate conforming to the HIG; (remove_people): Add method for
removing people outside bookmark editor (useful for connecting to
signals).
* src/gramps_main.py (on_remove_bookmark): Add handler for
removing deleted people; (__init__): Connect new handler to the
'person-delete' signal.


svn: r5007
2005-08-03 02:53:52 +00:00
Don Allingham
28edd32a1f * src/NameEdit.py: convert names to unicode
* src/PeopleModel.py: convert names to uncode


svn: r5006
2005-08-03 02:31:18 +00:00
Don Allingham
544e27232f error checking
svn: r5005
2005-08-02 22:51:08 +00:00
Don Allingham
66523b5c7c date fixes
svn: r5004
2005-08-02 21:53:27 +00:00
Don Allingham
32b884fc5d removed print statements
svn: r5003
2005-08-02 20:01:24 +00:00
Don Allingham
886696e718 Family/Person event separation
svn: r5002
2005-08-02 19:39:53 +00:00
Martin Hawlisch
a53db06f26 * src/gramps_main.py: Disable "add bookmark" menu entry on readonly database and only enable it in person/family/pedigree view.
svn: r5001
2005-08-02 14:37:10 +00:00
Martin Hawlisch
10960055c5 * src/Bookmarks.py (edit): Dont crash if bookmark list contains nonexisting person.
svn: r5000
2005-08-02 14:07:37 +00:00
Don Allingham
e7b9924482 * src/NavWebPage.py: fix references to places
svn: r4999
2005-08-02 04:33:22 +00:00
Don Allingham
865da3bbbd fix write failure on GEDCOM export
svn: r4995
2005-08-01 22:35:19 +00:00
Martin Hawlisch
53fb61125b * src/gramps_main.py: Use gobject.timeout_add instead of gtk.
svn: r4994
2005-08-01 19:46:11 +00:00
Alex Roitman
f5b549154d * src/docgen/OpenOfficeDoc.py: Typo.
svn: r4986
2005-07-31 14:23:28 +00:00
Alex Roitman
870bc0bcfb Update
svn: r4985
2005-07-31 14:22:38 +00:00
Don Allingham
2070dcba43 * src/docgen/OpenOfficeDoc.org: remove ^L and ^Z from output, use
xml.sax.saxutils.escape to handle XML entities


svn: r4984
2005-07-31 04:43:06 +00:00
Don Allingham
d768deae74 * src/docgen/OpenOfficeDoc.org: remove ^L and ^Z from output
svn: r4983
2005-07-31 04:22:43 +00:00
Don Allingham
f447c086aa * src/GrampsBSDDB.py: issue complete redraw on name grouping change
svn: r4981
2005-07-30 04:54:58 +00:00
Don Allingham
d45b36537e * src/Utils.py: use intermediate variable
svn: r4980
2005-07-30 03:29:34 +00:00
Don Allingham
b26b982274 update
svn: r4979
2005-07-29 22:14:56 +00:00
Don Allingham
f031f80287 privacy information
svn: r4978
2005-07-29 20:32:46 +00:00
Alex Roitman
c56f94a52f * src/po/no.po, src/po/nb.po: Typos.
svn: r4977
2005-07-29 17:37:12 +00:00
Alex Roitman
3f8c9298a4 * src/GenericFilter.py (GrampsFilterComboBox.get_value): Do not
convert key to unicode.


svn: r4976
2005-07-29 16:36:51 +00:00
Don Allingham
478f90b8e8 * src/MergePeople.py: prevent attempts to merge a person and his/her
spouse, prevent merging of child and parent.


svn: r4975
2005-07-29 04:27:14 +00:00
Alex Roitman
88874cd212 * src/Report.py (ReportDialog.on_ok_clicked): Properly return on
correct/change filename choice.


svn: r4974
2005-07-28 21:26:57 +00:00
Alex Roitman
f5a5a3a55c * src/plugins/WebPage.py (WebReportOptions.set_new_options):
Define help dictionary to document options.
* src/Report.py (CommandLineReport.init_options): Typo.


svn: r4973
2005-07-28 17:56:25 +00:00
Don Allingham
131bcb4bc2 * src/plugins/NavWebPage.py: add user html header and footer
svn: r4972
2005-07-28 03:51:27 +00:00
Don Allingham
ff5a31634c * src/FamilyView.py: try to prevent adding a spouse that has
already been added
* src/ReadXML.py: prevent adding a spouse that has already been
added
* src/plugins/Check.py: remove identical families in family list


svn: r4971
2005-07-28 02:20:31 +00:00
Alex Roitman
52d06de491 * src/ChooseParents.py (save_parents_clicked): Do not create
family if parent is self.


svn: r4970
2005-07-27 00:58:17 +00:00
Don Allingham
2335612283 NameDisplay enhancements
svn: r4969
2005-07-26 23:02:53 +00:00
Martin Hawlisch
e968be0d0b * src/NavWebPage.py: Catch missing header/footer notes; Add Surname page that is sorted by the number of persons.
svn: r4968
2005-07-26 13:53:54 +00:00
Alex Roitman
0f4a044aee * src/gramps.glade (editPerson,marriageEditor): Use Title for the
source titles.


svn: r4967
2005-07-25 23:10:03 +00:00
Don Allingham
b715342889 GEDCOM gender fix for PAF
svn: r4966
2005-07-25 21:00:39 +00:00
Alex Roitman
0ec3ec1df9 * src/plugins/RelCalc.py (__init__): Correctly name column header.
svn: r4965
2005-07-25 03:34:17 +00:00
Julio Sánchez
28de227342 * src/plugins/GraphViz.py: Fix computation of landscape dimensions,
especially when generating multiple sheets


svn: r4964
2005-07-23 06:05:11 +00:00
Don Allingham
460967116f web page templating and thumbnails
svn: r4963
2005-07-22 21:59:44 +00:00
Julio Sánchez
61d9aaf017 * src/dates/Date_es.py: fix translation table for date qualifiers
* src/dates/Date_fr.py: fix translation table for date qualifiers
* src/plugins/DetAncestralReport.py: show events even if they have
neither date nor place
* src/plugins/DetDescendantReport.py: show events even if they have
neither date nor place


svn: r4962
2005-07-22 18:23:18 +00:00
Martin Hawlisch
a9fd2073f2 * src/plugins/NavWebPage.py: fix typos
svn: r4961
2005-07-22 12:26:59 +00:00
Don Allingham
8c409f079b update doc
svn: r4960
2005-07-22 04:44:25 +00:00
Don Allingham
d15b245376 * src/data/somerights20.gif: make a local copy of the Create Commons
image
* src/data/Makefile.am: add somerights20.gif
* src/plugins/NavWebPage.py: add birth dates to people, use local
create commons image, add surname pages


svn: r4959
2005-07-22 04:28:29 +00:00
Don Allingham
0967eb0ff2 * src/plugins/NavWebPage.py: Add support for multiple directory levels to
try to keep the number of files per directory under 254 for optimal ext3
file performance, add support for copyright.


svn: r4958
2005-07-21 03:59:24 +00:00
Alex Roitman
5d3fd22ee2 * src/plugins/Ancestors.py (person): correctly compare handles.
svn: r4957
2005-07-21 00:23:19 +00:00
Julio Sánchez
dc3bbdd7eb * src/plugins/DetDescendantReport.py: Names, events and sources.
* src/plugins/DetAncestralReport.py (add_user_options): Names, events and sources.


svn: r4956
2005-07-20 18:48:43 +00:00
Alex Roitman
54112cebc1 * configure.in: Put release number back to CVS+date.
* src/po/de.po: Typo.


svn: r4955
2005-07-20 13:19:57 +00:00
Don Allingham
ae513c5b60 * src/plugins/NavWebPage.py: add media gallery navigation, clean up
svn: r4954
2005-07-19 04:22:49 +00:00
Don Allingham
bb3efd78a4 media gallery navigation
svn: r4953
2005-07-18 21:31:19 +00:00
Martin Hawlisch
40afabedec * src/plugins/NavWebPage.py: Optimize separation of multiple families; Print out attributes; Print out family note
svn: r4952
2005-07-18 18:34:44 +00:00
Don Allingham
5ec331017e * src/ReportUtils.py: fix private name generation
* src/plugins/NavWebPage.py: Add family photos to the gallery,
handle privacy better and filter out private people from the
internal lists


svn: r4951
2005-07-17 22:42:05 +00:00
Julio Sánchez
2b2fea544a * src/Sort.py: Make sure sorting by birthdate handles correctly
missing dates
* src/WriteGedcom.py: Export source references at the global person
level


svn: r4950
2005-07-17 20:49:53 +00:00
Don Allingham
01eebf5e77 * src/data/main*.css: fix <sup> spacing in CSS files
* src/plugins/NavWebPage.py: split parents and families
* src/ReportUtils.py: save note information


svn: r4949
2005-07-17 04:36:24 +00:00
Dionysios
c262f04a37 updated translation
svn: r4948
2005-07-16 17:52:08 +00:00
Martin Hawlisch
2600b51ab1 * src/plugins/Makefile.am: Install NavWebPage.py plugin
* src/data/Makefile.am: Install stylesheets for NavWebPage


svn: r4947
2005-07-16 17:08:24 +00:00
Don Allingham
4b1b6d755f Narrative changes
svn: r4946
2005-07-15 21:58:29 +00:00
Alex Roitman
2eb5224470 * src/data/main4.css: Typos.
svn: r4945
2005-07-15 21:34:23 +00:00
Alex Roitman
2b69463196 * src/plugins/NavWebPage.py: Use researcher info from Gramps
session, not from the database.


svn: r4944
2005-07-15 21:31:09 +00:00
Martin Hawlisch
4a5d7553c5 * src/plugins/NavWebPage.py: Optimize page titles
svn: r4943
2005-07-15 20:09:56 +00:00
Martin Hawlisch
f0807f87d4 * src/plugins/NavWebPage.py: Add plugin version to header
svn: r4942
2005-07-15 18:39:07 +00:00
Martin Hawlisch
dfcc7e0efb * src/GenericFilter.py: Only load rules that provide the required number of arguments.
svn: r4941
2005-07-15 17:02:40 +00:00
Martin Hawlisch
16858c1f4a * src/plugins/NavWebPage.py: HTML validation fixes; Show all names of a person; Show all images of person/source and place
svn: r4940
2005-07-15 09:21:22 +00:00
Martin Hawlisch
e36ae4d665 * src/plugins/NavWebPage.py: More HTML validation fixes
svn: r4939
2005-07-15 07:56:22 +00:00
Martin Hawlisch
d25f491654 * src/plugin/NavWebPage.py: HTML validation fixes
svn: r4938
2005-07-15 07:47:36 +00:00
Martin Hawlisch
add5f946d9 * src/Utils.py (find_mime_type_pixbuf): Dont segfault with note only object
* src/SelectObject.py (on_select_row): Dont segfault with note only object


svn: r4937
2005-07-15 05:44:06 +00:00
Martin Hawlisch
c31363c02b * src/plugins/NavWebPage.py: Avoid some segfaults
svn: r4936
2005-07-15 05:32:31 +00:00
Don Allingham
0116f4040d in HTML, source and place references, individual source pges.
svn: r4935
2005-07-14 23:25:19 +00:00
Martin Hawlisch
899599abdc small correction
svn: r4934
2005-07-14 21:38:03 +00:00
Don Allingham
04765281a4 * src/plugins/NavWebPage.py: gallery/media object enhancements, div/span fixes
in HTML.


svn: r4933
2005-07-14 21:29:36 +00:00
Martin Hawlisch
6af4fc542d * src/plugins/NavWebPage.py: Display URL list of Individuals and Places
svn: r4932
2005-07-14 21:14:16 +00:00
Martin Hawlisch
17ed93108d * src/plugins/NavWebPage.py: Added display_note_object and display_first_image_as_thumbnail to BasePage; PlacePage and IndividualPage use this now.
svn: r4931
2005-07-14 20:50:16 +00:00
Don Allingham
bb956d781a experiment
svn: r4930
2005-07-14 19:33:20 +00:00
Don Allingham
fc8a94c7aa * src/plugins/NavWebPage.py: wrap content with div, fix encoding problems
svn: r4929
2005-07-14 17:49:48 +00:00
Don Allingham
41b9c54f0a * src/data/main*.css: added stylesheets for web page generator
* src/data/Makefile.am: add stylesheets


svn: r4928
2005-07-14 04:21:57 +00:00
Don Allingham
b36133c056 more enhancements
svn: r4927
2005-07-13 22:21:03 +00:00
Don Allingham
b4950dab80 new updates
svn: r4926
2005-07-13 21:30:15 +00:00
Alex Roitman
cc38e20f1d * src/GenericFilter.py: Proper test for place in event-based
filters; (Rule.set_list): Add assertion to have the correct number
of arguments; (various): stop testing for number of arguments.
* src/AddSpouse.py (LikelyFilter): Add labels to the filter.
* src/ChooseParents.py (LikelyFilter): Add labels to the filter.
* src/SelectiChild.py (LikelyFilter): Add labesl to the filter.
* src/gramps_main.py (init_filters): Instantiate filters with
corrent number of arguments.


svn: r4925
2005-07-13 19:04:29 +00:00
Frode Jemtland
3e68afe934 Verified the rest of the fuzzy strings.
Started to translate tips. Still missing 29 tips.


svn: r4924
2005-07-13 18:22:23 +00:00
Don Allingham
45c96bbce5 navwebpage fixes
svn: r4923
2005-07-13 17:01:58 +00:00
Alex Roitman
996bc358ae * src/GenericFilter.py: Proper test for place in event-based filters.
svn: r4922
2005-07-13 15:13:09 +00:00
Don Allingham
1b18e85c18 * src/GrampsInMemDB.py: add get_event_cursor
* src/GrampsDbBase.py: add get_event_cursor


svn: r4921
2005-07-13 12:14:17 +00:00
Don Allingham
4dbb41f834 * src/plugins/NavWebPage.py: handle links properly
* src/plugins/Makefile.am: export Rebuild.py


svn: r4920
2005-07-13 04:22:28 +00:00
Don Allingham
5fa3fb004e file encodings
svn: r4919
2005-07-12 22:55:29 +00:00
Don Allingham
916a73ad0c * src/GrampsBSDDB.py: add repair_secondary task to rebuild
secondary indices
* src/GrampsDbBase.py: add repair_secondary task
* src/plugins/Check.py: move to "Repair Database" category
* src/plugins/Rebuild.py: new plugin to repair secondary indices


svn: r4918
2005-07-12 04:08:37 +00:00
Alex Roitman
051eaecfc3 * src/plugins/GraphViz.py (GraphViz.__init__): Define nominal and
reduced margins; (write_report): Use nominal margin to compute
virtual size and reduced margin to write the margin size;
(write_header): Write reduced margin into header.


svn: r4917
2005-07-11 21:56:47 +00:00
Don Allingham
58097e1a5c * src/plugins/NavWebPage.py: enhancements, almost usable
* src/Report.py: fixed spacing


svn: r4916
2005-07-11 03:54:31 +00:00
Alex Roitman
de14b57b81 * src/ReadXML.py (stop_ref): Properly read id-based witness
reference created by old gramps.


svn: r4915
2005-07-10 05:15:09 +00:00
Julio Sánchez
830356f1fd * src/docgen/OpenOfficeDoc.py: Make the output conform to the DTDs
for OpenOffice.org XML


svn: r4914
2005-07-08 23:13:29 +00:00
Alex Roitman
7ee891943f * src/ChooseParents.py (__init__): Handle events with empty dates.
svn: r4913
2005-07-08 22:37:23 +00:00
Alex Roitman
0da65704b9 * src/plugins/GraphViz.py: Use single margin value, properly use
cm for margin, properly use 2 digits after converting to inches.


svn: r4912
2005-07-08 22:14:07 +00:00
Frode Jemtland
dc3bfa1a15 Verified that the fuzzy translations are "correct", and translated untranslated up to string 900.
These strings are all marked fuzzy, because they need washing......


svn: r4910
2005-07-07 14:31:11 +00:00
Julio Sánchez
8c2ce165d2 * src/docgen/OpenOfficeDoc.py: Compute correctly the draw:viewBox to
please some versions of OpenOffice.org


svn: r4909
2005-07-07 05:28:46 +00:00
Frode Jemtland
b068587c78 Changed the language-team string. A discussion on the norwegian translations mailing list, told me that this was a more correct string.
svn: r4908
2005-07-06 15:04:21 +00:00
Alex Roitman
07bc49c44b * Release: Version 2.0.5 "It's certainly uncontaminated by cheese"
released.
* configure.in: Bump up the version number.


svn: r4907
2005-07-06 03:49:11 +00:00
Alex Roitman
c21c0a2328 * NEWS: Update.
* configure.in: Bump up the release number.


svn: r4905
2005-07-06 03:16:57 +00:00
Martin Hawlisch
d45d5a0afe * src/gramps_main.py: Add new filters
svn: r4904
2005-07-05 21:21:01 +00:00
Martin Hawlisch
47922e7be9 * src/PeopleModel.py (calculate_data): Fix invert of search result
* src/Date.py (is_equal): Only compare text value for TEXTONLY dates.
* src/GenericFilter.py: Add new filters to search for notes


svn: r4903
2005-07-05 21:15:05 +00:00
Alex Roitman
139ae5c305 * src/EditPerson.py (__init__): Refresh person object from handle,
if handle exists.
* src/Marriage.py (__init__): Refresh family object from handle,
if handle exists.


svn: r4902
2005-07-05 14:42:51 +00:00
Alex Roitman
5de8d6b2ec * src/system_filters.xml: Remove testing contents.
svn: r4901
2005-07-05 14:21:21 +00:00
Alex Roitman
2bdf0bb220 * src/plugins/GraphViz.py (dump_person): Correctly test for birth
relations.


svn: r4900
2005-07-03 21:12:43 +00:00
Eero Tamminen
3469687010 updated fi.po to v2.0.4 template.po changes
svn: r4899
2005-07-02 21:30:37 +00:00
Alex Roitman
8f392ded30 * configure.in: Bump up the version number.
svn: r4898
2005-07-02 21:15:53 +00:00
Eero Tamminen
9bf1fb62b5 update from new template
svn: r4897
2005-07-02 20:47:52 +00:00
Alex Roitman
5c9df14f97 * src/RelLib.py (Family.get_handle_referents): Typo;
(Event.get_handle_referents): Work around possible None for
witness.
* src/plugins/Check.py (check_source_references): Add checking
routine to detect and remove dangling source references.


svn: r4896
2005-07-02 20:16:26 +00:00
Alex Roitman
6469396669 * src/NEWS: Update.
svn: r4895
2005-07-02 04:18:10 +00:00
Alex Roitman
3bf07bf96f * src/plugins/WebPage.py (write_sibling): Apply patch from bug #
1230430 at sf.net with minor tweaks.


svn: r4894
2005-07-01 22:30:32 +00:00
Don Allingham
8179e66d0b * src/GrampsDbBase.py: don't count_person for gender stats on
add_person, since already done it commit_person


svn: r4893
2005-06-29 21:32:19 +00:00
Martin Hawlisch
b34f6acb50 * src/plugins/DumpGenderStats.py: New plugin for debugging
svn: r4892
2005-06-29 21:24:31 +00:00
Don Allingham
f740ba4cf0 * src/GrampsBSDDB.py: provide an upgrade task to rebuild gender stats
svn: r4891
2005-06-29 20:24:42 +00:00
Don Allingham
f1b13b49c5 * src/GrampsDbBase.py: move gender stats handling to the commit_person
task, instead of trying to handle it in the Person() class
* src/RelLib.py: removal of genderstats handling


svn: r4890
2005-06-29 15:23:15 +00:00
Matthieu Pupate
5191d6bd11 Updated French translation
svn: r4889
2005-06-28 19:50:10 +00:00
Don Allingham
2464adf714 GEDCOM place fix, EditPerson date parsing
svn: r4888
2005-06-28 15:39:39 +00:00
Don Allingham
89f33a6be4 * src/PeopleView.py: fix on_get_iter on delete person
svn: r4886
2005-06-28 03:35:24 +00:00
Matthieu Pupate
7312561e7c Updated with template
svn: r4885
2005-06-27 19:00:42 +00:00
Julio Sánchez
edf6e80023 * src/GenericFilter.py: Do not attempt to translate user filters,
fix a problem with filter names that contain non-ASCII characters


svn: r4884
2005-06-27 15:34:36 +00:00
Julio Sánchez
2eedacefd2 * src/po/es.po: Translation fixes
svn: r4883
2005-06-27 14:29:44 +00:00
Don Allingham
dea68cb38d * src/ImageSelect.py: allow the path variable to be editable
* src/gramps.glade: allow the path variable to be editable


svn: r4882
2005-06-27 03:45:05 +00:00
Don Allingham
de379adca1 * src/PeopleView.py: partial implementation of the alexrithm to
select a new person after a person has been deleted


svn: r4881
2005-06-27 02:46:38 +00:00
Don Allingham
a0daefea9a * src/const.py.in: fix confidence display
svn: r4880
2005-06-26 22:43:05 +00:00
Don Allingham
53cc3c990d * src/ReadXML.py: prevent duplicate place names on import
* src/ReadGedcom.py: prevent duplicate place names on import


svn: r4879
2005-06-26 22:31:25 +00:00
Julio Sánchez
ccfd1e57b4 * src/GenericFilter.py: Fix uninitialized ancestor_cache in
HasCommonAncestorWithFilterMatch, fix or-ing filters


svn: r4878
2005-06-26 20:55:49 +00:00
Frode Jemtland
daf98ee2c7 Updated .po files with new template file. Verifyed the fuzzy translations up to string 300.
svn: r4874
2005-06-24 21:35:14 +00:00
Martin Hawlisch
871c8c4255 * src/PeopleView.py (build_people_context_menu): Workaround to get a proper german translation.
* srx/po/de.po: Updated


svn: r4873
2005-06-24 21:32:43 +00:00
Alex Roitman
ca2571daa7 * src/po/fr.po: Add missing format line parameters.
svn: r4872
2005-06-24 14:35:14 +00:00
Alex Roitman
63a12463be * src/po/ru.po: Update for 2.0.4.
svn: r4871
2005-06-24 04:48:37 +00:00
Alex Roitman
6cc7bd3aac * src/RelLib.py (SourceNote.replace_source_references,
MediaBase.replace_media_references,): Fix problem with replacing
multiple occurrences.


svn: r4870
2005-06-23 21:50:45 +00:00
Don Allingham
dfd0aea13c GEDCOM date fix
svn: r4869
2005-06-23 21:28:57 +00:00
Alex Roitman
629390c077 * src/po/template.po: Update for 2.0.4.
svn: r4868
2005-06-23 19:15:49 +00:00
Alex Roitman
5df8d1f8c8 Update
svn: r4867
2005-06-23 19:03:56 +00:00
Alex Roitman
44d7865a5e * src/Relationship.py (is_spouse): Use context.
* src/get_strings: Add "__" to default keywords.


svn: r4866
2005-06-23 16:29:06 +00:00
Julio Sánchez
8187ddc350 * src/WriteGedcom.py: Fix family source references, fix spurious
PLAC subrecords, respect more privacy settings
* src/po/es.po: Translation fixes


svn: r4865
2005-06-23 16:27:47 +00:00
Alex Roitman
5553c74092 * src/Relationship.py (is_spouse): return translated spouse name,
based on gender and family relation.
* src/plugins/rel_*.py (get_relationship): use new spouse scheme.


svn: r4864
2005-06-23 03:09:57 +00:00
Don Allingham
e7fbc6c85e * src/FamilyView.py: fix deleting of spouse and children
svn: r4863
2005-06-22 22:42:10 +00:00
Alex Roitman
ee876d287a * src/TarFile.py (extract_files): insert missing 'replace' call.
svn: r4862
2005-06-22 20:41:08 +00:00
Alex Roitman
2800377011 * src/FamilyView.py (remove_child_clicked): Prevent signal race.
* NEWS: Update.


svn: r4861
2005-06-22 20:09:59 +00:00
Don Allingham
e87f58a584 * src/PlaceView.py: fix sorting
* src/SourceView.py: fix sorting


svn: r4860
2005-06-22 17:58:13 +00:00
Alex Roitman
4f9a905a15 * src/GenericFilter.py (IsDescendantOfFilterMatch.__init__):
Remove unneeded method.


svn: r4859
2005-06-22 15:12:20 +00:00
Don Allingham
f15be4cc33 filter optimization
svn: r4858
2005-06-21 20:51:57 +00:00
Alex Roitman
0df9e11ac2 * src/Report.py (CommandLineReport.parse_option_str): Fix indentation.
svn: r4857
2005-06-21 13:54:03 +00:00
Alex Roitman
cdd196ac43 * src/po/fr.po: Remove extra "%" signs.
svn: r4856
2005-06-21 12:26:49 +00:00
Martin Hawlisch
5676035276 * src/GenericFilter.py: Resolve handle-person mixup +many other bugfixes
svn: r4855
2005-06-21 09:50:18 +00:00
Don Allingham
6730d35232 * src/AddSpouse.py: accept Person instead of handle
* src/ChooseParents.py: accept Person instead of handle
* src/GenericFilter.py: use single pass through database, filters
accept Person objects instead of handles
* src/PeopleModel.py: don't precalculate handle list
* src/RelLib.py: allow person object to be initialized with
serialized data
* src/SelectChild.py: accept Person instead of handle

* src/SelectChild.py (LikelyFilter.prepare,LikelyFilter.apply):


svn: r4854
2005-06-21 04:04:44 +00:00
Alex Roitman
b33fcb04a9 Update
svn: r4853
2005-06-21 00:59:28 +00:00
Don Allingham
8c8fa8ab8d fixed missing "s"
svn: r4851
2005-06-20 16:05:27 +00:00
Alex Roitman
f768299812 * src/SelectChildpy (LikelyFilter.prepare,LikelyFilter.apply):
Handle absent birth of a parent.
* src/AddSpouse.py (LikelyFilter.prepare,LikelyFilter.apply):
Handle absent birth of a parent; correctly use gender.


svn: r4850
2005-06-20 13:34:04 +00:00
Don Allingham
eb3331c178 * src/AddSpouse.py: display idle cursor, build better likely filter
svn: r4849
2005-06-20 03:34:55 +00:00
Don Allingham
7969779fde * src/AddSpouse.py: display idle cursor
* src/SelectChild.py: display idle cursor


svn: r4848
2005-06-19 19:30:25 +00:00
Don Allingham
765e5cec77 * src/ChooseParents.y: display "Loading..." while loading lists
svn: r4847
2005-06-19 16:27:11 +00:00
Don Allingham
3177cfce76 typo fix
svn: r4846
2005-06-19 04:58:17 +00:00
Don Allingham
b6cfa20860 * src/ChooseParents.py: build custom filter rules to speed up
loading the data, provide watch cursor to provide feedback to
the user.
* src/Date.py: provide sort data recalculation function


svn: r4845
2005-06-19 03:36:30 +00:00
Eero Tamminen
aded196d64 changed entries to spinbuttons
svn: r4844
2005-06-18 20:50:19 +00:00
Eero Tamminen
7a3945eaa5 really minor improvement
svn: r4843
2005-06-18 20:13:52 +00:00
Don Allingham
295b7d1a2b * src/ChooseParents.py: optimize the add of a person to the models
svn: r4842
2005-06-18 03:55:12 +00:00
Don Allingham
74f29ec489 * src/EditPlace.py: check to make sure a duplicate title is not
entered


svn: r4841
2005-06-18 03:22:26 +00:00
Alex Roitman
1d78512f16 * src/plugins/WebPage.py (write_report): Test for empty dir_name.
svn: r4840
2005-06-17 19:40:42 +00:00
Alex Roitman
7772b6f201 update
svn: r4839
2005-06-17 19:39:07 +00:00
Alex Roitman
fdc3979278 * src/WriteGedcom.py: Pass gramps_id to filter rules.
* src/plugins/ExportVCalendar.py: Pass gramps_id to filter rules.
* src/plugins/ExportVCard.py: Pass gramps_id to filter rules.
* src/plugins/GraphViz.py: Pass gramps_id to filter rules.
* src/plugins/IndivComplete.py: Pass gramps_id to filter rules.
* src/plugins/NavWebPage.py: Pass gramps_id to filter rules.
* src/plugins/StatisticsChart.py: Pass gramps_id to filter rules.
* src/plugins/TimeLine.py: Pass gramps_id to filter rules.
* src/plugins/WebPage.py: Pass gramps_id to filter rules.
* src/plugins/WriteFtree.py: Pass gramps_id to filter rules.
* src/plugins/WriteGeneWeb.py: Pass gramps_id to filter rules.


svn: r4838
2005-06-17 17:32:54 +00:00
Alex Roitman
880c3e7751 * src/WriteGedcom.py (write_sources): Pass handle to the id
creator; (write_person): write person sources; (sid): return
gramps_id; (write_families): write family sources.


svn: r4837
2005-06-17 16:58:26 +00:00
Martin Hawlisch
3b925c2653 * src/gramps_main.py (on_merge_activate,on_fast_merge_activate): only merge if exactly two persons have been selected
svn: r4833
2005-06-16 10:44:25 +00:00
Alex Roitman
369fcf562e * src/PedView.py (load_canvas): Set anchor_txt to None if no
person is selected; (set_anchor,remove_anchor): Only set anchor
text if anchor_txt evaluates as True.


svn: r4829
2005-06-16 00:30:07 +00:00
Martin Hawlisch
197a013f2e typo
svn: r4828
2005-06-15 15:27:10 +00:00
Martin Hawlisch
6354b8fb15 * src/po/de.po: Applied patch from Anton Huber <anton_huber@gmx.de>
svn: r4827
2005-06-15 14:28:13 +00:00
Alex Roitman
3ac758f702 * src/plugins/WriteGeneweb.py (GeneWebWriterOptionBox.get_option_box):
Build person-centered filters only if a person is selected.
* src/plugins/WriteFtree.py (FtreeWriterOptionBox.get_option_box):
Build person-centered filters only if a person is selected.


svn: r4826
2005-06-15 13:46:11 +00:00
Alex Roitman
dfc376c640 Update
svn: r4825
2005-06-15 13:45:24 +00:00
Alex Roitman
d35d33b8f2 * src/WriteGedcom.py (GedcomWriterOptionBox.__init__): Build
person-centered filters only if a person is selected.


svn: r4824
2005-06-15 13:21:02 +00:00
Martin Hawlisch
6ecb9eeab9 * src/po/de.po: Applied patch from Jens Seidel <jensseidel@users.sf.net>
svn: r4823
2005-06-15 13:12:07 +00:00
Alex Roitman
5536819783 * src/docgen/AbiWord2Doc.py: Only embed one data chunk per image
file; add empty paragraph if the image is not in paragraph already.


svn: r4820
2005-06-10 21:48:48 +00:00
Martin Hawlisch
d8d03e335c * src/plugins/NavWebPage.py: Marked strings for translation; Dont crash if media file does not exist; Generate pages for every place; Build list of used sources
svn: r4819
2005-06-10 14:03:27 +00:00
Martin Hawlisch
dee75c1f08 * src/ReportUtils.py (place_name): Really return place name
svn: r4818
2005-06-10 13:14:37 +00:00
Martin Hawlisch
012cad6eb5 * src/plugins/Makefile.am: Install vCal and vCard plugins
svn: r4817
2005-06-09 15:06:52 +00:00
Martin Hawlisch
8b10dc0c42 * src/EditPerson (__init__): Make gender guessing work again
svn: r4811
2005-06-08 21:07:40 +00:00
Alex Roitman
daa4475bc8 * src/plugins/rel_fr.py: Add more levels; provide fallback phrases.
svn: r4810
2005-06-08 19:01:26 +00:00
Alex Roitman
4f15cfc10f * src/FamilyView.py (north_american,latin_american,icelandic): Fix
object/handle mixups.


svn: r4799
2005-06-07 16:41:50 +00:00
Alex Roitman
e47701ab02 * src/Utils.py (strip_context): Add function.
svn: r4795
2005-06-06 05:03:48 +00:00
Eero Tamminen
cf7ed2c8f9 finished translation for 2.0.2 (late)
svn: r4794
2005-06-05 19:44:43 +00:00
Alex Roitman
fd9e95aab0 * configure.in: Bump up the version number.
* Release: Version 2.0.3 "Mynd you, m����se bites Kan be pretty
nasti..." released.


svn: r4792
2005-06-05 17:22:40 +00:00
Don Allingham
b7658288b6 * src/DateHandler.py: fixed initialization of parser class
svn: r4790
2005-06-05 06:01:33 +00:00
Alex Roitman
13a51cf2c7 * configure.in: Bump up the version number.
svn: r4789
2005-06-05 05:19:43 +00:00
286 changed files with 181015 additions and 70853 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -22,14 +22,17 @@ But be careful if you're using the non-default options or would like
to install without being root.
The latter is possible, but you should supply additional arguments to
autogen or configrue:
--with-gconf-source=xml::$HOME/.gconf --with-mime-dir=$HOME/.local/share
autogen or configure:
--with-gconf-source=xml::$HOME/.gconf
--with-gconf-schema-file-dir=$HOME
--with-mime-dir=$HOME/.local/share/mime
Most likely, such local install will also need some prefix with write
permissions for you:
--prefix=$HOME/my_gramps_path
Whether you're doing local install or regular install, YOU MUST INSTALL
GCONF SCHEMAS AND MIME TYPES. YOU HAVE BEEN WARNED!
Whether you're doing local install or regular install,
YOU MUST INSTALL GCONF SCHEMAS AND MIME TYPES.
YOU HAVE BEEN WARNED!
Packager's issues

View File

@@ -1,3 +1,76 @@
Version 2.0.10 -- the "Holy Hand Grenade of Antioch" release
* Date handler for Lithuanian language (Arturas Sleinius).
* New Calendar graphical report (Doug Blank).
* Multiple tool fixes.
* GEDCOM import and export improvements.
* Proper rebuilding of secondary indices.
* Open Document Format support in reports (Serge Noiraud, Brian Matherly).
* Multiple report fixes.
* Fix for low-level duplicate records.
* User Manual updates.
* An insane number of bug fixes.
Version 2.0.9 -- the "Nobody expects the Spanish inquisition!" release
* Incremental interface improvements.
* Automated testing added, based on the CLI functionality.
* Smaller number of supported reports.
* Report rendering improvements in OOo, PDF, gnome-print, PS, HTML,
abw, and kwd formats.
* New filter rules: Ancestor of bookmarked/default person
less than N generations away (Wayne Bergeron).
* Numerous web generator improvements.
* GEDCOM import supports forward-referencing named notes.
* User manual updates.
* New Checkpoint tool plugin.
* Support for running tools from command line.
* Persistent options for tools, as applicable.
* Export patronymic names into GEDCOM.
* Updates for Swedish translation and date localization (Stefan Bjork).
* Fully formalized XML format (DTD and RelaxNG schema).
* New plugin documenting command line reference.
* Memory leak in libbglade worked around.
* Limitation of 31 generations in reports removed.
* Improved responsiveness when working with large databases.
* Select from recent files on startup.
* Better support for unicode filenames
* Better support for media objects in GEDCOM output
* Numerous bug fixes.
Version 2.0.8 -- the "Romani ite domum" release
Version 2.0.7 -- the "Romanes eunt domus" release
* Addition of a spelling checker if python-gnome-extras is installed
* Thumbnails are generated for objects other than images if an appropriate
thumbnailer is found the the GCONF database.
* Enhances Descendant Chart report that allows better control over the
formatting of the report
* Added support for new %n format in addition to $n, which will cause the
line to be removed if a text match is not made.
* Bug fixes, bug fixes, bug fixes, and bug fixes.
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<EFBFBD>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
the Check and Repair tool.
* Bug fixes.
Version 2.0.4 -- the "That's enough music for now, lads." release
* Speedups for "select" dialogs in Family View.
* Filters are working in reports again.
* vCal and vCard plugins are back.
* Gender guessing is back for new people.
* GEDCOM export fixes.
* Other bug fixes.
Version 2.0.3 -- the "Mynd you, møøse bites Kan be pretty nasti..." release
* Fixed Date handler bug that would not allow dates to be updated.
Version 2.0.2 -- the "Little fermented curd will do the trick" release
* Updated German translation (Anton Huber).
* Usability improvements for large databases.

View File

@@ -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

View File

@@ -4,11 +4,12 @@ dnl Process this file with autoconf to produce a configure script.
dnl May need to run automake && aclocal first
AC_PREREQ(2.57)
AC_INIT(gramps, 2.0.2, gramps-bugs@lists.sourceforge.net)
AC_INIT(gramps, 2.0.11, gramps-bugs@lists.sourceforge.net)
AC_CONFIG_SRCDIR(src/gramps.py)
AM_INIT_AUTOMAKE(1.6.3)
RELEASE=0.CVS$(head -c 10 ${srcdir}/ChangeLog | tr -d '-')
dnl RELEASE=1
dnl RELEASE=0.RC1
VERSIONSTRING=$VERSION
if test x"$RELEASE" != "x"
@@ -16,6 +17,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
@@ -35,7 +42,7 @@ if test x$ICONV = xno; then
AC_MSG_ERROR(Couldn't find iconv program.)
fi
LANGUAGES="hu zh_CN cs da de es fr it nb nl no pl pt_BR ro ru sv eo fi"
LANGUAGES="hu zh_CN cs da de es fr it nb nl no pl pt_BR ro ru sv eo fi lt"
AC_SUBST(LANGUAGES)
DISTLANGS=
@@ -252,8 +259,11 @@ src/data/Makefile
src/data/templates/Makefile
src/po/Makefile
doc/Makefile
doc/man/Makefile
doc/man/fr/Makefile
doc/gramps-manual/Makefile
doc/gramps-manual/C/Makefile
doc/gramps-manual/fr/Makefile
example/Makefile
example/gramps/Makefile
gramps.spec

View File

@@ -1,13 +1,4 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = gramps-manual
man_IN_FILES = gramps.1.in
man_MANS = $(man_IN_FILES:.1.in=.1)
EXTRA_DIST = $(man_MANS) $(man_IN_FILES) xmldocs.make omf.make
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=doc/$@ $(SHELL) ./config.status
CLEANFILES=$(man_MANS)
SUBDIRS = gramps-manual man
EXTRA_DIST = xmldocs.make omf.make

View File

@@ -12,6 +12,7 @@ entities = legal.xml\
keybind.xml\
filtref.xml\
cmdline.xml\
cmdplug.xml\
bugs.xml\
authors.xml
include $(top_srcdir)/doc/xmldocs.make

View File

@@ -24,7 +24,7 @@
<title>About GRAMPS</title>
<para> &app; was written by Donald N. Allingham
(<email>dallingham@users.sourceforge.net</email>).</para>
(<email>don@gramps-project.org</email>).</para>
<para>
The somewhat incomplete list of contributors includes (in alphabetical order):
@@ -50,6 +50,7 @@
<listitem><para>Steve Hall</para></listitem>
<listitem><para>David R. Hampton</para></listitem>
<listitem><para>Martin Hawlisch</para></listitem>
<listitem><para>Anton Huber</para></listitem>
<listitem><para>Frode Jemtland</para></listitem>
<listitem><para>Greg Kuperberg</para></listitem>
<listitem><para>Arkadiusz Lipiec</para></listitem>
@@ -63,6 +64,7 @@
<listitem><para>Guillaume Pratte</para></listitem>
<listitem><para>Laurent Protois</para></listitem>
<listitem><para>Matthieu Pupat</para></listitem>
<listitem><para>Trevor Rhodes</para></listitem>
<listitem><para>Alexander Roitman</para></listitem>
<listitem><para>Jason Salaz</para></listitem>
<listitem><para>Julio Sanchez</para></listitem>

View File

@@ -24,11 +24,6 @@
<title>Known Bugs and Limitations</title>
<para>The bugs are tracked through the
<ulink url="http://sourceforge.net/tracker/?group_id=25770&amp;atid=385137" type="http">
sourceforge.net tracking system</ulink>.
</para>
<para>The known limitations include the BSDDB performance issues related
to caching and the memory size. As long as the BSDDB cache fits completely
into the available memory on the system, the performance should be

View File

@@ -1,7 +1,7 @@
<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-2005 Alexander Roitman
@@ -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.
@@ -185,7 +175,7 @@
-i <filename>file2</filename>
-i <filename>file1</filename>
</command>
might produce different gramps IDs in the resulting database.
might produce different GRAMPS IDs in the resulting database.
</para></sect2>
<sect2 id="cmdline-opt-export"><title>Export options</title>
@@ -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>
is actually the name of directory the gramps database will be written
into. For grdb, gedcom, wft, geneweb,
the <filename>filename</filename>. For iso format,
the <filename>filename</filename>
is actually the name of directory the &app; database will be written
into. For grdb, gramps-xml, gedcom, wft, geneweb,
and gramps-pkg, the <filename>filename</filename>
is the name of the resulting file.
</para>
@@ -264,7 +254,7 @@
and values.
</para></listitem>
<listitem><para>Withing a pair, option name and value must be
<listitem><para>Within a pair, option name and value must be
separated by the equal sign.
</para></listitem>
@@ -329,6 +319,7 @@
</sect1>
&cmdplug;
<sect1 id="cmdline-operation">
<title>Operation</title>
@@ -349,7 +340,7 @@
the further command line parameters.
</para>
<note><para>Only one file can be opened in a single invokation
<note><para>Only one file can be opened in a single invocation
of &app;. If you need to get data from multiple sources, use
the importing options by using <command>-i</command> flag.
</para></note>
@@ -373,14 +364,14 @@
<listitem>
<para>If no <command>-O</command> or <command>-i</command>
option is given, gramps will launch
option is given, &app; will launch
its main window and start the usual interactive session with the empty
database, since there is no data to process, anyway.
</para></listitem>
<listitem>
<para>If no <command>-o</command> or <command>-a</command> options
are given, gramps will launch its main window and start the usual
are given, &app; will launch its main window and start the usual
interactive session with the database resulted from opening
and all imports (if any). This database resides in the
<filename>import_db.grdb</filename> file under the
@@ -389,7 +380,7 @@
<listitem>
<para>Any errors encountered during import, export, or action, will
be either dumped to stdout (if these are exceptions handled by gramps)
be either dumped to stdout (if these are exceptions handled by &app;)
or or to stderr (if these are not handled). Use usual shell redirections
of stdout and stderr to save messages and errors in files.
</para></listitem>
@@ -411,8 +402,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 +415,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>
@@ -437,11 +428,11 @@
<varlistentry>
<term>To record the database resulting from all imports, supply
<command>-o</command> flag (use <command>-f</command>
if the filename does not allow gramps to guess the format):</term>
if the filename does not allow &app; to guess the format):</term>
<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 +445,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>
&gt;<filename>outfile</filename>
@@ -463,13 +454,13 @@
</varlistentry>
<varlistentry>
<term>To import three databases and start interactive gramps
<term>To import three databases and start interactive &app;
session with the result:</term>
<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>

File diff suppressed because it is too large Load Diff

View File

@@ -94,7 +94,7 @@
<tip><para>The ID prefixes use formatting conventions common for
C, Python, and other programming languages. For example, the %04d
expands to an integer, prepended with zeros to have the total
width of founr digits. If you would like IDs to be 1, 2, 3, etc,
width of four digits. If you would like IDs to be 1, 2, 3, etc,
simply set the formatting parameter to %d.
</para></tip>
</listitem>
@@ -255,10 +255,10 @@
<varlistentry><term>Adjusting viewing controls</term>
<listitem>Whether the toolbar, the sidebar, or the filter (People View
<listitem><para>Whether the toolbar, the sidebar, or the filter (People View
only) are displayed in the main window is adjusted through
the <guimenu>View</guimenu> menu.
</listitem>
</para></listitem>
</varlistentry>
</variablelist>

View File

@@ -1,5 +1,3 @@
<appendix id="faq">
<!--
User Manual for Gramps - a GTK+/GNOME based genealogy program
@@ -22,356 +20,447 @@
<!-- $Id$ -->
<title>Frequently Asked Questions</title>
<para>This appendix contains the list of questions that frequently come
up in mailing list discussions and forums. This list is by no means
complete. If you would like to add questions/answers to this list,
please email your suggestions to <ulink url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para>
<variablelist>
<varlistentry><term>What is &app;?</term>
<listitem><para> &app; is the Genealogical Research and Analysis
Management Program System. In other words, it is a personal genealogy
program letting you store, edit, and research genealogical data using
the powers of your computer.
</para></listitem>
</varlistentry>
<varlistentry><term>Where do I get it and how much does it cost?</term>
<listitem><para>
&app; can be downloaded from <ulink url="http://sf.net/projects/gramps"
type="http">http://sf.net/projects/gramps</ulink> at no charge.
&app; is an Open Source project covered by the GNU General Public License.
You have full access to the source code and are allowed to distribute the
program and source code freely.
</para></listitem>
</varlistentry>
<varlistentry><term>Does it work with Windows (tm)?</term>
<listitem><para>
No. &app; uses the GTK and GNOME libraries. While the GTK libraries
have been ported to Windows, the GNOME libraries have not.
This, however, may change in the future.
</para></listitem>
</varlistentry>
<varlistentry><term>Does it work with the Mac?</term>
<listitem><para>
<ulink url="http://fink.sourceforge.net"
type="http">The Fink project</ulink> has ported
<ulink url="http://fink.sourceforge.net/pdb/package.php/gramps"
type="http">some older versions</ulink> of
&app; to OSX (tm). The Mac OSX port is not directly supported by
the &app; project, primarily because none of the &app; developers
have access to Mac OSX and because OSX is not Free Software.</para>
<para>This version of &app; (&appversion;) does not appear to have been
ported by the Fink project. Please contact the Fink project for more
information.
</para></listitem>
</varlistentry>
<varlistentry><term>Does it work with KDE?</term>
<listitem><para>
Yes, as long as the required GNOME libraries are installed.
</para></listitem>
</varlistentry>
<varlistentry><term>Do I really have to have GNOME installed?</term>
<listitem><para> Yes, but you do not have to be running the GNOME desktop.
</para></listitem>
</varlistentry>
<varlistentry><term>What version of GNOME do I need?</term>
<listitem><para>
This version of gramps requires GNOME 2.8.0 or higher.
Previous versions in 1.0.x series required GNOME 2.0.
</para></listitem>
</varlistentry>
<varlistentry><term>Is &app; compatible with
other genealogical software (GenApps)?</term>
<listitem><para>
&app; makes every effort to maintain compatibility with GEDCOM, the general
standard of recording genealogical information. We have import and export
filters that enable &app; to read and write GEDCOM files. </para>
<para>
It is important to understand that the GEDCOM standard is poorly implemented --
virtually every genealogical software has its own "flavor" of GEDCOM. As we
learn about new flavor, the import/export filters can be created very quickly.
However, finding out about the unknown flavors requires user feedback.
Please feel free to inform us about any GEDCOM flavor not supported by &app;,
and we will do our best to support it!
</para></listitem>
</varlistentry>
<varlistentry><term>Can &app; read files created by GenApp X?</term>
<listitem><para> See above.
</para></listitem>
</varlistentry>
<varlistentry><term>Can &app; write files readable by GenApp X?</term>
<listitem><para> See above.
</para></listitem>
</varlistentry>
<varlistentry><term>Can &app; print a genealogical tree for my family?</term>
<listitem><para>
Yes. Different people have different ideas of what a genealogical tree is.
Some think of it as a chart going from the distant ancestor and listing
all his/her descendants and their families. Others think it should be a
chart going from the person back in time, listing the ancestors and their
families. Yet other people think of a table, text report, etc. </para>
<para>
&app; can produce any of the above, and many more different charts and
reports. Moreover, the plugin architechture enables users (you) to create
their own plugins which could be new reports, charts, or research tools.
</para></listitem>
</varlistentry>
<varlistentry><term>In what formats can &app; output its reports?</term>
<listitem><para>
Text reports are available in HTML, PDF, AbiWord, KWord, LaTeX, RTF, and
OpenOffice formats. Graphical reports (charts and diagrams) are available in
PostScript, PDF, SVG, OpenOffice, and GraphViz formats.
</para></listitem>
</varlistentry>
<varlistentry><term>Is &app; compatible with the Internet?</term>
<listitem><para>
&app; can store web addresses and direct your browser to them. It can import
data that you download from the Internet. It can export data that you could
send over the Internet. &app; is familiar with the standard file formats
widely used on the Internet (e.g. JPEG, PNG, and GIF images, MP3, OGG, and
WAV sound files, QuickTime, MPEG, and AVI movie files, etc). Other than that,
there is little that a genealogical program can do with the Internet.
</para></listitem>
</varlistentry>
<varlistentry><term>Can I create custom reports/filters/whatever?</term>
<listitem><para>
Yes. There are many levels of customization. One is creating or modifying
the templates used for the reports. This gives you some control over
the fonts, colors, and some layout of the reports. You can also use &app;
controls in the report dialogs to tell what contents should be used for a
particular report. In addition to this, you have an ability to create your
own filters -- this is useful in selecting people based on criteria set
by you. You can combine these filters to create new, more complex filters.
Finally, you have an option to create your own plugins. These may be new
reports, research tools, import/export filters, etc. This assumes some
knowledge of programming in Python.
</para></listitem>
</varlistentry>
<varlistentry><term>What standards does &app; support?</term>
<listitem><para>
The nice thing about the standards is that there never is a shortage of
them. &app; is tested to support the following flavors of GEDCOM:
GEDCOM5.5, Brother's Keeper, Family Origins, Familty Tree Maker, Ftree,
GeneWeb, Legacy, Personal Ancestral File, Pro-Gen, Reunion, and
Visual Genealogie.
</para></listitem>
</varlistentry>
<varlistentry><term>What is the maximum database
size (bytes) &app; can handle?</term>
<listitem><para>
&app; has no hard limits on the size of a database that it can handle.
Starting with this release, &app; no longer loads all data into memory,
which allows it to work with much larger database than before.
In reality, however, there are practical limits. The main limiting factors
are the available memory on the system and the cache size used for BSDDB
database access. With common memory sizes these days, &app; should have
no problem using databases with tens of thousands of people.
</para></listitem>
</varlistentry>
<varlistentry><term>How many people can &app; database handle?</term>
<listitem><para>
We have found that on a typical system, &app; tends to bog down after the
database has around 150,000 people. Again, this is dependent on how much
memory you have.
</para></listitem>
</varlistentry>
<varlistentry><term>Why is &app; running so slowly?</term>
<listitem><para> It does not anymore! Just try out the current
version, &appversion;.
</para></listitem>
</varlistentry>
<varlistentry><term>My database is really big.
Is there a way around loading all the data into memory?</term>
<listitem><para>
Starting with this release, &app; no longer loads all data into memory,
which allows it to work with much larger database than before.
</para></listitem>
</varlistentry>
<varlistentry><term>I want to rerun the Startup dialog (druid).
How do I do this?</term>
<listitem><para>
&app; keeps a flag in the GNOME configuration database to indicate
that the startup dialog has been run. To cause &app; to rerun this,
the flag needs to be reset. This can be done with the following
command: </para>
<para><command>gconftool-2 -u /apps/gramps/behavior/startup</command>
</para></listitem>
</varlistentry>
<varlistentry><term>Why are non-latin characters displayed
as garbage in PDF/PS reports?</term>
<listitem><para> This is a limitation of the builtin fonts of PS
and PDF formats. To print non-latin text, use the Print...
in the format selection menu of the report dialog. This will use
the gnome-print backend, which supports PS and PDF creation,
as well as direct printing.</para>
<para>If you only have latin text, the PDF option will produce
a smalled PDF compared to that created by gnome-print, simply because
no font information will be embedded.
</para>
<appendix id="faq">
<title>Frequently Asked Questions</title>
<para>
This appendix contains the list of questions that frequently come
up in mailing list discussions and forums. This list is by no
means complete. If you would like to add questions/answers to this
list, please email your suggestions to <ulink
url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para>
<variablelist>
<varlistentry>
<term>What is &app;?</term>
<listitem>
<para>
&app; is the Genealogical Research and Analysis Management
Program System. In other words, it is a personal genealogy
program letting you store, edit, and research genealogical
data using the powers of your computer.
</para>
</listitem>
</varlistentry>
</varlistentry>
<varlistentry><term>Why can I not add/remove/edit columns to the lists
in People View and Family View?</term>
<listitem><para> Now you can! Just try out the current
version, &appversion;.
</para></listitem>
</varlistentry>
<varlistentry>
<term>Where do I get it and how much does it cost?</term>
<listitem>
<para>
&app; can be downloaded from <ulink
url="http://sf.net/projects/gramps"
type="http">http://sf.net/projects/gramps</ulink> at no
charge. &app; is an Open Source project covered by the GNU
General Public License. You have full access to the source
code and are allowed to distribute the program and source
code freely.
</para>
</listitem>
</varlistentry>
<varlistentry><term>I would like to contribute to &app; by writing
my favorite report. How do I do that?</term>
<listitem><para>
The easiest way to contribute to reports, filters, tools, etc. is to copy
an existing &app; report, filter, or tool. If you can create what you want
by modifying existing code -- great! If your idea does not fit into the logic
of any existing &app; tool, the <ulink
url="http://gramps.sourceforge.net/phpwiki/index.php/GrampsDevelopersPage"
type="http">following page</ulink> may provide some help in writing your
own plugin from scratch.
<varlistentry>
<term>Does it work with Windows (tm)?</term>
<listitem>
<para>
No. &app; uses the GTK and GNOME libraries. While the GTK
libraries have been ported to Windows, the GNOME libraries
have not. This, however, may change in the future.
</para>
</listitem>
</varlistentry>
If you need more help or would like to discuss your idea with us,
please do not hesitate to contact us at <ulink
url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para>
<varlistentry>
<term>Does it work with the Mac?</term>
<listitem>
<para>
<ulink url="http://fink.sourceforge.net" type="http">
The Fink project</ulink> has ported
<ulink url="http://fink.sourceforge.net/pdb/package.php/gramps"
type="http"> some older versions</ulink> of
&app; to OSX (tm). The Mac OSX port is not directly supported by
the &app; project, primarily because none of the &app; developers
have access to Mac OSX and because OSX is not Free Software.
</para><para>
This version of &app; (&appversion;) does not appear to have been
ported by the Fink project. Please contact the Fink project for
more information.
</para><para>
Some people have had success using the DarwinPorts instead of the
Fink project.
</para>
</listitem>
</varlistentry>
<para>
To test your work in progress, you may save your plugin under
<replaceable>$HOME/.gramps/plugins</replaceable> directory and it should
be found and imported on startup.
The correctly written plugin will register itself with &app;, create menu
item, and so on.</para>
<varlistentry>
<term>Does it work with KDE?</term>
<listitem>
<para>
Yes, as long as the required GNOME libraries are installed.
</para>
</listitem>
</varlistentry>
<para>
If you are happy with your plugin and would like to contribute your code
back to the &app; project, you are very welcome to do so by contacting us
at <ulink url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para></listitem>
</varlistentry>
<varlistentry>
<term>Do I really have to have GNOME installed?</term>
<listitem>
<para>
Yes, but you do not have to be running the GNOME desktop.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>What version of GNOME do I need?</term>
<listitem>
<para>
This version of gramps requires GNOME 2.8.0 or higher.
Previous versions in 1.0.x series required GNOME 2.0.
</para>
</listitem>
</varlistentry>
<varlistentry><term>I found a bug and I want it fixed right now!
What do I do?</term>
<listitem><para>
The best thing you can do is to fix the bug and send the patch to
<ulink url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink> :-)</para>
<varlistentry>
<term>Is &app; compatible with other genealogical software?</term>
<listitem>
<para>
&app; makes every effort to maintain compatibility with
GEDCOM, the general standard of recording genealogical
information. We have import and export filters that enable
&app; to read and write GEDCOM files.
</para><para>
It is important to understand that the GEDCOM standard is
poorly implemented -- virtually every genealogical software
has its own "flavor" of GEDCOM. As we learn about new
flavor, the import/export filters can be created very
quickly. However, finding out about the unknown flavors
requires user feedback. Please feel free to inform us about
any GEDCOM flavor not supported by &app;, and we will do our
best to support it!
</para>
</listitem>
</varlistentry>
<para>
The next best thing would be to submit a good bug report. This can be done in
one of the two ways: (1) send your report to
<ulink url="mailto:gramps-bugs@lists.sf.net"
type="mailto">gramps-bugs@lists.sf.net</ulink>
or (2) file your report with the bug tracker system at
<ulink url="http://sf.net/tracker/?group_id=25770" type="http">
http://sf.net/tracker/?group_id=25770&amp;atid=385137</ulink>
(this function is also available by selecting
<menuchoice><guisubmenu>Help</guisubmenu><guimenuitem>Report a
bug</guimenuitem></menuchoice> from gramps main menu). </para>
<varlistentry>
<term>Can &app; read files created by other genealogy programs?</term>
<listitem>
<para>See above.</para>
</listitem>
</varlistentry>
<para>A good bug report would include: </para>
<varlistentry>
<term>Can &app; write files readable by other genealogy programs?</term>
<listitem>
<para>See above.</para>
</listitem>
</varlistentry>
<itemizedlist>
<varlistentry>
<term>Can &app; print a genealogical tree for my family?</term>
<listitem>
<para>
Yes. Different people have different ideas of what a
genealogical tree is. Some think of it as a chart going
from the distant ancestor and listing all his/her
descendants and their families. Others think it should be a
chart going from the person back in time, listing the
ancestors and their families. Yet other people think of a
table, text report, etc.
</para><para>
&app; can produce any of the above, and many more different
charts and reports. Moreover, the plugin architecture
enables users (you) to create their own plugins which could
be new reports, charts, or research tools.
</para>
</listitem>
</varlistentry>
<listitem><para>
Version of gramps you were using when you encountered the bug
(available through <menuchoice><guisubmenu>Help</guisubmenu>
<guimenuitem>About</guimenuitem></menuchoice> menu item).
</para></listitem>
<varlistentry>
<term>In what formats can &app; output its reports?</term>
<listitem>
<para>
Text reports are available in HTML, PDF, AbiWord, KWord,
LaTeX, RTF, and OpenOffice formats. Graphical reports
(charts and diagrams) are available in PostScript, PDF, SVG,
OpenOffice, and GraphViz formats.
</para>
</listitem>
</varlistentry>
<listitem><para>
Language under which gramps was run
(available by executing </para>
<para><command>echo $LANG</command></para>
<para>in your terminal).
</para></listitem>
<varlistentry>
<term>Is &app; compatible with the Internet?</term>
<listitem>
<para>
&app; can store web addresses and direct your browser to
them. It can import data that you download from the
Internet. It can export data that you could send over the
Internet. &app; is familiar with the standard file formats
widely used on the Internet (e.g. JPEG, PNG, and GIF images,
MP3, OGG, and WAV sound files, QuickTime, MPEG, and AVI
movie files, etc). Other than that, there is little that a
genealogical program can do with the Internet.
</para>
</listitem>
</varlistentry>
<listitem><para>
Symptoms indicating that this is indeed a bug.
</para></listitem>
<varlistentry>
<term>Can I create custom reports/filters/whatever?</term>
<listitem>
<para>
Yes. There are many levels of customization. One is creating
or modifying the templates used for the reports. This gives
you some control over the fonts, colors, and some layout of
the reports. You can also use &app; controls in the report
dialogs to tell what contents should be used for a
particular report. In addition to this, you have an ability
to create your own filters -- this is useful in selecting
people based on criteria set by you. You can combine these
filters to create new, more complex filters. Finally, you
have an option to create your own plugins. These may be new
reports, research tools, import/export filters, etc. This
assumes some knowledge of programming in Python.
</para>
</listitem>
</varlistentry>
<listitem><para>
Any Traceback messages, error messages, warnings, etc,
that showed up in your terminal or a in separate traceback window.
</para></listitem>
<varlistentry>
<term>What standards does &app; support?</term>
<listitem>
<para>
The nice thing about standards is that there never is a
shortage of them. &app; is tested to support the following
flavors of GEDCOM: GEDCOM5.5, Brother's Keeper, Family
Origins, Family Tree Maker, Ftree, GeneWeb, Legacy, Personal
Ancestral File, Pro-Gen, Reunion, and Visual Genealogie.
</para>
</listitem>
</varlistentry>
</itemizedlist>
<varlistentry>
<term>What is the maximum database size (bytes) &app; can handle?</term>
<listitem>
<para>
&app; has no hard limits on the size of a database that it
can handle. Starting with this release, &app; no longer
loads all data into memory, which allows it to work with a
much larger database than before. In reality, however,
there are practical limits. The main limiting factors are
the available memory on the system and the cache size used
for BSDDB database access. With common memory sizes these
days, &app; should have no problem using databases with tens
of thousands of people.
</para>
</listitem>
</varlistentry>
<para>Most problems can be fixed quickly provided there is enough information.
To ensure this, please follow up on your bug reports. In particular, if you
file a bug report with sf.net bug tracker, PLEASE log in to sf.net before
filing
(register your free account if you don't have one). Then we will have a way
of contacting you should we need more information. If you choose to file your
report anonymously, at least check every so often whether your report page
has something new posted, as it probably would.</para>
<varlistentry>
<term>How many people can &app; database handle?</term>
<listitem>
<para>
We have found that on a typical system, &app; tends to bog
down after the database has around 150,000 people. Again,
this is dependent on how much memory you have.
</para>
</listitem>
</varlistentry>
<para>If the above explanations seem vague, please follow
<ulink url="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"
type="http">this link.</ulink>
<varlistentry>
<term>Why is &app; running so slowly?</term>
<listitem>
<para>
It does not anymore! Just try out the current
version, &appversion;.
</para>
</listitem>
</varlistentry>
</para></listitem>
</varlistentry>
<varlistentry>
<term>
My database is really big. Is there a way around loading
all the data into memory?
</term>
<listitem>
<para>
Starting with this release, &app; no longer loads all data
into memory, which allows it to work with a much larger
database than before.
</para>
</listitem>
</varlistentry>
<varlistentry><term>It is obvious that &app; absolutely needs to
become a (client-server/web-based/PHP/weblog/Javascript/C++/distributed/KDE/Motif/Tcl/Win32/C#/You-name-it)
application. When is this going to happen?</term>
<listitem><para>
The surest way to see it happen is to get it done by yourself. Since
&app; is free/open source, nobody prevents you from taking all of the
code and continuing its development in whatever direction you see fit.
In doing so, you may consider giving your new project another name to
avoid confusion with the continuing &app; development. If you would
like the &app; project to provide advice, expertise, filters, etc.,
we will gladly cooperate with your new project, to ensure compatibility
or import/export options to your new format of a project.</para>
<varlistentry>
<term>I want to rerun the Startup dialog. How do I do this?</term>
<listitem>
<para>
&app; keeps a flag in the GNOME configuration database to
indicate that the startup dialog has been run. To cause
&app; to rerun this, the flag needs to be reset. This can be
done with the following command:
</para>
<para>
<command>gconftool-2 -u /apps/gramps/behavior/startup</command>
</para>
</listitem>
</varlistentry>
<para>
If, however, you would like the &app; project to to adopt your strategy,
you would need to convince &app; developers that your strategy is good
for &app; and superior to the present development strategy.</para>
<varlistentry>
<term>
Why are non-latin characters displayed as garbage in PDF/PS
reports?
</term>
<listitem>
<para>
This is a limitation of the builtin fonts of PS and PDF
formats. To print non-latin text, use the Print... in the
format selection menu of the report dialog. This will use
the gnome-print backend, which supports PS and PDF creation,
as well as direct printing.
</para>
<para>
If you only have latin text, the PDF option will produce a
smalled PDF compared to that created by gnome-print, simply
because no font information will be embedded.
</para>
</listitem>
</varlistentry>
<tip><para>
If &app; developers are still not convinced after about three
messages sent to gramps-devel, maybe you are better off on your own
rather than with a company of retards who can't fully realize the
potential of your great idea :-)
<varlistentry>
<term>
Why can I not add/remove/edit columns to the lists in People
View and Family View?
</term>
<listitem>
<para>
Now you can! Just try out the current version, &appversion;.
</para>
</listitem>
</varlistentry>
</para></tip></listitem>
</varlistentry>
<varlistentry>
<term>
I would like to contribute to &app; by writing my favorite
report. How do I do that?
</term>
<listitem>
<para>
The easiest way to contribute to reports, filters, tools,
etc. is to copy an existing &app; report, filter, or
tool. If you can create what you want by modifying existing
code -- great! If your idea does not fit into the logic of
any existing &app; tool, the <ulink
url="http://gramps.sourceforge.net/phpwiki/index.php/GrampsDevelopersPage"
type="http">following page</ulink> may provide some help in
writing your own plugin from scratch.
</para>
<para>
If you need more help or would like to discuss your idea
with us, please do not hesitate to contact us at <ulink
url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para>
<para>
To test your work in progress, you may save your plugin
under <replaceable>$HOME/.gramps/plugins</replaceable>
directory and it should be found and imported on startup.
The correctly written plugin will register itself with
&app;, create menu item, and so on.
</para>
<para>
If you are happy with your plugin and would like to
contribute your code back to the &app; project, you are very
welcome to do so by contacting us at <ulink
url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink>
</para>
</listitem>
</varlistentry>
</variablelist>
<varlistentry>
<term>
I found a bug and I want it fixed right now! What do I do?
</term>
<listitem>
<para>
The best thing you can do is to fix the bug and send the
patch to <ulink url="mailto:gramps-devel@lists.sf.net"
type="mailto">gramps-devel@lists.sf.net</ulink> :-)
</para>
<para>A good bug report would include:</para>
<itemizedlist>
<listitem>
<para>
Version of gramps you were using when you encountered
the bug (available through
<menuchoice><guisubmenu>Help</guisubmenu>
<guimenuitem>About</guimenuitem></menuchoice> menu
item).
</para>
</listitem>
<listitem>
<para>
Language under which gramps was run (available by executing
</para>
<para><command>echo $LANG</command></para>
<para>in your terminal).</para>
</listitem>
<listitem>
<para>Symptoms indicating that this is indeed a bug.</para>
</listitem>
<listitem>
<para>
Any Traceback messages, error messages, warnings, etc,
that showed up in your terminal or a in separate
traceback window.
</para>
</listitem>
</itemizedlist>
<para>
Most problems can be fixed quickly provided there is enough
information. To ensure this, please follow up on your bug
reports. In particular, if you file a bug report with sf.net
bug tracker, PLEASE log in to sf.net before filing (register
your free account if you don't have one). Then we will have
a way of contacting you should we need more information. If
you choose to file your report anonymously, at least check
every so often whether your report page has something new
posted, as it probably would.
</para>
<para>
If the above explanations seem vague, please follow <ulink
url="http://www.chiark.greenend.org.uk/~sgtatham/bugs.html"
type="http">this link.</ulink>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
It is obvious that &app; absolutely needs to become a
(client-server/web-based/PHP/weblog/Javascript/C++/distributed/KDE/Motif/Tcl/Win32/C#/You-name-it)
application. When is this going to happen?
</term>
<listitem>
<para>
The surest way to see it happen is to get it done by
yourself. Since &app; is free/open source, nobody prevents
you from taking all of the code and continuing its
development in whatever direction you see fit. In doing so,
you may consider giving your new project another name to
avoid confusion with the continuing &app; development. If
you would like the &app; project to provide advice,
expertise, filters, etc., we will gladly cooperate with your
new project, to ensure compatibility or import/export
options to your new format of a project.
</para>
<para>
If, however, you would like the &app; project to to adopt
your strategy, you would need to convince &app; developers
that your strategy is good for &app; and superior to the
present development strategy.
</para>
</listitem>
</varlistentry>
</variablelist>
</appendix>

Binary file not shown.

Before

Width:  |  Height:  |  Size: 14 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -22,163 +22,245 @@
<!-- $Id$ -->
<title>Getting Started</title>
<title>Getting Started</title>
<para>This chapter provides the most basic information on starting &app;
and obtaining help. Please procede to the following chapters for more
information.</para>
<para>
In this chapter, we'll begin with the basics. We'll show you how
to start &app; and how to get help when you need it.
</para>
<!-- ================ Getting Started Subsection ====== -->
<sect1 id="gramps-start">
<!-- ================ Getting Started Subsection ====== -->
<sect1 id="gramps-start">
<title>To Start GRAMPS</title>
<para>You can start &app; in the following ways:</para>
<para>
You can start &app; in the following ways:
</para>
<variablelist>
<varlistentry>
<term><guimenu>Applications</guimenu> menu</term>
<listitem><para>The method of starting &app; from the menus may vary from
distribution to distribution. On default GNOME desktop,
choose <menuchoice><guisubmenu>Other</guisubmenu>
<guimenuitem>Gramps</guimenuitem></menuchoice>. </para></listitem>
</varlistentry>
<varlistentry>
<term>Command line</term>
<listitem><para>To start &app; from a command line, type
<command>gramps</command>, then press <keycap>Enter</keycap>.</para>
<para>If you would like &app; to open a specific database or to
import a specific file on startup, you can supply the filename
as a command line argument:</para>
<varlistentry>
<term>From the <guimenu>Applications</guimenu> menu</term>
<listitem>
<para>
<command>gramps</command> <filename>filename.grdb</filename>
</para>
<para>Select &app; from the list of programs displayed in
your computer's Applications menu. (The location and
appearance of this menu vary slightly from one distribution
of Linux to another. On the default GNOME desktop, you'll
find &app; in the
<menuchoice><guimenu>Applications</guimenu><guisubmenu>Other</guisubmenu></menuchoice>
menu.</para>
<para>where <filename>filename.grdb</filename> is the name
of the file you want to open. The command line provides many more ways
to start &app; and perform different tasks. The detailed reference to the
command line options is found in the <xref linkend="append-cmdline"/>.
</para></listitem>
</varlistentry>
</listitem>
</varlistentry>
<varlistentry>
<term>From the command line</term>
<listitem>
<para>
If you're adept with Linux and like to work from the command
line, you can start &app; by calling up a terminal window,
typing <command>gramps</command>, and then pressing
<keycap>Enter</keycap>.
</para>
<para>
If you would like GRAMPS to open a specific database or to
import a specific file on startup, you can supply the filename
as a command line argument:
</para>
<para>
<filename>gramps filename.grdb</filename>
</para>
<para>
where <filename>filename.grdb</filename> is the name of
the file you want to open. The command line provides many
more ways to start &app; and perform different tasks. The
detailed reference to the command line options is found
in <xref linkend="append-cmdline"/>.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</sect1>
<!-- ================ Getting Started Subsection ==== -->
<sect1 id="run-1st-time">
<title>Running GRAMPS for the first time</title>
<!-- ================ Getting Started Subsection ==== -->
<sect1 id="run-1st-time">
<title>Running GRAMPS for the first time</title>
<para>
The first time you run the program, GRAMPS will display its
Getting Started dialogs. Follow the directions guiding you through
<guilabel>Researcher information</guilabel>, <guilabel>Numerical date
formats</guilabel>, <guilabel>Alternate calendar support</guilabel>,
and <guilabel>LDS extensions</guilabel> sections. Most of the dialogs
are self-explanatory and will not be covered here.
The first time you run the program, GRAMPS will display the
&quot;Getting Started&quot; dialogs. Follow the directions that
guide you through <guilabel>Researcher information</guilabel>,
<guilabel>Numerical date formats</guilabel>, <guilabel>Alternate
calendar support</guilabel>, and <guilabel>the LDS
extensions</guilabel> sections. You should find them to be
self-explanatory.
</para>
<!-- ==== Figure: Getting Started Druid Window ==== -->
<figure id="druid-fig">
<title>GRAMPS Getting Started Window: Researcher Information</title>
<screenshot><mediaobject><imageobject><imagedata
fileref="figures/researcher.png" format="PNG"/></imageobject>
<textobject>
<phrase>Shows Researcher Information Window. </phrase>
</textobject></mediaobject></screenshot></figure>
<!-- ==== End of Figure ==== -->
<note id="note-dialog">
<title>Dialog boxes</title>
<para>We'll make frequent reference in this manual to
dialogs. A dialog is simply a pop-up window into which you can
enter information.</para>
</note>
<para>Enter your personal information in the corresponding
text entry fields. Although &app; requests information about you,
this information is used only so that &app; can create valid GEDCOM
output files. A valid GEDCOM file requires information about the file's
creator. If you choose, you may leave the information empty, however
all the GEDCOM files you export will not be valid.
</para>
<para>We recommend you enter your personal information when GRAMPS
prompts you for it. GRAMPS uses this information strictly so it
can create valid GEDCOM output files (which require information
about the files' creator). If you wish, you can choose not to
supply this information, but be aware that unless and until you
do, any GEDCOM files you export will not be valid.</para>
<!-- ==== Figure: Getting Started Druid Window ==== -->
<figure id="druid-fig">
<title>GRAMPS Getting Started Window: Researcher Information</title>
<screenshot>
<mediaobject>
<imageobject>
<imagedata fileref="figures/researcher.png" format="PNG"/>
</imageobject>
<textobject>
<phrase>Shows Researcher Information Window. </phrase>
</textobject>
</mediaobject>
</screenshot>
</figure>
<!-- ==== End of Figure ==== -->
<tip id="preferences-tip">
<title>Entering personal information</title>
<para>This information can be entered at any time in the
Preferences dialog, under the Database/Researcher Information
category.</para>
</tip>
</sect1>
<!-- ================ Getting Started Subsection -->
<sect1 id="choose-db-start">
<title>Choosing a database on startup</title>
<para>
If &app; is started without a database selected, the following
window will appear prompting you to choose one to open.
</para>
<!-- ==== Figure: Open existing/new database window ==== -->
<para>This information can be entered at any time in the
<guilabel>Preferences</guilabel> dialog, under the
<guilabel>Database/Researcher Information</guilabel> category.
</para>
</sect1>
<!-- ================ Getting Started Subsection -->
<sect1 id="choose-db-start">
<title>Choosing a database on startup</title>
<para>If &app; is started without any
database to open, the following window will appear prompting you to
choose what database to open. </para>
<!-- ==== Figure: Open existing/new database window ==== -->
<figure id="first-open">
<title>Open Database Window</title>
<screenshot><mediaobject><imageobject><imagedata
fileref="figures/first-open.png" format="PNG"/></imageobject>
<textobject>
<phrase>Shows Open Database Window. </phrase>
</textobject></mediaobject></screenshot></figure>
<!-- ==== End of Figure ==== -->
<para>If you would like to open an existing database, check the top radio
button and click the <guibutton>OK</guibutton> button. You will then be asked to
specify the name of your existing database. If you would like to start
creating your brand new database from scratch right away, choose new
database. </para>
<note id="file-notdir-note">
<title>Selecting file</title>
<para>
Unlike the version 1.0.X of &app;, this version does not require selecting directory
for the database. Please select filename, as you would in any other application.
</para>
</note>
</sect1>
<figure id="first-open">
<title>Open Database Window</title>
<screenshot>
<mediaobject>
<imageobject>
<imagedata fileref="figures/first-open.png" format="PNG" />
</imageobject>
<textobject>
<phrase>Shows Open Database Window.</phrase>
</textobject>
</mediaobject>
</screenshot>
</figure>
<!-- ==== End of Figure ==== -->
<!-- ================ Getting Started Subsection ==== -->
<sect1 id="get-help">
<title>Obtaining Help</title>
<para> At any time, the following items are available for immediate aid
from the <menuchoice><guimenu>Help</guimenu></menuchoice> menu: </para>
<variablelist>
<para>To open a database that you have recently opened, choose the
top selection, select your database from the menu and
click <guibutton>OK</guibutton>.</para>
<varlistentry><term>User manual</term>
<listitem><para> Choose this item to read the text of this manual
in the help browser. </para></listitem>
</varlistentry>
<para>To open an existing database you have not recently opened,
choose the middle selection and click
<guibutton>OK</guibutton>. &app; will then ask you to specify the
name of the database you wish to open. </para>
<varlistentry><term>FAQ</term>
<listitem><para> Use this item to read Frequently Asked Questions
about &app; in the browser. </para></listitem>
</varlistentry>
<varlistentry><term>GRAMPS home page</term>
<listitem><para> Select this item to open home page of &app; in your
default web browser. </para></listitem>
</varlistentry>
<varlistentry><term>GRAMPS mailing lists</term>
<listitem><para> Choose this item to direct your web browser
to the &app; mailing list archives. </para></listitem>
</varlistentry>
<varlistentry><term>Report a bug</term>
<listitem><para> Use this item to file a bug report against &app;
with the bug tracking system. </para></listitem>
</varlistentry>
<varlistentry><term>Show plugin status</term>
<listitem><para> Use this item to display the status of loaded
plugins. </para></listitem>
</varlistentry>
<varlistentry><term>Open example database</term>
<listitem><para> Select this item to load the example database shipped
with &app;. This database is composed of fictitious people and serves as
a useful example for learning how to work with &app;. </para></listitem>
</varlistentry>
</variablelist>
</sect1>
<para>As you might guess, to create a new database, choose
&quot;Create a new database&quot;</para>
</chapter>
<note id="file-notdir-note">
<title>Selecting file</title>
<para>
If you're familiar with version 1.0.X of GRAMPS, you'll note
that version 2.0 does not require you to select a directory in
which to store the database.
</para>
</note>
</sect1>
<!-- ================ Getting Started Subsection ==== -->
<sect1 id="get-help">
<title>Obtaining Help</title>
<para>
GRAMPS has a <menuchoice><guimenu>Help</guimenu></menuchoice> menu
that you can consult at any time. It includes the following items:
</para>
<variablelist>
<varlistentry>
<term>User manual</term>
<listitem>
<para>
An electronic version of the manual that you can access while you work in GRAMPS.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>FAQ</term>
<listitem>
<para>A list of Frequently Asked Questions about &app;.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>GRAMPS home page</term>
<listitem>
<para>A link to the GRAMPS' project web site.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>GRAMPS mailing lists</term>
<listitem>
<para>
Gives you direct access to GRAMPS' mailing list archives.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Report a bug</term>
<listitem>
<para>
Choose this item to file a bug report in our bug tracking
system. (Remember, &app; is a living project. We want to
know about any problems you encounter so we can work to
solve them for everyone's benefit.)
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Show plugin status</term>
<listitem>
<para>
Use this item to display the status of any plugins you may have added.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Open example database</term>
<listitem>
<para>
Select this item to load the example database that is
included in your GRAMPS package. This database is composed
of fictitious people and serves as a useful example for
learning how to work with GRAMPS.
</para>
</listitem>
</varlistentry>
</variablelist>
</sect1>
</chapter>

View File

@@ -3,16 +3,15 @@
<resource>
<creator>Alex Roitman shura@alex.neuro.umn.edu</creator>
<title>GRAMPS Manual</title>
<date>2003-12-01</date>
<version identifier="2.4" date="2003-12-01" description="GNOME2 Compliant GRAMPS Manual"/>
<subject category="GNOME|Applications"/>
<date>2005-10-16</date>
<version identifier="2.6" date="2004-10-16" description="GNOME2 Compliant GRAMPS Manual"/>
<subject category="Applications"/>
<description>User Manual for GRAMPS.</description>
<type>User Manual</type>
<format mime="text/xml" dtd="-//OASIS//DTD DocBook XML V4.1.2//EN"/>
<identifier url=""/>
<language code="C"/>
<relation seriesid="aa15a444-5ed9-11d7-8329-d7319c90009c"/>
<rights type="GNU FDL" license.version="1.1" license="http://www.gnu.org/licenses/fdl.html" holder="Alex Roitman"/>
<rights type="GNU GPL" license.version="2" license="http://www.gnu.org/licenses/gpl.html" holder="Alex Roitman"/>
</resource>
</omf>

View File

@@ -1,4 +1,4 @@
<?xml version="1.0"?>
<?xml version="1.0" encoding="UTF-8"?>
<?yelp:chunk-depth 3?>
<!--
User Manual for Gramps - a GTK+/GNOME based genealogy program
@@ -36,7 +36,7 @@
<!ENTITY appversion "2.0.0">
<!ENTITY manrevision "2.6">
<!ENTITY date "May 2005">
<!ENTITY date "Aug 2005">
<!ENTITY app "GRAMPS">
<!-- The rest of the entities is simply the chapters of the manual.. -->
@@ -50,6 +50,7 @@
<!ENTITY keybind SYSTEM "keybind.xml">
<!ENTITY filtref SYSTEM "filtref.xml">
<!ENTITY cmdline SYSTEM "cmdline.xml">
<!ENTITY cmdplug SYSTEM "cmdplug.xml">
<!ENTITY bugs SYSTEM "bugs.xml">
<!ENTITY authors SYSTEM "authors.xml">
]>
@@ -66,9 +67,14 @@
<!-- appropriate code -->
<bookinfo>
<title>GRAMPS Manual V&manrevision;</title>
<copyright> <year>2001</year> <holder>Donald N. Allingham</holder> </copyright>
<copyright> <year>2003-2005</year> <holder>Alex Roitman</holder> </copyright>
<copyright>
<year>2001</year>
<holder>Donald N. Allingham</holder>
</copyright>
<copyright>
<year>2003-2005</year>
<holder>Alex Roitman</holder>
</copyright>
<!-- translators: uncomment this:
@@ -77,45 +83,54 @@
<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>
-->
<!--
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 GPL), and
other legal stuff such as "NO WARRANTY" statement. -->
<!--
This file contains link to license for the documentation (GNU GPL), and
other legal stuff such as "NO WARRANTY" statement.
-->
<authorgroup>
<author>
<firstname>Alex</firstname>
<surname>Roitman</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<address> <email>shura@gramps-project.org</email> </address>
</affiliation>
<firstname>Alex</firstname>
<surname>Roitman</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<address><email>shura@gramps-project.org</email></address>
</affiliation>
</author>
<author>
<firstname>Donald N.</firstname>
<surname>Allingham</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<address> <email>don@gramps-project.org</email> </address>
</affiliation>
<firstname>Donald N.</firstname>
<surname>Allingham</surname>
<affiliation>
<orgname>GRAMPS Project</orgname>
<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>Latin</firstname>
<surname>Translator 1</surname>
<affiliation>
<orgname>Latin Translation Team</orgname>
<address> <email>translator@gnome.org</email> </address>
</affiliation>
<contrib>Latin translation</contrib>
<firstname>Latin</firstname>
<surname>Translator 1</surname>
<affiliation>
<orgname>Latin Translation Team</orgname>
<address> <email>translator@gnome.org</email> </address>
</affiliation>
<contrib>Latin translation</contrib>
</othercredit>
-->
</authorgroup>
@@ -135,108 +150,104 @@
<!-- to V3.0, and so on. -->
<revhistory>
<revision>
<revnumber>GRAMPS Manual V&manrevision;</revnumber>
<date>&date;</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>GRAMPS Manual V&manrevision;</revnumber>
<date>&date;</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.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>
<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>
<revision>
<revnumber>GRAMPS Manual V2.4</revnumber>
<date>December 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>GRAMPS Manual V2.4</revnumber>
<date>December 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@gramps-project.org</email></para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<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.2</revnumber>
<date>July 2003</date>
<revdescription>
<para role="author">Alex Roitman
<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>
</revdescription>
<revnumber>GRAMPS Manual V2.2</revnumber>
<date>July 2003</date>
<revdescription>
<para role="author">Alex Roitman
<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>
</revdescription>
</revision>
<revision>
<revnumber>GRAMPS Manual V2.1</revnumber>
<date>May 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>GRAMPS Manual V2.1</revnumber>
<date>May 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.0</revnumber>
<date>April 2003</date>
<revdescription>
<para role="author">Alex Roitman
<email>shura@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>GRAMPS Manual V2.0</revnumber>
<date>April 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 User Manual V1.1</revnumber>
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<email>don@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>GRAMPS User Manual V1.1</revnumber>
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<email>don@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
</revision>
<revision>
<revnumber>gramps User Manual V1.0</revnumber>
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<email>don@gramps-project.org</email>
</para>
<para role="publisher">GRAMPS Project</para>
</revdescription>
<revnumber>gramps User Manual V1.0</revnumber>
<date>2001</date>
<revdescription>
<para role="author">Donald N. Allingham
<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>
This manual describes version &appversion; of GRAMPS.
</releaseinfo>
<legalnotice>
<title>Feedback</title>
<para>
To report a bug or make a suggestion regarding this application or
this manual, use the help menu in &app;, or follow the directions
found on <ulink url="http://gramps-project.org/index.php?module=pagemaster&amp;PAGE_user_op=view_page&amp;PAGE_id=3"
type="http">this site</ulink>.
</para>
<!-- Translators may also add here feedback address for translations -->
</legalnotice>
</bookinfo>
<!-- ============= Document Body ============================= -->

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -23,202 +23,304 @@
<!-- $Id$ -->
<title>Preface</title>
<para> &app; is a genealogical
application. &app; is an acronym for the
Genealogical Research and Analysis Management Programming System. To put
it shortly, it allows you to store, edit, and research genealogical data
using your computer. Its functionality is somewhat common to other
genealogical programs. However, &app; offers some unique features. </para>
<para>GRAMPS is a software package designed for genealogical
research. Although similar to other genealogical programs, GRAMPS
offers some unique and powerful features, which we'll discuss
below. </para>
<para>GRAMPS is a Open Source Software package, which means you
are free to make copies and distribute it to anyone you like.
It's developed and maintained by a worldwide team of volunteers
whose goal is to make GRAMPS powerful, yet easy to use.</para>
<sect1 id="why-gramps">
<title>Why GRAMPS?</title>
<para> &app; was conceived under the concept
that most genealogy programs were designed to provide the researcher the
capability to input information related to a particular family tree.
Most of these programs have allowed for the arranging and storing of
information consistent with the GEDCOM standards. They usually provide
means for displaying descendant or ancestral relationships by means of
graphical displays, charts, or reports. These may be augmented with
pictures or other media to enhance the data. Most provide for inputting
data on unconnected individuals/families that may or may not have a
relationship to the primary surname being researched. Various other
enhancements may also be provided in the genealogical program that
allows for different degrees of importing and exporting data from other
programs and printing the data contained in the various reports. </para>
<para> &app;, on the other hand, attempts to
provide all of the common capabilities of these programs, but, more
importantly, to provide an additional capability of integration not common
to these programs. This is the ability to input any bits and pieces of
information directly into &app; and
rearrange/manipulate any/all data events in the entire data base (in any
order or sequence) to assist the user in doing research, analysis and
correlation with the potential of filling relationship gaps. In short, it
is a tool that provides a way to input all your research into one place and
do your analysis and correlation using the speed, power, and accuracy of
your computer instead of pencils and unmanageable reams of paper. </para>
<title>Why use GRAMPS?</title>
<para>Most genealogy programs allow you to enter information
about your ancestors and descendants. Typically, they can
display family relationships through charts, graphs, or
reports. Some allow you to include pictures or other media. Most
let you include information about people even if those people
are not related to the primary family you happen to be
researching. And they may include features that let you exchange
data with other programs and print different types of
reports. </para>
<para>GRAMPS has all these capabilities and more. Notably, it
allows you to integrate bits and pieces of data as they arise
from your research and to put them in one place &mdash; your
computer. You can then use your computer to manipulate,
correlate, and analyze your data, rather than messing with reams
of paper. </para>
</sect1>
<sect1 id="whats-new">
<title>What's new since 1.0.X</title>
<para>This section lists most notable changes from the previous stable branch of
&app;, the 1.0.X.</para>
<title>What's new since 1.0.X</title>
<para>If you are new to GRAMPS, it may not be important for you
to know how GRAMPS version 2.0.0 (the object of this manual)
differs from previous versions of the software. You may
therefore elect to skip this section.</para>
<para>However, if you are already familiar with GRAMPS and are
interested in the new aspects and features of version 2.0.0,
please read on.</para>
<variablelist>
<varlistentry><term>Berkeley database backend</term>
<listitem><para>The default format for &app; is now the BSDDB database.
This change allowed us to overcome performance issues and memory
requirements of the 1.0.X branch. With the database backend, the database
sizes of up to a hundred thousand people do not
present a major obstacle any longer.</para>
<para>
The default extension for &app; BSDDB database files is grdb. The new format is open and
fully documented in the developer's API reference distributed with the source of &app;.
</para>
<listitem>
<para>A consequence of the new database backend is that the changes, once approved
by the user, are applied immediately. In short, once you click <guibutton>OK</guibutton>
in the Person, Family, Source, Place, Media object, or Event editor, all the changes made to
this object are recorded in the database. No saving is necessary (or even possible). The analog
of quitting without saving would be abandoning all changes and quitting. Also, it is possible
to undo recent actions.
</para>
<para>We've adopted the Berkeley database format (BSDDB) as
the default for GRAMPS. Berkeley is the most widely used
open source developer database in the world.</para>
<para>This change allowed us to overcome issues of
performance and memory requirements that beset version
1.0.X. With the new back-end, database sizes of up to a
hundred thousand people no longer present a major
obstacle.</para>
<para>The default extension for GRAMPS' BSDDB database files
is grdb. The new format is open and fully documented in the
developer's API reference distributed with the source code
of GRAMPS. </para>
<note id="default-format">
<title>Preferred format</title>
<para>The preferred and default format for &app; is the
new BSDDB format.</para>
</note>
<para>A consequence of the new database back-end is that the
&quot;saving&quot; function is no longer necessary (or even
possible). Now, once you approve changes, they are
immediately applied; this means that clicking
<guibutton>OK</guibutton> in the Person, Family, Source,
Place, Media object, or Event editor immediately records
changes to the database. </para>
<para>In previous versions, you could &quot;quit without
saving.&quot; This option no longer exists per se; however,
in version 2.0.0, you can achieve the same effect if you
abandon or &quot;cancel&quot; all changes and then
quit.</para>
<para>Also, it is now possible to undo recent
actions.</para>
</listitem>
</varlistentry>
<varlistentry><term>Interface improvements</term>
<listitem><para>
There were numerous changes in the interface. Most of them are subtle and incremental
improvements, and all of them cannot be listed here. The most noticeable changes are:
<varlistentry><term>Other database back-ends</term>
<listitem>
<para>Along with the BSDDB backend, we've incorporated
&quot;in-memory&quot; database handling for the GRAMPS XML
and GEDCOM formats. This means you can now open files in
those two formats and work with their data without having to
first create a new database and import data into it. Since
this approach requires GRAMPS to hold all the data in
memory, it is only useful for small databases (depending on
available memory size).</para>
<warning id="gedcom-editing">
<title>GEDCOM Editing</title>
<para>Please keep in mind that some information in a
GEDCOM file may be lost during import into GRAMPS. Simply
opening and viewing the file will not change it. However,
if any changes were made and they were not abandoned upon
exit, exiting GRAMPS will save the data, with the possible
data loss.</para>
</warning>
</listitem>
</varlistentry>
<varlistentry>
<term>Desktop integration</term>
<listitem>
<para>We've improved the way GRAMPS integrates with the GNOME
desktop interface common to many Linux distributions. All file
formats recognized by GRAMPS are now registered as mime types;
each has its own icon and has GRAMPS as its default
handler. Thus, if you double-click on any file having one of
these formats, GRAMPS will launch and open the file.</para>
<para>We've also added support for GNOME's &quot;recent
documents&quot; function and have incorporated this function
within GRAMPS itself.</para>
</listitem>
</varlistentry>
<varlistentry>
<term>Interface improvements</term>
<listitem>
<para>We've made numerous changes in the interface. Most of
them are subtle and incremental improvements, and all of them
cannot be listed here. The most notable are:</para>
<itemizedlist>
<listitem><para>Removal of alphabetical tabs</para></listitem>
<listitem><para>Ability to add/remove/rearrange columns in list views</para></listitem>
<listitem><para>Removal of Save function and addition of Undo</para></listitem>
<listitem><para>Proper window management and removal of most modal windows</para></listitem>
<listitem><para>Support for Tip of the Day</para></listitem>
<listitem><para>Person-dependent context menus (right-click) in Pedigree View
listing parents, children, spouses, and siblings</para></listitem>
<listitem><para>Export wizard</para></listitem>
<listitem><para>Built-in Find function in list views</para></listitem>
<listitem><para>Date selector dialog</para></listitem>
<listitem><para>Name editor enhancements: patronymic names and non-default grouping</para></listitem>
<listitem><para>Recent file support (both gramps-specific and gnome-wide)</para></listitem>
</itemizedlist>
</para></listitem>
<listitem>
<para>Removal of alphabetical tabs.</para>
</listitem>
<listitem>
<para>Ability to add/remove/rearrange columns in list views.</para>
</listitem>
<listitem>
<para>Removal of the Save function and addition of Undo.</para>
</listitem>
<listitem>
<para>Proper window management.</para>
</listitem>
<listitem>
<para>Support for Tip of the Day.</para>
</listitem>
<listitem>
<para>Person-dependent context menus (right-click) in
Pedigree View, listing parents, children, spouses, and
siblings.</para>
</listitem>
<listitem>
<para>Addition of an Export wizard.</para>
</listitem>
<listitem>
<para>Built-in Find function in list views.</para>
</listitem>
<listitem>
<para>Addition of a Date selector dialog.</para>
</listitem>
<listitem>
<para>Name editor enhancements: patronymic names and
non-default grouping.</para>
</listitem>
<listitem>
<para>&quot;Recent document&quot; support (both within GRAMPS and
GNOME-wide)</para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry><term>Other database backends</term>
<listitem><para>
Along with the BSDDB backend, the in-memory database handling for &app; XML and
GEDCOM formats has been added. Simply put, it is now possible to natively open data
in those two formats (although the preferred and default format is grdb) and work with
that data, without necessarily setting up an empty database and then importing into it.
This approach requires holding all data in memory, so it is only useful for small databases
(depending on the available memory size). In such mode, the data is automatically
saved upon exit, to mimic the functionality of the real database.
<warning id="gedcom-inmem1-warn">
<title>GEDCOM Editing</title>
<para>
Please keep in mind that some information in GEDCOM file may be lost
during import into &app;. Simply opening and viewing the file will not change it.
However, if any changes were made and they were not abandoned upon exit,
exiting &app; will save the data, with the possible data loss.
</para>
</warning>
</para></listitem>
<varlistentry>
<term>Import and Export</term>
<listitem>
<para>We've added import and export filters for the GeneWeb format.</para>
</listitem>
</varlistentry>
<varlistentry><term>Import and Export</term>
<listitem><para>
New import and export filters available for the GeneWeb format.
</para></listitem>
<varlistentry>
<term>Reports</term>
<listitem>
<itemizedlist>
<listitem>
<para>We've added a new report: Statistics Chart. </para>
</listitem>
<listitem>
<para>We've changed the overall report framework. All
reports now remember the options you configure for
them.</para>
</listitem>
<listitem>
<para>It is possible to generate reports from the command
line, without launching an interactive GRAMPS
session.</para>
</listitem>
<listitem>
<para>The report API is much simpler now, making it easy to
write custom reports.</para>
</listitem>
<listitem>
<para>A single code instance may be used for a standalone
report, a book item, and a command-line report. </para>
</listitem>
</itemizedlist>
</listitem>
</varlistentry>
<varlistentry><term>Reports</term>
<listitem><para>
A new report -- Statistics Chart -- has been added to &app;.
</para>
<para>An overall change of the whole report framework has been acomplished.
All reports now remember their options. It is possible to generate reports from the command
line, without launching the interactive &app; session. The report API is much simpler now,
making it easy to write custom report. A single code instance may be used for a standalone
report, a book item, and a command-line report. </para></listitem>
</varlistentry>
<varlistentry><term>Command line</term>
<listitem><para>The new command line functionality includes opening the filename
argument given without any flags, as well as new flags and options for report generation.
Also, the addition of new formats leads to addition of available format options.
</para></listitem>
</varlistentry>
<varlistentry><term>Internationalization</term>
<listitem><para>
The approach for entering and displaying dates has been completely
re-worked. In particular, the new framework allows for a deeper
localization of displayed dates than was ever possible using the
translatable strings.</para>
<para>The internationalization of names have also been improved.
Names can be grouped under a non-default string. Patronymic names are
supported, and it is easy to program new ways on displaying names, as
may be required by various cultures and languages.
</para></listitem>
</varlistentry>
<varlistentry><term>Desktop integration</term>
<listitem><para>All formats known to &app; are now registered as mime types, each
with its icon and &app; as a default handler. Double-clicking on a file with any of these
formats will launch &app; and open that file. &app; also added support for the recent
documents functinonailty. This is on both for the GNOME-wide level and within the &app;.
</para>
<para>The preferences are now properly store using GConf, with schemas, partitioning
of keys into smaller directories, error checking, and notification. </para>
<varlistentry>
<term>Internationalization</term>
<listitem>
<para>The approach for entering and displaying dates has
been completely reworked. The new framework allows for a
deeper localization of displayed dates than was ever
possible using the translatable strings.</para>
<para>The internationalization of names has also been
improved. Names can be grouped under a non-default
string. Patronymic names are supported, and it is easy to
program new ways to display names in the manner customary to
a given culture or language.</para>
</listitem>
</varlistentry>
</variablelist>
</varlistentry>
</variablelist>
</sect1>
<sect1 id="typography">
<title>Typographical conventions</title>
<title>Typographical conventions</title>
<para>
In this book, we some words are marked with special typography:
<itemizedlist>
<listitem><application>Applications</application></listitem>
<listitem><command>Commands</command> you type at the command
line</listitem>
<listitem><filename>Filenames</filename></listitem>
<listitem><replaceable>Replaceable text</replaceable></listitem>
<listitem><guilabel>Labels</guilabel> for buttons and other
portions of the graphical interface</listitem>
<listitem> Menu selections look like this:
<menuchoice>
<guimenu>Menu</guimenu>
<guisubmenu>Submenu</guisubmenu>
<guimenuitem>Menu Item</guimenuitem>
</menuchoice>
In this book, some words are marked with special typography:
<itemizedlist>
<listitem>
<simpara>
<application>Applications</application>
</simpara>
</listitem>
<listitem>
<simpara>
<command>Commands</command> you type at the command line
</simpara>
</listitem>
<listitem>
<simpara>
<filename>Filenames</filename>
</simpara>
</listitem>
<listitem>
<simpara>
<replaceable>Replaceable text</replaceable>
</simpara>
</listitem>
<listitem>
<simpara>
<guilabel>Labels</guilabel> for buttons and other
portions of the graphical interface
</simpara>
</listitem>
<listitem>
<simpara>
Menu selections look like this:
<menuchoice>
<guimenu>Menu</guimenu>
<guisubmenu>Submenu</guisubmenu>
<guimenuitem>Menu Item</guimenuitem>
</menuchoice>
</simpara>
</listitem>
<listitem>
<simpara>
<guibutton>Buttons</guibutton> you can click
</simpara>
</listitem>
<listitem>
<simpara>
<userinput>Anything you type in</userinput>
</simpara>
</listitem>
<listitem><guibutton>Buttons</guibutton> you can
click</listitem>
<listitem><userinput>Anything you type
in</userinput></listitem>
</itemizedlist>
</para>
<para>
We also provide assorted bits of additional information in tips
and notes, as follows.
The manual also provides assorted bits of additional information in
tips and notes, as follows.
<tip id="example-tip">
<title>Tip</title>
@@ -237,13 +339,13 @@
</para>
<para>
Finally, we have warnings, in cases where you should be careful:
Finally, there are warnings, notifying you where you should be careful:
<warning id="example-warning">
<title>Example Warning</title>
<para>
This is what a warning looks like. If there's a chance
you'll run into trouble, we'll warn you beforehand.
you'll run into trouble, you will be warned beforehand.
</para>
</warning>
</para>

File diff suppressed because it is too large Load Diff

View File

@@ -1,3 +1,11 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = C
SUBDIRS = C fr
topdocdir=$(datadir)/@PACKAGE@/gnome/help/@PACKAGE@
install-data-local:
cd $(DESTDIR)$(topdocdir); rm -rf gramps; ln -s . gramps
uninstall-local:
-rm $(DESTDIR)$(topdocdir)/gramps

View File

@@ -10,6 +10,11 @@ entities = legal.xml\
faq.xml\
keybind.xml\
filtref.xml\
cmdline.xml
cmdline.xml \
cmdplug.xml \
authors.xml \
bugs.xml \
preface.xml
include $(top_srcdir)/doc/xmldocs.make
dist-hook: app-dist-hook

View 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>

View 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&amp;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 >

View File

@@ -1,229 +1,406 @@
<?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>
&cmdplug;
<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>
&gt;<filename>outfile</filename>
2&gt;<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>
&gt;<replaceable>sortie</replaceable>
2&gt;<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>

File diff suppressed because it is too large Load Diff

View File

@@ -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 &quot;sson&quot; (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>

View File

@@ -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&amp;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&amp;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>

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 7.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.6 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.1 KiB

View File

@@ -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
&quot;liaison relationnelle&quot; 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>

View File

@@ -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>

View File

@@ -3,8 +3,8 @@
<resource>
<creator>Alex Roitman shura@alex.neuro.umn.edu</creator>
<title>GRAMPS Manual</title>
<date>2003-12-01</date>
<version identifier="2.4" date="2003-12-01" description="GNOME2 Compliant GRAMPS Manual"/>
<date>2005-10-16</date>
<version identifier="2.6" date="2005-10-16" description="GNOME2 Compliant GRAMPS Manual"/>
<subject category="GNOME|Applications"/>
<description>User Manual for GRAMPS.</description>
<type>User Manual</type>
@@ -12,7 +12,6 @@
<identifier url=""/>
<language code="fr"/>
<relation seriesid="aa15a444-5ed9-11d7-8329-d7319c90009c"/>
<rights type="GNU FDL" license.version="1.1" license="http://www.gnu.org/licenses/fdl.html" holder="Alex Roitman"/>
<rights type="GNU GPL" license.version="2" license="http://www.gnu.org/licenses/gpl.html" holder="Alex Roitman"/>
</resource>
</omf>

View File

@@ -1,24 +1,47 @@
<?xml version="1.0" encoding="UTF-8"?>
<?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,9 @@
<!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 cmdplug SYSTEM "cmdplug.xml">
<!ENTITY bugs SYSTEM "bugs.xml">
<!ENTITY authors SYSTEM "authors.xml">
]>
<!--
(Do not remove this comment block.)
@@ -46,30 +62,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 +94,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 +102,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 +140,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 +158,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 +187,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 +197,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 +207,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 +217,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&amp;PAGE_user_op=view_page&amp;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>

View File

@@ -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>C</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>C</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>C</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>C</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>C</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>

View File

@@ -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>

View File

@@ -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>

View 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>

File diff suppressed because it is too large Load Diff

View File

@@ -1,320 +0,0 @@
<!--?xml version="1.0" encoding="UTF-8"?-->
<!-- A Document Type Definition for genealogy data (as produced by Gramps)
Copyright (c) 2001 Graham J. Williams
Time-stamp: <2002/01/22 15:41:37 Graham.Williams@csiro.au>
Freely Redistributable under the terms of the GNU General Public License.
Based on GEDCOM and conforming to the Gramps XML encoding.
Still under development and Gramps XML not complete.
Information on Gramps is available from http://
-->
<!--
DATABASE
Defines an XML document which is a <database> consisting of a
header Information about the "owner" of the database
people
families
sources
places
objects
bookmarks
-->
<!ELEMENT database (header, people?, families?, sources?, places?, objects?,
bookmarks?)>
<!-- ************************************************************
HEADER
A <header> consists of <created> (information about this
genealogical database) and <researcher> (information about the
person who created this genealogical database)
-->
<!ELEMENT header (created, researcher?)>
<!ELEMENT created EMPTY>
<!ATTLIST created
date CDATA #REQUIRED
version CDATA #REQUIRED
people CDATA #REQUIRED
families CDATA #REQUIRED>
<!ELEMENT researcher (resname, resaddr?, rescity?, resstate?,
rescountry?, respostal?, resphone?, resemail?)>
<!ELEMENT resname (#PCDATA)>
<!ELEMENT resaddr (#PCDATA)>
<!ELEMENT rescity (#PCDATA)>
<!ELEMENT resstate (#PCDATA)>
<!ELEMENT rescountry (#PCDATA)>
<!ELEMENT respostal (#PCDATA)>
<!ELEMENT resphone (#PCDATA)>
<!ELEMENT resemail (#PCDATA)>
<!-- ************************************************************
PEOPLE
The UID is a place holder for PAF UID's that are imported. PAF
generates a unique ID for each person which is useful for
merges. It is not used by Gramps otherwise.
-->
<!ELEMENT people (person)*>
<!ATTLIST people default CDATA #IMPLIED>
<!--
PERSON
gender Either M or F.
name
aka Also known as. Alternative names from marriage,
adoption, legal name change, etc
nick The nick name - a name the person is sometimes known by.
-->
<!ELEMENT person (gender, name?, aka*, nick?, pos?, uid?, event*,
objref*, url*, childof*, address*, parentin*,
sourceref?, attribute*, note?)>
<!ATTLIST person id ID #REQUIRED>
<!--
GENDER has values of M or F.
-->
<!ELEMENT gender (#PCDATA)>
<!--
NAME and AKA
first Given names
last Surname
suffix
title E.g., Sargent Major
-->
<!ELEMENT name (first?, last?,suffix?,title?)>
<!ATTLIST name conf CDATA #IMPLIED
priv CDATA #IMPLIED>
<!ELEMENT aka (first?, last?,suffix?,note?)>
<!ATTLIST aka conf CDATA #IMPLIED
priv CDATA #IMPLIED>
<!ELEMENT first (#PCDATA)>
<!ELEMENT last (#PCDATA)>
<!ELEMENT suffix (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT nick (#PCDATA)>
<!ELEMENT uid (#PCDATA)>
<!ELEMENT pos EMPTY>
<!ATTLIST pos x CDATA #REQUIRED
y CDATA #REQUIRED>
<!ELEMENT childof EMPTY>
<!ATTLIST childof
ref IDREF #REQUIRED
mrel (Birth|Adopted|Stepchild|Other|Unknown) #IMPLIED
frel (Birth|Adopted|Stepchild|Other|Unknown) #IMPLIED>
<!ELEMENT parentin EMPTY>
<!ATTLIST parentin
ref IDREF #REQUIRED>
<!ELEMENT address (dateval?,street?,city?,state?,country?,postal?,
note?,sourceref?)>
<!ATTLIST address conf CDATA #IMPLIED
priv CDATA #IMPLIED>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT postal (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!-- ************************************************************
FAMILY
An element to record information about a family.
-->
<!ELEMENT families (family)*>
<!ELEMENT family (father?,mother?,event*,objref*,child*,attribute*,note?)>
<!ATTLIST family
id ID #REQUIRED
type (Married|Unmarried|Partners|Other|Unkown) #IMPLIED>
<!ELEMENT father EMPTY>
<!ATTLIST father ref IDREF #REQUIRED>
<!ELEMENT mother EMPTY>
<!ATTLIST mother ref IDREF #REQUIRED>
<!ELEMENT child EMPTY>
<!ATTLIST child ref IDREF #REQUIRED>
<!-- ************************************************************
SOURCES
-->
<!ELEMENT sources (source)*>
<!ELEMENT source (sauthor?,spubinfo?,scallno?)>
<!ATTLIST source id ID #REQUIRED>
<!ELEMENT sauthor (#PCDATA)>
<!ELEMENT spubinfo (#PCDATA)>
<!ELEMENT scallno (#PCDATA)>
<!-- ************************************************************
PLACES
-->
<!ELEMENT places (placeobj)*>
<!ELEMENT placeobj (coord?,location*,objref*,url*,note?)>
<!ATTLIST placeobj id ID #REQUIRED title CDATA #IMPLIED>
<!ELEMENT coord EMPTY>
<!ATTLIST coord long CDATA #REQUIRED lat CDATA #REQUIRED>
<!ELEMENT location EMPTY>
<!ATTLIST location
city CDATA #IMPLIED
county CDATA #IMPLIED
state CDATA #IMPLIED
country CDATA #IMPLIED
parish CDATA #IMPLIED
>
<!ELEMENT objects (object)*>
<!ELEMENT object (attribute)*>
<!ATTLIST object
id ID #REQUIRED
src CDATA #IMPLIED
mime CDATA #IMPLIED
description CDATA #IMPLIED>
<!-- ************************************************************
BOOKMARKS
-->
<!ELEMENT bookmarks (bookmark)*>
<!ELEMENT bookmark EMPTY>
<!ATTLIST bookmark ref IDREF #REQUIRED>
<!-- ************************************************************
SHARED ELEMENTS
-->
<!ELEMENT attribute (note?,sourceref?)>
<!ATTLIST attribute conf CDATA #IMPLIED
priv CDATA #IMPLIED
type CDATA #IMPLIED
value CDATA #IMPLIED
>
<!--ELEMENT attr_type (#PCDATA)>
<!ELEMENT attr_value (#PCDATA)-->
<!--
EVENT
We can enumerate all possibilities for an event and then this will
not conform to Gramps as Gramps allows any type of events (i.e., a
user can define their own type of event) . By allowing anything
(CDATA) we no longer have automatic checking and in emacs no more
automatic selection of event types.
So decide to use the enumerated list for now unless there is a storm
of protest.
Alternative Birth Another possible birth date
Degree Awarding of a degree
Education Some step in the education process
Graduation Graduation (often same as degree)
-->
<!ELEMENT event (dateval?,place?,description?,sourceref?,note?)>
<!ATTLIST event type
(Annulment|Birth|Death|Christening|Baptism|Engagement|Marriage|
Occupation|Education|Degree|Immi|Burial|Cremation)
#REQUIRED>
<!ELEMENT dateval EMPTY>
<!ATTLIST dateval
val CDATA #REQUIRED
type CDATA #IMPLIED>
<!--ELEMENT date (#PCDATA) replaced by dateval-->
<!ELEMENT description (#PCDATA)>
<!ELEMENT note (#PCDATA)>
<!ELEMENT url EMPTY>
<!ATTLIST url href CDATA #REQUIRED
conf CDATA #IMPLIED
priv (0|1) #IMPLIED
description CDATA #IMPLIED>
<!ELEMENT place EMPTY>
<!ATTLIST place ref IDREF #REQUIRED>
<!ELEMENT sourceref (spage?,scomments?,stext?,sdate?)>
<!ATTLIST sourceref ref IDREF #REQUIRED>
<!ELEMENT spage (#PCDATA)>
<!ELEMENT scomments (#PCDATA)>
<!ELEMENT sdate (#PCDATA)>
<!ELEMENT stext (#PCDATA)>
<!ELEMENT objref (attribute)*>
<!ATTLIST objref
ref IDREF #REQUIRED
>
<!ELEMENT img EMPTY>
<!ATTLIST img
src CDATA #REQUIRED
description CDATA #IMPLIED
display CDATA #IMPLIED>

358
gramps2/doc/grampsxml.dtd Normal file
View File

@@ -0,0 +1,358 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2001 Graham J. Williams
# 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$
-->
<!--
This is the Document Type Definition file for v1.0.0
of the GRAMPS XML genealogy data format.
Please use the following formal public identifier to identify it:
"-//GRAMPS//DTD GRAMPS XML V1.0.0//EN"
For example:
<!DOCTYPE database PUBLIC "-//GRAMPS//DTD GRAMPS XML V1.0.0//EN"
"http://gramps-project.org/xml/1.0.0/grampsxml.dtd"
[...]>
-->
<!--
DATABASE
Defines an XML document which is a <database> consisting of a
header Information about the "owner" of the database
people
families
sources
places
objects
bookmarks
-->
<!ELEMENT database (header, people?, families?, sources?, places?, objects?,
bookmarks?)>
<!ATTLIST database xmlns CDATA #FIXED "http://gramps-project.org/xml/1.0.0/">
<!-- ************************************************************
HEADER
A <header> consists of <created> (information about this
genealogical database) and <researcher> (information about the
person who created this genealogical database)
-->
<!ELEMENT header (created, researcher?)>
<!ELEMENT created EMPTY>
<!ATTLIST created
date CDATA #REQUIRED
version CDATA #REQUIRED
>
<!ELEMENT researcher (resname, resaddr?, rescity?, resstate?,
rescountry?, respostal?, resphone?, resemail?)>
<!ELEMENT resname (#PCDATA)>
<!ELEMENT resaddr (#PCDATA)>
<!ELEMENT rescity (#PCDATA)>
<!ELEMENT resstate (#PCDATA)>
<!ELEMENT rescountry (#PCDATA)>
<!ELEMENT respostal (#PCDATA)>
<!ELEMENT resphone (#PCDATA)>
<!ELEMENT resemail (#PCDATA)>
<!-- ************************************************************
PEOPLE
-->
<!ELEMENT people (person)*>
<!ATTLIST people
default CDATA #IMPLIED
home IDREF #IMPLIED
>
<!ELEMENT person (gender, name*, nick?, event*, lds_ord*,
objref*, address*, attribute*, url*,
childof*, parentin*, note?, sourceref*)>
<!ATTLIST person
id CDATA #REQUIRED
handle ID #REQUIRED
change CDATA #REQUIRED
complete (0|1) #IMPLIED
>
<!--
GENDER has values of M, F, or U.
-->
<!ELEMENT gender (#PCDATA)>
<!ELEMENT name (first?,last?,suffix?,patronymic?,title?,
(daterange|dateval|datestr)?,note?,sourceref*)>
<!ATTLIST name
alt (0|1) #IMPLIED
type CDATA #IMPLIED
priv (0|1) #IMPLIED
sort CDATA #IMPLIED
display CDATA #IMPLIED
>
<!ELEMENT first (#PCDATA)>
<!ELEMENT last (#PCDATA)>
<!ATTLIST last
prefix CDATA #IMPLIED
group CDATA #IMPLIED
>
<!ELEMENT suffix (#PCDATA)>
<!ELEMENT patronymic (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT nick (#PCDATA)>
<!ELEMENT childof EMPTY>
<!ATTLIST childof
hlink IDREF #REQUIRED
mrel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
frel (None|Birth|Adopted|Stepchild|Sponsored|Foster|Other|Unknown) #IMPLIED
>
<!ELEMENT parentin EMPTY>
<!ATTLIST parentin hlink IDREF #REQUIRED>
<!ELEMENT address ((daterange|dateval|datestr)?,street?,city?,state?,
country?,postal?,phone?,note?,sourceref?)>
<!ATTLIST address priv (0|1) #IMPLIED>
<!ELEMENT street (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT postal (#PCDATA)>
<!ELEMENT state (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!-- ************************************************************
FAMILY
An element to record information about a family.
-->
<!ELEMENT families (family)*>
<!ELEMENT family (father?,mother?,event*,lds_ord*,
objref*,child*,attribute*,note?,sourceref*)>
<!ATTLIST family
id CDATA #REQUIRED
handle ID #REQUIRED
change CDATA #REQUIRED
complete (0|1) #IMPLIED
type CDATA #IMPLIED
>
<!ELEMENT father EMPTY>
<!ATTLIST father hlink IDREF #REQUIRED>
<!ELEMENT mother EMPTY>
<!ATTLIST mother hlink IDREF #REQUIRED>
<!ELEMENT child EMPTY>
<!ATTLIST child hlink IDREF #REQUIRED>
<!-- ************************************************************
SOURCES
-->
<!ELEMENT sources (source)*>
<!ELEMENT source (stitle?,sauthor?,spubinfo?,sabbrev?,
note?,objref*,data_item*)>
<!ATTLIST source
id CDATA #REQUIRED
handle ID #REQUIRED
change CDATA #REQUIRED
>
<!ELEMENT stitle (#PCDATA)>
<!ELEMENT sauthor (#PCDATA)>
<!ELEMENT spubinfo (#PCDATA)>
<!ELEMENT sabbrev (#PCDATA)>
<!-- ************************************************************
PLACES
-->
<!ELEMENT places (placeobj)*>
<!ELEMENT placeobj (coord?,location*,objref*,url*,note?,sourceref*)>
<!ATTLIST placeobj
id CDATA #REQUIRED
handle ID #REQUIRED
change CDATA #REQUIRED
title CDATA #REQUIRED
>
<!ELEMENT coord EMPTY>
<!ATTLIST coord
long CDATA #REQUIRED
lat CDATA #REQUIRED
>
<!ELEMENT location EMPTY>
<!ATTLIST location
city CDATA #IMPLIED
parish CDATA #IMPLIED
county CDATA #IMPLIED
state CDATA #IMPLIED
country CDATA #IMPLIED
postal CDATA #IMPLIED
phone CDATA #IMPLIED
>
<!-- ************************************************************
OBJECTS
-->
<!ELEMENT objects (object)*>
<!ELEMENT object (attribute*,note?,(daterange|dateval|datestr)?,sourceref*)>
<!ATTLIST object
id CDATA #REQUIRED
handle ID #REQUIRED
change CDATA #REQUIRED
src CDATA #REQUIRED
mime CDATA #REQUIRED
description CDATA #REQUIRED
>
<!-- ************************************************************
BOOKMARKS
-->
<!ELEMENT bookmarks (bookmark)*>
<!ELEMENT bookmark EMPTY>
<!ATTLIST bookmark hlink IDREF #REQUIRED>
<!-- ************************************************************
SHARED ELEMENTS
-->
<!ELEMENT daterange EMPTY>
<!ATTLIST daterange
start CDATA #REQUIRED
stop CDATA #REQUIRED
quality (estimated|calculated) #IMPLIED
cformat CDATA #IMPLIED
>
<!ELEMENT dateval EMPTY>
<!ATTLIST dateval
val CDATA #REQUIRED
type (before|after|about) #IMPLIED
quality (estimated|calculated) #IMPLIED
cformat CDATA #IMPLIED
>
<!ELEMENT datestr EMPTY>
<!ATTLIST datestr val CDATA #REQUIRED>
<!ELEMENT note (#PCDATA)>
<!ATTLIST note format (0|1) #IMPLIED>
<!ELEMENT sourceref (spage?,scomments?,stext?,(daterange|dateval|datestr)?)>
<!ATTLIST sourceref
hlink IDREF #REQUIRED
conf CDATA #IMPLIED
>
<!ELEMENT spage (#PCDATA)>
<!ELEMENT scomments (#PCDATA)>
<!ELEMENT sdate (#PCDATA)>
<!ELEMENT stext (#PCDATA)>
<!ELEMENT attribute (sourceref*,note?)>
<!ATTLIST attribute
priv (0|1) #IMPLIED
type CDATA #REQUIRED
value CDATA #REQUIRED
>
<!--
EVENT
-->
<!ELEMENT event ((daterange|dateval|datestr)?,witness*,place?,cause?,
description?,note?,sourceref*,objref*)>
<!ATTLIST event
type CDATA #REQUIRED
priv (0|1) #IMPLIED
>
<!ELEMENT witness (comment?)>
<!ATTLIST witness
hlink IDREF #IMPLIED
name CDATA #IMPLIED
>
<!ELEMENT comment (#PCDATA)>
<!ELEMENT place EMPTY>
<!ATTLIST place hlink IDREF #REQUIRED>
<!ELEMENT cause (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT url EMPTY>
<!ATTLIST url
priv (0|1) #IMPLIED
href CDATA #REQUIRED
description CDATA #IMPLIED
>
<!ELEMENT objref (attribute*,sourceref*,note?)>
<!ATTLIST objref
hlink IDREF #REQUIRED
priv (0|1) #IMPLIED
>
<!ELEMENT data_item EMPTY>
<!ATTLIST data_item
key CDATA #REQUIRED
value CDATA #REQUIRED
>
<!ELEMENT lds_ord ((daterange|dateval|datestr)?,temple?,place?,status?,
sealed_to?,note?,sourceref*)>
<!ATTLIST lds_ord
type CDATA #REQUIRED
>
<!ELEMENT temple EMPTY>
<!ATTLIST temple
val CDATA #REQUIRED
>
<!ELEMENT status EMPTY>
<!ATTLIST status
val CDATA #REQUIRED
>
<!ELEMENT sealed_to EMPTY>
<!ATTLIST sealed_to
hlink IDREF #REQUIRED
>

486
gramps2/doc/grampsxml.rng Normal file
View File

@@ -0,0 +1,486 @@
<?xml version="1.0" encoding="UTF-8"?>
<!--
# 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
# Written by Alex Roitman
# $Id$
-->
<!--
This is the RELAX NG schema for the GRAMPS XML genealogy data format.
-->
<grammar
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes"
ns="http://gramps-project.org/xml/1.0.0/"
xmlns="http://relaxng.org/ns/structure/1.0">
<start><element name="database">
<element name="header">
<element name="created">
<attribute name="date"><data type="date"/></attribute>
<attribute name="version"><text/></attribute>
</element>
<optional><element name="researcher">
<ref name="researcher-content"/>
</element></optional>
</element>
<optional><element name="people">
<optional><attribute name="default"><text/></attribute></optional>
<optional><attribute name="home">
<data type="IDREF"/>
</attribute></optional>
<zeroOrMore><element name="person">
<ref name="person-content"/>
</element></zeroOrMore>
</element></optional>
<optional><element name="families">
<zeroOrMore><element name="family">
<ref name="family-content"/>
</element></zeroOrMore>
</element></optional>
<optional><element name="sources">
<zeroOrMore><element name="source">
<ref name="source-content"/>
</element></zeroOrMore>
</element></optional>
<optional><element name="places">
<zeroOrMore><element name="placeobj">
<ref name="place-content"/>
</element></zeroOrMore>
</element></optional>
<optional><element name="objects">
<zeroOrMore><element name="object">
<ref name="object-content"/>
</element></zeroOrMore>
</element></optional>
<optional><element name="bookmarks">
<zeroOrMore><element name="bookmark">
<ref name="bookmark-content"/>
</element></zeroOrMore>
</element></optional>
</element></start>
<define name="researcher-content">
<element name="resname"><text/></element>
<optional><element name="resaddr"><text/></element></optional>
<optional><element name="rescity"><text/></element></optional>
<optional><element name="resstate"><text/></element></optional>
<optional><element name="rescountry"><text/></element></optional>
<optional><element name="respostal"><text/></element></optional>
<optional><element name="resphone"><text/></element></optional>
<optional><element name="resemail"><text/></element></optional>
</define>
<define name="primary-object">
<attribute name="id"><text/></attribute>
<attribute name="handle"><data type="ID"/></attribute>
<attribute name="change"><text/></attribute>
</define>
<define name="person-content">
<ref name="primary-object"/>
<optional><attribute name="complete"><choice>
<value>0</value>
<value>1</value>
</choice></attribute></optional>
<element name="gender"><choice>
<value>M</value>
<value>F</value>
<value>U</value>
</choice></element>
<zeroOrMore><element name="name">
<ref name="name-content"/>
</element></zeroOrMore>
<optional><element name="nick"><text/></element></optional>
<zeroOrMore><element name="event">
<ref name="event-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="lds_ord">
<ref name="lds-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="address">
<ref name="address-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="url">
<ref name="url-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="childof">
<attribute name="hlink"><data type="IDREF"/></attribute>
<optional><attribute name="mrel">
<ref name="child-rel"/>
</attribute></optional>
<optional><attribute name="frel">
<ref name="child-rel"/>
</attribute></optional>
</element></zeroOrMore>
<zeroOrMore><element name="parentin">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
<define name="child-rel">
<choice>
<value>Birth</value>
<value>Adopted</value>
<value>Stepchild</value>
<value>Sponsored</value>
<value>Foster</value>
<value>None</value>
<value>Other</value>
<value>Unknown</value>
</choice>
</define>
<define name="name-content">
<optional><attribute name="alt"><choice>
<value>0</value>
<value>1</value>
</choice></attribute></optional>
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<optional><attribute name="type"><choice>
<value>Also Known As</value>
<value>Birth Name</value>
<value>Married Name</value>
<value>Other Name</value>
</choice></attribute></optional>
<optional><attribute name="sort"><text/></attribute></optional>
<optional><attribute name="display"><text/></attribute></optional>
<optional><element name="first"><text/></element></optional>
<optional><element name="last">
<text/>
<optional><attribute name="prefix"><text/></attribute></optional>
<optional><attribute name="group"><text/></attribute></optional>
</element></optional>
<optional><element name="suffix"><text/></element></optional>
<optional><element name="patronymic"><text/></element></optional>
<optional><element name="title"><text/></element></optional>
<optional><ref name="date-content"/></optional>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
<define name="address-content">
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<optional><ref name="date-content"/></optional>
<optional><element name="street"><text/></element></optional>
<optional><element name="city"><text/></element></optional>
<optional><element name="state"><text/></element></optional>
<optional><element name="country"><text/></element></optional>
<optional><element name="postal"><text/></element></optional>
<optional><element name="phone"><text/></element></optional>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<optional><element name="sourceref">
<ref name="sourceref-content"/>
</element></optional>
</define>
<define name="date-content">
<choice>
<element name="daterange">
<attribute name="start"><text/></attribute>
<attribute name="stop"><text/></attribute>
<optional><attribute name="quality"><choice>
<value>estimated</value>
<value>calculated</value>
</choice></attribute></optional>
<optional><attribute name="cformat"><text/></attribute></optional>
</element>
<element name="dateval">
<attribute name="val"><text/></attribute>
<optional><attribute name="cformat"><text/></attribute></optional>
<optional><attribute name="type"><choice>
<value>before</value>
<value>after</value>
<value>about</value>
</choice></attribute></optional>
<optional><attribute name="quality"><choice>
<value>estimated</value>
<value>calculated</value>
</choice></attribute></optional>
</element>
<element name="datestr">
<attribute name="val"><text/></attribute>
</element>
</choice>
</define>
<define name="family-content">
<ref name="primary-object"/>
<optional><attribute name="complete"><choice>
<value>0</value>
<value>1</value>
</choice></attribute></optional>
<optional><attribute name="type"><choice>
<value>Married</value>
<value>Unmarried</value>
<value>Civil Union</value>
<value>Unknown</value>
<value>Other</value>
</choice></attribute></optional>
<optional><element name="father">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="mother">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<zeroOrMore><element name="event">
<ref name="event-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="lds_ord">
<ref name="lds-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="child">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></zeroOrMore>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<optional><ref name="date-content"/></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
<define name="source-content">
<ref name="primary-object"/>
<optional><element name="stitle"><text/></element></optional>
<optional><element name="sauthor"><text/></element></optional>
<optional><element name="spubinfo"><text/></element></optional>
<optional><element name="sabbrev"><text/></element></optional>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="data_item">
<attribute name="key"><text/></attribute>
<attribute name="value"><text/></attribute>
</element></zeroOrMore>
</define>
<define name="place-content">
<ref name="primary-object"/>
<attribute name="title"><text/></attribute>
<optional><element name="coord">
<attribute name="long"><data type="float"/></attribute>
<attribute name="lat"><data type="float"/></attribute>
</element></optional>
<zeroOrMore><element name="location">
<optional><attribute name="city"><text/></attribute></optional>
<optional><attribute name="parish"><text/></attribute></optional>
<optional><attribute name="county"><text/></attribute></optional>
<optional><attribute name="state"><text/></attribute></optional>
<optional><attribute name="country"><text/></attribute></optional>
<optional><attribute name="postal"><text/></attribute></optional>
<optional><attribute name="phone"><text/></attribute></optional>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="url">
<ref name="url-content"/>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
<define name="object-content">
<ref name="primary-object"/>
<attribute name="src"><text/></attribute>
<attribute name="mime"><text/></attribute>
<attribute name="description"><text/></attribute>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<optional><ref name="date-content"/></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
<define name="bookmark-content">
<attribute name="hlink"><data type="IDREF"/></attribute>
</define>
<define name="note-content">
<optional><attribute name="format"><choice>
<value>0</value>
<value>1</value>
</choice></attribute></optional>
<text/>
</define>
<define name="sourceref-content">
<attribute name="hlink"><data type="IDREF"/></attribute>
<optional><attribute name="conf"><text/></attribute></optional>
<optional><element name="spage"><text/></element></optional>
<optional><element name="scomments"><text/></element></optional>
<optional><element name="stext"><text/></element></optional>
<optional><ref name="date-content"/></optional>
</define>
<define name="priv-content">
<choice>
<value>0</value>
<value>1</value>
</choice>
</define>
<define name="attribute-content">
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<attribute name="type"><text/></attribute>
<attribute name="value"><text/></attribute>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
</define>
<define name="event-content">
<attribute name="type"><text/></attribute>
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<optional><ref name="date-content"/></optional>
<zeroOrMore><element name="witness">
<optional><attribute name="hlink">
<data type="IDREF"/>
</attribute></optional>
<optional><attribute name="name"><text/></attribute></optional>
<optional><element name="comment"><text/></element></optional>
</element></zeroOrMore>
<optional><element name="place">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="cause"><text/></element></optional>
<optional><element name="description"><text/></element></optional>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<optional><ref name="date-content"/></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="objref">
<ref name="objref-content"/>
</element></zeroOrMore>
</define>
<define name="url-content">
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<attribute name="href"><text/></attribute>
<optional><attribute name="description"><text/></attribute></optional>
</define>
<define name="objref-content">
<attribute name="hlink"><data type="IDREF"/></attribute>
<optional><attribute name="priv">
<ref name="priv-content"/>
</attribute></optional>
<zeroOrMore><element name="attribute">
<ref name="attribute-content"/>
</element></zeroOrMore>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
</define>
<define name="lds-content">
<attribute name="type"><text/></attribute>
<optional><ref name="date-content"/></optional>
<optional><element name="temple">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="place">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="status">
<attribute name="val"><text/></attribute>
</element></optional>
<optional><element name="sealed_to">
<attribute name="hlink"><data type="IDREF"/></attribute>
</element></optional>
<optional><element name="note">
<ref name="note-content"/>
</element></optional>
<optional><ref name="date-content"/></optional>
<zeroOrMore><element name="sourceref">
<ref name="sourceref-content"/>
</element></zeroOrMore>
</define>
</grammar>

View File

@@ -0,0 +1,3 @@
gramps.1
Makefile.in
Makefile

View File

@@ -0,0 +1,13 @@
# Process this file with automake to produce Makefile.in
SUBDIRS = fr
man_IN_FILES = gramps.1.in
man_MANS = $(man_IN_FILES:.1.in=.1)
EXTRA_DIST = $(man_MANS) $(man_IN_FILES)
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=doc/man/$@ $(SHELL) ./config.status
CLEANFILES=$(man_MANS)

View File

@@ -0,0 +1,3 @@
gramps.1
Makefile.in
Makefile

View File

@@ -0,0 +1,13 @@
# Process this file with automake to produce Makefile.in
man_IN_FILES = gramps.1.in
man_MANS = $(man_IN_FILES:.1.in=.1)
mandir = @mandir@/fr
EXTRA_DIST = $(man_MANS) $(man_IN_FILES)
gramps.1: $(top_builddir)/config.status gramps.1.in
cd $(top_builddir) && CONFIG_FILES=doc/man/fr/$@ $(SHELL) ./config.status
CLEANFILES=$(man_MANS)

View File

@@ -0,0 +1,214 @@
.TH gramps 1 "@VERSION@" "Janvier 2006" "@VERSION@"
.SH NOM
gramps \- GRAMPS est une application de généalogie. GRAMPS 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)
.SH SYNOPSIS
.B gramps
.RB [ \-?|\-\^\-help ]
.RB [ \-\^\-usage ]
.RB [ \-\^\-version ]
.RB [ \-O|\-\^\-open=
.IR FICHIER
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR FICHIER
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-i|\-\^\-import=
.IR ... ]
.RB [ \-o|\-\^\-output=
.IR FICHIER
.RB [ \-f|\-\^\-format=
.IR FORMAT ]]
.RB [ \-a|\-\^\-action=
.IR ACTION ]
.RB [ \-p|\-\^\-options=
.IR OPTIONSTRING ]]
.RB [
.IR FICHIER
.RB ]
.SH DESCRIPTION
.PP
\fIGramps\fP est un programme Libre/OpenSource de généalogie. Il est écrit en python,
et utilise une interface GTK+/GNOME.
Gramps est semblable à d'autres programmes de généalogie tel que \fIFamily Tree Maker (FTM)\fR, \fIPersonal Ancestral
Files\fR, ou le programme GNU Geneweb.
Il peut importer/exporter le format le plus utilisé par les autres logiciels de généalogie : GEDCOM.
.SH OPTIONS
.TP
.BI gramps " FICHIER"
Si \fIFICHIER\fR est désigné (sans autres commandes) alors une session interactive est ouverte. Les autres options sont ignorées. Ce type de lancement permet d'utiliser gramps
pour manipuler des données comme dans un navigateur web. Les formats natifs de gramps sont acceptés, voir ci-dessous.
.br
.TP
.BI \-f,\-\^\-format= " FORMAT"
Le format spécifique du \fIFICHIER\fR est précédé par les options \fB\-O\fR,
\fB\-i\fR, ou
\fB\-o\fR. Si l'option \fB\-f\fR n'est pas donnée pour le \fIFICHIER\fR, alors le format sera celui de l'extension.
.br
Les formats disponibles pour l'ouverture sont \fBgrdb\fR (choisi si \fIFICHIER\fR se termine par
\fB.grdb\fR), \fBgramps\-xml\fR (choisi si \fIFICHIER\fR se termine par
\fB.gramps\fR), et \fBgedcom\fR (choisi si \fIFICHIER\fR se termine par \fB.ged\fR).
.br
Les formats disponibles pour l'importation sont \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR (choisi si \fIFICHIER\fR se termine par \fB.gpkg\fR), et
\fBgeneweb\fR (choisi si \fIFICHIER\fR se termine par \fB.gw\fR).
.br
Les formats disponibles pour l'exportation sont \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR,
\fBgramps\-pkg\fR, \fBwft\fR (choisi si \fIFICHIER\fR se termine par \fB.wft\fR),
\fBgeneweb\fR, et \fBiso\fR (jamais deviné, toujours spécifié avec l'option
\fB\-f\fR).
.TP
.BI \-O,\-\^\-open= " FICHIER"
Ouvrir un \fIFICHIER\fR.
Seulement les formats \fBgrdb\fR, \fBgramps\-xml\fR, et \fBgedcom\fR peuvent être ouvert directement. Pour les autres formats, vous devez utiliser l'option d'import,
laquelle ouvrira une base vide et importera les données.
.br
Seulement un fichier peut être ouvert. Si vous utilisez plusieurs sources, vous devez utiliser l'option d'import.
.TP
.BI \-i,\-\^\-import= " FICHIER"
Importer des données depuis un \fIFICHIER\fR.
.br
Quand plus d'un fichier doit être importé, chacun doit être précédé par la commande \fB\-i\fR. Ces fichiers sont importés dans le même ordre,
i.e. \fB\-i\fR \fIFICHIER1\fR \fB\-i\fR \fIFICHIER2\fR
et \fB\-i\fR \fIFICHIER2\fR \fB\-i\fR \fIFICHIER1\fR vont tous les deux produire différents IDs gramps.
.TP
.BI \-o,\-\^\-output= " FICHIER"
Exporter des données dans un \fIFICHIER\fR. Pour le format \fBiso\fR, le \fIFICHIER\fR est le nom du répertoire dans lequel la base de données gramps est écrite.
Pour \fBgrdb\fR, \fBgramps\-xml\fR, \fBgedcom\fR, \fBwft\fR, \fBgramps\-pkg\fR,
et \fBgeneweb\fR, le \fIFICHIER\fR est le nom du fichier de sortie
.br
Quand plus d'un fichier doit être exporté, chacun doit être précédé par la commande \fB\-o\fR. Ces fichiers sont importés dans le même ordre.
.TP
.BI \-a,\-\^\-action= " ACTION"
Accomplir une \fIACTION\fR sur les données importées. C'est effectué à la fin de l'importation. Les actions possibles sont \fBsummary\fR
(Comme le rapport->Affichage->Résumé?), \fBcheck\fR (comme l'outil->Réparation de la base->Vérifier et réparer), et \fBreport\fR (produit un rapport, à besoin
de \fIOPTIONSTRING\fR précédé par la commande \fB\-p\fR.
.br
Ces options de rapport doivent satisfaire ces conditions:
.br
Il ne doit pas y avoir d'espace.
Si certains arguments doivent utiliser des espaces, la chaîne doit être encadrée par des guillemets.
Les options vont par paire nom et valeur.
Une paire est séparée par un signe égal.
Différentes paires sont séparées par une virgule.
.br
La plupart des options sont spécifiques à chaque rapport. Même s'il existe des options communes.
.BI "name=reportname "
.br
Cette option obligatoire, elle détermine quel rapport sera généré. Si le nom du rapport saisi ne correspond à aucun rapport disponible, un message d'erreur sera ajouté.
.BI "show=all"
.br
Cette option produit une liste avec les noms des options disponibles pour un rapport donné.
.BI "show=optionname"
.br
Cette option affiche une description de toutes les fonctionnalités proposées par optionname, aussi bien les types que les valeurs pour une option.
.br
Utiliser les options ci-dessus pour trouver tout sur un rapport choisi.
.LP
Quand plus d'une action doit être effectuée, chacune doit être précédée par la commande \fB\-a\fR. Les actions seront réalisées une à une, dans l'ordre spécifié.
.BI "Operation"
.br
Si le premier argument de la ligne de commande ne commence pas par un tiret (i.e. pas
d'instruction), gramps va essayer d'ouvrir le fichier avec le nom donné par le premier argument et démarrer une session interactive, en ignorant le reste de la ligne de commande.
.LP
Si la commande \fB\-O\fR est notée, alors gramps va essayer le fichier défini et va travailler avec ses données, comme pour les autres paramètres de la ligne de commande.
.LP
Avec ou sans la commande \fB\-O\fR, il peut y avoir plusieurs imports, exports, et actions dans la ligne de commande \fB\-i\fR,
\fB\-o\fR, et \fB\-a\fR.
.LP
L'ordre des options \fB\-i\fR, \fB\-o\fR, ou \fB\-a\fR n'a pas de sens. L'ordre actuel est toujours : imports -> actions -> exports. Mais l'ouverture doit toujours être la première!
.LP
Si aucune option \fB\-O\fR ou \fB\-i\fR n'est donnée, gramps lancera sa propre fenêtre et demarrera avec une base vide, puisqu'il n'y a pas données.
.LP
Si aucune option \fB\-o\fR ou \fB\-a\fR n'est donnée, gramps lancera sa propre fenêtre et démarrera avec la base de données issue de tout les imports. Cette base sera \fBimport_db.grdb\fR sous le répertoire \fB~/.gramps/import\fR.
.LP
Les erreurs rencontrées lors d'import, export, ou action, seront mémorisées en \fIstdout\fR (si elles sont le fait de la manipulation par gramps) ou
en \fIstderr\fR (si elles ne sont pas le fait d'une manipulation). Utilisez les shell de redirection de
\fIstdout\fR et \fIstderr\fR pour sauver les messages et les erreurs dans les fichiers.
.SH EXEMPLES
.TP
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:
\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
Si vous voulez préciser les formats de fichiers dans l'exemple ci-dessus, complétez les noms de fichiers par les options \fB\-f\fR appropriées:
\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
Pour enregistrer le résultat des lectures, donnez l'option \fB\-o\fR (utiliser \fB\-f\fR si le nom de fichier ne permet pas à gramps de deviner le 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
Pour lire trois ensembles de données puis lancer une session interactive de gramps sur le tout :
\fBgramps\fR \fB\-i\fR \fIfile1.ged\fR \fB\-i\fR \fIfile2.tgz\fR \fB\-i\fR \fI~/db3.gramps\fR
.TP
Enfin, pour lancer une session interactive normale, entrer : \fBgramps\fR
.SH CONCEPTS
GRAMPS est un système basé sur le support de plugin-python, permettant d'importer et d'exporter, la saisie,
générer des rapports, des outils, et afficher des filtres pouvant être ajoutés sans modifier le programme.
.LP
Par ailleurs, gramps permet la génération directe : impression, rapports avec sortie vers d'autres formats, comme \fIOpenOffice.org\fR, \fIAbiWord\fR, HTML,
ou LaTeX pour permettre à l'utilisateur de choisir selon ses besoins
.SH BUGS CONNUS ET LIMITATIONS
.SH FICHIERS
.LP
\fI${PREFIX}/bin/gramps\fP
.br
\fI${PREFIX}/share/gramps\fP
.br
\fI${HOME}/.gramps\fP
.SH AUTEURS
Donald Allingham \fI<don@gramps-project.org>\fR
.br
\fIhttp://gramps.sourceforge.net\fR
.LP
Cette page man a d'abord été écrite par:
.br
Brandon L. Griffith \fI<brandon@debian.org>\fR
.br
pour Debian GNU/Linux système.
.LP
Cette page man est maintenue par:
.br
Alex Roitman \fI<shura@gramps-project.org>\fR
.LP
La traduction française:
.br
Jérôme Rapinat \fI<romjerome@yahoo.fr>\fR
.br
.SH DOCUMENTATION
La documentation-utilisateur est disponible par le navigateur d'aide de GNOME sous la forme du manuel Gramps. Ce manuel est également disponible sous format XML comme \fBgramps-manual.xml\fR sous \fIdoc/gramps-manual/$LANG\fR dans les sources officielles.
.LP
La documentation pour développeur est disponible sur le site \fIhttp://developers.gramps-project.org\fR.

View File

@@ -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
@@ -182,8 +174,8 @@ exports, and actions specified further on the command line by using \fB\-i\fR,
.LP
The order of \fB\-i\fR, \fB\-o\fR, or \fB\-a\fR options does not matter. The
actual order always is: all imports (if any) -> all exports (if any) ->
all actions (if any). But opening must always be first!
actual order always is: all imports (if any) -> all actions (if any)
-> all exports (if any). But opening must always be first!
.LP
If no \fB\-O\fR or \fB\-i\fR option is given, gramps will launch its main
@@ -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

View File

@@ -70,6 +70,12 @@
1 EDUC
2 DATE BET. 1979 - 1984
2 PLAC UC Berkeley
1 SSN 123-456-7890
1 CAST cast keyword
1 DSCR dscr keyword
1 IDNO idno keyword
1 NATI nati keyword
1 NCHI nchi keyword
1 _DEG
2 DATE 1984
2 PLAC B.S.E.E.
@@ -509,7 +515,6 @@
2 DATE 26 JUN 34 B.C.
2 PLAC Hayward, Alameda Co., CA
0 @F01@ FAM
1 HUSB @I01@
1 WIFE @I40@
1 CHIL @I42@
2 _FREL Adopted
@@ -529,9 +534,6 @@
1 CHIL @I29@
2 _FREL Adopted
2 _MREL Adopted
1 CHIL @I01@
2 _FREL Adopted
2 _MREL Adopted
1 MARR
2 DATE 4 JUN 1954
2 PLAC Sparks, Washoe Co., NV

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 69 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 64 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 108 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 110 KiB

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -3,7 +3,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2003 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -36,4 +36,4 @@ else
export PYTHONPATH=$GRAMPSDIR:$GRAMPSLIBDIR:$GRAMPSPLUGINSDIR:$PYTHONPATH
fi
exec @PYTHON@ $GRAMPSDIR/gramps.py $*
exec @PYTHON@ $GRAMPSDIR/gramps.py "$@"

View File

@@ -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

View File

@@ -30,6 +30,7 @@ Provides the interface to allow a person to add a media object to the database.
#
#-------------------------------------------------------------------------
import os
import gc
#-------------------------------------------------------------------------
#
@@ -45,8 +46,8 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
from QuestionDialog import ErrorDialog
from WindowUtils import GladeIf
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -58,6 +59,7 @@ import Utils
import RelImage
import RelLib
import GrampsMime
import GrampsDisplay
#-------------------------------------------------------------------------
#
@@ -89,12 +91,9 @@ class AddMediaObject:
Utils.set_titles(self.window,self.glade.get_widget('title'),
_('Select a media object'))
self.glade.signal_autoconnect({
"on_fname_update_preview" : self.on_name_changed,
"on_help_imagesel_clicked" : self.on_help_imagesel_clicked,
})
self.gladeif = GladeIf(self.glade)
self.gladeif.connect('fname', 'update_preview', self.on_name_changed)
self.window.show()
def internal_toggled(self, obj):
@@ -102,7 +101,7 @@ class AddMediaObject:
def on_help_imagesel_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-quick')
GrampsDisplay.help('gramps-edit-quick')
self.val = self.window.run()
def on_savephoto_clicked(self):
@@ -156,8 +155,9 @@ class AddMediaObject:
if old_title == '' or old_title == self.temp_name:
self.description.set_text(root)
self.temp_name = root
if os.path.isfile(filename):
filename = Utils.find_file( filename)
if filename:
mtype = GrampsMime.get_type(filename)
if mtype and mtype.startswith("image"):
image = RelImage.scale_image(filename,const.thumbScale)
@@ -172,10 +172,12 @@ class AddMediaObject:
if val == gtk.RESPONSE_OK:
self.on_savephoto_clicked()
self.window.destroy()
gc.collect()
return self.object
elif val == gtk.RESPONSE_HELP:
self.on_help_imagesel_clicked(None)
else:
self.window.destroy()
gc.collect()
return None
return None

View File

@@ -34,6 +34,7 @@ __version__ = "$Revision$"
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
#-------------------------------------------------------------------------
#
@@ -41,23 +42,24 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
import gtk.glade
import gnome
import gobject
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
import GrampsDisplay
import RelLib
import const
import Utils
import PeopleModel
import Date
import DateHandler
import Marriage
import NameDisplay
import GenericFilter
from QuestionDialog import ErrorDialog, QuestionDialog2
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -92,6 +94,7 @@ class AddSpouse:
# the same gender as the current person.
self.glade = gtk.glade.XML(const.gladeFile, "spouseDialog","gramps")
self.gladeif = GladeIf(self.glade)
self.relation_def = self.glade.get_widget("reldef")
self.rel_combo = self.glade.get_widget("rel_combo")
@@ -102,8 +105,6 @@ class AddSpouse:
self.renderer = gtk.CellRendererText()
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist)
self.selection = self.spouse_list.get_selection()
self.selection.connect('changed',self.select_row)
self.add_columns(self.spouse_list)
@@ -119,63 +120,48 @@ class AddSpouse:
self.glade.get_widget('title'),title,
_('Choose Spouse/Partner'))
self.glade.signal_autoconnect({
"on_select_spouse_clicked" : self.select_spouse_clicked,
"on_spouse_help_clicked" : self.on_spouse_help_clicked,
"on_show_toggled" : self.on_show_toggled,
"on_new_spouse_clicked" : self.new_spouse_clicked,
"destroy_passed_object" : Utils.destroy_passed_object
})
self.gladeif.connect('button117','clicked',self.close)
self.gladeif.connect('spouseDialog','delete_event',self.delete_event)
self.gladeif.connect('spouse_ok','clicked',self.select_spouse_clicked)
self.gladeif.connect('spouse_help','clicked',self.on_spouse_help_clicked)
self.gladeif.connect('spouseNewPerson','clicked',self.new_spouse_clicked)
self.gladeif.connect('showall','clicked',self.on_show_toggled)
self.rel_combo.set_active(RelLib.Family.MARRIED)
self.update_data()
self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
gobject.idle_add(self.update_data)
def delete_event(self,obj):
self.gladeif.close()
def close(self,obj):
self.gladeif.close()
self.window.destroy()
def build_all(self):
filt = GenericFilter.GenericFilter()
filt.add_rule(GenericFilter.Everyone([]))
return filt
return None
def build_likely(self,gender):
birth_handle = self.person.get_birth_handle()
death_handle = self.person.get_death_handle()
filt = GenericFilter.GenericFilter()
if gender == RelLib.Person.MALE:
filt.add_rule(GenericFilter.IsFemale([]))
else:
filt.add_rule(GenericFilter.IsMale([]))
if birth_handle:
birth = self.db.get_event_from_handle(birth_handle)
date_obj = Date.Date(birth.get_date_object())
year = date_obj.get_year()
if year:
date_obj.set_year(year-50)
date_obj.set_modifier(Date.MOD_AFTER)
text = DateHandler.displayer.display(date_obj)
rule = GenericFilter.HasBirth([text,"",""])
filt.add_rule(rule)
filt.add_rule(LikelyFilter([self.person.handle,self.person.gender]))
return filt
def add_columns(self,tree):
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(True)
#column.set_clickable(True)
column.set_min_width(225)
tree.append_column(column)
column = gtk.TreeViewColumn(_('ID'), self.renderer,text=1)
column.set_resizable(True)
#column.set_clickable(True)
column.set_min_width(75)
tree.append_column(column)
column = gtk.TreeViewColumn(_('Birth date'), self.renderer,text=3)
#column.set_resizable(True)
column.set_clickable(True)
tree.append_column(column)
def on_spouse_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-quick')
GrampsDisplay.help('gramps-edit-quick')
def get_selected_ids(self):
mlist = []
@@ -192,9 +178,9 @@ class AddSpouse:
"""
idlist = self.get_selected_ids()
if idlist and idlist[0]:
self.ok.set_sensitive(1)
self.ok.set_sensitive(True)
else:
self.ok.set_sensitive(0)
self.ok.set_sensitive(False)
def new_spouse_clicked(self,obj):
"""
@@ -225,7 +211,7 @@ class AddSpouse:
been closed.
"""
person = epo.person
self.update_data(person.get_handle())
self.update_data()
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.slist.rebuild_data()
@@ -295,7 +281,9 @@ class AddSpouse:
if not self.active_family:
self.active_family = RelLib.Family()
self.db.add_family(self.active_family,trans)
gid = self.db.find_next_family_gramps_id()
self.active_family.set_gramps_id(gid)
self.active_family.set_handle(self.db.create_id())
self.person.add_family_handle(self.active_family.get_handle())
self.db.commit_person(self.person,trans)
@@ -315,62 +303,12 @@ class AddSpouse:
self.db.transaction_commit(trans,_("Add Spouse"))
Utils.destroy_passed_object(obj)
gc.collect()
m = Marriage.Marriage(self.parent, self.active_family, self.parent.db)
m.on_add_clicked()
def relation_type_changed(self,obj):
self.update_data()
def all_filter(self, person):
return person.get_gender() != self.sgender
def likely_filter(self, person):
if person.get_gender() == self.sgender:
return False
pd_id = person.get_death_handle()
pb_id = person.get_birth_handle()
if pd_id:
pdday = self.db.get_event_from_handle(pd_id).get_date_object()
else:
pdday = Date.Date()
if pb_id:
pbday = self.db.get_event_from_handle(pb_id).get_date_object()
else:
pbday = Date.Date()
if self.bday.get_year_valid():
if pbday.get_year_valid():
# reject if person birthdate differs more than
# 100 years from spouse birthdate
if abs(pbday.get_year() - self.bday.get_year()) > 100:
return 0
if pdday.get_year_valid():
# reject if person birthdate is after the spouse deathdate
if self.bday.get_year() + 10 > pdday.get_high_year():
return 0
# reject if person birthdate is more than 100 years
# before the spouse deathdate
if self.bday.get_high_year() + 100 < pdday.get_year():
return 0
if self.dday.get_year_valid():
if pbday.get_year_valid():
# reject if person deathdate was prior to
# the spouse birthdate
if self.dday.get_high_year() < pbday.get_year() + 10:
return 0
if pdday.get_year_valid():
# reject if person deathdate differs more than
# 100 years from spouse deathdate
if abs(pdday.get_year() - self.dday.get_year()) > 100:
return 0
return 1
gobject.idle_add(self.update_data)
def set_gender(self):
if self.rel_combo.get_active() == RelLib.Family.CIVIL_UNION:
@@ -384,18 +322,62 @@ class AddSpouse:
else:
self.sgender = RelLib.Person.FEMALE
def update_data(self,person = None):
def update_data(self):
"""
Called whenever the relationship type changes. Rebuilds the
the potential spouse list.
"""
self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
while(gtk.events_pending()):
gtk.main_iteration()
self.slist = PeopleModel.PeopleModel(self.db,self.filter)
self.spouse_list.set_model(self.slist)
self.window.window.set_cursor(None)
def on_show_toggled(self,obj):
if self.filter == self.likely:
self.filter = self.all
else:
self.filter = self.likely
self.update_data()
gobject.idle_add(self.update_data)
#-------------------------------------------------------------------------
#
# Likely Filters
#
#-------------------------------------------------------------------------
class LikelyFilter(GenericFilter.Rule):
labels = [ 'Person handle', 'Person gender' ]
category = _('General filters')
def prepare(self,db):
person = db.get_person_from_handle(self.list[0])
if person.birth_handle:
birth = db.get_event_from_handle(person.birth_handle)
dateobj = Date.Date(birth.date)
year = dateobj.get_year()
dateobj.set_year(year+40)
self.lower = dateobj.sortval
dateobj.set_year(year-40)
self.upper = dateobj.sortval
else:
self.upper = None
self.lower = None
if person.gender == RelLib.Person.MALE:
self.gender = RelLib.Person.FEMALE
else:
self.gender = RelLib.Person.MALE
def apply(self,db,person):
if person.gender != self.gender:
return False
if not person.birth_handle or (self.upper == None and
self.lower == None):
return True
event = db.get_event_from_handle(person.birth_handle)
return (event.date == None or event.date.sortval == 0 or
self.lower > event.date.sortval > self.upper)

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -31,6 +31,7 @@ mechanism for the user to edit address information.
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
#-------------------------------------------------------------------------
#
@@ -38,19 +39,22 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
import GrampsDisplay
import const
import Utils
import Date
import RelLib
import Sources
import DateEdit
import Spell
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -85,21 +89,35 @@ class AddressEditor:
# Get the important widgets from the glade description
self.top = gtk.glade.XML(const.dialogFile, "addr_edit","gramps")
self.gladeif = GladeIf(self.top)
self.window = self.top.get_widget("addr_edit")
self.addr_start = self.top.get_widget("address_start")
self.addr_start.set_editable(not self.db.readonly)
self.street = self.top.get_widget("street")
self.street.set_editable(not self.db.readonly)
self.city = self.top.get_widget("city")
self.city.set_editable(not self.db.readonly)
self.state = self.top.get_widget("state")
self.state.set_editable(not self.db.readonly)
self.country = self.top.get_widget("country")
self.country.set_editable(not self.db.readonly)
self.postal = self.top.get_widget("postal")
self.postal.set_editable(not self.db.readonly)
self.phone = self.top.get_widget("phone")
self.phone.set_editable(not self.db.readonly)
self.note_field = self.top.get_widget("addr_note")
self.note_field.set_editable(not self.db.readonly)
self.spell = Spell.Spell(self.note_field)
self.priv = self.top.get_widget("priv")
self.priv.set_sensitive(not self.db.readonly)
self.slist = self.top.get_widget("slist")
self.sources_label = self.top.get_widget("sourcesAddr")
self.notes_label = self.top.get_widget("noteAddr")
self.flowed = self.top.get_widget("addr_flowed")
self.flowed.set_sensitive(not self.db.readonly)
self.preform = self.top.get_widget("addr_preform")
self.preform.set_sensitive(not self.db.readonly)
title_label = self.top.get_widget("title")
@@ -119,10 +137,12 @@ class AddressEditor:
if self.addr.get_note():
self.note_field.get_buffer().set_text(self.addr.get_note())
Utils.bold_label(self.notes_label)
if addr.get_note_format() == 1:
if addr.get_note_format() == 1:
self.preform.set_active(1)
else:
self.note_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.flowed.set_active(1)
self.note_field.set_wrap_mode(gtk.WRAP_WORD)
else:
self.addr_date_obj = Date.Date()
self.srcreflist = []
@@ -133,16 +153,18 @@ class AddressEditor:
self.top.get_widget('del_src'), self.db.readonly)
date_stat = self.top.get_widget("date_stat")
date_stat.set_sensitive(not self.db.readonly)
self.date_check = DateEdit.DateEdit(
self.addr_date_obj, self.addr_start, date_stat, self.window)
self.top.signal_autoconnect({
"on_switch_page" : self.on_switch_page,
"on_help_addr_clicked" : self.on_help_clicked,
"on_ok_addr_clicked" : self.ok_clicked,
"on_cancel_addr_clicked" : self.close,
"on_addr_edit_delete_event" : self.on_delete_event,
})
self.gladeif.connect('addr_edit','delete_event',self.on_delete_event)
self.gladeif.connect('button122','clicked',self.close)
self.gladeif.connect('button121','clicked',self.ok_clicked)
okbtn = self.top.get_widget('button121')
okbtn.set_sensitive(not self.db.readonly)
self.gladeif.connect('button129','clicked',self.on_help_clicked)
self.gladeif.connect('notebook2','switch_page',self.on_switch_page)
self.gladeif.connect('addr_preform','toggled',self.format_toggled)
if parent_window:
self.window.set_transient_for(parent_window)
@@ -152,11 +174,15 @@ class AddressEditor:
def on_delete_event(self,obj,b):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
gc.collect()
def close(self,obj):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
self.window.destroy()
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -187,7 +213,7 @@ class AddressEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-ad')
GrampsDisplay.help('adv-ad')
def ok_clicked(self,obj):
"""
@@ -215,6 +241,12 @@ class AddressEditor:
self.callback(self.addr)
self.close(obj)
def format_toggled(self,junk):
if self.preform.get_active():
self.note_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.note_field.set_wrap_mode(gtk.WRAP_WORD)
def check(self,get,set,data):
"""Compares a data item, updates if necessary, and sets the
parents lists_changed flag"""

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -33,7 +33,6 @@ Module responsible for handling the command line arguments for GRAMPS.
#-------------------------------------------------------------------------
import os
import getopt
import time
from gettext import gettext as _
#-------------------------------------------------------------------------
@@ -50,6 +49,7 @@ import GrampsKeys
import RecentFiles
import PluginMgr
import Report
import Tool
#-------------------------------------------------------------------------
#
@@ -127,7 +127,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]
@@ -137,7 +138,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'
@@ -148,11 +149,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
@@ -160,7 +166,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'
@@ -176,7 +182,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
@@ -188,17 +200,10 @@ 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'
elif outfname[-4:].upper() == "GRDB":
outformat = 'grdb'
else:
print "Unrecognized format for output file %s" % outfname
print "Ignoring output file: %s" % outfname
@@ -206,7 +211,7 @@ class ArgHandler:
self.exports.append((outfname,outformat))
elif o in ( '-a', '--action' ):
action = v
if action not in ( 'check', 'summary', 'report' ):
if action not in ( 'check', 'summary', 'report', 'tool' ):
print "Unknown action: %s. Ignoring." % action
continue
options_str = ""
@@ -286,7 +291,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:
@@ -297,7 +303,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:
@@ -339,11 +347,13 @@ class ArgHandler:
os._exit(1)
if self.imports:
self.parent.cl = bool(self.exports or self.actions or self.parent.cl)
self.parent.cl = bool(self.exports or
self.actions or self.parent.cl)
# 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)
@@ -374,16 +384,16 @@ class ArgHandler:
print "Launching interactive session..."
if self.parent.cl:
for expt in self.exports:
print "Exporting: file %s, format %s." % expt
self.cl_export(expt[0],expt[1])
for (action,options_str) in self.actions:
print "Performing action: %s." % action
if options_str:
print "Using options string: %s" % options_str
self.cl_action(action,options_str)
for expt in self.exports:
print "Exporting: file %s, format %s." % expt
self.cl_export(expt[0],expt[1])
print "Cleaning up."
# remove import db after use
self.parent.db.close()
@@ -432,8 +442,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)
@@ -452,7 +461,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
@@ -500,7 +510,14 @@ class ArgHandler:
Try to write into filename using the format.
Any errors will cause the os._exit(1) call.
"""
if format == 'gedcom':
if format == 'grdb':
import WriteGrdb
try:
WriteGrdb.exportData(self.parent.db,filename)
except:
print "Error exporting %s" % filename
os._exit(1)
elif format == 'gedcom':
import WriteGedcom
try:
gw = WriteGedcom.GedcomWriter(self.parent.db,None,1,filename)
@@ -510,12 +527,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)
g = WriteXML.XmlWriter(self.parent.db,None,0,1)
ret = g.write(filename)
except:
print "Error exporting %s" % filename
os._exit(1)
@@ -546,7 +562,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
@@ -597,17 +614,44 @@ class ArgHandler:
category = item[1]
report_class = item[2]
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)
if category in (Report.CATEGORY_BOOK,Report.CATEGORY_CODE,
Report.CATEGORY_WEB):
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)
report_class,options_class,
options_str_dict)
return
print "Unknown report name. Available names are:"
for item in PluginMgr.cl_list:
print " %s" % item[0]
elif action == "tool":
try:
options_str_dict = dict( [ tuple(chunk.split('=')) for
chunk in options_str.split(',') ] )
except:
options_str_dict = {}
print "Ignoring invalid options string."
name = options_str_dict.pop('name',None)
if not name:
print "Tool name not given. Please use name=toolname"
os._exit(1)
for item in PluginMgr.cli_tool_list:
if name == item[0]:
category = item[1]
tool_class = item[2]
options_class = item[3]
Tool.cli_tool(self.parent.db,name,category,
tool_class,options_class,options_str_dict)
return
print "Unknown tool name. Available names are:"
for item in PluginMgr.cli_tool_list:
print " %s" % item[0]
else:
print "Unknown action: %s." % action
os._exit(1)

View File

@@ -34,6 +34,8 @@ __version__ = "$Revision$"
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
from cgi import escape
#-------------------------------------------------------------------------
#
@@ -41,7 +43,6 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -53,7 +54,11 @@ import Utils
import Sources
import AutoComp
import RelLib
import Spell
import GrampsDisplay
from QuestionDialog import WarningDialog
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -64,7 +69,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 +93,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")
@@ -118,11 +124,11 @@ class AttributeEditor:
if title == ", ":
title = _("Attribute Editor")
else:
title = _("Attribute Editor for %s") % title
title = _("Attribute Editor for %s") % escape(title)
l = self.top.get_widget("title")
Utils.set_titles(self.window,l,title,_('Attribute Editor'))
AutoComp.fill_combo(self.attrib_menu,list)
AutoComp.fill_combo(self.attrib_menu,data_list)
if attrib != None:
self.type_field.set_text(const.display_attr(attrib.get_type()))
@@ -132,19 +138,28 @@ class AttributeEditor:
if attrib.get_note():
self.note_field.get_buffer().set_text(attrib.get_note())
Utils.bold_label(self.notes_label)
if attrib.get_note_format() == 1:
if attrib.get_note_format() == 1:
self.preform.set_active(1)
else:
else:
self.flowed.set_active(1)
self.top.signal_autoconnect({
"on_help_attr_clicked" : self.on_help_clicked,
"on_ok_attr_clicked" : self.on_ok_clicked,
"on_cancel_attr_clicked" : self.close,
"on_attr_edit_delete_event" : self.on_delete_event,
"on_switch_page" : self.on_switch_page
})
self.gladeif = GladeIf(self.top)
self.gladeif.connect('attr_edit','delete_event', self.on_delete_event)
self.gladeif.connect('button116', 'clicked', self.close)
self.gladeif.connect('button115', 'clicked', self.on_ok_clicked)
self.gladeif.connect('button127', 'clicked', self.on_help_clicked)
self.gladeif.connect('notebook', 'switch_page', self.on_switch_page)
if self.db.readonly:
w = self.top.get_widget("button115")
w.set_sensitive(False)
self.value_field.set_editable(False)
self.note_field.set_editable(False)
self.attrib_menu.set_sensitive(False)
self.priv.set_sensitive(False)
self.flowed.set_sensitive(False)
self.preform.set_sensitive(False)
if parent_window:
self.window.set_transient_for(parent_window)
self.add_itself_to_menu()
@@ -153,11 +168,15 @@ class AttributeEditor:
def on_delete_event(self,obj,b):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
gc.collect()
def close(self,obj):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
self.window.destroy()
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -194,7 +213,7 @@ class AttributeEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-at')
GrampsDisplay.help('adv-at')
def on_ok_clicked(self,obj):
"""

View File

@@ -499,8 +499,8 @@ class ParagraphStyle:
"""
Defines the characteristics of a paragraph. The characteristics are:
font (a FontStyle instance), right margin, left margin, first indent,
alignment, level, top border, bottom border, right border, left
border, padding, and background color.
top margin, bottom margin, alignment, level, top border, bottom border,
right border, left border, padding, and background color.
"""
def __init__(self,source=None):
@@ -513,6 +513,8 @@ class ParagraphStyle:
self.rmargin = source.rmargin
self.lmargin = source.lmargin
self.first_indent = source.first_indent
self.tmargin = source.tmargin
self.bmargin = source.bmargin
self.align = source.align
self.level = source.level
self.top_border = source.top_border
@@ -526,6 +528,8 @@ class ParagraphStyle:
self.font = FontStyle()
self.rmargin = 0
self.lmargin = 0
self.tmargin = 0
self.bmargin = 0
self.first_indent = 0
self.align = PARA_ALIGN_LEFT
self.level = 0
@@ -543,17 +547,19 @@ class ParagraphStyle:
def get_description(self):
return self.description
def set(self,rmargin=None,lmargin=None,first_indent=None,align=None,
def set(self,rmargin=None,lmargin=None,first_indent=None,
tmargin=None,bmargin=None,align=None,
tborder=None,bborder=None,rborder=None,lborder=None,pad=None,
bgcolor=None,font=None):
"""
Allows the values of the object to be set.
@param rmargin: right margin in centimeters
@param lmargin: left margin in centimeters
@param rmargin: right indent in centimeters
@param lmargin: left indent in centimeters
@param first_indent: first line indent in centimeters
align - alignment type (PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT,
PARA_ALIGN_CENTER, or PARA_ALIGN_JUSTIFY)
@param tmargin: space above paragraph in centimeters
@param bmargin: space below paragraph in centimeters
@param align: alignment type (PARA_ALIGN_LEFT, PARA_ALIGN_RIGHT, PARA_ALIGN_CENTER, or PARA_ALIGN_JUSTIFY)
@param tborder: non zero indicates that a top border should be used
@param bborder: non zero indicates that a bottom border should be used
@param rborder: non zero indicates that a right border should be used
@@ -584,6 +590,10 @@ class ParagraphStyle:
self.set_left_margin(lmargin)
if first_indent != None:
self.set_first_indent(first_indent)
if tmargin != None:
self.set_top_margin(tmargin)
if bmargin != None:
self.set_bottom_margin(bmargin)
def set_header_level(self,level):
"""
@@ -719,29 +729,45 @@ class ParagraphStyle:
return "unknown"
def set_left_margin(self,value):
"sets the left paragraph margin in centimeters"
"sets the left indent in centimeters"
self.lmargin = value
def set_right_margin(self,value):
"sets the right paragraph margin in centimeters"
"sets the right indent in centimeters"
self.rmargin = value
def set_first_indent(self,value):
"sets the first indent margin in centimeters"
"sets the first line indent in centimeters"
self.first_indent = value
def set_top_margin(self,value):
"sets the space above paragraph in centimeters"
self.tmargin = value
def set_bottom_margin(self,value):
"sets the space below paragraph in centimeters"
self.bmargin = value
def get_left_margin(self):
"returns the left margin in centimeters"
"returns the left indent in centimeters"
return self.lmargin
def get_right_margin(self):
"returns the right margin in centimeters"
"returns the right indent in centimeters"
return self.rmargin
def get_first_indent(self):
"returns the first indent margin in centimeters"
"returns the first line indent in centimeters"
return self.first_indent
def get_top_margin(self):
"returns the space above paragraph in centimeters"
return self.tmargin
def get_bottom_margin(self):
"returns the space below paragraph in centimeters"
return self.bmargin
#------------------------------------------------------------------------
#
# StyleSheetList
@@ -832,10 +858,14 @@ class StyleSheetList:
rm = float(p.get_right_margin())
lm = float(p.get_left_margin())
fi = float(p.get_first_indent())
tm = float(p.get_top_margin())
bm = float(p.get_bottom_margin())
pa = float(p.get_padding())
f.write('rmargin="%s" ' % Utils.gformat(rm))
f.write('lmargin="%s" ' % Utils.gformat(lm))
f.write('first="%s" ' % Utils.gformat(fi))
f.write('tmargin="%s" ' % Utils.gformat(tm))
f.write('bmargin="%s" ' % Utils.gformat(bm))
f.write('pad="%s" ' % Utils.gformat(pa))
f.write('bgcolor="#%02x%02x%02x" ' % p.get_background_color())
f.write('level="%d" ' % p.get_header_level())
@@ -963,6 +993,13 @@ class SheetParser(handler.ContentHandler):
self.p.set_right_margin(Utils.gfloat(attrs['rmargin']))
self.p.set_left_margin(Utils.gfloat(attrs['lmargin']))
self.p.set_first_indent(Utils.gfloat(attrs['first']))
try:
# This is needed to read older style files
# lacking tmargin and bmargin
self.p.set_top_margin(Utils.gfloat(attrs['tmargin']))
self.p.set_bottom_margin(Utils.gfloat(attrs['bmargin']))
except KeyError:
pass
self.p.set_padding(Utils.gfloat(attrs['pad']))
self.p.set_alignment(int(attrs['align']))
self.p.set_right_border(int(attrs['rborder']))

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2004 Donald N. Allingham
# Copyright (C) 2000-2005 Donald N. Allingham
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@@ -25,21 +25,28 @@
__author__ = "Donald N. Allingham"
__version__ = "$Revision$"
#-------------------------------------------------------------------------
#
# Standard python modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
#-------------------------------------------------------------------------
#
# GTK/Gnome modules
#
#-------------------------------------------------------------------------
import gtk
import gnome
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import GrampsDisplay
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()
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')
GrampsDisplay.help('gramps-nav')
self.response = self.top.run()

View File

@@ -205,12 +205,12 @@ def hebrew_sdn(year, month, day):
else:
length_of_adarI_andII = 59
if month == 4:
sdn = tishri1_after + day - length_of_adarI_andII - 237
elif month == 5:
sdn = tishri1_after + day - length_of_adarI_andII - 208
else:
sdn = tishri1_after + day - length_of_adarI_andII - 178
if month == 4:
sdn = tishri1_after + day - length_of_adarI_andII - 237
elif month == 5:
sdn = tishri1_after + day - length_of_adarI_andII - 208
else:
sdn = tishri1_after + day - length_of_adarI_andII - 178
else:
# It is Adar II or later - don't need the year length.
(metonic_cycle,metonic_year,molad_day,molad_halakim,tishri1_after) = _start_of_year(year+1)

View File

@@ -34,6 +34,7 @@ __version__ = "$Revision$"
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
#-------------------------------------------------------------------------
#
@@ -42,13 +43,14 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gtk.glade
import gtk.gdk
import gnome
import gobject
#-------------------------------------------------------------------------
#
# gramps modules
#
#-------------------------------------------------------------------------
import GrampsDisplay
import RelLib
import const
import Utils
@@ -58,6 +60,7 @@ import NameDisplay
import DateHandler
import GenericFilter
from QuestionDialog import ErrorDialog, WarningDialog
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -90,19 +93,26 @@ class ChooseParents:
self.parent_selected = 0
self.renderer = gtk.CellRendererText()
db.connect('person-add', self.redraw)
db.connect('person-update', self.redraw)
db.connect('person-delete', self.redraw)
db.connect('person-rebuild', self.redraw)
self.sig_keys = [
db.connect('person-add', self.person_added),
db.connect('person-update', self.redraw),
db.connect('person-delete', self.redraw),
db.connect('person-rebuild', self.redraw_all)]
# set default filters
self.all_males_filter = GenericFilter.GenericFilter()
self.all_males_filter.add_rule(GenericFilter.IsMale([]))
self.likely_males_filter = self.build_likely(True)
self.all_females_filter = GenericFilter.GenericFilter()
self.all_females_filter.add_rule(GenericFilter.IsFemale([]))
self.likely_females_filter = self.build_likely(False)
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:
self.likely_males_filter = self.all_males_filter
self.likely_females_filter = self.all_females_filter
self.father_filter = self.likely_males_filter
self.mother_filter = self.likely_females_filter
@@ -115,7 +125,13 @@ class ChooseParents:
self.father = None
self.glade = gtk.glade.XML(const.gladeFile,"familyDialog","gramps")
self.gladeif = GladeIf(self.glade)
self.window = self.glade.get_widget("familyDialog")
self.flabel = self.glade.get_widget("flabel")
self.mlabel = self.glade.get_widget("mlabel")
self.window.window.set_cursor(gtk.gdk.Cursor(gtk.gdk.WATCH))
self.mlabel.set_label("<i>%s</i>" % _("Loading..."))
self.flabel.set_label("<i>%s</i>" % _("Loading..."))
name = NameDisplay.displayer.display(self.person)
self.title_text = _("Choose the Parents of %s") % name
@@ -128,14 +144,11 @@ class ChooseParents:
self.title = self.glade.get_widget("chooseTitle")
self.father_list = self.glade.get_widget("father_list")
self.mother_list = self.glade.get_widget("mother_list")
self.flabel = self.glade.get_widget("flabel")
self.mlabel = self.glade.get_widget("mlabel")
self.showallf = self.glade.get_widget('showallf')
self.showallm = self.glade.get_widget('showallm')
self.add_itself_to_menu()
self.build_father_list()
self.build_mother_list()
gobject.idle_add(self.draw_list)
if gtk.gdk.screen_height() > 700:
self.father_list.set_size_request(-1,150)
@@ -156,26 +169,35 @@ class ChooseParents:
self.type = RelLib.Family.MARRIED
self.prel.set_active(self.type)
self.redrawm()
self.glade.signal_autoconnect({
"on_add_parent_clicked" : self.add_parent_clicked,
"on_prel_changed" : self.parent_relation_changed,
"destroy_passed_object" : self.close,
"on_showallf_toggled" : self.showallf_toggled,
"on_showallm_toggled" : self.showallm_toggled,
"on_save_parents_clicked" : self.save_parents_clicked,
"on_help_familyDialog_clicked" : self.on_help_clicked,
"on_familyDialog_delete_event" : self.on_delete_event,
})
self.gladeif.connect('familyDialog','delete_event', self.on_delete_event)
self.gladeif.connect('button44','clicked', self.close)
self.gladeif.connect('button42','clicked', self.save_parents_clicked)
self.gladeif.connect('button167','clicked', self.on_help_clicked)
self.gladeif.connect('button123','clicked', self.add_parent_clicked)
self.gladeif.connect('showallf','toggled', self.showallf_toggled)
self.gladeif.connect('prel_combo','changed', self.parent_relation_changed)
self.keys = const.child_rel_list
self.build_list(self.mcombo,mrel)
self.build_list(self.fcombo,frel)
self.window.show()
def draw_list(self):
self.build_father_list()
self.build_mother_list()
self.window.window.set_cursor(None)
def build_likely(self,is_male):
filt = GenericFilter.GenericFilter()
if is_male:
filt.add_rule(LikelyFather([self.person.handle]))
else:
filt.add_rule(LikelyMother([self.person.handle]))
return filt
def build_likely2(self,is_male):
birth_handle = self.person.get_birth_handle()
filt = GenericFilter.GenericFilter()
@@ -227,31 +249,46 @@ class ChooseParents:
self.redrawm()
def add_columns(self,tree):
column = gtk.TreeViewColumn(_('Name'), self.renderer,text=0)
column.set_resizable(True)
column.set_clickable(True)
column.set_sort_column_id(0)
column.set_min_width(225)
column.set_fixed_width(255)
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
tree.append_column(column)
column = gtk.TreeViewColumn(_('ID'), self.renderer,text=1)
column.set_resizable(True)
column.set_clickable(True)
column.set_sort_column_id(1)
column.set_min_width(75)
column.set_fixed_width(75)
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
#column.set_min_width(75)
tree.append_column(column)
column = gtk.TreeViewColumn(_('Birth date'), self.renderer,text=3)
#column.set_resizable(True)
column.set_clickable(True)
column.set_fixed_width(150)
column.set_sizing(gtk.TREE_VIEW_COLUMN_FIXED)
tree.append_column(column)
def on_delete_event(self,obj,b):
self.gladeif.close()
self.remove_itself_from_menu()
self.close_child_windows()
gc.collect()
def close(self,obj):
self.gladeif.close()
self.remove_itself_from_menu()
self.close_child_windows()
self.window.destroy()
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -281,12 +318,50 @@ class ChooseParents:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-edit-quick')
GrampsDisplay.help('gramps-edit-quick')
def person_added(self,handle_list):
update_father = False
update_mother = False
for handle in handle_list:
person = self.db.get_person_from_handle(handle)
if person.get_gender() == RelLib.Person.MALE:
update_father = True
elif person.get_gender() == RelLib.Person.FEMALE:
update_mother = True
if update_father:
self.person_added_base(handle_list,self.father_model,
self.father_filter)
if update_mother:
self.person_added_base(handle_list,self.mother_model,
self.mother_filter)
def person_added_base(self,handle_list,model,data_filter):
for node in handle_list:
person = self.db.get_person_from_handle(node)
top = person.get_primary_name().get_group_name()
model.rebuild_data(data_filter)
if not model.is_visable(node):
continue
if (not model.sname_sub.has_key(top) or
len(model.sname_sub[top]) == 1):
path = model.on_get_path(top)
pnode = model.get_iter(path)
model.row_inserted(path,pnode)
path = model.on_get_path(node)
pnode = model.get_iter(path)
model.row_inserted(path,pnode)
def redraw(self,handle_list):
self.redrawf()
self.redrawm()
def redraw_all(self):
self.redrawf()
self.redrawm()
def redrawf(self):
"""Redraws the potential father list"""
self.father_model = PeopleModel.PeopleModel(self.db,self.father_filter)
@@ -300,8 +375,8 @@ class ChooseParents:
def redrawm(self):
"""Redraws the potential mother list"""
self.mother_model = PeopleModel.PeopleModel(self.db,self.mother_filter)
self.mother_list.set_model(self.mother_model)
self.mother_list.set_model(self.mother_model)
if self.type == RelLib.Family.CIVIL_UNION:
self.mlabel.set_label("<b>%s</b>" % _("Pa_rent"))
else:
@@ -330,7 +405,7 @@ class ChooseParents:
self.mother_filter = self.likely_females_filter
self.redrawm()
def find_family(self,father_handle,mother_handle,trans):
def find_family(self,father_handle,mother_handle):
"""
Finds the family associated with the father and mother.
If one does not exist, it is created.
@@ -343,30 +418,25 @@ class ChooseParents:
if (family.get_father_handle() == father_handle and
family.get_mother_handle() == mother_handle):
family.add_child_handle(self.person.get_handle())
self.db.commit_family(family,trans)
return family
elif (family.get_father_handle() == mother_handle and
family.get_mother_handle() == father_handle):
family.add_child_handle(self.person.get_handle())
self.db.commit_family(family,trans)
return family
family = RelLib.Family()
family.set_father_handle(father_handle)
family.set_mother_handle(mother_handle)
family.add_child_handle(self.person.get_handle())
self.db.add_family(family,trans)
family.set_handle(self.db.create_id())
family.set_gramps_id(self.db.find_next_family_gramps_id())
if father_handle:
self.father = self.db.get_person_from_handle(father_handle)
self.father.add_family_handle(family.get_handle())
self.db.commit_person(self.father,trans)
if mother_handle:
self.mother = self.db.get_person_from_handle(mother_handle)
self.mother.add_family_handle(family.get_handle())
self.db.commit_person(self.mother,trans)
self.db.commit_family(family,trans)
return family
def father_select_function(self,store,path,iter,id_list):
@@ -444,6 +514,10 @@ class ChooseParents:
Called with the OK button is pressed. Saves the selected people
as parents of the main person.
"""
for key in self.sig_keys:
self.db.disconnect(key)
try:
mother_rel = self.mcombo.get_active()
except KeyError:
@@ -455,25 +529,23 @@ class ChooseParents:
father_rel = RelLib.Person.CHILD_REL_BIRTH
trans = self.db.transaction_begin()
father_handle = None
mother_handle = None
if self.father or self.mother:
if self.mother and not self.father:
if self.mother.get_gender() == RelLib.Person.MALE:
self.father = self.mother
father_handle = self.father.get_handle()
self.mother = None
mother_handle = None
else:
mother_handle = self.mother.get_handle()
father_handle = None
elif self.father and not self.mother:
if self.father.get_gender() == RelLib.Person.FEMALE:
self.mother = self.father
self.father = None
mother_handle = self.mother.get_handle()
father_handle = None
else:
father_handle = self.father.get_handle()
mother_handle = None
elif self.mother.get_gender() != self.father.get_gender():
if self.type == "Partners":
self.type = "Unknown"
@@ -485,20 +557,26 @@ class ChooseParents:
self.type = "Partners"
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)
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.change_family_type(self.family,mother_rel,father_rel,trans)
self.db.commit_person(self.person,trans)
if self.father:
self.db.commit_person(self.father,trans)
if self.mother:
self.db.commit_person(self.mother,trans)
self.db.commit_family(self.family,trans)
else:
self.family = None
self.db.transaction_commit(trans,_("Choose Parents"))
self.close(None)
@@ -522,7 +600,7 @@ class ChooseParents:
self.father_list.scroll_to_cell(path,None,1,0.5,0)
except KeyError:
self.father_filter = self.all_males_filter
self.showallf_toggled(None)
self.redrawf()
path = self.father_model.on_get_path(handle)
top_path = self.father_model.on_get_path(name)
self.father_list.expand_row(top_path,0)
@@ -537,7 +615,7 @@ class ChooseParents:
self.mother_list.scroll_to_cell(path,None,1,0.5,0)
except:
self.mother_filter = self.all_females_filter
self.showallm_toggled(None)
self.redrawm()
path = self.mother_model.on_get_path(handle)
top_path = self.mother_model.on_get_path(name)
self.mother_list.expand_row(top_path,0)
@@ -549,7 +627,7 @@ class ChooseParents:
class to create a new person."""
person = RelLib.Person()
person.set_gender(RelLib.Person.MALE)
person.set_gender(RelLib.Person.UNKNOWN)
try:
import EditPerson
@@ -558,7 +636,7 @@ class ChooseParents:
import DisplayTrace
DisplayTrace.DisplayTrace()
def change_family_type(self,family,mother_rel,father_rel):
def change_family_type(self,family,mother_rel,father_rel,trans):
"""
Changes the family type of the specified family. If the family
is None, the the relationship type shoud be deleted.
@@ -579,15 +657,6 @@ class ChooseParents:
self.person.add_parent_family_handle(family_handle,
mother_rel,father_rel)
trans = self.db.transaction_begin()
self.db.commit_person(self.person,trans)
self.db.commit_family(family,trans)
if self.father:
self.db.commit_person(self.father,trans)
if self.mother:
self.db.commit_person(self.mother,trans)
self.db.transaction_commit(trans,_("Choose Parents"))
#-------------------------------------------------------------------------
#
# ModifyParents
@@ -612,6 +681,7 @@ class ModifyParents:
self.mother = self.db.get_person_from_handle(mid)
self.glade = gtk.glade.XML(const.gladeFile,"modparents","gramps")
self.gladeif = GladeIf(self.glade)
self.window = self.glade.get_widget("modparents")
self.title = self.glade.get_widget("title")
@@ -633,9 +703,7 @@ class ModifyParents:
self.orig_mrel = mr
self.orig_frel = fr
self.glade.signal_autoconnect({
"on_parents_help_clicked" : self.on_help_clicked,
})
self.gladeif.connect('button165','clicked', self.on_help_clicked)
self.title.set_use_markup(True)
@@ -683,7 +751,9 @@ class ModifyParents:
self.val = self.window.run()
if self.val == gtk.RESPONSE_OK:
self.save_parents_clicked()
self.gladeif.close()
self.window.destroy()
gc.collect()
def build_list(self,opt_menu,sel):
store = gtk.ListStore(str)
@@ -694,7 +764,7 @@ class ModifyParents:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','gramps-spec-par')
GrampsDisplay.help('gramps-spec-par')
self.val = self.window.run()
def save_parents_clicked(self):
@@ -730,3 +800,53 @@ class ModifyParents:
trans = self.db.transaction_begin()
self.db.commit_person(self.person,trans)
self.db.transaction_commit(trans,_("Modify Parents"))
#-------------------------------------------------------------------------
#
# Likely Filters
#
#-------------------------------------------------------------------------
class LikelyFilter(GenericFilter.Rule):
labels = [ 'Person handle' ]
category = _('General filters')
def __init__(self,data_list,gender):
GenericFilter.Rule.__init__(self,data_list)
self.gender = gender
def prepare(self,db):
person = db.get_person_from_handle(self.list[0])
birth = db.get_event_from_handle(person.birth_handle)
dateobj = Date.Date(birth.date)
year = dateobj.get_year()
dateobj.set_year(year-10)
self.lower = dateobj.sortval
dateobj.set_year(year-70)
self.upper = dateobj.sortval
def apply(self,db,person):
if person.gender != self.gender:
return False
if not person.birth_handle:
return True
event = db.get_event_from_handle(person.birth_handle)
return (event.date == None or event.date.sortval == 0 or
self.lower > event.date.sortval > self.upper)
class LikelyFather(LikelyFilter):
name = _('Likely Father')
description = _('Matches likely fathers')
def __init__(self,data_list):
LikelyFilter.__init__(self,data_list,RelLib.Person.MALE)
class LikelyMother(LikelyFilter):
name = _('Likely Mother')
description = _('Matches likely mothers')
def __init__(self,data_list):
LikelyFilter.__init__(self,data_list,RelLib.Person.FEMALE)

View File

@@ -25,6 +25,9 @@
#-------------------------------------------------------------------------
import gobject
import gtk.glade
import gc
import const
from gettext import gettext as _
@@ -72,9 +75,11 @@ class ColumnOrder:
self.model.get_value(node,2)))
self.callback(newlist)
self.top.destroy()
gc.collect()
def cancel_clicked(self,obj):
self.top.destroy()
gc.collect()
def toggled(self, cell, path, model):
node = model.get_iter((int(path),))

View File

@@ -122,7 +122,7 @@ class Date:
self.sortval = source.sortval
else:
self.calendar = CAL_GREGORIAN
self.modifier = MOD_TEXTONLY
self.modifier = MOD_NONE
self.quality = QUAL_NONE
self.dateval = EMPTY
self.text = u""
@@ -156,13 +156,14 @@ class Date:
instance IN ALL REGARDS. Needed, because the __cmp__ only looks
at the sorting value, and ignores the modifiers/comments.
"""
return (self.calendar == other.calendar and
self.modifier == other.modifier and
self.quality == other.quality and
self.dateval == other.dateval and
self.text == other.text and
self.sortval == other.sortval)
if self.modifier == other.modifier and self.modifier == MOD_TEXTONLY:
value = self.text == other.text
else:
value = (self.calendar == other.calendar and
self.modifier == other.modifier and
self.quality == other.quality and
self.dateval == other.dateval)
return value
def __str__(self):
"""
@@ -340,6 +341,7 @@ class Date:
"""
"""
self.dateval = self.dateval[0:2] + (year,) + self.dateval[3:]
self.calc_sort_value()
def get_year_valid(self):
return self._get_low_item_valid(_POS_YR)
@@ -454,10 +456,22 @@ class Date:
year = max(value[_POS_YR],1)
month = max(value[_POS_MON],1)
day = max(value[_POS_DAY],1)
self.sortval = _calendar_convert[calendar](year,month,day)
if year == 0 and month == 0 and day == 0:
self.sortval = 0
else:
self.sortval = _calendar_convert[calendar](year,month,day)
if text:
self.text = text
def calc_sort_value(self):
year = max(self.dateval[_POS_YR],1)
month = max(self.dateval[_POS_MON],1)
day = max(self.dateval[_POS_DAY],1)
if year == 0 and month == 0 and day == 0:
self.sortval = 0
else:
self.sortval = _calendar_convert[self.calendar](year,month,day)
def convert_calendar(self,calendar):
"""
Converts the date from the current calendar to the specified
@@ -497,7 +511,8 @@ class Date:
"""
Returns True if the date contains no information (empty text).
"""
return self.modifier == MOD_TEXTONLY and not self.text
return (self.modifier == MOD_TEXTONLY and not self.text) or \
(self.get_start_date()==EMPTY and self.get_stop_date()==EMPTY)
def is_compound(self):
"""

View File

@@ -186,17 +186,13 @@ class DateDisplay:
def _slash_year(self,val,slash):
if val < 0:
val = - val
# self._bce_str is a localizes string that prints B.C.E. at the apropriate place
format_string = self._bce_str
else:
format_string = "%s"
if slash:
year = "%d/%d" % (val,(val%10)+1)
else:
year = "%d" % (val)
return format_string % year
return year
def display_iso(self,date_val):
# YYYY-MM-DD (ISO)
@@ -208,7 +204,10 @@ class DateDisplay:
value = "%s-%02d" % (year,date_val[1])
else:
value = "%s-%02d-%02d" % (year,date_val[1],date_val[0])
return value
if date_val[2] < 0:
return self._bce_str % value
else:
return value
def text_display(self,date):
"""
@@ -221,14 +220,15 @@ class DateDisplay:
def _display_gregorian(self,date_val):
year = self._slash_year(date_val[2],date_val[3])
if self.format == 0:
value = self.display_iso(date_val)
return self.display_iso(date_val)
elif self.format == 1:
if date_val[0] == 0 and date_val[1] == 0:
value = str(date_val[2])
else:
value = self._tformat.replace('%m',str(date_val[1]))
value = value.replace('%d',str(date_val[0]))
value = value.replace('%Y',str(date_val[2]))
value = value.replace('%Y',str(abs(date_val[2])))
value = value.replace('-','/')
elif self.format == 2:
# Month Day, Year
if date_val[0] == 0:
@@ -265,27 +265,48 @@ class DateDisplay:
value = "%s %s" % (self._MONS[date_val[1]],year)
else:
value = "%d %s %s" % (date_val[0],self._MONS[date_val[1]],year)
return value
if date_val[2] < 0:
return self._bce_str % value
else:
return value
def _display_julian(self,date_val):
# Julian date display is the same as Gregorian
return self._display_gregorian(date_val)
def _display_calendar(self,date_val,month_list):
year = date_val[2]
year = abs(date_val[2])
if self.format == 0 or self.format == 1:
return self.display_iso(date_val)
else:
if date_val[0] == 0:
if date_val[1] == 0:
return year
value = year
else:
return u"%s %d" % (month_list[date_val[1]],year)
value = u"%s %d" % (month_list[date_val[1]],year)
else:
return u"%s %d, %s" % (month_list[date_val[1]],date_val[0],year)
value = u"%s %d, %s" % (month_list[date_val[1]],date_val[0],year)
if date_val[2] < 0:
return self._bce_str % value
else:
return value
def _display_french(self,date_val):
return self._display_calendar(date_val,self._french)
year = abs(date_val[2])
if self.format == 0 or self.format == 1:
return self.display_iso(date_val)
else:
if date_val[0] == 0:
if date_val[1] == 0:
value = year
else:
value = u"%s %d" % (self._french[date_val[1]],year)
else:
value = u"%d %s %s" % (date_val[0],self._french[date_val[1]],year)
if date_val[2] < 0:
return self._bce_str % value
else:
return value
def _display_hebrew(self,date_val):
return self._display_calendar(date_val,self._hebrew)

View File

@@ -42,6 +42,7 @@ __version__ = "$Revision$"
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
#-------------------------------------------------------------------------
#
@@ -51,8 +52,6 @@ from gettext import gettext as _
import gtk
import gtk.gdk
import gtk.glade
import gobject
import gnome
#-------------------------------------------------------------------------
#
@@ -63,7 +62,7 @@ import Date
import DateHandler
import const
import Utils
import QuestionDialog
import GrampsDisplay
#-------------------------------------------------------------------------
#
@@ -80,8 +79,8 @@ MOD_TEXT = (
(Date.MOD_TEXTONLY , _('Text only')) )
QUAL_TEXT = (
(Date.QUAL_NONE, _('Regular')),
(Date.QUAL_ESTIMATED, _('Estimated')),
(Date.QUAL_NONE, _('Regular')),
(Date.QUAL_ESTIMATED, _('Estimated')),
(Date.QUAL_CALCULATED, _('Calculated')) )
CAL_TO_MONTHS_NAMES = {
@@ -119,6 +118,7 @@ class DateEdit:
self.parent_window = parent_window
self.pixmap_obj = button_obj.get_child()
self.text_obj.connect('focus-out-event',self.parse_and_check)
self.button_obj.connect('clicked',self.invoke_date_editor)
@@ -130,11 +130,11 @@ class DateEdit:
Check current date object and display LED indicating the validity.
"""
if self.date_obj.get_modifier() == Date.MOD_TEXTONLY:
self.pixmap_obj.set_from_pixbuf(self.bad)
self.pixmap_obj.set_from_pixbuf(self.pixmap_obj.render_icon(gtk.STOCK_DIALOG_ERROR,gtk.ICON_SIZE_MENU))
elif self.date_obj.is_regular():
self.pixmap_obj.set_from_pixbuf(self.good)
self.pixmap_obj.set_from_pixbuf(self.pixmap_obj.render_icon(gtk.STOCK_YES,gtk.ICON_SIZE_MENU))
else:
self.pixmap_obj.set_from_pixbuf(self.caution)
self.pixmap_obj.set_from_pixbuf(self.pixmap_obj.render_icon(gtk.STOCK_DIALOG_WARNING,gtk.ICON_SIZE_MENU))
def parse_and_check(self,obj,val):
"""
@@ -258,10 +258,8 @@ class DateEditorDialog:
while 1:
response = self.top_window.run()
if response == gtk.RESPONSE_HELP:
try:
gnome.help_display('gramps-manual','adv-dates')
except gobject.GError, msg:
QuestionDialog.ErrorDialog(_("Could not open help"),str(msg))
GrampsDisplay.help('adv-dates')
elif response == gtk.RESPONSE_OK:
(the_quality,the_modifier,the_calendar,the_value,the_text) = \
self.build_date_from_ui()
@@ -276,6 +274,7 @@ class DateEditorDialog:
else:
break
self.top_window.destroy()
gc.collect()
def build_date_from_ui(self):
"""

View File

@@ -118,9 +118,9 @@ load_plugins(datesDir)
try:
if _lang_to_parser.has_key(_lang):
parser = _lang_to_parser[_lang]
parser = _lang_to_parser[_lang]()
else:
parser = _lang_to_parser[_lang_short]
parser = _lang_to_parser[_lang_short]()
except:
print "Date parser for",_lang,"not available, using default"
parser = _lang_to_parser["C"]()

View File

@@ -119,6 +119,7 @@ class DateParser:
unicode(locale.nl_langinfo(locale.ABMON_12),_codeset).lower(): 12,
}
# modifiers before the date
modifier_to_int = {
'before' : Date.MOD_BEFORE, 'bef' : Date.MOD_BEFORE,
'bef.' : Date.MOD_BEFORE, 'after' : Date.MOD_AFTER,
@@ -127,6 +128,9 @@ class DateParser:
'abt' : Date.MOD_ABOUT, 'circa' : Date.MOD_ABOUT,
'c.' : Date.MOD_ABOUT, 'around' : Date.MOD_ABOUT,
}
# in some languages some of above listed modifiers are after the date,
# in that case the subclass should put them into this dictionary instead
modifier_after_to_int = {}
hebrew_to_int = {
"tishri" : 1, "heshvan" : 2, "kislev" : 3,
@@ -137,9 +141,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,
@@ -205,6 +209,7 @@ class DateParser:
self.parser = {
Date.CAL_GREGORIAN : self._parse_greg_julian,
Date.CAL_JULIAN : self._parse_greg_julian,
Date.CAL_FRENCH : self._parse_french,
Date.CAL_PERSIAN : self._parse_persian,
Date.CAL_HEBREW : self._parse_hebrew,
Date.CAL_ISLAMIC : self._parse_islamic,
@@ -236,9 +241,15 @@ class DateParser:
self._qual_str = '(' + '|'.join(
[ key.replace('.','\.') for key in self.quality_to_int.keys() ]
) + ')'
keys = self.modifier_to_int.keys()
keys.sort(lambda x, y: cmp(len(y), len(x)))
self._mod_str = '(' + '|'.join(
[ key.replace('.','\.') for key in self.modifier_to_int.keys() ]
[ key.replace('.','\.') for key in keys ]
) + ')'
self._mod_after_str = '(' + '|'.join(
[ key.replace('.','\.') for key in self.modifier_after_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,30 +274,31 @@ class DateParser:
re.IGNORECASE)
self._modifier = re.compile('%s\s+(.*)' % self._mod_str,
re.IGNORECASE)
self._text = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._mon_str,
self._modifier_after = re.compile('(.*)\s+%s' % self._mod_after_str,
re.IGNORECASE)
self._text2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._mon_str,
self._abt2 = re.compile('<(.*)>',re.IGNORECASE)
self._text = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._mon_str,
re.IGNORECASE)
self._jtext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._jmon_str,
self._text2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._mon_str,
re.IGNORECASE)
self._jtext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._jmon_str,
self._jtext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str,
re.IGNORECASE)
self._ftext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._fmon_str,
self._jtext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._jmon_str,
re.IGNORECASE)
self._ftext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._fmon_str,
self._ftext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str,
re.IGNORECASE)
self._ptext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._pmon_str,
self._ftext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._fmon_str,
re.IGNORECASE)
self._ptext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._pmon_str,
self._ptext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str,
re.IGNORECASE)
self._itext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?' % self._imon_str,
self._ptext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._pmon_str,
re.IGNORECASE)
self._itext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?' % self._imon_str,
self._itext = re.compile('%s\s+(\d+)?\s*,?\s*((\d+)(/\d+)?)?\s*$' % self._imon_str,
re.IGNORECASE)
self._range2 = re.compile('%s\s+(\d+)-(\d+)\s*,?\s*((\d+)(/\d+)?)?' % self._mon_str,
self._itext2 = re.compile('(\d+)?\s+?%s\s*((\d+)(/\d+)?)?\s*$' % self._imon_str,
re.IGNORECASE)
self._numeric = re.compile("((\d+)[/\.])?((\d+)[/\.])?(\d+)")
self._iso = re.compile("(\d+)-(\d+)-(\d+)")
self._numeric = re.compile("((\d+)[/\.])?((\d+)[/\.])?(\d+)\s*$")
self._iso = re.compile("(\d+)-(\d+)-(\d+)\s*$")
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"
% (self._rfc_day_str,self._rfc_mon_str))
@@ -371,6 +383,8 @@ class DateParser:
"""
if subparser == None:
subparser = self._parse_greg_julian
if subparser == self._parse_greg_julian:
check = gregorian_valid
else:
check = None
@@ -474,31 +488,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.
@@ -518,6 +507,7 @@ class DateParser:
On success, set the date and return 1. On failure return 0.
"""
# modifiers before the date
match = self._modifier.match(text)
if match:
grps = match.groups()
@@ -527,50 +517,61 @@ class DateParser:
date.set(qual,mod,cal,self.invert_year(start))
else:
date.set(qual,mod,cal,start)
return 1
return 0
return True
# modifiers after the date
if self.modifier_after_to_int:
match = self._modifier_after.match(text)
if match:
grps = match.groups()
start = self._parse_subdate(grps[0])
mod = self.modifier_after_to_int.get(grps[1].lower(),Date.MOD_NONE)
if bc:
date.set(qual,mod,cal,self.invert_year(start))
else:
date.set(qual,mod,cal,start)
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):
"""
Parses the text and sets the date according to the parsing.
"""
date.set_text_value(text)
qual = Date.QUAL_NONE
cal = Date.CAL_GREGORIAN
(text,cal) = self.match_calendar(text,cal)
(text,qual) = self.match_quality(text,qual)
if self.match_span(text,cal,qual,date):
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):
return
subdate = self._parse_subdate(text)
if subdate == Date.EMPTY:
subdate = self._parse_hebrew(text)
if subdate == Date.EMPTY:
subdate = self._parse_persian(text)
if subdate == Date.EMPTY:
subdate = self._parse_islamic(text)
if subdate == Date.EMPTY:
subdate = self._parse_french(text)
if subdate == Date.EMPTY:
date.set_as_text(text)
return
else:
cal = Date.CAL_FRENCH
else:
cal = Date.CAL_ISLAMIC
else:
cal = Date.CAL_PERSIAN
else:
cal = Date.CAL_HEBREW
try:
subdate = self._parse_subdate(text,self.parser[cal])
if subdate == Date.EMPTY and text != "":
date.set_as_text(text)
return
except:
date.set_as_text(text)
return
if bc:
date.set(qual,Date.MOD_NONE,cal,self.invert_year(subdate))

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -35,8 +35,6 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gtk
import gtk.glade
import gobject
import gnome
try:
from gnomevfs import get_mime_type
@@ -61,6 +59,7 @@ import ReadGrdb
import WriteGrdb
import WriteXML
import WriteGedcom
import GrampsDisplay
from bsddb import db
@@ -93,30 +92,74 @@ class DbPrompter:
title = opendb.get_widget('title')
Utils.set_titles(top,title,_('Open a database'))
recent = opendb.get_widget("recent")
existing = opendb.get_widget("existing")
new = opendb.get_widget("new")
new.set_active(want_new)
filelist = opendb.get_widget("filelist")
# write in recent file into UI
gramps_rf = RecentFiles.GrampsRecentFiles()
gramps_rf.gramps_recent_files.sort()
gramps_rf.gramps_recent_files.reverse()
self.recent_files = []
if gramps_rf.gramps_recent_files:
# if recent files have been stored
cell = gtk.CellRendererText()
filelist.pack_start(cell,True)
filelist.add_attribute(cell,'text',0)
store = gtk.ListStore(str)
for item in gramps_rf.gramps_recent_files:
try:
filename = os.path.basename(item.get_path())
filetype = get_mime_type(item.get_path())
node = store.append()
store.set(node,0,unicode(filename))
self.recent_files.append( (item.get_path(), filetype))
except RuntimeError:
pass # ignore no longer existing files
if self.recent_files:
filelist.set_model(store)
filelist.set_active(0)
else:
recent.set_sensitive(False)
filelist.set_sensitive(False)
else:
recent.set_sensitive(False)
filelist.set_sensitive(False)
if want_new:
new.set_active(True)
else:
if not self.recent_files:
existing.set_active(True)
while 1:
top.show()
response = top.run()
top.hide()
if response == gtk.RESPONSE_OK:
if new.get_active():
prompter = NewNativeDbPrompter(self.parent,
self.parent_window)
else:
prompter = ExistingDbPrompter(self.parent,
try:
if response == gtk.RESPONSE_OK:
if recent.get_active():
(filename,filetype) = self.recent_files[filelist.get_active()]
if open_native(self.parent,filename,filetype):
break
continue
elif new.get_active():
prompter = NewNativeDbPrompter(self.parent,
self.parent_window)
else:
prompter = ExistingDbPrompter(self.parent,
self.parent_window)
if prompter.chooser():
if prompter.chooser():
break
elif response == gtk.RESPONSE_CANCEL:
break
elif response == gtk.RESPONSE_CANCEL:
break
elif response == gtk.RESPONSE_HELP:
try:
gnome.help_display('gramps-manual','choose-db-start')
except gobject.GError,msg:
QuestionDialog.ErrorDialog(_('Help not available'),msg)
elif response == gtk.RESPONSE_HELP:
GrampsDisplay.help('choose-db-start')
except:
import sys
QuestionDialog.ErrorDialog(_("Could not open file"),str(sys.exc_info()[1]))
top.destroy()
if response == gtk.RESPONSE_CANCEL:
@@ -396,7 +439,7 @@ class NewNativeDbPrompter:
filename = filename + ".grdb"
choose.destroy()
try:
self.parent.db.close()
close(self.parent)
except:
pass
self.parent.db = GrampsBSDDB.GrampsBSDDB()
@@ -487,15 +530,15 @@ class NewSaveasDbPrompter:
return False
if filetype == const.app_gramps:
WriteGrdb.exportData(self.parent.db,filename,None,None)
self.parent.db.close()
close(self.parent)
self.parent.db = GrampsBSDDB.GrampsBSDDB()
elif filetype == const.app_gramps_xml:
WriteXML.exportData(self.parent.db,filename,None,None)
self.parent.db.close()
close(self.parent)
self.parent.db = GrampsXMLDB.GrampsXMLDB()
elif filetype == const.app_gedcom:
WriteGedcom.exportData(self.parent.db,filename,None,None)
self.parent.db.close()
close(self.parent)
self.parent.db = GrampsGEDDB.GrampsGEDDB()
self.parent.read_file(filename)
# Add the file to the recent items
@@ -510,14 +553,22 @@ class NewSaveasDbPrompter:
#-------------------------------------------------------------------------
#
# Helper function
# Helper functions
#
#-------------------------------------------------------------------------
def close(parent):
# Close existing dialogs
for window in parent.child_windows.values():
window.close()
parent.db.close()
def open_native(parent,filename,filetype):
"""
Open native database and return the status.
"""
close(parent)
(the_path,the_file) = os.path.split(filename)
GrampsKeys.save_last_import_dir(the_path)
@@ -547,6 +598,8 @@ def open_native(parent,filename,filetype):
# Add the file to the recent items
RecentFiles.recent_files(filename,filetype)
parent.build_recent_menu()
else:
parent.db = GrampsBSDDB.GrampsBSDDB()
return success

View File

@@ -135,11 +135,11 @@ class _DdTargets(object):
# List of all the test types. These are types
# that can be interpreted as text.
self._all_text_types = (self.TEXT,
self._all_text_types = (self.UTF8_STRING,
self.TEXT,
self.TEXT_MIME,
self.STRING,
self.COMPOUND_TEXT,
self.UTF8_STRING)
self.COMPOUND_TEXT)
def insert(self,dd_type):
"""Add a target to the lookup lists. These lists are

View File

@@ -163,7 +163,7 @@ class BaseModel(gtk.GenericTreeModel):
def on_iter_children(self,node):
"""Return the first child of the node"""
if node == None:
if node == None and self.datalist:
return self.datalist[0]
return None
@@ -456,10 +456,16 @@ class MediaModel(BaseModel):
return len(self.fmap)+1
def column_description(self,data):
return unicode(data[4])
try:
return unicode(data[4])
except:
return unicode(data[4],'latin1')
def column_path(self,data):
return unicode(data[2])
try:
return unicode(data[2])
except:
return unicode(data[2].encode('iso-8859-1'))
def column_mime(self,data):
if data[3]:

View File

@@ -107,7 +107,9 @@ class DisplayTrace:
window.get_buffer().set_text(msg.getvalue())
print msg.getvalue()
self.glade.signal_autoconnect({'on_close_clicked':self.close})
window.connect('delete_event',self.close)
self.glade.get_widget('button107').connect('clicked',self.close)
def close(self,obj):
self.top.destroy()

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -27,8 +27,11 @@
#-------------------------------------------------------------------------
import cPickle as pickle
import os
import gc
import locale
import sets
from gettext import gettext as _
from cgi import escape
#-------------------------------------------------------------------------
#
@@ -37,8 +40,6 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gtk
import gtk.glade
import gobject
import gnome
from gtk.gdk import ACTION_COPY, BUTTON1_MASK, INTERP_BILINEAR, pixbuf_new_from_file
#-------------------------------------------------------------------------
@@ -60,12 +61,13 @@ import Date
import DateHandler
import TransTable
import NameDisplay
import Spell
import GrampsDisplay
from WindowUtils import GladeIf
from QuestionDialog import WarningDialog, ErrorDialog, SaveDialog, QuestionDialog2
from DdTargets import DdTargets
#-------------------------------------------------------------------------
#
# Constants
@@ -82,7 +84,7 @@ _temple_names = [""] + _temple_names
_use_patronymic = [
"ru","RU","ru_RU","koi8r","ru_koi8r","russian","Russian",
]
#-------------------------------------------------------------------------
#
# EditPerson class
@@ -99,12 +101,18 @@ 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
# have been changed by something external (merge, tool, etc).
if self.orig_handle:
person = db.get_person_from_handle(self.orig_handle)
self.person = person
self.orig_surname = person.get_primary_name().get_group_name()
self.orig_surname = self.person.get_primary_name().get_group_name()
self.parent = parent
self.orig_handle = self.person.get_handle()
if self.parent.child_windows.has_key(self.orig_handle):
self.parent.child_windows[self.person.get_handle()].present(None)
self.parent.child_windows[self.orig_handle].present(None)
return
self.db = db
self.callback = callback
@@ -117,8 +125,7 @@ class EditPerson:
self.update_death = False
self.pdmap = {}
self.add_places = []
self.name_display = NameDisplay.displayer
self.should_guess_gender = (person.get_gramps_id() == '' and
self.should_guess_gender = (not person.get_gramps_id() and
person.get_gender () ==
RelLib.Person.UNKNOWN)
@@ -128,17 +135,19 @@ class EditPerson:
self.load_obj = None
self.top = gtk.glade.XML(const.editPersonFile, "editPerson","gramps")
self.window = self.get_widget("editPerson")
self.window.set_title("%s - GRAMPS" % _('Edit Person'))
self.gladeif = GladeIf(self.top)
self.window = self.top.get_widget("editPerson")
self.window.set_title("%s - GRAMPS" % _('Edit Person'))
self.icon_list = self.top.get_widget("iconlist")
self.gallery = ImageSelect.Gallery(person, self.db.commit_person,
self.path, self.icon_list,
self.db, self, self.window)
self.complete = self.get_widget('complete')
self.complete = self.top.get_widget('complete')
self.complete.set_sensitive(mod)
self.private = self.get_widget('private')
self.private = self.top.get_widget('private')
self.private.set_sensitive(mod)
self.name_delete_btn = self.top.get_widget('aka_delete')
self.name_edit_btn = self.top.get_widget('aka_edit')
@@ -151,118 +160,120 @@ class EditPerson:
self.addr_delete_btn = self.top.get_widget('addr_del')
self.addr_edit_btn = self.top.get_widget('addr_edit_btn')
self.notes_field = self.get_widget("personNotes")
self.notes_field = self.top.get_widget("personNotes")
self.notes_field.set_editable(mod)
self.flowed = self.get_widget("flowed")
self.spell_notes = Spell.Spell(self.notes_field)
self.flowed = self.top.get_widget("flowed")
self.flowed.set_sensitive(mod)
self.preform = self.get_widget("preform")
self.preform = self.top.get_widget("preform")
self.preform.set_sensitive(mod)
self.event_name_field = self.get_widget("eventName")
self.event_place_field = self.get_widget("eventPlace")
self.event_cause_field = self.get_widget("eventCause")
self.event_date_field = self.get_widget("eventDate")
self.event_descr_field = self.get_widget("eventDescription")
self.event_src_field = self.get_widget("event_srcinfo")
self.event_conf_field = self.get_widget("event_conf")
self.attr_conf_field = self.get_widget("attr_conf")
self.addr_conf_field = self.get_widget("addr_conf")
self.name_conf_field = self.get_widget("name_conf")
self.attr_src_field = self.get_widget("attr_srcinfo")
self.name_src_field = self.get_widget("name_srcinfo")
self.addr_src_field = self.get_widget("addr_srcinfo")
self.attr_list = self.get_widget("attr_list")
self.attr_type = self.get_widget("attr_type")
self.attr_value = self.get_widget("attr_value")
self.web_list = self.get_widget("web_list")
self.web_url = self.get_widget("web_url")
self.web_go = self.get_widget("web_go")
self.web_description = self.get_widget("url_des")
self.addr_list = self.get_widget("address_list")
self.addr_start = self.get_widget("address_start")
self.addr_street = self.get_widget("street")
self.addr_city = self.get_widget("city")
self.addr_state = self.get_widget("state")
self.addr_country = self.get_widget("country")
self.addr_postal = self.get_widget("postal")
self.addr_phone = self.get_widget("phone")
self.event_list = self.get_widget("eventList")
self.edit_person = self.get_widget("editPerson")
self.name_list = self.get_widget("nameList")
self.alt_given_field = self.get_widget("alt_given")
self.alt_last_field = self.get_widget("alt_last")
self.alt_title_field = self.get_widget("alt_title")
self.alt_suffix_field = self.get_widget("alt_suffix")
self.alt_prefix_field = self.get_widget("alt_prefix")
self.name_type_field = self.get_widget("name_type")
self.ntype_field = self.get_widget("ntype")
self.event_name_field = self.top.get_widget("eventName")
self.event_place_field = self.top.get_widget("eventPlace")
self.event_cause_field = self.top.get_widget("eventCause")
self.event_date_field = self.top.get_widget("eventDate")
self.event_descr_field = self.top.get_widget("eventDescription")
self.event_src_field = self.top.get_widget("event_srcinfo")
self.event_conf_field = self.top.get_widget("event_conf")
self.attr_conf_field = self.top.get_widget("attr_conf")
self.addr_conf_field = self.top.get_widget("addr_conf")
self.name_conf_field = self.top.get_widget("name_conf")
self.attr_src_field = self.top.get_widget("attr_srcinfo")
self.name_src_field = self.top.get_widget("name_srcinfo")
self.addr_src_field = self.top.get_widget("addr_srcinfo")
self.attr_list = self.top.get_widget("attr_list")
self.attr_type = self.top.get_widget("attr_type")
self.attr_value = self.top.get_widget("attr_value")
self.web_list = self.top.get_widget("web_list")
self.web_url = self.top.get_widget("web_url")
self.web_go = self.top.get_widget("web_go")
self.web_description = self.top.get_widget("url_des")
self.addr_list = self.top.get_widget("address_list")
self.addr_start = self.top.get_widget("address_start")
self.addr_street = self.top.get_widget("street")
self.addr_city = self.top.get_widget("city")
self.addr_state = self.top.get_widget("state")
self.addr_country = self.top.get_widget("country")
self.addr_postal = self.top.get_widget("postal")
self.addr_phone = self.top.get_widget("phone")
self.event_list = self.top.get_widget("eventList")
self.edit_person = self.top.get_widget("editPerson")
self.name_list = self.top.get_widget("nameList")
self.alt_given_field = self.top.get_widget("alt_given")
self.alt_last_field = self.top.get_widget("alt_last")
self.alt_title_field = self.top.get_widget("alt_title")
self.alt_suffix_field = self.top.get_widget("alt_suffix")
self.alt_prefix_field = self.top.get_widget("alt_prefix")
self.name_type_field = self.top.get_widget("name_type")
self.ntype_field = self.top.get_widget("ntype")
self.ntype_field.set_sensitive(mod)
self.suffix = self.get_widget("suffix")
self.suffix = self.top.get_widget("suffix")
self.suffix.set_editable(mod)
self.prefix = self.get_widget("prefix")
self.prefix = self.top.get_widget("prefix")
self.prefix.set_editable(mod)
self.given = self.get_widget("givenName")
self.given = self.top.get_widget("givenName")
self.given.set_editable(mod)
self.nick = self.get_widget("nickname")
self.nick = self.top.get_widget("nickname")
self.nick.set_editable(mod)
self.title = self.get_widget("title")
self.title = self.top.get_widget("title")
self.title.set_editable(mod)
self.bdate = self.get_widget("birthDate")
self.bdate = self.top.get_widget("birthDate")
self.bdate.set_editable(mod)
self.bplace = self.get_widget("birth_place")
self.bplace = self.top.get_widget("birth_place")
self.bplace.set_editable(mod)
self.surname = self.get_widget("surname")
self.surname = self.top.get_widget("surname")
self.surname.set_editable(mod)
self.ddate = self.get_widget("deathDate")
self.ddate = self.top.get_widget("deathDate")
self.ddate.set_editable(mod)
self.dplace = self.get_widget("death_place")
self.dplace = self.top.get_widget("death_place")
self.dplace.set_editable(mod)
self.is_male = self.get_widget("genderMale")
self.is_male = self.top.get_widget("genderMale")
self.is_male.set_sensitive(mod)
self.is_female = self.get_widget("genderFemale")
self.is_female = self.top.get_widget("genderFemale")
self.is_female.set_sensitive(mod)
self.is_unknown = self.get_widget("genderUnknown")
self.is_unknown = self.top.get_widget("genderUnknown")
self.is_unknown.set_sensitive(mod)
self.addr_note = self.get_widget("addr_note")
self.addr_source = self.get_widget("addr_source")
self.attr_note = self.get_widget("attr_note")
self.attr_source = self.get_widget("attr_source")
self.name_note = self.get_widget("name_note")
self.name_source = self.get_widget("name_source")
self.gid = self.get_widget("gid")
self.addr_note = self.top.get_widget("addr_note")
self.addr_source = self.top.get_widget("addr_source")
self.attr_note = self.top.get_widget("attr_note")
self.attr_source = self.top.get_widget("attr_source")
self.name_note = self.top.get_widget("name_note")
self.name_source = self.top.get_widget("name_source")
self.gid = self.top.get_widget("gid")
self.gid.set_editable(mod)
self.slist = self.get_widget("slist")
self.general_label = self.get_widget("general_label")
self.names_label = self.get_widget("names_label")
self.events_label = self.get_widget("events_label")
self.attr_label = self.get_widget("attr_label")
self.addr_label = self.get_widget("addr_label")
self.notes_label = self.get_widget("notes_label")
self.sources_label = self.get_widget("sources_label")
self.inet_label = self.get_widget("inet_label")
self.gallery_label = self.get_widget("gallery_label")
self.lds_tab = self.get_widget("lds_tab")
self.person_photo = self.get_widget("personPix")
self.eventbox = self.get_widget("eventbox1")
self.slist = self.top.get_widget("slist")
self.general_label = self.top.get_widget("general_label")
self.names_label = self.top.get_widget("names_label")
self.events_label = self.top.get_widget("events_label")
self.attr_label = self.top.get_widget("attr_label")
self.addr_label = self.top.get_widget("addr_label")
self.notes_label = self.top.get_widget("notes_label")
self.sources_label = self.top.get_widget("sources_label")
self.inet_label = self.top.get_widget("inet_label")
self.gallery_label = self.top.get_widget("gallery_label")
self.lds_tab = self.top.get_widget("lds_tab")
self.person_photo = self.top.get_widget("personPix")
self.eventbox = self.top.get_widget("eventbox1")
self.get_widget("birth_stat").set_sensitive(mod)
self.get_widget("death_stat").set_sensitive(mod)
self.top.get_widget("birth_stat").set_sensitive(mod)
self.top.get_widget("death_stat").set_sensitive(mod)
self.prefix_label = self.get_widget('prefix_label')
self.prefix_label = self.top.get_widget('prefix_label')
if self.use_patronymic:
self.prefix_label.set_text(_('Patronymic:'))
self.prefix_label.set_use_underline(True)
birth_handle = person.get_birth_handle()
if birth_handle:
self.orig_birth = self.db.get_event_from_handle(birth_handle)
self.birth_handle = person.get_birth_handle()
if self.birth_handle:
self.orig_birth = self.db.get_event_from_handle(self.birth_handle)
else:
self.orig_birth = RelLib.Event()
self.orig_birth.set_name("Birth")
death_handle = person.get_death_handle()
if death_handle:
self.orig_death = self.db.get_event_from_handle(death_handle)
self.death_handle = person.get_death_handle()
if self.death_handle:
self.orig_death = self.db.get_event_from_handle(self.death_handle)
else:
self.orig_death = RelLib.Event()
self.orig_death.set_name("Death")
@@ -366,12 +377,15 @@ class EditPerson:
or (not self.lds_baptism.is_empty()) \
or (not self.lds_endowment.is_empty()) \
or (not self.lds_sealing.is_empty()):
self.get_widget("lds_tab").show()
self.get_widget("lds_page").show()
self.top.get_widget("lds_tab").show()
self.top.get_widget("lds_page").show()
if (not self.lds_baptism.is_empty()) \
or (not self.lds_endowment.is_empty()) \
or (not self.lds_sealing.is_empty()):
Utils.bold_label(self.lds_tab)
else:
self.top.get_widget("lds_tab").hide()
self.top.get_widget("lds_page").hide()
types = const.NameTypesMap.get_values()
types.sort()
@@ -394,116 +408,79 @@ class EditPerson:
self.notes_buffer.set_text(person.get_note())
if person.get_note_object().get_format() == 1:
self.preform.set_active(1)
self.notes_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.flowed.set_active(1)
self.notes_field.set_wrap_mode(gtk.WRAP_WORD)
Utils.bold_label(self.notes_label)
self.name_list.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[DdTargets.NAME.target()],
ACTION_COPY)
self.name_list.drag_source_set(BUTTON1_MASK,
[DdTargets.NAME.target()],
ACTION_COPY)
self.name_list.connect('drag_data_get', self.name_drag_data_get)
self.name_list.connect('drag_begin', self.name_drag_begin)
self.name_list.connect('drag_data_received',
self.name_drag_data_received)
self.set_list_dnd(self.name_list, self.name_drag_data_get,
self.name_drag_begin, self.name_drag_data_received)
self.event_list.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[DdTargets.EVENT.target()],
ACTION_COPY)
self.event_list.drag_source_set(BUTTON1_MASK,
[DdTargets.EVENT.target()],
ACTION_COPY)
self.event_list.connect('drag_data_get', self.ev_drag_data_get)
self.event_list.connect('drag_begin', self.ev_drag_begin)
self.event_list.connect('drag_data_received',
self.ev_drag_data_received)
self.set_list_dnd(self.event_list, self.ev_drag_data_get,
self.ev_drag_begin, self.ev_drag_data_received)
self.web_list.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[DdTargets.URL.target()],
ACTION_COPY)
self.web_list.drag_source_set(BUTTON1_MASK,
[DdTargets.URL.target()],
ACTION_COPY)
self.web_list.connect('drag_data_get', self.url_drag_data_get)
self.web_list.connect('drag_begin', self.url_drag_begin)
self.web_list.connect('drag_data_received',self.url_drag_data_received)
self.attr_list.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[DdTargets.ATTRIBUTE.target()],
ACTION_COPY)
self.attr_list.drag_source_set(BUTTON1_MASK,
[DdTargets.ATTRIBUTE.target()],
ACTION_COPY)
self.attr_list.connect('drag_data_get', self.at_drag_data_get)
self.attr_list.connect('drag_data_received',self.at_drag_data_received)
self.attr_list.connect('drag_begin', self.at_drag_begin)
self.set_list_dnd(self.web_list,self.url_drag_data_get,
self.url_drag_begin, self.url_drag_data_received)
self.addr_list.drag_dest_set(gtk.DEST_DEFAULT_ALL,
[DdTargets.ADDRESS.target()],
ACTION_COPY)
self.addr_list.drag_source_set(BUTTON1_MASK,
[DdTargets.ADDRESS.target()],
ACTION_COPY)
self.addr_list.connect('drag_data_get', self.ad_drag_data_get)
self.addr_list.connect('drag_data_received',self.ad_drag_data_received)
self.addr_list.connect('drag_begin', self.ad_drag_begin)
self.set_list_dnd(self.attr_list, self.at_drag_data_get,
self.at_drag_begin, self.at_drag_data_received)
self.set_list_dnd(self.addr_list, self.ad_drag_data_get,
self.ad_drag_begin, self.ad_drag_data_received)
self.birth_date_object = self.birth.get_date_object()
self.death_date_object = self.death.get_date_object()
self.bdate_check = DateEdit.DateEdit(
self.birth_date_object, self.bdate,
self.get_widget("birth_stat"), self.window)
self.top.get_widget("birth_stat"), self.window)
self.ddate_check = DateEdit.DateEdit(
self.death_date_object, self.ddate,
self.get_widget("death_stat"), self.window)
self.top.get_widget("death_stat"), self.window)
self.update_birth_death()
self.top.signal_autoconnect({
"destroy_passed_object" : self.on_cancel_edit,
"on_up_clicked" : self.on_up_clicked,
"on_down_clicked" : self.on_down_clicked,
"on_add_address_clicked" : self.on_add_addr_clicked,
"on_add_aka_clicked" : self.on_add_aka_clicked,
"on_add_attr_clicked" : self.on_add_attr_clicked,
"on_add_url_clicked" : self.on_add_url_clicked,
"on_addphoto_clicked" : self.gallery.on_add_media_clicked,
"on_selectphoto_clicked" : self.gallery.on_select_media_clicked,
"on_aka_delete_clicked" : self.on_aka_delete_clicked,
"on_aka_update_clicked" : self.on_aka_update_clicked,
"on_apply_person_clicked" : self.on_apply_person_clicked,
"on_edit_birth_clicked" : self.on_edit_birth_clicked,
"on_edit_death_clicked" : self.on_edit_death_clicked,
"on_delete_address_clicked" : self.on_delete_addr_clicked,
"on_delete_attr_clicked" : self.on_delete_attr_clicked,
"on_delete_event" : self.on_delete_event,
"on_delete_url_clicked" : self.on_delete_url_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_media_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_editphoto_clicked" : self.gallery.on_edit_media_clicked,
"on_editperson_switch_page" : self.on_switch_page,
"on_event_add_clicked" : self.on_event_add_clicked,
"on_event_delete_clicked" : self.on_event_delete_clicked,
"on_event_update_clicked" : self.on_event_update_clicked,
"on_edit_name_clicked" : self.on_edit_name_clicked,
"on_ldsbap_note_clicked" : self.on_ldsbap_note_clicked,
"on_ldsendow_note_clicked" : self.on_ldsendow_note_clicked,
"on_ldsseal_note_clicked" : self.on_ldsseal_note_clicked,
"on_ldsbap_src_clicked" : self.on_ldsbap_source_clicked,
"on_ldsendow_src_clicked" : self.on_ldsendow_source_clicked,
"on_ldsseal_src_clicked" : self.on_ldsseal_source_clicked,
"on_update_address_clicked" : self.on_update_addr_clicked,
"on_update_attr_clicked" : self.on_update_attr_clicked,
"on_update_url_clicked" : self.on_update_url_clicked,
"on_web_go_clicked" : self.on_web_go_clicked,
"on_gender_activate" : self.on_gender_activate,
"on_given_focus_out" : self.on_given_focus_out_event,
"on_help_person_clicked" : self.on_help_clicked,
})
self.gladeif.connect("editPerson", "delete_event", self.on_delete_event)
self.gladeif.connect("button15", "clicked", self.on_cancel_edit)
self.gladeif.connect("ok", "clicked", self.on_apply_person_clicked)
self.gladeif.connect("button134", "clicked", self.on_help_clicked)
self.gladeif.connect("notebook", "switch_page", self.on_switch_page)
self.gladeif.connect("genderMale", "toggled", self.on_gender_activate)
self.gladeif.connect("genderFemale", "toggled", self.on_gender_activate)
self.gladeif.connect("genderUnknown", "toggled", self.on_gender_activate)
self.gladeif.connect("givenName", "focus_out_event", self.on_given_focus_out_event)
self.gladeif.connect("button177", "clicked", self.on_edit_name_clicked)
self.gladeif.connect("button99", "clicked", self.on_edit_birth_clicked)
self.gladeif.connect("button126", "clicked", self.on_edit_death_clicked)
self.gladeif.connect("add_aka", "clicked", self.on_add_aka_clicked)
self.gladeif.connect("aka_edit", "clicked", self.on_aka_update_clicked)
self.gladeif.connect("aka_delete", "clicked", self.on_aka_delete_clicked)
self.gladeif.connect("event_add", "clicked" , self.on_event_add_clicked)
self.gladeif.connect("event_edit_btn", "clicked" ,self.on_event_update_clicked)
self.gladeif.connect("event_del", "clicked", self.on_event_delete_clicked)
self.gladeif.connect("attr_add", "clicked" , self.on_add_attr_clicked)
self.gladeif.connect("attr_edit_btn", "clicked", self.on_update_attr_clicked)
self.gladeif.connect("attr_del", "clicked", self.on_delete_attr_clicked)
self.gladeif.connect("addr_add", "clicked", self.on_add_addr_clicked)
self.gladeif.connect("addr_edit_btn", "clicked", self.on_update_addr_clicked)
self.gladeif.connect("addr_del", "clicked", self.on_delete_addr_clicked)
self.gladeif.connect("media_add", "clicked", self.gallery.on_add_media_clicked)
self.gladeif.connect("media_sel", "clicked", self.gallery.on_select_media_clicked)
self.gladeif.connect("image_edit_btn", "clicked", self.gallery.on_edit_media_clicked)
self.gladeif.connect("media_del", "clicked", self.gallery.on_delete_media_clicked)
self.gladeif.connect("add_url", "clicked", self.on_add_url_clicked)
self.gladeif.connect("edit_url", "clicked", self.on_update_url_clicked,)
self.gladeif.connect("web_go", "clicked", self.on_web_go_clicked)
self.gladeif.connect("delete_url", "clicked", self.on_delete_url_clicked)
self.gladeif.connect("button131", "clicked", self.on_ldsbap_source_clicked,)
self.gladeif.connect("button128", "clicked", self.on_ldsbap_note_clicked)
self.gladeif.connect("button132", "clicked", self.on_ldsendow_source_clicked)
self.gladeif.connect("button129", "clicked", self.on_ldsendow_note_clicked)
self.gladeif.connect("button133", "clicked", self.on_ldsseal_source_clicked)
self.gladeif.connect("button130", "clicked", self.on_ldsseal_note_clicked)
self.gladeif.connect('preform','toggled',self.format_toggled)
self.sourcetab = Sources.SourceTab(
self.srcreflist, self, self.top, self.window, self.slist,
@@ -520,7 +497,7 @@ class EditPerson:
self.redraw_addr_list()
self.redraw_name_list()
self.redraw_url_list()
self.get_widget("notebook").set_current_page(0)
self.top.get_widget("notebook").set_current_page(0)
self.given.grab_focus()
self.add_itself_to_winsmenu()
@@ -528,10 +505,26 @@ class EditPerson:
"event_add", "attr_add", "attr_del", "addr_add",
"addr_del", "media_add", "media_sel", "media_del",
"add_url", "delete_url", "add_src", "del_src" ]:
self.get_widget(i).set_sensitive(not self.db.readonly)
self.top.get_widget(i).set_sensitive(not self.db.readonly)
self.window.show()
def format_toggled(self,junk):
if self.preform.get_active():
self.notes_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.notes_field.set_wrap_mode(gtk.WRAP_WORD)
def set_list_dnd(self,obj, get, begin, receive):
obj.drag_dest_set(gtk.DEST_DEFAULT_ALL, [DdTargets.NAME.target()],
ACTION_COPY)
obj.drag_source_set(BUTTON1_MASK,[DdTargets.NAME.target()],
ACTION_COPY)
obj.connect('drag_data_get', get)
obj.connect('drag_begin', begin)
if not self.db.readonly:
obj.connect('drag_data_received', receive)
def build_pdmap(self):
self.pdmap.clear()
cursor = self.db.get_place_cursor()
@@ -611,6 +604,7 @@ class EditPerson:
self.child_windows = {}
def close(self):
event_list = []
for col in self.event_list.get_columns():
event_list.append(self.event_trans.find_key(col.get_title()))
@@ -620,11 +614,13 @@ class EditPerson:
self.gallery.close()
self.close_child_windows()
self.remove_itself_from_winsmenu()
self.gladeif.close()
self.window.destroy()
gc.collect()
def add_itself_to_winsmenu(self):
self.parent.child_windows[self.orig_handle] = self
win_menu_label = self.name_display.display(self.person)
win_menu_label = self.nd.display(self.person)
if not win_menu_label.strip():
win_menu_label = _("New Person")
self.win_menu_item = gtk.MenuItem(win_menu_label)
@@ -648,7 +644,7 @@ class EditPerson:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-pers')
GrampsDisplay.help('adv-pers')
def build_columns(self,tree,list):
cnum = 0
@@ -661,8 +657,10 @@ class EditPerson:
def lds_field(self,lds_ord,combo,date,place):
build_combo(combo,_temple_names)
temple_code = const.lds_temple_to_abrev.get(lds_ord.get_temple(),"")
temple_code = lds_ord.get_temple()
index = _temple_names.index(temple_code)
combo.set_active(index)
if not lds_ord.is_empty():
stat = lds_ord.get_status()
@@ -681,51 +679,51 @@ class EditPerson:
"""Draws the LDS window. This window is not always drawn, and in
may cases is hidden."""
self.ldsbap_date = self.get_widget("ldsbapdate")
self.ldsbap_date = self.top.get_widget("ldsbapdate")
self.ldsbap_date.set_editable(not self.db.readonly)
self.ldsbap_temple = self.get_widget("ldsbaptemple")
self.ldsbap_temple = self.top.get_widget("ldsbaptemple")
self.ldsbap_temple.set_sensitive(not self.db.readonly)
self.ldsbapplace = self.get_widget("lds_bap_place")
self.ldsbapplace = self.top.get_widget("lds_bap_place")
self.ldsbapplace.set_editable(not self.db.readonly)
self.ldsbap_date_led = self.get_widget("ldsbap_stat")
self.ldsbap_date_led = self.top.get_widget("ldsbap_stat")
self.ldsbap_date_led.set_sensitive(not self.db.readonly)
self.ldsbap_date_check = DateEdit.DateEdit(
self.lds_baptism.get_date_object(), self.ldsbap_date,
self.ldsbap_date_led, self.window)
self.ldsend_date = self.get_widget("endowdate")
self.ldsend_date = self.top.get_widget("endowdate")
self.ldsend_date.set_editable(not self.db.readonly)
self.ldsend_temple = self.get_widget("endowtemple")
self.ldsend_temple = self.top.get_widget("endowtemple")
self.ldsend_temple.set_sensitive(not self.db.readonly)
self.ldsendowplace = self.get_widget("lds_end_place")
self.ldsendowplace = self.top.get_widget("lds_end_place")
self.ldsendowplace.set_editable(not self.db.readonly)
self.ldsendowstat = self.get_widget("endowstat")
self.ldsendowstat = self.top.get_widget("endowstat")
self.ldsendowstat.set_sensitive(not self.db.readonly)
self.ldsend_date_led = self.get_widget("endow_stat")
self.ldsend_date_led = self.top.get_widget("endow_stat")
self.ldsend_date_led.set_sensitive(not self.db.readonly)
self.ldsend_date_check = DateEdit.DateEdit(
self.lds_endowment.get_date_object(), self.ldsend_date,
self.ldsend_date_led, self.window)
self.ldsseal_date = self.get_widget("sealdate")
self.ldsseal_temple = self.get_widget("sealtemple")
self.ldssealplace = self.get_widget("lds_seal_place")
self.ldsseal_date = self.top.get_widget("sealdate")
self.ldsseal_temple = self.top.get_widget("sealtemple")
self.ldssealplace = self.top.get_widget("lds_seal_place")
self.ldsseal_date.set_editable(not self.db.readonly)
self.ldsseal_temple.set_sensitive(not self.db.readonly)
self.ldssealplace.set_editable(not self.db.readonly)
self.ldsseal_date_led = self.get_widget("seal_stat")
self.ldsseal_date_led = self.top.get_widget("seal_stat")
self.ldsseal_date_led.set_sensitive(not self.db.readonly)
self.ldsseal_date_check = DateEdit.DateEdit(
self.lds_sealing.get_date_object(), self.ldsseal_date,
self.ldsseal_date_led, self.window)
self.ldsseal_fam = self.get_widget("sealparents")
self.ldsseal_fam = self.top.get_widget("sealparents")
self.ldsseal_fam.set_sensitive(not self.db.readonly)
self.ldsbapstat = self.get_widget("ldsbapstat")
self.ldsbapstat = self.top.get_widget("ldsbapstat")
self.ldsbapstat.set_sensitive(not self.db.readonly)
self.ldssealstat = self.get_widget("sealstat")
self.ldssealstat = self.top.get_widget("sealstat")
self.ldssealstat.set_sensitive(not self.db.readonly)
@@ -846,6 +844,9 @@ class EditPerson:
t.drag_source_set_icon(t.get_colormap(),icon,mask)
def name_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.db.readonly: # no DnD on readonly database
return
row = self.ntree.get_row_at(x,y)
if sel_data and sel_data.data:
@@ -869,6 +870,9 @@ class EditPerson:
self.redraw_name_list()
def ev_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.db.readonly: # no DnD on readonly database
return
row = self.etree.get_row_at(x,y)
if sel_data and sel_data.data:
@@ -919,6 +923,9 @@ class EditPerson:
t.drag_source_set_icon(t.get_colormap(),icon,mask)
def url_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.db.readonly: # no DnD on readonly database
return
row = self.wtree.get_row_at(x,y)
if sel_data and sel_data.data:
@@ -948,6 +955,9 @@ class EditPerson:
sel_data.set(sel_data.target, bits_per, data)
def at_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.db.readonly: # no DnD on readonly database
return
row = self.atree.get_row_at(x,y)
if sel_data and sel_data.data:
@@ -982,6 +992,9 @@ class EditPerson:
sel_data.set(sel_data.target, bits_per, data)
def ad_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.db.readonly: # no DnD on readonly database
return
row = self.ptree.get_row_at(x,y)
if sel_data and sel_data.data:
@@ -1019,10 +1032,6 @@ class EditPerson:
def menu_changed(self,obj):
self.ldsfam = self.lds_fam_list[obj.get_active()]
def get_widget(self,str):
"""returns the widget related to the passed string"""
return self.top.get_widget(str)
def redraw_name_list(self):
"""redraws the name list"""
self.ntree.clear()
@@ -1098,11 +1107,32 @@ class EditPerson:
def event_edit_callback(self,event):
"""Birth and death events may not be in the map"""
self.redraw_event_list()
self.update_pdmap(event)
try:
self.etree.select_iter(self.emap[str(event)])
except:
pass
def update_pdmap(self,event):
p = event.get_place_handle()
if p:
place = self.db.get_place_from_handle(p)
self.pdmap[place.get_title()] = p
def event_birth_callback(self,event):
"""Birth and death events may not be in the map"""
self.update_birth = False
self.birth = event
self.update_birth_info()
self.update_pdmap(event)
def event_death_callback(self,event):
"""Birth and death events may not be in the map"""
self.update_death = False
self.death = event
self.update_death_info()
self.update_pdmap(event)
def attr_edit_callback(self,attr):
self.redraw_attr_list()
self.atree.select_iter(self.amap[str(attr)])
@@ -1170,39 +1200,23 @@ class EditPerson:
def on_add_url_clicked(self,obj):
"""Invokes the url editor to add a new name"""
import UrlEdit
pname = self.name_display.display(self.person)
pname = self.nd.display(self.person)
UrlEdit.UrlEditor(self,pname,None,self.url_edit_callback,self.window)
def on_add_attr_clicked(self,obj):
"""Brings up the AttributeEditor for a new attribute"""
import AttrEdit
pname = self.name_display.display(self.person)
AttrEdit.AttributeEditor(self,None,pname,const.personalAttributes,
self.attr_edit_callback,self.window)
def on_up_clicked(self,obj):
sel = obj.get_selection()
store,node = sel.get_selected()
if node:
row = store.get_path(node)
sel.select_path((row[0]-1))
def on_down_clicked(self,obj):
sel = obj.get_selection()
store,node = sel.get_selected()
if node:
row = store.get_path(node)
sel.select_path((row[0]+1))
pname = self.nd.display(self.person)
attr_list = list(sets.Set(const.personalAttributes + self.db.get_person_attribute_types()))
AttrEdit.AttributeEditor(
self,None,pname, attr_list, self.attr_edit_callback,self.window)
def on_event_add_clicked(self,obj):
"""Brings up the EventEditor for a new event"""
import EventEdit
pname = self.name_display.display(self.person)
EventEdit.EventEditor(
self,pname,const.personalEvents,
const.personal_events,None,None,0,
self.event_edit_callback,
noedit=self.db.readonly)
pname = self.nd.display(self.person)
EventEdit.PersonEventEditor(self, pname, None, None, False,
self.event_edit_callback, noedit=self.db.readonly)
def on_edit_birth_clicked(self,obj):
"""Brings up the EventEditor for the birth record, event
@@ -1210,7 +1224,7 @@ class EditPerson:
import EventEdit
self.update_birth = True
pname = self.name_display.display(self.person)
pname = self.nd.display(self.person)
event = self.birth
event.set_date_object(Date.Date(self.birth_date_object))
def_placename = unicode(self.bplace.get_text())
@@ -1218,11 +1232,8 @@ class EditPerson:
p = self.get_place(self.bplace)
if p:
event.set_place_handle(p)
EventEdit.EventEditor(
self,pname, const.personalEvents,
const.personal_events,event,def_placename,1,
self.event_edit_callback,
noedit=self.db.readonly)
EventEdit.PersonEventEditor(self,pname, event, def_placename, True,
self.event_birth_callback, noedit=self.db.readonly)
def on_edit_death_clicked(self,obj):
"""Brings up the EventEditor for the death record, event
@@ -1230,7 +1241,7 @@ class EditPerson:
import EventEdit
self.update_death = True
pname = self.name_display.display(self.person)
pname = self.nd.display(self.person)
event = self.death
event.set_date_object(Date.Date(self.death_date_object))
def_placename = unicode(self.dplace.get_text())
@@ -1238,11 +1249,9 @@ class EditPerson:
p = self.get_place(self.dplace)
if p:
event.set_place_handle(p)
EventEdit.EventEditor(
self,pname,const.personalEvents,
const.personal_events,event,def_placename,1,
self.event_edit_callback,
noedit=self.db.readonly)
EventEdit.PersonEventEditor(self, pname, event, def_placename,
True, self.event_death_callback,
noedit=self.db.readonly)
def on_aka_delete_clicked(self,obj):
"""Deletes the selected name from the name list"""
@@ -1278,16 +1287,16 @@ class EditPerson:
def on_web_go_clicked(self,obj):
"""Attempts to display the selected URL in a web browser"""
text = obj.get()
text = self.web_url.get()
if text:
gnome.url_show(text)
GrampsDisplay.url(text)
def on_cancel_edit(self,obj):
"""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()
if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask():
n = "<i>%s</i>" % escape(self.nd.display(self.person))
SaveDialog(_('Save changes to %s?') % n,
_('If you close without saving, the changes you '
'have made will be lost'),
@@ -1302,8 +1311,8 @@ class EditPerson:
def on_delete_event(self,obj,b):
"""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()
if not self.db.readonly and self.did_data_change() and not GrampsKeys.get_dont_ask():
n = "<i>%s</i>" % escape(self.nd.display(self.person))
SaveDialog(_('Save Changes to %s?') % n,
_('If you close without saving, the changes you '
'have made will be lost'),
@@ -1322,7 +1331,10 @@ class EditPerson:
"""Check to see if any of the data has changed from the
orig record"""
surname = unicode(self.surname.get_text())
surname = unicode(self.surname.get_text().strip())
self.birth_date_object = self.dp.parse(unicode(self.bdate.get_text()))
self.death_date_object = self.dp.parse(unicode(self.ddate.get_text()))
self.birth.set_date_object(self.birth_date_object)
self.death.set_date_object(self.death_date_object)
@@ -1448,7 +1460,7 @@ class EditPerson:
def on_event_delete_clicked(self,obj):
"""Delete the selected event"""
if Utils.delete_selected(obj,self.elist):
if Utils.delete_selected(self.event_list,self.elist):
self.lists_changed = True
self.redraw_event_list()
@@ -1464,8 +1476,9 @@ class EditPerson:
store,node = self.atree.get_selected()
if node:
attr = self.atree.get_object(node)
pname = self.name_display.display(self.person)
AttrEdit.AttributeEditor(self,attr,pname,const.personalAttributes,
pname = self.nd.display(self.person)
attr_list = list(sets.Set(const.personalAttributes + self.db.get_person_attribute_types()))
AttrEdit.AttributeEditor(self,attr,pname,attr_list,
self.attr_edit_callback,self.window)
def on_update_addr_clicked(self,obj):
@@ -1480,7 +1493,7 @@ class EditPerson:
import UrlEdit
store,node = self.wtree.get_selected()
if node:
pname = self.name_display.display(self.person)
pname = self.nd.display(self.person)
url = self.wtree.get_object(node)
UrlEdit.UrlEditor(self,pname,url,self.url_edit_callback,self.window)
@@ -1490,12 +1503,10 @@ class EditPerson:
store,node = self.etree.get_selected()
if not node:
return
pname = self.name_display.display(self.person)
pname = self.nd.display(self.person)
event = self.etree.get_object(node)
EventEdit.EventEditor(
self,pname,const.personalEvents,
const.personal_events,event,None,0,
self.event_edit_callback,noedit=self.db.readonly)
EventEdit.PersonEventEditor(self, pname, event, None, False,
self.event_edit_callback, noedit=self.db.readonly)
def on_event_select_row(self,obj):
store,node = obj.get_selected()
@@ -1707,17 +1718,20 @@ class EditPerson:
self.window.hide()
trans = self.db.transaction_begin()
surname = unicode(self.surname.get_text())
suffix = unicode(self.suffix.get_text())
prefix = unicode(self.prefix.get_text())
ntype = unicode(self.ntype_field.child.get_text())
given = unicode(self.given.get_text())
nick = unicode(self.nick.get_text())
title = unicode(self.title.get_text())
idval = unicode(self.gid.get_text())
surname = unicode(self.surname.get_text().strip())
suffix = unicode(self.suffix.get_text().strip())
prefix = unicode(self.prefix.get_text().strip())
ntype = unicode(self.ntype_field.child.get_text().strip())
given = unicode(self.given.get_text().strip())
nick = unicode(self.nick.get_text().strip())
title = unicode(self.title.get_text().strip())
idval = unicode(self.gid.get_text().strip())
name = self.pname
self.birth_date_object = self.dp.parse(unicode(self.bdate.get_text()))
self.death_date_object = self.dp.parse(unicode(self.ddate.get_text()))
self.birth.set_date_object(self.birth_date_object)
self.birth.set_place_handle(self.get_place(self.bplace,1))
@@ -1726,7 +1740,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.") % {
@@ -1744,8 +1758,9 @@ class EditPerson:
if prefix != name.get_surname_prefix():
name.set_surname_prefix(prefix)
if const.NameTypesMap.has_value(ntype):
ntype = const.NameTypesMap.find_key(ntype)
if ntype:
if const.NameTypesMap.has_value(ntype):
ntype = const.NameTypesMap.find_key(ntype)
else:
ntype = "Birth Name"
@@ -1771,11 +1786,14 @@ class EditPerson:
self.build_pdmap()
self.birth.set_date_object(self.birth_date_object)
self.birth.set_place_handle(self.get_place(self.bplace,1))
if not self.orig_birth.are_equal(self.birth):
if self.orig_birth.is_empty():
if not self.birth_handle:
self.db.add_event(self.birth,trans)
self.person.set_birth_handle(self.birth.get_handle())
self.db.commit_event(self.birth,trans)
self.db.commit_personal_event(self.birth,trans)
# Update each of the families child lists to reflect any
# change in ordering due to the new birth date
@@ -1793,10 +1811,10 @@ class EditPerson:
self.death.set_place_handle(self.get_place(self.dplace,1))
if not self.orig_death.are_equal(self.death):
if self.orig_death.is_empty():
if not self.death_handle:
self.db.add_event(self.death,trans)
self.person.set_death_handle(self.death.get_handle())
self.db.commit_event(self.death,trans)
self.db.commit_personal_event(self.death,trans)
male = self.is_male.get_active()
female = self.is_female.get_active()
@@ -1883,7 +1901,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)
self.db.transaction_commit(trans,_("Edit Person (%s)") % n)
if self.callback:
self.callback(self,self.retval)
@@ -2031,9 +2050,9 @@ class EditPerson:
def write_primary_name(self):
# initial values
name = '<span size="larger" weight="bold">%s</span>' % self.name_display.display(self.person)
self.get_widget("activepersonTitle").set_text(name)
self.get_widget("activepersonTitle").set_use_markup(True)
name = '<span size="larger" weight="bold">%s</span>' % escape(self.nd.display(self.person))
self.top.get_widget("activepersonTitle").set_text( name)
self.top.get_widget("activepersonTitle").set_use_markup(True)
self.suffix.set_text(self.pname.get_suffix())
if self.use_patronymic:
self.prefix.set_text(self.pname.get_patronymic())

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -26,6 +26,7 @@
#
#-------------------------------------------------------------------------
import cPickle as pickle
import gc
from gettext import gettext as _
#-------------------------------------------------------------------------
@@ -36,7 +37,6 @@ from gettext import gettext as _
import gobject
import gtk
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -48,9 +48,13 @@ import Utils
import Sources
import ImageSelect
import NameDisplay
import Spell
import GrampsDisplay
import RelLib
import ListModel
from DdTargets import DdTargets
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -71,6 +75,7 @@ class EditPlace:
else:
self.win_key = self
self.ref_not_loaded = 0
self.idle = None
self.name_display = NameDisplay.displayer.display
self.place = place
self.db = parent.db
@@ -84,6 +89,8 @@ class EditPlace:
self.srcreflist = []
self.top_window = gtk.glade.XML(const.placesFile,"placeEditor","gramps")
self.gladeif = GladeIf(self.top_window)
self.top = self.top_window.get_widget("placeEditor")
self.iconlist = self.top_window.get_widget('iconlist')
title_label = self.top_window.get_widget('title')
@@ -116,6 +123,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")
@@ -164,7 +172,7 @@ class EditPlace:
self.country.set_text(mloc.get_country())
self.longitude.set_text(place.get_longitude())
self.latitude.set_text(place.get_latitude())
self.refinfo = self.top_window.get_widget("refinfo")
self.plist = self.top_window.get_widget("plist")
self.slist = self.top_window.get_widget("slist")
self.sources_label = self.top_window.get_widget("sourcesPlaceEdit")
self.names_label = self.top_window.get_widget("namesPlaceEdit")
@@ -181,8 +189,10 @@ class EditPlace:
Utils.bold_label(self.notes_label)
if place.get_note_format() == 1:
self.preform.set_active(1)
self.note.set_wrap_mode(gtk.WRAP_NONE)
else:
self.flowed.set_active(1)
self.note.set_wrap_mode(gtk.WRAP_WORD)
self.flowed.set_sensitive(mode)
self.preform.set_sensitive(mode)
@@ -190,26 +200,24 @@ class EditPlace:
if self.place.get_media_list():
Utils.bold_label(self.gallery_label)
self.top_window.signal_autoconnect({
"on_switch_page" : self.on_switch_page,
"on_addphoto_clicked" : self.glry.on_add_media_clicked,
"on_selectphoto_clicked" : self.glry.on_select_media_clicked,
"on_deletephoto_clicked" : self.glry.on_delete_media_clicked,
"on_edit_photo_clicked" : self.glry.on_edit_media_clicked,
"on_edit_properties_clicked": self.glry.popup_change_description,
"on_add_url_clicked" : self.on_add_url_clicked,
"on_delete_url_clicked" : self.on_delete_url_clicked,
"on_update_url_clicked" : self.on_update_url_clicked,
"on_add_loc_clicked" : self.on_add_loc_clicked,
"on_delete_loc_clicked" : self.on_delete_loc_clicked,
"on_update_loc_clicked" : self.on_update_loc_clicked,
"on_web_go_clicked" : self.on_web_go_clicked,
"on_help_clicked" : self.on_help_clicked,
"on_delete_event" : self.on_delete_event,
"on_cancel_clicked" : self.close,
"on_apply_clicked" : self.on_place_apply_clicked,
})
self.gladeif.connect('placeEditor', 'delete_event', self.on_delete_event)
self.gladeif.connect('button127', 'clicked', self.close)
self.gladeif.connect('ok', 'clicked', self.on_place_apply_clicked)
self.gladeif.connect('button135', 'clicked', self.on_help_clicked)
self.gladeif.connect('notebook3', 'switch_page', self.on_switch_page)
self.gladeif.connect('add_name', 'clicked', self.on_add_loc_clicked)
self.gladeif.connect('loc_edit', 'clicked', self.on_update_loc_clicked)
self.gladeif.connect('del_name', 'clicked', self.on_delete_loc_clicked)
self.gladeif.connect('add_photo', 'clicked', self.glry.on_add_media_clicked)
self.gladeif.connect('sel_photo', 'clicked', self.glry.on_select_media_clicked)
self.gladeif.connect('button134', 'clicked', self.glry.on_edit_media_clicked)
self.gladeif.connect('delete_photo', 'clicked', self.glry.on_delete_media_clicked)
self.gladeif.connect('add_url', 'clicked', self.on_add_url_clicked)
self.gladeif.connect('web_edit', 'clicked', self.on_update_url_clicked)
self.gladeif.connect('web_go', 'clicked', self.on_web_go_clicked)
self.gladeif.connect('del_url', 'clicked', self.on_delete_url_clicked)
self.gladeif.connect('place_preform','toggled',self.format_toggled)
self.sourcetab = Sources.SourceTab(
self.srcreflist,self,
self.top_window,self.top,self.slist,
@@ -230,7 +238,8 @@ class EditPlace:
gtk.gdk.ACTION_COPY)
self.web_list.connect('drag_data_get',
self.url_source_drag_data_get)
self.web_list.connect('drag_data_received',
if not self.db.readonly:
self.web_list.connect('drag_data_received',
self.url_dest_drag_data_received)
for name in ['del_name','add_name','sel_photo','add_url','del_url']:
@@ -243,21 +252,48 @@ class EditPlace:
self.add_itself_to_menu()
self.top_window.get_widget('ok').set_sensitive(not self.db.readonly)
self.top.show()
self.pdmap = {}
self.build_pdmap()
if self.ref_not_loaded:
Utils.temp_label(self.refs_label,self.top)
gobject.idle_add(self.display_references)
self.cursor_type = None
self.idle = gobject.idle_add(self.display_references)
self.ref_not_loaded = 0
def on_delete_event(self,obj,b):
self.glry.close()
self.close_child_windows()
self.remove_itself_from_menu()
def format_toggled(self,junk):
if self.preform.get_active():
self.note.set_wrap_mode(gtk.WRAP_NONE)
else:
self.note.set_wrap_mode(gtk.WRAP_WORD)
def close(self,obj):
def build_pdmap(self):
self.pdmap.clear()
cursor = self.db.get_place_cursor()
data = cursor.next()
while data:
if data[1][2]:
self.pdmap[data[1][2]] = data[0]
data = cursor.next()
cursor.close()
def on_delete_event(self,obj,b):
self.gladeif.close()
self.glry.close()
self.close_child_windows()
self.remove_itself_from_menu()
gc.collect()
def close(self,obj=None):
self.glry.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
self.top.destroy()
if self.idle != None:
gobject.source_remove(self.idle)
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -294,7 +330,7 @@ class EditPlace:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-plc')
GrampsDisplay.help('adv-plc')
def build_columns(self,tree,list):
cnum = 0
@@ -355,9 +391,9 @@ class EditPlace:
Utils.unbold_label(self.names_label)
def on_web_go_clicked(self,obj):
text = obj.get()
text = self.web_url.get()
if text != "":
gnome.url_show(text)
GrampsDisplay.url(text)
def set(self,field,getf,setf):
text = unicode(field.get_text())
@@ -371,6 +407,15 @@ class EditPlace:
format = self.preform.get_active()
mloc = self.place.get_main_location()
title = self.title.get_text()
if self.pdmap.has_key(title) and self.pdmap[title] != self.place.handle:
import QuestionDialog
QuestionDialog.ErrorDialog(_("Place title is already in use"),
_("Each place must have a unique title, and "
"title you have selected is already used by "
"another place"))
return
self.set(self.city,mloc.get_city,mloc.set_city)
self.set(self.parish,mloc.get_parish,mloc.set_parish)
self.set(self.state,mloc.get_state,mloc.set_state)
@@ -412,7 +457,7 @@ class EditPlace:
elif page == 6 and self.ref_not_loaded:
self.ref_not_loaded = 0
Utils.temp_label(self.refs_label,self.top)
gobject.idle_add(self.display_references)
self.idle = gobject.idle_add(self.display_references)
text = unicode(self.note_buffer.get_text(self.note_buffer.get_start_iter(),
self.note_buffer.get_end_iter(),False))
if text:
@@ -441,12 +486,12 @@ class EditPlace:
LocEdit.LocationEditor(self,loc,self.top)
def on_delete_url_clicked(self,obj):
if Utils.delete_selected(obj,self.ulist):
if Utils.delete_selected(self.web_list,self.ulist):
self.lists_changed = 1
self.redraw_url_list()
def on_delete_loc_clicked(self,obj):
if Utils.delete_selected(obj,self.llist):
if Utils.delete_selected(self.loc_list,self.llist):
self.lists_changed = 1
self.redraw_location_list()
@@ -500,58 +545,111 @@ class EditPlace:
self.loc_parish.set_text(loc.get_parish())
self.loc_country.set_text(loc.get_country())
def button_press(self,obj):
data = self.model.get_selected_objects()
if not data:
return
(data_type,handle) = data[0]
import EventEdit
event = self.db.get_event_from_handle(handle)
event_name = event.get_name()
if data_type == 0:
if event_name in ["Birth","Death"]:
EventEdit.PersonEventEditor(
self,", ", event, None, 1, None, None, self.db.readonly)
else:
EventEdit.PersonEventEditor(
self,", ", event, None, 0, None, None, self.db.readonly)
elif data_type == 1:
EventEdit.FamilyEventEditor(
self,", ", event, None, 0, None, None, self.db.readonly)
def display_references(self):
pevent = []
fevent = []
msg = ""
for key in self.db.get_person_handles(sort_handles=False):
p = self.db.get_person_from_handle(key)
for event_handle in [p.get_birth_handle(), p.get_death_handle()] + p.get_event_list():
event = self.db.get_event_from_handle(event_handle)
if event and event.get_place_handle() == self.place.get_handle():
pevent.append((p,event))
for family_handle in self.db.get_family_handles():
f = self.db.get_family_from_handle(family_handle)
for event_handle in f.get_event_list():
event = self.db.get_event_from_handle(event_handle)
if event and event.get_place_handle() == self.place.get_handle():
fevent.append((f,event))
place_handle = self.place.get_handle()
any = 0
if len(pevent) > 0:
any = 1
msg = msg + _("People") + "\n"
msg = msg + "_________________________\n\n"
t = _("%s [%s]: event %s\n")
# Initialize things if we're entering this functioin
# for the first time
if not self.cursor_type:
self.cursor_type = 'Person'
self.cursor = self.db.get_person_cursor()
self.data = self.cursor.first()
self.any_refs = False
titles = [(_('Type'),0,150),(_('Name'),1,150),
(_('ID'),2,75),(_('Event Name'),3,150)]
self.model = ListModel.ListModel(self.plist,
titles,
event_func=self.button_press)
for e in pevent:
msg = msg + ( t % (self.name_display(e[0]),e[0].get_gramps_id(),_(e[1].get_name())))
if self.cursor_type == 'Person':
while self.data:
handle,val = self.data
person = RelLib.Person()
person.unserialize(val)
for event_handle in [person.get_birth_handle(),
person.get_death_handle()] \
+ person.get_event_list():
event = self.db.get_event_from_handle(event_handle)
if event and event.get_place_handle() == place_handle:
pname = self.name_display(person)
gramps_id = person.get_gramps_id()
ename = event.get_name()
self.model.add(
[_("Personal Event"),pname,gramps_id,ename],
(0,event_handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Family'
self.cursor = self.db.get_family_cursor()
self.data = self.cursor.first()
if len(fevent) > 0:
any = 1
msg = msg + "\n%s\n" % _("Families")
msg = msg + "_________________________\n\n"
t = _("%s [%s]: event %s\n")
if self.cursor_type == 'Family':
while self.data:
handle,val = self.data
family = RelLib.Family()
family.unserialize(val)
for event_handle in family.get_event_list():
event = self.db.get_event_from_handle(event_handle)
if event and event.get_place_handle() == place_handle:
father = family.get_father_handle()
mother = family.get_mother_handle()
if father and mother:
fname = _("%(father)s and %(mother)s") % {
"father" : self.name_display(
self.db.get_person_from_handle(father)),
"mother" : self.name_display(
self.db.get_person_from_handle(mother))
}
elif father:
fname = self.name_display(
self.db.get_person_from_handle(father))
else:
fname = self.name_display(
self.db.get_person_from_handle(mother))
for e in fevent:
father = e[0].get_father_handle()
mother = e[0].get_mother_handle()
if father and mother:
fname = _("%(father)s and %(mother)s") % {
"father" : self.name_display( self.db.get_person_from_handle( father)),
"mother" : self.name_display( self.db.get_person_from_handle( mother)) }
elif father:
fname = self.name_display( self.db.get_person_from_handle( father))
else:
fname = self.name_display( self.db.get_person_from_handle( mother))
gramps_id = family.get_gramps_id()
ename = event.get_name()
self.model.add(
[_("Family Event"),fname,gramps_id,ename],
(1,event_handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
msg = msg + ( t % (fname,e[0].get_gramps_id(),_(e[1].get_name())))
self.refinfo.get_buffer().set_text(msg)
if any:
if self.any_refs:
Utils.bold_label(self.refs_label,self.top)
else:
Utils.unbold_label(self.refs_label,self.top)
self.ref_not_loaded = 0
self.cursor_type = None
return False
#-------------------------------------------------------------------------
#

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -26,6 +26,7 @@
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import gc
#-------------------------------------------------------------------------
#
@@ -34,7 +35,6 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gobject
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -47,6 +47,9 @@ import ImageSelect
import ListModel
import RelLib
import NameDisplay
import Spell
import GrampsDisplay
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -65,6 +68,7 @@ class EditSource:
self.ref_not_loaded = 1
else:
self.ref_not_loaded = 0
self.idle = None
self.db = db
self.parent = parent
self.name_display = NameDisplay.displayer.display
@@ -85,6 +89,7 @@ class EditSource:
self.top_window = gtk.glade.XML(const.gladeFile,"sourceEditor","gramps")
self.top = self.top_window.get_widget("sourceEditor")
self.gladeif = GladeIf(self.top_window)
Utils.set_titles(self.top,self.top_window.get_widget('title'),
_('Source Editor'))
@@ -97,6 +102,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("gallerySourceEditor")
self.refs_label = self.top_window.get_widget("refsSourceEditor")
@@ -129,26 +135,26 @@ class EditSource:
Utils.bold_label(self.notes_label)
if source.get_note_format() == 1:
self.preform.set_active(1)
self.note.set_wrap_mode(gtk.WRAP_NONE)
else:
self.flowed.set_active(1)
self.note.set_wrap_mode(gtk.WRAP_WORD)
if self.source.get_media_list():
Utils.bold_label(self.gallery_label)
self.top_window.signal_autoconnect({
"on_switch_page" : self.on_switch_page,
"on_addphoto_clicked" : self.gallery.on_add_media_clicked,
"on_selectphoto_clicked" : self.gallery.on_select_media_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_media_clicked,
"on_editphoto_clicked" : self.gallery.on_edit_media_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_sourceEditor_help_clicked" : self.on_help_clicked,
"on_sourceEditor_ok_clicked" : self.on_source_apply_clicked,
"on_sourceEditor_cancel_clicked" : self.close,
"on_sourceEditor_delete_event" : self.on_delete_event,
"on_delete_data_clicked" : self.on_delete_data_clicked,
"on_add_data_clicked" : self.on_add_data_clicked,
})
self.gladeif.connect('sourceEditor','delete_event',self.on_delete_event)
self.gladeif.connect('cancel','clicked',self.close)
self.gladeif.connect('ok','clicked',self.on_source_apply_clicked)
self.gladeif.connect('button166','clicked',self.on_help_clicked)
self.gladeif.connect('notebook2','switch_page',self.on_switch_page)
self.gladeif.connect('add_data','clicked',self.on_add_data_clicked)
self.gladeif.connect('del_data','clicked',self.on_delete_data_clicked)
self.gladeif.connect('add_photo','clicked',self.gallery.on_add_media_clicked)
self.gladeif.connect('sel_photo','clicked',self.gallery.on_select_media_clicked)
self.gladeif.connect('edit_photo','clicked',self.gallery.on_edit_media_clicked)
self.gladeif.connect('delete_photo','clicked',self.gallery.on_delete_media_clicked)
self.gladeif.connect('source_preform','toggled',self.format_toggled)
if self.source.get_handle() == None or self.db.readonly:
self.top_window.get_widget("edit_photo").set_sensitive(False)
@@ -191,9 +197,16 @@ class EditSource:
if self.ref_not_loaded:
self.ref_not_loaded = 0
Utils.temp_label(self.refs_label,self.top)
gobject.idle_add(self.display_references)
self.cursor_type = None
self.idle = gobject.idle_add(self.display_references)
self.data_sel = self.datalist.get_selection()
def format_toggled(self,junk):
if self.preform.get_active():
self.note.set_wrap_mode(gtk.WRAP_NONE)
else:
self.note.set_wrap_mode(gtk.WRAP_WORD)
def on_add_data_clicked(self,widget):
node = self.data_model.append(row=['',''])
self.data_sel.select_iter(node)
@@ -216,16 +229,22 @@ class EditSource:
def on_delete_event(self,obj,b):
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
gc.collect()
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-src')
GrampsDisplay.help('adv-src')
def close(self,obj):
def close(self,obj=None):
self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.gladeif.close()
self.top.destroy()
if self.idle != None:
gobject.source_remove(self.idle)
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -278,83 +297,160 @@ class EditSource:
event = self.db.get_event_from_handle(handle)
event_name = event.get_name()
if const.family_events.has_key(event_name):
EventEdit.EventEditor(
self,", ", const.marriageEvents, const.family_events,
event, None, 0, None, None, self.db.readonly)
EventEdit.FamilyEventEditor(
self,", ", event, None, 0, None, None, self.db.readonly)
elif const.personal_events.has_key(event_name):
EventEdit.EventEditor(
self,", ", const.personalEvents, const.personal_events,
event, None, 0, None, None, self.db.readonly)
EventEdit.PersonEventEditor(
self,", ", event, None, 0, None, None, self.db.readonly)
elif event_name in ["Birth","Death"]:
EventEdit.EventEditor(
self,", ", const.personalEvents, const.personal_events,
event, None, 1, None, None, self.db.readonly)
EventEdit.PersonEventEditor(
self,", ", event, None, 1, None, None, self.db.readonly)
elif data_type == 3:
import EditPlace
place = self.db.get_place_from_handle(handle)
EditPlace.EditPlace(self.parent,place)
elif data_type == 4:
source = self.db.get_source_from_handle(handle)
EditSource(source,self.db,self.parent,None,self.db.readonly)
elif data_type == 5:
import ImageSelect
media = self.db.get_object_from_handle(handle)
ImageSelect.GlobalMediaProperties(self.db,media,self)
def display_references(self):
(person_list,family_list,event_list,
place_list,source_list,media_list
) = Utils.get_source_referents(self.source.get_handle(),self.db)
source_handle = self.source.get_handle()
any = person_list or family_list or event_list \
or place_list or source_list or media_list
# Initialize things if we're entering this functioin
# for the first time
if not self.cursor_type:
self.cursor_type = 'Person'
self.cursor = self.db.get_person_cursor()
self.data = self.cursor.first()
slist = self.top_window.get_widget('slist')
self.any_refs = False
slist = self.top_window.get_widget('slist')
titles = [(_('Type'),0,150),(_('ID'),1,75),(_('Name'),2,150)]
self.model = ListModel.ListModel(slist,
titles,
event_func=self.button_press)
titles = [(_('Type'),0,150),(_('ID'),1,75),(_('Name'),2,150)]
self.model = ListModel.ListModel(slist,titles,event_func=self.button_press)
if self.cursor_type == 'Person':
while self.data:
handle,val = self.data
person = RelLib.Person()
person.unserialize(val)
if person.has_source_reference(source_handle):
name = self.name_display(person)
gramps_id = person.get_gramps_id()
self.model.add([_("Person"),gramps_id,name],(0,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Family'
self.cursor = self.db.get_family_cursor()
self.data = self.cursor.first()
for handle in person_list:
person = self.db.get_person_from_handle(handle)
name = self.name_display(person)
gramps_id = person.get_gramps_id()
self.model.add([_("Person"),gramps_id,name],(0,handle))
if self.cursor_type == 'Family':
while self.data:
handle,val = self.data
family = RelLib.Family()
family.unserialize(val)
if family.has_source_reference(source_handle):
name = Utils.family_name(family,self.db)
gramps_id = family.get_gramps_id()
self.model.add([_("Family"),gramps_id,name],(1,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Event'
self.cursor = self.db.get_event_cursor()
self.data = self.cursor.first()
for handle in family_list:
family = self.db.get_family_from_handle(handle)
name = Utils.family_name(family,self.db)
gramps_id = family.get_gramps_id()
self.model.add([_("Family"),gramps_id,name],(1,handle))
if self.cursor_type == 'Event':
while self.data:
handle,val = self.data
event = RelLib.Event()
event.unserialize(val)
if event.has_source_reference(source_handle):
name = event.get_name()
gramps_id = event.get_gramps_id()
self.model.add([_("Event"),gramps_id,name],(2,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Place'
self.cursor = self.db.get_place_cursor()
self.data = self.cursor.first()
for handle in event_list:
event = self.db.get_event_from_handle(handle)
name = event.get_name()
gramps_id = event.get_gramps_id()
self.model.add([_("Event"),gramps_id,name],(2,handle))
if self.cursor_type == 'Place':
while self.data:
handle,val = self.data
place = RelLib.Place()
place.unserialize(val)
if place.has_source_reference(source_handle):
name = place.get_title()
gramps_id = place.get_gramps_id()
self.model.add([_("Place"),gramps_id,name],(3,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Source'
self.cursor = self.db.get_source_cursor()
self.data = self.cursor.first()
for handle in place_list:
place = self.db.get_place_from_handle(handle)
name = place.get_title()
gramps_id = place.get_gramps_id()
self.model.add([_("Place"),gramps_id,name],(3,handle))
if self.cursor_type == 'Source':
while self.data:
handle,val = self.data
source = RelLib.Source()
source.unserialize(val)
if source.has_source_reference(source_handle):
name = source.get_title()
gramps_id = source.get_gramps_id()
self.model.add([_("Source"),gramps_id,name],(4,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
self.cursor_type = 'Media'
self.cursor = self.db.get_media_cursor()
self.data = self.cursor.first()
for handle in source_list:
source = self.db.get_source_from_handle(handle)
name = source.get_title()
gramps_id = source.get_gramps_id()
self.model.add([_("Source"),gramps_id,name],(4,handle))
if self.cursor_type == 'Media':
while self.data:
handle,val = self.data
obj = RelLib.MediaObject()
obj.unserialize(val)
if obj.has_source_reference(source_handle):
name = obj.get_description()
gramps_id = obj.get_gramps_id()
self.model.add([_("Media"),gramps_id,name],(5,handle))
self.any_refs = True
self.data = self.cursor.next()
if gtk.events_pending():
return True
self.cursor.close()
for handle in media_list:
media = self.db.get_object_from_handle(handle)
name = media.get_description()
gramps_id = media.get_gramps_id()
self.model.add([_("Media"),gramps_id,name],(5,handle))
if any:
if self.any_refs:
Utils.bold_label(self.refs_label,self.top)
else:
Utils.unbold_label(self.refs_label,self.top)
self.ref_not_loaded = 0
self.cursor_type = None
return False
def on_source_apply_clicked(self,obj):
@@ -362,8 +458,10 @@ class EditSource:
author = unicode(self.author.get_text())
pubinfo = unicode(self.pubinfo.get_text())
abbrev = unicode(self.abbrev.get_text())
note = unicode(self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
self.notes_buffer.get_end_iter(),False))
note = unicode(
self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
self.notes_buffer.get_end_iter(),
False))
format = self.preform.get_active()
if author != self.source.get_author():
@@ -411,9 +509,12 @@ class EditSource:
elif page == 3 and self.ref_not_loaded:
self.ref_not_loaded = 0
Utils.temp_label(self.refs_label,self.top)
gobject.idle_add(self.display_references)
text = unicode(self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
self.notes_buffer.get_end_iter(),False))
self.idle = gobject.idle_add(self.display_references)
text = unicode(
self.notes_buffer.get_text(self.notes_buffer.get_start_iter(),
self.notes_buffer.get_end_iter(),
False)
)
if text:
Utils.bold_label(self.notes_label)
else:

View File

@@ -42,6 +42,15 @@ class DateError(Exception):
def __str__(self):
return self.value
class DatabaseError(Exception):
"""Error used to report Date errors"""
def __init__(self,value=""):
Exception.__init__(self)
self.value = value
def __str__(self):
return self.value
class ReportError(Exception):
"""Error used to report Report errors"""
def __init__(self,value,value2=""):

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -26,6 +26,9 @@
#
#-------------------------------------------------------------------------
from gettext import gettext as _
import sets
import gc
from cgi import escape
#-------------------------------------------------------------------------
#
@@ -34,7 +37,6 @@ from gettext import gettext as _
#-------------------------------------------------------------------------
import gtk
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -51,7 +53,11 @@ import Date
import DateHandler
import ImageSelect
import DateEdit
import Spell
import GrampsDisplay
from QuestionDialog import WarningDialog, ErrorDialog
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -83,15 +89,10 @@ class EventEditor:
self.dp = DateHandler.parser
self.dd = DateHandler.displayer
values = {}
for v in elist:
values[v] = 1
for vv in self.db.get_person_event_type_list():
if vv not in ("Birth","Death"):
v = _(vv)
values[v] = 1
self.elist = values.keys()
# 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.parent.db.get_place_handles():
@@ -105,17 +106,13 @@ class EventEditor:
self.witnesslist = []
self.date = Date.Date(self.event.get_date_object())
transname = const.display_event(event.get_name())
# add the name to the list if it is not already there. This
# tends to occur in translated languages with the 'Death'
# event, which is a partial match to other events
#if not transname in elist:
# elist.append(transname)
else:
self.srcreflist = []
self.witnesslist = []
self.date = Date.Date(None)
self.top = gtk.glade.XML(const.dialogFile, "event_edit","gramps")
self.gladeif = GladeIf(self.top)
self.window = self.top.get_widget("event_edit")
title_label = self.top.get_widget('title')
@@ -123,7 +120,7 @@ class EventEditor:
if name == ", ":
etitle = _('Event Editor')
else:
etitle = _('Event Editor for %s') % name
etitle = _('Event Editor for %s') % escape(name)
Utils.set_titles(self.window,title_label, etitle,
_('Event Editor'))
@@ -141,6 +138,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)
@@ -206,8 +204,10 @@ class EventEditor:
Utils.bold_label(self.notes_label)
if event.get_note_format() == 1:
self.preform.set_active(1)
self.note_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.flowed.set_active(1)
self.note_field.set_wrap_mode(gtk.WRAP_WORD)
if event.get_media_list():
Utils.bold_label(self.gallery_label)
else:
@@ -215,9 +215,11 @@ class EventEditor:
self.event_menu.child.set_text(def_event)
if def_placename:
self.place_field.set_text(def_placename)
date_stat = self.top.get_widget("date_stat")
date_stat.set_sensitive(not self.db.readonly)
self.date_check = DateEdit.DateEdit(self.date,
self.date_field,
self.top.get_widget("date_stat"),
date_stat,
self.window)
if not event:
@@ -227,18 +229,16 @@ class EventEditor:
self.path, self.icon_list,
self.db,self,self.window)
self.top.signal_autoconnect({
"on_switch_page" : self.on_switch_page,
"on_help_event_clicked" : self.on_help_clicked,
"on_ok_event_clicked" : self.on_event_edit_ok_clicked,
"on_cancel_event_clicked" : self.close,
"on_event_edit_delete_event": self.on_delete_event,
"on_addphoto_clicked" : self.gallery.on_add_media_clicked,
"on_selectphoto_clicked" : self.gallery.on_select_media_clicked,
"on_deletephoto_clicked" : self.gallery.on_delete_media_clicked,
"on_edit_properties_clicked": self.gallery.popup_change_description,
"on_editphoto_clicked" : self.gallery.on_edit_media_clicked,
})
self.gladeif.connect('event_edit','delete_event',self.on_delete_event)
self.gladeif.connect('button111','clicked',self.close)
self.gladeif.connect('ok','clicked',self.on_event_edit_ok_clicked)
self.gladeif.connect('button126','clicked',self.on_help_clicked)
self.gladeif.connect('notebook','switch_page',self.on_switch_page)
self.gladeif.connect('add_obj','clicked',self.gallery.on_add_media_clicked)
self.gladeif.connect('sel_obj','clicked',self.gallery.on_select_media_clicked)
self.gladeif.connect('button172','clicked',self.gallery.on_edit_media_clicked)
self.gladeif.connect('del_obj','clicked',self.gallery.on_delete_media_clicked)
self.gladeif.connect('eventpreform','toggled',self.format_toggled)
self.top.get_widget('del_obj').set_sensitive(not noedit)
self.top.get_widget('sel_obj').set_sensitive(not noedit)
@@ -251,16 +251,26 @@ class EventEditor:
self.add_itself_to_menu()
self.window.show()
def format_toggled(self,junk):
if self.preform.get_active():
self.note_field.set_wrap_mode(gtk.WRAP_NONE)
else:
self.note_field.set_wrap_mode(gtk.WRAP_WORD)
def on_delete_event(self,obj,b):
self.gladeif.close()
self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
gc.collect()
def close(self,obj):
self.gladeif.close()
self.gallery.close()
self.close_child_windows()
self.remove_itself_from_menu()
self.window.destroy()
gc.collect()
def close_child_windows(self):
for child_window in self.child_windows.values():
@@ -298,7 +308,7 @@ class EventEditor:
def on_help_clicked(self,obj):
"""Display the relevant portion of GRAMPS manual"""
gnome.help_display('gramps-manual','adv-ev')
GrampsDisplay.help('adv-ev')
def get_place(self,field,trans):
text = unicode(field.get_text().strip())
@@ -336,13 +346,13 @@ class EventEditor:
edesc = unicode(self.descr_field.get_text())
epriv = self.priv.get_active()
if ename not in self.elist + [_("Birth") , _("Death")]:
WarningDialog(
_('New event type created'),
_('The "%s" event type has been added to this database.\n'
'It will now appear in the event menus for this database') % ename)
self.elist.append(ename)
self.elist.sort()
# if ename not in self.elist + [_("Birth") , _("Death")]:
# WarningDialog(
# _('New event type created'),
# _('The "%s" event type has been added to this database.\n'
# 'It will now appear in the event menus for this database') % ename)
# self.elist.append(ename)
# self.elist.sort()
if self.event == None:
self.event = RelLib.Event()
@@ -402,7 +412,7 @@ class EventEditor:
if self.event.get_privacy() != priv:
self.event.set_privacy(priv)
self.parent.lists_changed = 1
self.db.commit_event(self.event,trans)
self.commit(self.event,trans)
def on_switch_page(self,obj,a,page):
buf = self.note_field.get_buffer()
@@ -411,3 +421,41 @@ class EventEditor:
Utils.bold_label(self.notes_label)
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)
class FamilyEventEditor(EventEditor):
def __init__(self,parent,name,event,def_placename,
read_only, cb, def_event=None, noedit=False):
EventEditor.__init__(self, parent, name, const.marriageEvents,
const.family_events, event, def_placename,
read_only, cb, def_event, noedit)
def commit(self,event,trans):
self.db.commit_family_event(event,trans)
def get_event_names(self):
return self.db.get_family_event_types()
class PersonEventEditor(EventEditor):
def __init__(self,parent,name,event,def_placename,
read_only, cb, def_event=None, noedit=False):
EventEditor.__init__(self, parent, name, const.personalEvents,
const.personal_events, event, def_placename,
read_only, cb, def_event, noedit)
def commit(self,event,trans):
self.db.commit_personal_event(event,trans)
def get_event_names(self):
return self.db.get_person_event_types()

View File

@@ -28,7 +28,6 @@
#
#-------------------------------------------------------------------------
import os
import shutil
from gettext import gettext as _
#-------------------------------------------------------------------------
@@ -37,7 +36,6 @@ from gettext import gettext as _
#
#-------------------------------------------------------------------------
import gtk
import gnome
from gnome.ui import Druid, DruidPageEdge, DruidPageStandard
#-------------------------------------------------------------------------
@@ -50,6 +48,7 @@ import Utils
import PluginMgr
import QuestionDialog
import GrampsKeys
import GrampsDisplay
#-------------------------------------------------------------------------
#
@@ -120,7 +119,7 @@ class Exporter:
"""
Help handler.
"""
gnome.help_display('gramps-manual','export-data')
GrampsDisplay.help('export-data')
def build_info_page(self):
"""

View File

@@ -67,7 +67,6 @@ from DdTargets import DdTargets
_BORN = _('b.')
_DIED = _('d.')
column_names = [
(_('#'),0) ,
(_('ID'),1) ,
@@ -207,7 +206,8 @@ class FamilyView:
ACTION_COPY)
self.spouse_list.connect('drag_data_get',
self.sp_drag_data_get)
self.spouse_list.connect('drag_data_received',
if not self.parent.db.readonly:
self.spouse_list.connect('drag_data_received',
self.sp_drag_data_received)
def init_interface(self):
@@ -263,7 +263,8 @@ class FamilyView:
[DdTargets.CHILD.target()],
ACTION_COPY)
self.child_list.connect('drag_data_get', self.drag_data_get)
self.child_list.connect('drag_data_received',self.drag_data_received)
if not self.parent.db.readonly:
self.child_list.connect('drag_data_received',self.drag_data_received)
if not already_init:
self.child_list.connect('button-press-event',
@@ -709,6 +710,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)
@@ -815,28 +819,46 @@ class FamilyView:
family = self.family
# determine the child
model, node = self.child_selection.get_selected()
if not node:
return
handle = self.child_model.get_value(node,_HANDLE_COL)
child = self.parent.db.get_person_from_handle(handle)
trans = self.parent.db.transaction_begin()
# remove the child from the family and the family from the child
family.remove_child_handle(child.get_handle())
child.remove_parent_family_handle(family.get_handle())
if len(family.get_child_handle_list()) == 0:
if family.get_father_handle() == None:
self.delete_family_from(family.get_mother_handle(),trans)
elif family.get_mother_handle() == None:
self.delete_family_from(family.get_father_handle(),trans)
# begin transaction
trans = self.parent.db.transaction_begin()
# if there are no children left, and the spouse is empty, delete the
# family
mother_handle = family.get_mother_handle()
father_handle = family.get_father_handle()
no_of_kids = len(family.get_child_handle_list())
self.parent.db.disable_all_signals()
if no_of_kids == 0 and (mother_handle == None or father_handle == None):
if family.get_father_handle() == None:
temp = self.parent.db.get_person_from_handle(family.get_mother_handle())
temp.get_family_handle_list().remove(family.get_handle())
elif family.get_mother_handle() == None:
temp = self.parent.db.get_person_from_handle(family.get_father_handle())
temp.get_family_handle_list().remove(family.get_handle())
self.parent.db.remove_family(family.get_handle(),trans)
self.parent.db.commit_person(temp,trans)
else:
self.parent.db.commit_family(family,trans)
# commit the transaction
self.parent.db.commit_person(child,trans)
self.parent.db.commit_family(family,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()],))
def remove_spouse(self,obj):
if self.selected_spouse:
@@ -860,36 +882,31 @@ class FamilyView:
cur_spouse = self.selected_spouse
cur_family = self.family
# Remove spouse from the family
if cur_spouse.get_handle() == cur_family.get_father_handle():
cur_family.set_father_handle(None)
else:
cur_family.set_mother_handle(None)
trans = self.parent.db.transaction_begin()
#If the spouse is defined, remove the family from the spouse
if cur_spouse:
cur_spouse.remove_family_handle(cur_family.get_handle())
self.parent.db.commit_person(cur_spouse,trans)
self.parent.db.commit_family(cur_family,trans)
# if there are no children, remove it from the current person
# and delete the family
if len(cur_family.get_child_handle_list()) == 0:
mother_id = cur_family.get_mother_handle()
father_id = cur_family.get_father_handle()
for handle in [father_id, mother_id]:
if handle:
p = self.parent.db.get_person_from_handle(handle)
p.remove_family_handle(cur_family.get_handle())
self.parent.db.commit_person(p,trans)
# if len(cur_person.get_family_handle_list()) > 0:
# handle = cur_person.get_family_handle_list()[0]
# family = self.parent.db.find_family_from_handle(handle,trans)
cur_person.remove_family_handle(cur_family.get_handle())
self.parent.db.commit_person(cur_person,trans)
self.parent.db.remove_family(cur_family.get_handle(),trans)
else:
self.parent.db.commit_family(cur_family,trans)
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:
@@ -923,8 +940,11 @@ class FamilyView:
if family.get_father_handle():
person_handle = family.get_father_handle()
else:
elif family.get_mother_handle():
person_handle = family.get_mother_handle()
else:
#family does not contain parants
return
person = self.parent.db.get_person_from_handle(person_handle)
self.parent.change_active_person(person)
@@ -1062,7 +1082,7 @@ class FamilyView:
self.spouse_selection.select_iter(node)
else:
self.display_marriage(None)
except KeyError:
except KeyError,msg:
WarningDialog(_('Database corruption detected'),
_('A problem was detected with the database. Please '
'run the Check and Repair Database tool to fix the '
@@ -1119,16 +1139,6 @@ class FamilyView:
else:
return _("%s: unknown") % (l)
def delete_family_from(self,person_handle,trans):
person = self.parent.db.get_person_from_handle(person_handle)
person.remove_family_handle(self.family.get_handle())
self.parent.db.remove_family(self.family.get_handle(),trans)
flist = self.person.get_family_handle_list()
if len(flist) > 0:
self.family = self.parent.db.get_family_from_handle(flist[0])
else:
self.family = None
def display_marriage(self,family):
if not family:
self.family = None
@@ -1137,6 +1147,7 @@ class FamilyView:
return
hlist = family.get_child_handle_list()
self.child_model = DisplayModels.ChildModel(hlist,self.parent.db)
self.child_list.set_model(self.child_model)
self.family = self.parent.db.get_family_from_handle(family.get_handle())
@@ -1404,12 +1415,14 @@ 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()
def drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.parent.db.readonly: # no DnD on readonly database
return
if DdTargets.PERSON_LINK.drag_type in context.targets:
drop_person_handle = sel_data.data
@@ -1487,6 +1500,8 @@ class FamilyView:
self.load_family(self.family)
def sp_drag_data_received(self,widget,context,x,y,sel_data,info,time):
if self.parent.db.readonly: # no DnD on readonly database
return
self.in_drag = True
path = self.spouse_list.get_path_at_pos(x,y)
if path == None:
@@ -1527,6 +1542,8 @@ class FamilyView:
if not node:
return
handle = self.child_model.get_value(node,_HANDLE_COL)
if not handle:
return
bits_per = 8; # we're going to pass a string
if sel_data.target == DdTargets.PERSON_LINK.drag_type:
@@ -1549,10 +1566,10 @@ class FamilyView:
pname = self.person.get_primary_name()
return (pname.get_surname_prefix(),pname.get_surname())
elif self.family:
fid = self.family.get_father_handle()
f = self.parent.db.get_family_from_handle(fid)
if f:
pname = f.get_primary_name()
father_handle = self.family.get_father_handle()
if father_handle:
father = self.parent.db.get_person_from_handle(father_handle)
pname = father.get_primary_name()
return (pname.get_surname_prefix(),pname.get_surname())
return ("","")
@@ -1561,10 +1578,12 @@ class FamilyView:
def latin_american(self,val):
if self.family:
father = self.family.get_father_handle()
mother = self.family.get_mother_handle()
if not father or not mother:
father_handle = self.family.get_father_handle()
mother_handle = self.family.get_mother_handle()
if not father_handle or not mother_handle:
return ("","")
father = self.parent.db.get_person_from_handle(father_handle)
mother = self.parent.db.get_person_from_handle(mother_handle)
fsn = father.get_primary_name().get_surname()
msn = mother.get_primary_name().get_surname()
if not father or not mother:
@@ -1581,9 +1600,10 @@ class FamilyView:
if self.person.get_gender() == RelLib.Person.MALE:
fname = self.person.get_primary_name().get_first_name()
elif self.family:
f = self.family.get_father_handle()
if f:
fname = f.get_primary_name().get_first_name()
father_handle = self.family.get_father_handle()
if father_handle:
father = self.parent.db.get_person_from_handle(father_handle)
fname = father.get_primary_name().get_first_name()
if fname:
fname = fname.split()[0]
if val == 0:

File diff suppressed because it is too large Load Diff

View File

@@ -1,7 +1,7 @@
#
# Gramps - a GTK+/GNOME based genealogy program
#
# Copyright (C) 2000-2005 Donald N. Allingham
# Copyright (C) 2000-2006 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
@@ -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
@@ -43,7 +44,7 @@ from bsddb import dbshelve, db
from RelLib import *
from GrampsDbBase import *
_DBVERSION = 6
_DBVERSION = 8
def find_surname(key,data):
return str(data[3].get_surname())
@@ -54,9 +55,6 @@ def find_idmap(key,data):
def find_fidmap(key,data):
return str(data[1])
def find_eventname(key,data):
return str(data[2])
class GrampsBSDDBCursor(GrampsCursor):
def __init__(self,source):
@@ -71,6 +69,18 @@ class GrampsBSDDBCursor(GrampsCursor):
def close(self):
self.cursor.close()
def delete(self):
self.cursor.delete()
class GrampsBSDDBDupCursor(GrampsBSDDBCursor):
"""Cursor that includes handling for duplicate keys"""
def set(self,key):
return self.cursor.set(str(key))
def next_dup(self):
return self.cursor.next_dup()
#-------------------------------------------------------------------------
#
# GrampsBSDDB
@@ -131,6 +141,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")
@@ -173,10 +184,6 @@ class GrampsBSDDB(GrampsDbBase):
self.oid_trans.set_flags(db.DB_DUP)
self.oid_trans.open(name, "oidtrans", db.DB_HASH, flags=openflags)
self.eventnames = db.DB(self.env)
self.eventnames.set_flags(db.DB_DUP)
self.eventnames.open(name, "eventnames", db.DB_HASH, flags=openflags)
if not self.readonly:
self.person_map.associate(self.surnames, find_surname, openflags)
self.person_map.associate(self.id_trans, find_idmap, openflags)
@@ -184,12 +191,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')
@@ -205,6 +215,90 @@ class GrampsBSDDB(GrampsDbBase):
self.genderStats = GenderStats(gstats)
return 1
def rebuild_secondary(self,callback=None):
openflags = db.DB_CREATE
# Repair secondary indices related to person_map
self.id_trans.close()
junk = db.DB(self.env)
junk.remove(self.save_name,"idtrans")
self.surnames.close()
junk = db.DB(self.env)
junk.remove(self.save_name,"surnames")
# Repair secondary indices related to place_map
self.pid_trans.close()
junk = db.DB(self.env)
junk.remove(self.save_name,"pidtrans")
# Repair secondary indices related to media_map
self.oid_trans.close()
junk = db.DB(self.env)
junk.remove(self.save_name,"oidtrans")
# Repair secondary indices related to source_map
self.sid_trans.close()
junk = db.DB(self.env)
junk.remove(self.save_name,"sidtrans")
if callback:
callback()
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=openflags)
self.person_map.associate(self.id_trans, find_idmap, openflags)
self.id_trans.sync()
if callback:
callback()
self.surnames = db.DB(self.env)
self.surnames.set_flags(db.DB_DUP)
self.surnames.open(self.save_name, "surnames",
db.DB_HASH, flags=openflags)
self.person_map.associate(self.surnames, find_surname, openflags)
self.surnames.sync()
if callback:
callback()
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=openflags)
self.family_map.associate(self.fid_trans, find_idmap, openflags)
self.fid_trans.sync()
if callback:
callback()
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=openflags)
self.place_map.associate(self.pid_trans, find_idmap, openflags)
self.pid_trans.sync()
if callback:
callback()
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=openflags)
self.source_map.associate(self.sid_trans, find_idmap, openflags)
self.sid_trans.sync()
if callback:
callback()
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=openflags)
self.media_map.associate(self.oid_trans, find_idmap, openflags)
self.oid_trans.sync()
if callback:
callback()
def abort_changes(self):
while self.undo():
pass
@@ -223,9 +317,12 @@ 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()
self.id_trans.close()
self.fid_trans.close()
self.oid_trans.close()
@@ -257,6 +354,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()
@@ -267,16 +365,6 @@ class GrampsBSDDB(GrampsDbBase):
vals.sort(locale.strcoll)
return vals
def get_person_event_type_list(self):
names = self.eventnames.keys()
a = {}
for name in names:
a[unicode(name)] = 1
vals = a.keys()
vals.sort()
return vals
def remove_person(self,handle,transaction):
if not self.readonly and handle and str(handle) in self.person_map:
person = self.get_person_from_handle(handle)
@@ -312,7 +400,7 @@ class GrampsBSDDB(GrampsDbBase):
def remove_place(self,handle,transaction):
if not self.readonly and handle and str(handle) in self.place_map:
if transaction != None:
old_data = self.place_map.get(handle)
old_data = self.place_map.get(str(handle))
transaction.add(PLACE_KEY,handle,old_data)
self.emit('place-delete',([handle],))
self.place_map.delete(str(handle))
@@ -320,7 +408,7 @@ class GrampsBSDDB(GrampsDbBase):
def remove_object(self,handle,transaction):
if not self.readonly and handle and str(handle) in self.media_map:
if transaction != None:
old_data = self.media_map.get(handle)
old_data = self.media_map.get(str(handle))
transaction.add(MEDIA_KEY,handle,old_data)
self.emit('media-delete',([handle],))
self.media_map.delete(str(handle))
@@ -401,7 +489,6 @@ class GrampsBSDDB(GrampsDbBase):
self.pid_trans.sync()
self.sid_trans.sync()
self.oid_trans.sync()
self.eventnames.sync()
self.undodb.sync()
def upgrade(self):
@@ -421,6 +508,10 @@ class GrampsBSDDB(GrampsDbBase):
self.upgrade_5()
if version < 6:
self.upgrade_6()
if version < 7:
self.upgrade_7()
if version < 8:
self.upgrade_8()
self.metadata['version'] = _DBVERSION
print 'Successfully finished all upgrades'
@@ -737,3 +828,68 @@ class GrampsBSDDB(GrampsDbBase):
if val[1] != 6:
order.append(val)
self.set_media_column_order(order)
def upgrade_7(self):
print "Upgrading to DB version 7"
self.genderStats = GenderStats()
cursor = self.get_person_cursor()
data = cursor.first()
while data:
handle,val = data
p = Person(val)
self.genderStats.count_person(p,self)
data = cursor.next()
cursor.close()
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)
try:
data = cursor.next()
except:
data = None
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)
if event:
self.family_event_names.add(event.name)
data = cursor.next()
cursor.close()
if __name__ == "__main__":
import sys
d = GrampsBSDDB()
d.load(sys.argv[1],lambda x: x)
## c = d.get_person_cursor()
## data = c.first()
## while data:
## person = Person(data[1])
## print data[0], person.get_primary_name().get_name(),
## data = c.next()
## c.close()
## print d.surnames.keys()

View File

@@ -26,6 +26,7 @@
#
#-------------------------------------------------------------------------
import os
import sets
from gettext import gettext as _
#-------------------------------------------------------------------------
@@ -36,7 +37,6 @@ from gettext import gettext as _
import gobject
import gtk
import gtk.glade
import gnome
#-------------------------------------------------------------------------
#
@@ -48,6 +48,9 @@ import RelLib
import const
import Utils
import DateHandler
import GrampsDisplay
import QuestionDialog
from WindowUtils import GladeIf
#-------------------------------------------------------------------------
#
@@ -143,13 +146,13 @@ class GrampsPreferences:
self.built = 0
self.db = db
self.top = gtk.glade.XML(const.prefsFile,"preferences","gramps")
self.top.signal_autoconnect({
"on_close_clicked" : self.on_close_clicked,
"on_help_clicked" : self.on_propertybox_help,
"on_tree_select_row" : self.select
})
self.gladeif = GladeIf(self.top)
self.gladeif.connect('button6','clicked',self.on_close_clicked)
self.gladeif.connect('button7','clicked',self.on_propertybox_help)
self.window = self.top.get_widget("preferences")
self.window.connect('delete_event',self.on_close_clicked)
self.tree = self.top.get_widget("tree")
self.store = gtk.TreeStore(gobject.TYPE_STRING)
self.selection = self.tree.get_selection()
@@ -187,31 +190,26 @@ class GrampsPreferences:
auto.connect('toggled',
lambda obj: GrampsKeys.save_autoload(obj.get_active()))
spell = self.top.get_widget("spellcheck")
spell.set_active(GrampsKeys.get_spellcheck())
spell.connect('toggled',
lambda obj: GrampsKeys.save_spellcheck(obj.get_active()))
lds = self.top.get_widget("uselds")
lds.set_active(GrampsKeys.get_uselds())
lds.connect('toggled',
lambda obj: GrampsKeys.save_uselds(obj.get_active()))
ipr = self.top.get_widget("iprefix")
ipr.set_text(GrampsKeys.get_person_id_prefix())
ipr.connect('changed',
lambda obj: GrampsKeys.save_iprefix(obj.get_text()))
opr = self.top.get_widget("oprefix")
opr.set_text(GrampsKeys.get_object_id_prefix())
opr.connect('changed',
lambda obj: GrampsKeys.save_oprefix(obj.get_text()))
fpr = self.top.get_widget("fprefix")
fpr.set_text(GrampsKeys.get_family_id_prefix())
fpr.connect('changed',
lambda obj: GrampsKeys.save_fprefix(obj.get_text()))
spr = self.top.get_widget("sprefix")
spr.set_text(GrampsKeys.get_source_id_prefix())
spr.connect('changed',
lambda obj: GrampsKeys.save_sprefix(obj.get_text()))
ppr = self.top.get_widget("pprefix")
ppr.set_text(GrampsKeys.get_place_id_prefix())
ppr.connect('changed',
lambda obj: GrampsKeys.save_pprefix(obj.get_text()))
self.ipr = self.top.get_widget("iprefix")
self.ipr.set_text(GrampsKeys.get_person_id_prefix())
self.opr = self.top.get_widget("oprefix")
self.opr.set_text(GrampsKeys.get_object_id_prefix())
self.fpr = self.top.get_widget("fprefix")
self.fpr.set_text(GrampsKeys.get_family_id_prefix())
self.spr = self.top.get_widget("sprefix")
self.spr.set_text(GrampsKeys.get_source_id_prefix())
self.ppr = self.top.get_widget("pprefix")
self.ppr.set_text(GrampsKeys.get_place_id_prefix())
sb2 = self.top.get_widget("stat2")
sb3 = self.top.get_widget("stat3")
@@ -319,7 +317,61 @@ class GrampsPreferences:
resemail.set_text(GrampsKeys.get_researcher_email())
resemail.connect('changed',
lambda obj: GrampsKeys.save_researcher_email(obj.get_text()))
def save_prefix(self):
""" Validate the GRAMPS ID definitions to be usable"""
ip = self.ipr.get_text()
op = self.opr.get_text()
fp = self.fpr.get_text()
sp = self.spr.get_text()
pp = self.ppr.get_text()
# Do validation to the GRAMPS-ID format strings
invalid_chars = sets.Set("# \t\n\r")
prefixes = [ip,op,fp,sp,pp]
testnums = [1,234,567890]
testresult = {} # used to test that IDs for different objects will be different
formaterror = False # true if formatstring is invalid
incompatible = False # true if ID string is possibly not GEDCOM compatible
for p in prefixes:
if invalid_chars & sets.Set(p):
incompatible = True
for n in testnums:
try:
testresult[p % n] = 1
except:
formaterror = True
idexampletext = _('Example for valid IDs are:\n'+
'I%d which will be displayed as I123 or\n'+
'S%06d which will be displayed as S000123.')
if formaterror:
QuestionDialog.ErrorDialog( _("Invalid GRAMPS ID prefix"),
_("The GRAMPS ID prefix is invalid.\n")+
idexampletext,
self.window)
return False
elif incompatible:
QuestionDialog.OkDialog( _("Incompatible GRAMPS ID prefix"),
_("The GRAMPS ID prefix is in an unusual format and may"+
" cause problems when exporting the database to GEDCOM format.\n")+
idexampletext,
self.window)
elif len(testresult) != len(prefixes)*len(testnums):
QuestionDialog.ErrorDialog( _("Unsuited GRAMPS ID prefix"),
_("The GRAMPS ID prefix is unsuited because it does not"+
" distinguish between different objects.\n")+
idexampletext,
self.window)
return False
GrampsKeys.save_iprefix(ip)
GrampsKeys.save_oprefix(op)
GrampsKeys.save_fprefix(fp)
GrampsKeys.save_sprefix(sp)
GrampsKeys.save_pprefix(pp)
return True
def select(self,obj):
store,node = self.selection.get_selected()
if node:
@@ -328,10 +380,13 @@ class GrampsPreferences:
self.panel.set_current_page(self.imap[path])
def on_propertybox_help(self,obj):
gnome.help_display('gramps-manual','gramps-prefs')
GrampsDisplay.help('gramps-prefs')
def on_close_clicked(self,obj):
Utils.destroy_passed_object(self.window)
def on_close_clicked(self,obj=None,dummy=None):
if not self.save_prefix():
return False
self.gladeif.close()
self.window.destroy()
#-------------------------------------------------------------------------
#

View File

@@ -36,6 +36,7 @@
or the UI code.
"""
import sys
import os
import types
import traceback
import inspect
@@ -58,9 +59,8 @@ class GrampsDBCallback(object):
Classes that want to emit signals need to inherit from the
GrampsDBCallback class and ensure that its __init__ method
is called. They then need to declare the signals that they
can emit and the types of each callbacks arguments.
e.g.
can emit and the types of each callbacks arguments. For
example::
class TestSignals(GrampsDBCallback):
@@ -87,27 +87,23 @@ class GrampsDBCallback(object):
Emitting signals
================
Signals are emitted using the emit method.
Signals are emitted using the emit method. e.g.::
e.g.
def emit_signal(self):
self.emit('test-signal',(1,))
The parameters are passed as a tuple so a single parameter
must be passed as a 1 element tuple.
Connecting callbacks to signals
==============================
===============================
Attaching a callback to the signals is similar to the gtk
connect methods. e.g.
connect methods. e.g.::
# connect to a function.
def fn(i):
print "got signal value = ", i
print 'got signal value = ', i
t = TestSignals()
t.connect('test-signal', fn)
@@ -116,7 +112,7 @@ class GrampsDBCallback(object):
class C(object):
def cb_func(self, i):
print "got class signal = ", 1
print 'got class signal = ', 1
r = R()
t.connect('test-signal', r.cb_func)
@@ -129,7 +125,7 @@ class GrampsDBCallback(object):
key returned from the connect call. This key can be passed to the disconnect
method to remove the callback from the signals callback list.
e.g.
e.g.::
t = TestSignals()
@@ -137,7 +133,7 @@ class GrampsDBCallback(object):
class C(object):
def cb_func(self, i):
print "got class signal = ", 1
print 'got class signal = ', 1
r = R()
key = t.connect('test-signal', r.cb_func)
@@ -155,7 +151,7 @@ class GrampsDBCallback(object):
be used to block the signals for a single instance and disable_all_signals()
can be used to block signals for the class:
e.g.
e.g.::
class TestSignals(GrampsDBCallback):
@@ -213,7 +209,10 @@ class GrampsDBCallback(object):
# If this is True logging will be turned on for all instances
# whether or not instance based logging is enabled.
__LOG_ALL = False
try:
__LOG_ALL = int(os.environ.get('GRAMPS_SIGNAL',"0")) == 1
except:
__LOG_ALL = False
def __init__(self):
self.__enable_logging = False # controls whether lots of debug

View File

@@ -35,8 +35,12 @@ import time
import random
import locale
import re
import sets
import sys
from gettext import gettext as _
log = sys.stderr.write
#-------------------------------------------------------------------------
#
# GRAMPS libraries
@@ -52,7 +56,6 @@ import GrampsDBCallback
#
#-------------------------------------------------------------------------
_UNDO_SIZE = 1000
_id_reg = re.compile("%\d+d")
PERSON_KEY = 0
FAMILY_KEY = 1
@@ -134,6 +137,14 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
'media-rebuild' : None,
}
# If this is True logging will be turned on.
try:
__LOG_ALL = int(os.environ.get('GRAMPS_SIGNAL',"0")) == 1
except:
__LOG_ALL = False
def __init__(self):
"""
Creates a new GrampsDbBase instance. A new GrampDbBase class should
@@ -152,6 +163,11 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
self.lmap_index = 0
self.omap_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())
@@ -175,7 +191,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
self.source_map = None
self.media_map = None
self.event_map = None
self.eventnames = None
self.metadata = None
self.name_group = None
self.undo_callback = None
@@ -191,6 +206,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
@@ -230,7 +248,10 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
def get_media_cursor(self):
assert False, "Needs to be overridden in the derived class"
def load(self,name,callback):
def get_event_cursor(self):
assert False, "Needs to be overridden in the derived class"
def load(self,name,callback,mode="w"):
"""
Opens the specified database. The method needs to be overridden
in the derived class.
@@ -270,7 +291,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
as part of the transaction.
"""
if self.readonly or not person or not person.get_handle():
return
return
if change_time:
person.change = int(change_time)
else:
@@ -279,6 +300,19 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
old_data = self.person_map.get(handle)
if transaction != None:
transaction.add(PERSON_KEY,handle,old_data)
if old_data:
old_person = Person(old_data)
if (old_data[2] != person.gender or
old_data[3].first_name != person.primary_name.first_name):
self.genderStats.uncount_person(old_person)
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)
self.person_map[handle] = person.serialize()
if old_data:
self.emit('person-update',([handle],))
@@ -348,6 +382,14 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
else:
self.emit('place-add',([handle],))
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
@@ -382,6 +424,9 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
transaction.add(FAMILY_KEY,handle,old_data)
self.family_map[handle] = family.serialize()
for attr in family.attribute_list:
self.family_attributes.add(attr.type)
if old_data:
self.emit('family-update',([handle],))
else:
@@ -462,8 +507,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
data = self.person_map.get(str(val))
if data:
person = Person()
person.unserialize(data)
person = Person(data)
return person
return None
@@ -536,7 +580,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
transaction.add(PERSON_KEY, val, None)
self.person_map[str(val)] = person.serialize()
self.emit('person-add', ([str(val)],))
self.genderStats.count_person (person, self)
return person
def find_source_from_handle(self,val,transaction):
@@ -658,7 +701,6 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
if not person.get_handle():
person.set_handle(self.create_id())
self.commit_person(person,transaction)
self.genderStats.count_person (person, self)
return person.get_handle()
def add_family(self,family,transaction):
@@ -759,6 +801,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
@@ -844,19 +916,29 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
return self.family_map.keys()
return []
def _validated_id_prefix(self, val, default):
if val:
try:
junk = val % 1
prefix_var = val # use the prefix as is because it works fine
except:
try:
val = val + "%d"
junk = val % 1
prefix_var = val # format string was missing
except:
prefix_var = default+"%04d" # use default
else:
prefix_var = default+"%04d"
return prefix_var
def set_person_id_prefix(self,val):
"""
Sets the naming template for GRAMPS Person ID values. The string is expected
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as I%d or I%04d.
"""
if val:
if _id_reg.search(val):
self.iprefix = val
else:
self.iprefix = val + "%d"
else:
self.iprefix = "I%04d"
self.iprefix = self._validated_id_prefix(val,"I")
def set_source_id_prefix(self,val):
"""
@@ -864,13 +946,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as S%d or S%04d.
"""
if val:
if _id_reg.search(val):
self.sprefix = val
else:
self.sprefix = val + "%d"
else:
self.sprefix = "S%04d"
self.sprefix = self._validated_id_prefix(val,"S")
def set_object_id_prefix(self,val):
"""
@@ -878,13 +954,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as O%d or O%04d.
"""
if val:
if _id_reg.search(val):
self.oprefix = val
else:
self.oprefix = val + "%d"
else:
self.oprefix = "O%04d"
self.oprefix = self._validated_id_prefix(val,"O")
def set_place_id_prefix(self,val):
"""
@@ -892,13 +962,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as P%d or P%04d.
"""
if val:
if _id_reg.search(val):
self.pprefix = val
else:
self.pprefix = val + "%d"
else:
self.pprefix = "P%04d"
self.pprefix = self._validated_id_prefix(val,"P")
def set_family_id_prefix(self,val):
"""
@@ -906,13 +970,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as F%d or F%04d.
"""
if val:
if _id_reg.search(val):
self.fprefix = val
else:
self.fprefix = val + "%d"
else:
self.fprefix = "F%04d"
self.fprefix = self._validated_id_prefix(val,"F")
def set_event_id_prefix(self,val):
"""
@@ -920,13 +978,7 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
to be in the form of a simple text string, or in a format that contains
a C/Python style format string using %d, such as E%d or E%04d.
"""
if val:
if _id_reg.search(val):
self.eprefix = val
else:
self.eprefix = val + "%d"
else:
self.eprefix = "E%04d"
self.eprefix = self._validated_id_prefix(val,"E")
def transaction_begin(self,msg=""):
"""
@@ -934,18 +986,22 @@ class GrampsDbBase(GrampsDBCallback.GrampsDBCallback):
has no effect until it is committed using the transaction_commit function of
the this database object.
"""
if self.__LOG_ALL:
log("%s: Transaction begin '%s'\n" % (self.__class__.__name__, str(msg)))
return Transaction(msg,self.undodb)
def transaction_commit(self,transaction,msg):
"""
Commits the transaction to the assocated UNDO database.
"""
if self.__LOG_ALL:
log("%s: Transaction commit '%s'\n" % (self.__class__.__name__, str(msg)))
if not len(transaction) or self.readonly:
return
transaction.set_description(msg)
self.undoindex += 1
if self.undoindex == _UNDO_SIZE:
self.translist = transaction[0:-1] + [ transaction ]
self.translist = self.translist[0:-1] + [ transaction ]
else:
self.translist[self.undoindex] = transaction
@@ -1031,7 +1087,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"""
@@ -1078,22 +1134,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

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